2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
chapter 2System Requirements Analysis
2.1System feasibility analysis
2.1.1Technical feasibility analysis
2.1.2Economic feasibility analysis
2.1.3Legal feasibility analysis
2.1.4Operational feasibility analysis
2.2System functional requirements analysis
Chapter 3Overall system design
3.1System functional module design
3.2.1Database conceptual structure design
Chapter 4Design and implementation of key modules
4.3Password modification module
4.5Popular attractions management module
4.6Attraction ticket purchase management module
4.7Hotel recommendation management module
4.8Hotel Reservation Management Module
SpringBoot Tourism Navigation System
Summary
With the rapid development of the Internet, more and more people choose to obtain travel information and plan their trips online. China, as a country with rich natural scenery and long history and culture, attracts a large number of tourists every year. The goal of this website is to provide tourists with accurate and comprehensive travel information, as well as convenient navigation and route planning services. By integrating various tourism resources, including introductions to scenic spots, food types, accommodation information, etc., users can obtain the relevant information they need on the website.
This project uses the Spring Boot framework as the backend development tool, which is simple and efficient and can quickly build reliable Web applications. Java is used as the main programming language to ensure the stability and scalability of the system. MySQL is used as the backend database to store and manage important data such as user information, travel data, and user feedback. By using MySQL, efficient storage and retrieval of data can be achieved, providing users with a good user experience.
This study aims to design and develop a tourism navigation system background and significance. By developing this website, we aim to provide tourists with convenient tourism information services and improve tourists' travel experience. At the same time, this project also helps to promote the development of tourism and provide reference and reference for the development of tourism navigation systems in other regions.
Key words:Tourism navigation system; JAVA language; SpringBoot framework; MYSQL database
SpringBoot Tourist Navigation System
Abstract
With the rapid development of the Internet, more and more people choose to obtain travel information and plan their trips through the Internet. As a country with rich natural scenery and a long history and culture, China attracts the attention of a large number of tourists every year. The goal of this website is to provide visitors with accurate and comprehensive travel information, as well as to provide convenient navigation and route planning services. By integrating various tourism resources, including attraction introduction, food type, accommodation information, etc., users can obtain the relevant information they need on the website.
This project uses the Spring Boot framework as a back-end development tool, which is simple and efficient, and can quickly build reliable web applications. The use of Java as the main programming language ensures the stability and scalability of the system. MySQL is used as a back-end database to store and manage important data such as user information, travel data, and user feedback. By using MySQL, you can efficiently store and retrieve data and provide users with a good user experience.
The purpose of this study is to design and develop a tourist navigation system for the background and significance. By developing this website, we aim to provide visitors with a convenient tourist information service and improve their travel experience. At the same time, this project will also help to promote the development of tourism and provide reference for the development of tourism navigation systems in other regions.
Keywords: travel navigation system, JAVA language, SpringBoot framework, MYSQL database
In the past few decades, with the booming development of the global tourism industry, people's demand for travel experience has also increased. The research background of tourism navigation system can be traced back to people's urgent need for more convenient and efficient travel methods. Traditional travel methods often rely on maps, guidebooks or verbal guidance, but these methods have many limitations, such as untimely information updates, easy to get lost, language communication barriers, etc.
With the continuous development of science and technology, people began to explore how to use computer and Internet technology to improve the travel navigation experience. This demand has promoted the research and development of tourism navigation systems. Early tourism navigation systems were mainly based on GPS technology. They can determine the user's location through satellite positioning and provide route planning and navigation guidance. This system greatly simplifies people's travel process, allowing them to find their destination more easily and save time and energy. However, traditional GPS navigation systems still have some problems, such as the inability to provide real-time traffic information and lack of personalized recommendations. In order to solve these problems, researchers began to introduce artificial intelligence technology into tourism navigation systems. By analyzing big data and using machine learning algorithms, the new generation of tourism navigation systems can more accurately predict traffic conditions, recommend personalized travel routes, and provide real-time surrounding service information.
In addition, with the popularization of mobile Internet, smartphones have become an important tool for people to travel, which also provides new opportunities for the development of tourism navigation systems. Modern tourism navigation apps can not only provide navigation services on mobile phones, but also combine AR (augmented reality) technology to present users with a more intuitive and vivid navigation experience. For example, users can view the surrounding street scenes through the mobile phone camera, and the best route will be displayed on the screen, which greatly improves the convenience and practicality of navigation.
In addition to individual travelers, travel navigation systems also play an important role in the development of the tourism industry. Tourism companies can use these systems to improve service quality and attract more customers. For example, some tourist attractions can provide voice interpretation services through navigation systems to bring tourists a richer visiting experience; travel agencies can use the system to analyze user preferences, recommend more suitable travel routes, and improve customer satisfaction and loyalty.
domestic,The research and application of tourism navigation systems have received a certain amount of attention and development. Many studies are devoted to integrating and displaying tourism-related information, including scenic spot introductions, transportation guides, hotel reservations, etc. These studies provide detailed tourism information by developing websites or applications to help users understand the characteristics of the destination and various services. In order to provide convenient navigation services, some studies focus on the development of tourism navigation and route planning algorithms. These algorithms are based on geographic location data and traffic information and can provide users with the best travel routes and transportation methods. In order to improve user experience, some studies focus on user interface design and the development of personalized recommendation systems. By analyzing user interests and preferences, these systems can provide users with personalized travel recommendations and customized services. With the development of Internet technology, data security and privacy protection have become important issues in the research of tourism navigation systems. Some studies are committed to developing secure data transmission and storage mechanisms to protect the security of user personal information. In order to improve the quality and service level of tourism navigation systems, some studies focus on the collection and analysis of user evaluations and feedback. By analyzing user evaluations and opinions, problems can be discovered and improved in a timely manner to provide better user experience and services.
Tourism navigation systems are relatively mature in foreign countries. Foreign research focuses on developing intelligent navigation and recommendation systems, which provide personalized tourism recommendations and navigation services to users based on their interests and preferences by using machine learning and artificial intelligence technologies. Due to the popularity of mobile devices, foreign research focuses on developing cross-platform applications and using mobile technology to provide tourism navigation services. These studies are committed to providing convenient mobile applications that support functions such as real-time navigation, attraction recommendations, and interactive maps. Foreign research incorporates social media and user-generated content into the research scope of tourism navigation systems. By integrating social media data and user comments, researchers can provide users with more comprehensive tourism information and real user experience feedback. With the development of virtual reality (VR) and augmented reality (AR) technologies, some foreign research is committed to applying them to the field of tourism navigation. By using VR and AR technologies, users can experience attractions and navigation services in a more intuitive and immersive way. Foreign research pays great attention to sustainable tourism and environmental protection. Some studies are committed to providing sustainable tourism recommendations and environmentally friendly travel route planning to promote sustainable development and protect the natural environment.
In general, foreign tourism navigation system research covers intelligent navigation and recommendation systems, cross-platform applications and mobile technologies, social media and user-generated content, virtual reality and augmented reality technologies, and sustainable tourism and environmental protection. These research results provide tourists with more convenient, personalized and immersive navigation and tourism experiences. This study will draw on foreign research results and combine regional characteristics to develop a comprehensive, accurate and user-friendly tourism navigation system to meet tourists' needs for tourism information and services.
The paper will be organized in layers. Apart from the abstract, acknowledgments and references, the main body will analyze the system requirements, explain the general design and implemented functions, and finally list some debugging records. The main structure of the paper is as follows:
Chapter 1 explains the background of the project, the current status of developing the system, and the chapter arrangement of the paper.
Chapter 2 analyzes the specific requirements of the system.
Chapter 3 describes the design of the system, which covers functional design as well as database design.
Chapter 4 explains the implementation of each functional module of the tourism navigation system and presents it in the form of pictures and texts.
Chapter 5 lists some records of system debugging and testing.
Chapter 6 introduces the conclusion of the tourism navigation system.
Requirements analysis is the first thing to do before developing a system. If a system is not worth developing or violates relevant laws and regulations, then the developed system will be worthless. Therefore, before development, we must first analyze the system requirements and whether the system development is feasible. If feasible, we will then specifically analyze the user needs, analyze the system functions, and analyze the system performance.
The technical feasibility mainly considers whether the development language, database, etc. used when developing the tourism navigation system are feasible. This system chooses JAVA as the language, and adopts the SpringBoot framework and MYSQL database. These technologies are currently very mature, and the JAVA language not only supports process-oriented, but also object-oriented, so it will be more flexible when used, and there is no problem in the choice of technology.
The economic feasibility mainly considers the cost and benefit. From the cost perspective, JAVA, SpringBoot, MYSQL, etc. used in the development process can be downloaded through online search without any charge, and the development cost is almost non-existent; from the benefit perspective, the completion of the system can provide support to users, reduce enterprise costs, and improve management efficiency, so there is no problem economically.
The tourism navigation system provides ordinary users with comprehensive tourism information query, scenic spot ticket purchase and hotel reservation functions, while administrators can easily manage the various contents and functions of the website. Such functional settings will provide users with convenient tourism services and build a comprehensive and efficient online platform for the tourism industry.
The main legal consideration is whether the development of the system is illegal. The tourism navigation system developed is strictly in accordance with the "Computer Software Protection Regulations of the People's Republic of China", "Copyright Law of the People's Republic of China" and other laws and regulations. The development of the system can bring benefits to the enterprise and there is no illegal behavior. Therefore, it is legally feasible.
The main considerations in terms of operation are whether it is simple and feasible for users to use and managers to manage, and whether users without any computer knowledge can use it. The developed tourism navigation system is designed with the concept of being simple and easy to learn. After the user enters the system, there will be fixed navigation buttons, and the operation can be completed as long as the user recognizes the words. The administrator only needs to simply add, delete, modify and check to complete it, so it is also feasible in operation.
In general, the developed tourism navigation system has no problem in terms of feasibility and is worthy of development, and the other completions are of great significance to the development of the industry.
The main functions of ordinary users are as follows:
Administrator side:
The performance requirements analysis of the tourism navigation system mainly analyzes the security of the system (whether user personal information will be leaked), reliability (whether information can be displayed according to actual operations when users operate), performance (whether the operation is smooth), scalability (whether the functions can be further expanded), etc. It can be specifically expressed in the following table 2.1:
Table 2.1 Non-functional requirements table of tourism navigation system
safety | Mainly refers toTourism navigation systemThe installation of the database, the use of the database and the setting of passwords must comply with the regulations. |
reliability | Reliability meansTourism navigation systemIt can operate according to the user's instructions and has been tested to have a reliability of over 90%. |
performance | Performance is the impactTourism navigation systemIt is a necessary condition for occupying the market, so the performance had better be good. |
Scalability | For example, the database reserves multiple attributes, such as the use of interfaces, to ensure the non-functional requirements of the system. |
Ease of use | Users just need to followTourism navigation systemJust operate on the page display content. |
Maintainability | Tourism navigation systemThe maintainability of development is very important. After testing, there is no problem with maintainability. |
The tourism navigation system provides general users with comprehensive tourism information query, attraction ticket purchase and hotel reservation functions. The user's use case diagram is shown below:
Figure 2.1 User role use case diagram
Figure 2.2 Administrator role use case diagram
All users in the system (administrators and users) can add data. Figure 2.3 shows the process of adding data.
Figure 2.3 Add data flow chart
No one is perfect, and everyone makes mistakes. If there is an error in the information entered into the system, the data in the system can be edited. Figure 2.4 shows the process of modifying data.
Figure 2.4 Modify data flow chart
There are often some expired data in the system, such as user logout, etc., so you can delete these data directly. Figure 2.5 is the flow chart for deleting data.
Figure 2.5 Flow chart of deleting data
After analyzing the feasibility and functions of the system, the next step is to design the system specifically. Through feasibility analysis, we conclude that the system is worth developing. Through functional analysis, we can determine what specific functions the system implements, and then complete the functional design of the system based on functional requirements. This chapter introduces the functional modules and the system database.
Through the functional requirements analysis in the previous chapter, we can derive the functional structure diagram of this tourism navigation system. Figure 3.1 is the functional module diagram of the system.
Figure 3.1 Functional module diagram of tourism navigation system
Database design is the foundation of a system. No matter what system it is, no matter how beautiful the interface design is, it cannot run without a powerful database to support it. When designing a database, we first analyze the database, then design the conceptual model, and finally establish the database table, as shown below.
When designing a database conceptual model, an ER entity diagram is generally used for display. The entity diagram can display all the field names in the database table. The main database ER model diagram in this system is shown in the figure below.
Figure 3.2 ER relationship diagram of popular attractions
Figure 3.3 Food information ER relationship diagram
Figure 3.4 Accommodation information ER relationship diagram
In the database table, we can see the system's table name, primary key, foreign key and other information. We associate each table through the primary key and foreign key of the database table, and then display it in the interface. The main database tables of this travel navigation system are as follows:
Table access_token (login access duration)
name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate | |
1 | token_id | int | 10 | 0 | N | Y | Temporary access card ID | |
2 | token | varchar | 64 | 0 | Y | N | Temporary visit card | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | Maximum lifespan: 2 hours by default |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
7 | user_id | int | 10 | 0 | N | N | 0 | user ID: |
Table accommodation_information (accommodation information)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | accommodation_information_id | int | 10 | 0 | N | Y | Property Information ID | |
2 | homestay_name | varchar | 64 | 0 | Y | N | B&B Name | |
3 | homestay_poster | varchar | 255 | 0 | Y | N | Homestay poster | |
4 | homestay_star_rating | varchar | 64 | 0 | Y | N | B&B star rating | |
5 | housing_finance | varchar | 64 | 0 | Y | N | Housing costs | |
6 | contact_phone_number | varchar | 64 | 0 | Y | N | contact number | |
7 | homestay_location | varchar | 64 | 0 | Y | N | B&B Location | |
8 | latest_discounts | text | 65535 | 0 | Y | N | Latest Offers | |
9 | supporting_facilities | text | 65535 | 0 | Y | N | Supporting Facilities | |
10 | homestay_services | text | 65535 | 0 | Y | N | Homestay service | |
11 | hits | int | 10 | 0 | N | N | 0 | Number of hits |
12 | praise_len | int | 10 | 0 | N | N | 0 | Likes |
13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
Table article (article: article for content management system)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | article_id | mediumint | 8 | 0 | N | Y | Article id: [0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | Title: [0,125] is used in the title tag of articles and HTML | |
3 | type | varchar | 64 | 0 | N | N | 0 | Article category: [0,1000] is used to search for articles of a specified type |
4 | hits | int | 10 | 0 | N | N | 0 | Number of hits: [0,1000000000] Number of people who visited this article |
5 | praise_len | int | 10 | 0 | N | N | 0 | Likes |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
8 | source | varchar | 255 | 0 | Y | N | Source: [0,255] Source of the article | |
9 | url | varchar | 255 | 0 | Y | N | Source address: [0,255] is used to jump to the website where the article was published | |
10 | tag | varchar | 255 | 0 | Y | N | Tags: [0,255] are used to mark the relevant content of the article. Multiple tags are separated by spaces. | |
11 | content | longtext | 2147483647 | 0 | Y | N | Body: The main content of the article | |
12 | img | varchar | 255 | 0 | Y | N | cover picture | |
13 | description | text | 65535 | 0 | Y | N | Article Description |
Table article_type (article category)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | type_id | smallint | 5 | 0 | N | Y | Category ID: [0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | Display order: [0,1000] determines the order in which categories are displayed |
3 | name | varchar | 16 | 0 | N | N | Category Name: [2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | Parent category ID: [0,32767] |
5 | description | varchar | 255 | 0 | Y | N | Description: [0,255] describes the role of this category | |
6 | icon | text | 65535 | 0 | Y | N | Category Icon: | |
7 | url | varchar | 255 | 0 | Y | N | External link address: [0,255] If the category is to jump to other websites, set it on the URL | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
Table attraction_information (attraction information)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | attraction_information_id | int | 10 | 0 | N | Y | Attraction Information ID | |
2 | attraction_id | varchar | 64 | 0 | Y | N | Attraction Number | |
3 | attraction_name | varchar | 64 | 0 | Y | N | Attraction Name | |
4 | classification_of_tourist_attractions | varchar | 64 | 0 | Y | N | Attractions Categories | |
5 | attraction_posters | varchar | 255 | 0 | Y | N | Attraction posters | |
6 | attraction_promotion | varchar | 255 | 0 | Y | N | Attractions Promotion | |
7 | per_capita_price | int | 10 | 0 | Y | N | 0 | Price per person |
8 | business_hours | varchar | 64 | 0 | Y | N | Opening hours | |
9 | scenic_spot_rating | varchar | 64 | 0 | Y | N | Attraction rating | |
10 | contact_phone_number | varchar | 16 | 0 | Y | N | contact number | |
11 | attraction_services | text | 65535 | 0 | Y | N | Attractions Services | |
12 | introduction_to_scenic_spots | text | 65535 | 0 | Y | N | Attraction Introduction | |
13 | hits | int | 10 | 0 | N | N | 0 | Number of hits |
14 | praise_len | int | 10 | 0 | N | N | 0 | Likes |
15 | recommend | int | 10 | 0 | N | N | 0 | Intelligent Recommendation |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
Table auth (user rights management)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | auth_id | int | 10 | 0 | N | Y | Authorization ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | user group: | |
3 | mod_name | varchar | 64 | 0 | Y | N | Module Name: | |
4 | table_name | varchar | 64 | 0 | Y | N | Table Name: | |
5 | page_title | varchar | 255 | 0 | Y | N | page title: | |
6 | path | varchar | 255 | 0 | Y | N | Routing path: | |
7 | position | varchar | 32 | 0 | Y | N | Location: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | Jump method: |
9 | add | tinyint | 3 | 0 | N | N | 1 | Can it be increased: |
10 | del | tinyint | 3 | 0 | N | N | 1 | Can be deleted: |
11 | set | tinyint | 3 | 0 | N | N | 1 | Can be modified: |
12 | get | tinyint | 3 | 0 | N | N | 1 | Can you view: |
13 | field_add | text | 65535 | 0 | Y | N | Add fields: | |
14 | field_set | text | 65535 | 0 | Y | N | Modify the fields: | |
15 | field_get | text | 65535 | 0 | Y | N | Query fields: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | Cross-table navigation name: | |
17 | table_nav | varchar | 500 | 0 | Y | N | Cross-table navigation: | |
18 | option | text | 65535 | 0 | Y | N | Configuration: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
Table classification_of_tourist_attractions (attraction classification)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | classification_of_tourist_attractions_id | int | 10 | 0 | N | Y | Attraction Category ID | |
2 | type_name | varchar | 64 | 0 | Y | N | type name | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | collect_id | int | 10 | 0 | N | Y | Collection ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | Collector ID: |
3 | source_table | varchar | 255 | 0 | Y | N | Source table: | |
4 | source_field | varchar | 255 | 0 | Y | N | Source field: | |
5 | source_id | int | 10 | 0 | N | N | 0 | Source ID: |
6 | title | varchar | 255 | 0 | Y | N | title: | |
7 | img | varchar | 255 | 0 | Y | N | Cover: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | comment_id | int | 10 | 0 | N | Y | Comment ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | Commentator ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | Reply comment ID: empty means 0 |
4 | content | longtext | 2147483647 | 0 | Y | N | content: | |
5 | nickname | varchar | 255 | 0 | Y | N | Nick name: | |
6 | avatar | varchar | 255 | 0 | Y | N | Avatar address: [0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
9 | source_table | varchar | 255 | 0 | Y | N | Source table: | |
10 | source_field | varchar | 255 | 0 | Y | N | Source field: | |
11 | source_id | int | 10 | 0 | N | N | 0 | Source ID: |
Table food_information (food information)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | food_information_id | int | 10 | 0 | N | Y | Food Information ID | |
2 | food_name | varchar | 64 | 0 | Y | N | Food name | |
3 | food_types | varchar | 64 | 0 | Y | N | Type of cuisine | |
4 | food_poster | varchar | 255 | 0 | Y | N | Food poster | |
5 | food_promotion | varchar | 255 | 0 | Y | N | Food Promotion | |
6 | food_location | varchar | 64 | 0 | Y | N | Food Location | |
7 | food_characteristics | text | 65535 | 0 | Y | N | Food Features | |
8 | food_allusions | text | 65535 | 0 | Y | N | Food stories | |
9 | hits | int | 10 | 0 | N | N | 0 | Number of hits |
10 | praise_len | int | 10 | 0 | N | N | 0 | Likes |
11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | food_types_id | int | 10 | 0 | N | Y | Cuisine Type ID | |
2 | type_name | varchar | 64 | 0 | Y | N | type name | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | hits_id | int | 10 | 0 | N | Y | Like ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | Liked by: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
5 | source_table | varchar | 255 | 0 | Y | N | Source table: | |
6 | source_field | varchar | 255 | 0 | Y | N | Source field: | |
7 | source_id | int | 10 | 0 | N | N | 0 | Source ID: |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | message_id | int | 10 | 0 | N | Y | Message Board ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | User ID: |
3 | title | varchar | 64 | 0 | Y | N | title: | |
4 | content | longtext | 2147483647 | 0 | N | N | content: | |
5 | nickname | varchar | 32 | 0 | N | N | Nick name: | |
6 | avatar | varchar | 255 | 0 | Y | N | avatar: | |
7 | | varchar | 125 | 0 | Y | N | Email of the message sender | |
8 | phone | varchar | 11 | 0 | Y | N | Mobile phone number of the message sender | |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
11 | reply | longtext | 2147483647 | 0 | Y | N | reply | |
12 | reply_state | tinyint | 4 | 0 | Y | N | 0 | Reply Status |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | notice_id | mediumint | 8 | 0 | N | Y | Announcement ID: | |
2 | title | varchar | 125 | 0 | N | N | title: | |
3 | content | longtext | 2147483647 | 0 | Y | N | text: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | praise_id | int | 10 | 0 | N | Y | Like ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | Liked by: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
5 | source_table | varchar | 255 | 0 | Y | N | Source table: | |
6 | source_field | varchar | 255 | 0 | Y | N | Source field: | |
7 | source_id | int | 10 | 0 | N | N | 0 | Source ID: |
8 | status | bit | 1 | 0 | N | N | 1 | Like status: 1 is like, 0 is canceled |
Table registered_users (registered users)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | registered_users_id | int | 10 | 0 | N | Y | Register User ID | |
2 | user_name | varchar | 64 | 0 | Y | N | username | |
3 | user_gender | varchar | 64 | 0 | Y | N | User Gender | |
4 | mobile_phone_number | varchar | 16 | 0 | Y | N | phone number | |
5 | examine_state | varchar | 16 | 0 | N | N | passed | Approval Status |
6 | user_id | int | 10 | 0 | N | N | 0 | User ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
Table route_planning (route planning)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | route_planning_id | int | 10 | 0 | N | Y | Route planning ID | |
2 | route_name | varchar | 64 | 0 | Y | N | Route Name | |
3 | passing_through_scenic_spots | varchar | 64 | 0 | Y | N | Passing by attractions | |
4 | display_images | varchar | 255 | 0 | Y | N | Show pictures | |
5 | travel_expenses | varchar | 64 | 0 | Y | N | Trip Cost | |
6 | travel_days | varchar | 64 | 0 | Y | N | Number of days | |
7 | suitable_for_the_audience | varchar | 64 | 0 | Y | N | Suitable for | |
8 | route_guide | text | 65535 | 0 | Y | N | Route Guide | |
9 | hits | int | 10 | 0 | N | N | 0 | Number of hits |
10 | praise_len | int | 10 | 0 | N | N | 0 | Likes |
11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | Creation time |
12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | slides_id | int | 10 | 0 | N | Y | Slideshow ID: | |
2 | title | varchar | 64 | 0 | Y | N | title: | |
3 | content | varchar | 255 | 0 | Y | N | content: | |
4 | url | varchar | 255 | 0 | Y | N | Link: | |
5 | img | varchar | 255 | 0 | Y | N | Carousel: | |
6 | hits | int | 10 | 0 | N | N | 0 | Clicks: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | upload_id | int | 10 | 0 | N | Y | Upload ID | |
2 | name | varchar | 64 | 0 | Y | N | file name | |
3 | path | varchar | 255 | 0 | Y | N | Access path | |
4 | file | varchar | 255 | 0 | Y | N | file path | |
5 | display | varchar | 255 | 0 | Y | N | display order | |
6 | father_id | int | 10 | 0 | Y | N | 0 | Parent ID |
7 | dir | varchar | 255 | 0 | Y | N | folder | |
8 | type | varchar | 32 | 0 | Y | N | file type |
Table user (user account: used to save user login information)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | user_id | mediumint | 8 | 0 | N | Y | User ID: [0,8388607] User obtains other user-related data | |
2 | state | smallint | 5 | 0 | N | N | 1 | Account status: [0,10] (1 available | 2 abnormal | 3 frozen | 4 cancelled) |
3 | user_group | varchar | 32 | 0 | Y | N | User group: [0,32767] determines user identity and permissions | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Last Login Time: |
5 | phone | varchar | 11 | 0 | Y | N | Mobile phone number: [0,11] The user's mobile phone number, used when retrieving the password or logging in | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | Mobile phone authentication: [0,1] (0 unauthenticated | 1 under review | 2 authenticated) |
7 | username | varchar | 16 | 0 | N | N | Username: [0,16] The account name used by the user to log in | |
8 | nickname | varchar | 16 | 0 | Y | N | Nickname: [0,16] | |
9 | password | varchar | 64 | 0 | N | N | Password: [0,32] The password required for user login, consisting of 6-16 digits or English characters | |
10 | | varchar | 64 | 0 | Y | N | Email: [0,64] User's email address, used for retrieving password or logging in | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | Email authentication: [0,1] (0 unauthenticated | 1 under review | 2 authenticated) |
12 | avatar | varchar | 255 | 0 | Y | N | Avatar address: [0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | For obtaining user information fields | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
15 | vip_level | varchar | 255 | 0 | Y | N | membership level | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | member discount |
Table user_group (user group: used for user front-end identity and authentication)
serial number | name | type of data | length | Decimal places | Allow null values | Primary Key | default value | illustrate |
1 | group_id | mediumint | 8 | 0 | N | Y | User Group ID: [0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | Display order: [0,1000] |
3 | name | varchar | 16 | 0 | N | N | Name: [0,16] | |
4 | description | varchar | 255 | 0 | Y | N | Description: [0,255] describes the characteristics or permission range of this user group | |
5 | source_table | varchar | 255 | 0 | Y | N | Source table: | |
6 | source_field | varchar | 255 | 0 | Y | N | Source field: | |
7 | source_id | int | 10 | 0 | N | N | 0 | Source ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | Registration location: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Created: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | Update time: |
Administrators and users enter their account + password on the login interface, complete verification, and click the "Login" button. The system will match the administrator and user accounts in the user database table. If the account + password is correct, they will log in to the main management interface of each user in the system. Otherwise, the corresponding information will be prompted and the login interface will be returned. The main interface is shown in Figure 4.1 below.
Figure 4.1 Login interface
The login code is as follows:
/**
* Log in
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[Execute login interface]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "Account or password cannot be empty");
}
if (resultList == null || password == null) {
return error(30000, "Account or password cannot be empty");
}
// Check if there is such a user
if (resultList.size()<=0){
return error(30000,"User does not exist");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"User group does not exist");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//Query user review status
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"User does not exist");
}
if (!res.equals("Passed")){
return error(30000,"The user review failed");
}
}
//Query user status
if (byUsername.getState()!=1){
return error(30000,"The user is not available and cannot log in");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
//Store Token in the database
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
// Return user information
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "The account or password is incorrect");
}
}
The user enters the account + password on the login interface, completes the verification, and clicks the "Login" button. The system will match the administrator and user accounts in the user database table. If the account + password is correct, the user will be logged in to the main management interface of each user in the system. Otherwise, the corresponding information will be prompted and the user will return to the login interface. The main interface is shown in Figure 4.2 below.
Figure 4.1 Registration interface
The registration code is as follows:
/**
* register
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// Query user
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "user already exists");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
After the user completes the registration with the system, if the user needs to modify the login password, the system can also provide the user with password modification permissions. All operators in the system can change their password information. To perform this function, you must first log in to the system, then select the password change option and fill in the initial password and new password in the given text box to complete the password change operation. When filling in, if there is a difference between the two passwords, the password change operation fails. The following picture shows the interface corresponding to this section. The interface is shown below.
Figure 4.3 Password modification interface
The password modification code is as follows:
/**
* change Password
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// Get UserId based on Token
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// Get the user based on UserId and old password
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
int count = service.selectBaseCount(service.count(query, service.readConfig(request)));
if(count > 0){
// change Password
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"Password modification failed!");
}
Figure 4.4 Route planning interface
Attraction information: Users can view the attraction information list and check the latest tourist attraction introduction, including attraction introduction, transportation guide, business hours, attraction introduction, attraction rating, etc. They can also like, collect and comment on the attractions they are interested in. The interface is shown in the figure below.
Figure 4.5 Attraction information interface
Food information list: Displays recommended food information, including food name, type, characteristics, picture display, etc. Users can choose to like, collect, comment, etc. The interface is shown in the figure below.
Figure 4.6 Food information list interface
Route planning management: manage route planning list additions, including adding route name, passing attractions, trip cost, trip days, suitable crowds, route strategies and other information. The interface is shown below.
Figure 4.7 Route planning management interface
Attraction information management: Manage the attraction information list and add information, including attraction name, attraction classification, attraction publicity, business hours, ratings, contact numbers, etc. The interface is shown in the figure below.
Figure 4.8 Scenic spot information management interface
Food information management: Manage the food information list to add information, including food name, food type, food promotion, food location, food allusions, etc. The interface is shown in the figure below.
Figure 4.9 Food information adding interface
Accommodation information management: manage the recommended accommodation information list and add accommodation information, including the name of the homestay, homestay star rating, contact number, homestay location, homestay services, etc. The interface is shown in the figure below.
Figure 4.10 Hotel booking interface
System Management: Manage the display and switching of the homepage carousel, including adding, editing and deleting pictures and links of the carousel, etc. The interface is shown in the figure below.
Figure 4.11 System management interface
At this point, the development of the system is basically completed. Next, we will analyze the system's experiments and results to ensure that the system can operate normally and then put it into use. The detection method for the system's experiments and results analysis is the system test. Testing is the last step in the completion of the system. A system that has not been tested cannot be put into use, otherwise it will cause losses once a bug occurs. Below we analyze the test method and test use cases, and finally give the system test results.
There are two types of system testing, one is black box testing, and the other is white box testing. Black box testing is generally speaking functional testing, which we also call requirement testing. In the process of black box testing, we don't know its development principle, but just test the system as a user. We mainly rely on previous testing experience, take some critical values, and then test it through test cases. This testing method is the fastest way to find problems. Secondly, we can find some representative data and perform case tests on the system. In the process of black box testing, the commonly used testing tools are winrunner and AutoRunner; white box testing is called result testing, which is logic-driven testing. In the process of white box testing, we mainly test according to the principles of system development, mainly as a developer to test whether the code has completed its specific functions and whether the specific path of implementation is correct. Of course, this testing method is time-consuming and laborious, because each function has more than one running path. By testing the running path in the program, we can detect whether there are bugs in the developed code and whether it has achieved expectations. In the process of white box testing, the commonly used testing tools are Jcontract, C++ Test and CodeWizard.
Functional test of login module:
Table 5.1 Login module function test table
Test Name | Test functionality | Operation process | expected outcome | Test Results |
Login module test | Successful login | Users can enter the tourism navigation system login interface through the browser, enter the user name: admin and password admin, complete the sliding puzzle verification, and click the "Login" button. | Successfully logged in to the administrator management interface | correct |
Login module test | Login Failure Situation | Users can enter the tourism navigation system login interface through a browser, enter the user name: admin and password 111, complete the sliding puzzle verification, and click the "Login" button. | The system prompts "Username and password do not match" | correct |
User information adding function test:
Table 5.2 User information adding function test table
Test Name | Test functionality | Operation process | expected outcome | Test Results |
User information adding module test | User information added successfully | When the administrator clicks "User Information" in the "System User" menu, all user information will be displayed. Click the "Add" button, enter the account number, password, nickname, mobile phone number, email address, etc. After entering the correct information, click the "Submit" button. | Tip: Add successfully | correct |
User information adding module test | User information addition failure | When the administrator clicks "User Information" in the "System User" menu, all user information will be displayed. Click the "Add" button without entering an account number. After filling in other information normally, click the "Submit" button. | Tip "Add failed, account cannot be empty" | correct |
Query tourism information function module test:
Table 5.3 Query tourism information function test table
Test Name | Test functionality | Operation process | expected outcome | Test Results |
Query travel information function test | Query success | The user clicks "Tourism Information" in the menu bar, and then all the tourism information in the system will appear. | search successful | correct |
Test of adding function modules for popular attractions:
Table 5.4 Add popular attractions function test table
Test Name | Test functionality | Operation process | expected outcome | Test Results |
Popular attractions add module test | Successful addition of popular attractions | Click the "Popular Attractions" menu and enter the attraction information to submit the information. | Prompt submission success | correct |
Popular attractions add module test | Failed to add popular attractions | When submitting information about popular attractions, do not enter the ticket price for the attraction. Fill in other information normally and click the "Submit" button. | Tip "Add failed, information cannot be empty" | correct |
In this chapter, we conducted a black-and-white box test on the tourism navigation system and analyzed some of the functions in the system. We found that the system is relatively stable and all the functions of the system can be basically realized, which can meet the needs of administrators and users for tourism information, adding popular attractions, adding user information, etc. Through testing, we can see that during the operation of the system, its functions are complete. For input error information, the error information can be prompted, which is convenient for users to find out where the information they input is wrong during operation and then make corrections. In addition, the system interface is equipped with a navigation bar, which is very convenient to operate and does not require any training for users. It is a very valuable system for enterprises.
After several months of hard work, this tourism navigation system is finally completed. Although I have developed some small systems during my school years, they were all completed with the explanation and assistance of teachers. I did not go through the demand analysis and system analysis before development. I started directly from system design. Therefore, the tourism navigation system developed this time is of great significance to me.
At the beginning of system development, we first investigated the needs of the tourism navigation system to understand what functions the developed system needs to implement in order to meet the management needs of users for the enterprise, and then analyzed the needs; secondly, we chose the JAVA language and MYSQL database that we are more familiar with, and used the SpringBoot framework for design and development. We consulted and learned these technologies through CNKI, school libraries, etc., mastered the ideas and methods of programming, and then analyzed the system. We conducted a comprehensive analysis of the system from the aspects of the feasibility of system development, the functions implemented by the system, the performance that the system should have, and the operating procedures of the system, determined the final functions of the system, and designed the system functions and database. Finally, we implemented the system and tested the implemented functions to ensure the stable operation of the system.
During the development process, I exposed many problems of my own, such as insufficient preparation in the early stage, and I could not fully master the operation process; I was not proficient in JAVA programming during the development process, and there were still many problems in the system environment configuration, which often caused errors when the project was running. Learning never ends. By consulting the information and asking the tutor for advice, I slowly solved these problems. In the future, I will be more rigorous in my studies and work. Through the development of this project, I will benefit for life!
[1] Wu Linglin. Design and implementation of customer relationship management system based on SpringBoot[J]. Wireless Internet Technology, 2023, 20(24): 60-62.
[2] Huang Saiying. Design of hospital archive management system based on Springboot[J]. Integrated Circuit Applications, 2023, 40(11): 384-385.
[3] Lin Shengfeng, Yao Jinjiang, Lin Tao, Liu Jiaxiao, Tian Zhizhuo, Li Chao. Design of university laboratory management system based on SpringBoot[J]. Wireless Internet Technology, 2023, 20(18): 80-82.
[4] Wang Rong, Li Qiang, He Ying, Guo Ya, Wu Xiaomin, Yang Zhenglin, Huang Yiwang. Design and implementation of personalized tourism recommendation system[J]. Computer, 2023, 39(09): 95-99.
[5] Yin Li, Du Xiaonan. Design and implementation of campus points system based on SpringBoot and Vue[J]. Integrated Circuit Applications, 2023, 40(07): 414-415.
[6] Li Qin, Cui Mingyang, Qian Yiwen, Liu Jingjing. Development of graduate student academic archive management system based on SpringBoot[J]. Computer Knowledge and Technology, 2023, 19(18): 46-48+51.
[7] Li En. Design and implementation of Wuhan red tourism platform based on user recommendation algorithm[D]. Yangtze University, 2023.
[8] Wan Yanbing. Research and development of personalized tourism recommendation system based on Flink[D]. Guangxi University for Nationalities, 2023.
[9] Yang Jiapeng, Zu Yuwei, Ji Jiaqi, Chen Lifang. Waterfall-type fusion tourism recommendation system based on Spark framework[J]. Intelligent Computers and Applications, 2023, 13(04): 142-146.
[10]Yu Yang.Design and Implementation of Student Information Management System Based on Springboot[J].Advances in Computer, Signals and Systems,2022,6(6):
[11] Chen Yong. Design of tourism recommendation system based on collaborative filtering algorithm[J]. Value Engineering, 2022, 41(30): 160-162.
[12] Zhang Min, Zhang Lamei, Chen Zhengyu. Web-based tourism recommendation system[J]. Information Recording Materials, 2022, 23(10): 132-135.
[13] Chen Ling. Design and implementation of Chinese red tourism recommendation system based on Django[J]. Software, 2022, 43(09): 100-103.
[14] Xu Yang. Travel route recommendation system based on knowledge graph[D]. Inner Mongolia University, 2022.
[15]Wu Hejing.Commerce Middle Office Management System Based on Springboot[J].International Journal of Advanced Network, Monitoring and Controls,2022,7(2):32-45.
[16] Liu Xiuhuan. Design and implementation of parent-child travel recommendation system[D]. Qufu Normal University, 2021.
[17] Li Wei. Research on the design of smart tourism recommendation system based on big data mining technology[J]. Modern Computer, 2021, 27(32): 117-120.
[18]Fuyuan Cheng.Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J].Advances in Educational Technology and Psychology,2021,5(2):
[19]Guanhong Chen,Jiangming Xu.Design and implementation of efficient Learning platform based on SpringBoot Framework[J].Journal of Electronics and Information Science,2020,6(1):
[20]Jian Chen,Chen Jian,Pan Hailan.Design of Man Hour Management Information System on SpringBoot Framework[J].Journal of Physics: Conference Series,2020,1646(1):012136-.
"Acknowledgments" means the end of the thesis, and also means that my graduation project has been successfully completed. It also represents the end of my college career. I am about to leave my beloved teachers and dear classmates. Here, I would like to thank all the teachers first. "Spring fills the mountains and rivers and greens the garden. The peaches and plums compete for spring dew and smile. Spring is always there in the east, west, south and north, but the teacher's kindness remains in my heart." They have given everything in my studies and in my life, and taught me earnestly; secondly, I would like to thank my instructor, who played a guiding role in my entire graduation project. Whenever I had difficulties, he would always help me at the first time and guide me to solve the problem instead of telling me the answer directly. "It is better to teach a man to fish than to give him a fish." Fishing", the instructor's approach has benefited me for life, and at the same time I have learned a lot of development skills and tests from the instructor, which plays a very important role in my future development; again, I need to thank my classmates and roommates, they not only gave me a lot of help and suggestions on the graduation project, but also helped me so much in the four years of being classmates in college. I have too much reluctance to them, which cannot be expressed in words. I believe that in the future, as long as I think of them on the road of life, my heart will be very warm, and this kind of friendship cannot be replaced by any other emotion; finally, I also want to thank my family, thank myself, thank my family for their support, and thank myself for persisting in my studies. I believe that my future will get better and better.
Get the project source code for free, please follow ❥ like and collect and send a private message to the blogger, thank you~