Design and implementation of ssm Huanhuan pet hospital management system Graduation project - with source code 171734

springboot Huanhuan pet hospital management system

Summary

Nowadays, the quality of life is improving, people pursue mental health, and get along with pets at home day and night, with deep feelings, and pets have gradually become our friends. Therefore, when pets are sick, they need to see a doctor. Since ancient times, hospitals have rescued the dying and healed the wounded. Life has no value. Both humans and animals need suitable and convenient places to see a doctor. At the same time, with the popularization of intelligent hospitals, in the past, veterinary stations began to try to improve their self-operated clinics, adopting efficient new technologies to transform into standardized and office-managed hospitals, so that management can be efficient, service quality, and convenient and quick for operations. All departments have been improved in an all-round way. Therefore, the office management system based on the pet hospital is an important tool for the pet hospital. It is simple, practical and flexible, and can get twice the result with half the effort.

This system is based on a browser and server architecture platform, a complete office information processing Huanhuan pet hospital management system. Adopt cross-platform JAVA language development, use WEB browser to enable the staff to operate this application and realize the operation of all directions of the system. Whether it is a large pet hospital or a small pet clinic, it can build a local area network management by itself, which is convenient for office work and reduces Unnecessary cost consumption. The system follows the MVC idea, uses the encapsulation of springboot class for logic control, uses Java technology to display the access page, uses MySQL database to store data, and finally the Tomcat server completes the website release, and the system can run in multiple environments.

After the needs analysis under the normal office process of the pet hospital, this topic has completed the functions of system users, doctor introduction, appointment registration, medical records, medical equipment, online consultation, maintenance reporting and so on.

Keywords: pet hospital management system, Springboot framework, MySQL database

Springboot Huanhuan pet hospital management system

Abstract

Nowadays, with the improvement of the quality of life, people pursue mental health, get along with their pets day and night, and have deep feelings. Pets have gradually become our friends. Therefore, pets are sick and need to see a doctor. Since ancient times, hospitals have saved the lives of the dead and healed the wounded. No matter human or animal, they need a suitable and convenient place to see a doctor. At the same time, with the popularization of intelligent hospitals, in the past, veterinary stations began to try to improve self operated clinics and adopt efficient new technologies to transform into a hospital with standardized and office management, so as to make management efficient, service high-quality and comprehensively improve all departments of operation conveniently and quickly. Therefore, the office management system based on pet hospital is an important tool of pet hospital. It is simple, practical and flexible, and can get twice the result with half the effort.

This system is a Huanhuan pet hospital management system based on browser and server architecture platform and complete office information processing. Using cross platform Java language development and web browser, the staff can operate this application and realize the operation of all directions of information in the system. Whether large pet hospitals or small pet clinics, they can build their own LAN management to facilitate office and reduce unnecessary cost consumption. The system follows the MVC idea, uses the encapsulation of springboot class for logic control, uses Java technology to complete the display of access pages, uses MySQL database to store data, and finally Tomcat server to complete website publishing. The system can run in multiple environments.

After the demand analysis under the normal office process of the pet hospital, this topic has completed the functions of system users, doctor introduction, appointment registration, medical record, medical devices, online consultation, maintenance and reporting.

Key words: Pet hospital management system, springboot framework, MySQL database

Table of contents

Chapter 1 Introduction 1

1.1  Research Background 1

1.2  Research status 1

1.3  Organizational structure of this paper 2

Chapter 2 Introduction to Related Technologies 3

2.1 Related Technical Description 3 

2.2 Working principle of B/S system 4

2.3 Springboot framework introduction 4

2. 4 Introduction to  MySQL 4

2.5 JavaScript running mode 5 

Chapter 3 System Analysis 6

3.1  Feasibility Analysis 6

3.1.1  Legal Feasibility Analysis 6

3.1.2  Technical Feasibility Analysis 6

3.1.3  Economic feasibility analysis 6

3.2  Analysis of functional requirements 6

3.3  Analysis of non-functional requirements 7

3.4  Use case analysis 7

3.5  Business Process Analysis 9

3.6  Data Flow Analysis 10

Chapter 4 System Design 12

4.1  System Architecture Design 12

4.2  System function structure 12

4.3  Functional module design 13

4.4  Database Design 15

4.4.1 ER Diagram 16

4.4.2  Table structure design 16

Chapter 5 System Implementation 20

5.1  Development Tools 20

5.2  Registration Module 20

5.3  Login / logout module 23

5.4  User Module 26

5.4.1  Profile module 27

5.4. 2 Pet Encyclopedia Module 27

5.4.3 Doctor introduction module 27

5.5  Administrator Module 29

5.5.1  Password modification module 29

5.5.2 Doctor Management Module 30 

5.5.3  Appointment registration management module 30

5.5.4 Medical record management module 31 

Chapter 6 System Testing 35

6.1  Overview of testing 35

6.2  Testing process 35

6.2.1  Login test 35

6.2.2  Information entry test 35

6.2.3  Information update test 36

6.2.4  Information deletion test 36

6.3  Test results 36

Chapter 7 Summary and Outlook 38

7.1  Summary 38

7.2  Outlook38 _

Reference 39

Thanks 41

  1. introduction
    1. Research Background

At present, information management in many domestic pet hospitals generally adopts manual management . The disadvantage of this method is that the personnel involved in the management have different levels of education and different handwriting, which will cause inconvenience in the transmission of information. Moreover, the paper information transmission medium has a big weakness that is easy to be damaged, resulting in information loss. . In the current information age, any pet hospital needs a practical pet hospital information management system to standardize the management of pet hospital information, which will greatly improve the management level of pet hospitals, optimize resources, and maximize benefits.

At present, there are some pet hospital information management software in China, and the technologies used are also various, but most of the pet hospital information management systems are mainly used in key departments of large pet hospitals. As for small pet hospitals, not many use the pet hospital information management system to manage their daily business. In view of the huge demand and basic needs of pet hospital information management software in China, a good pet hospital information management software must be fully functional, easy to operate, and show users a simple and clear operation interface. While perfecting the functions, the flexibility and security of the system must be taken into account.

The advantages of the pet hospital management system are mainly manifested in three aspects:

(1) The pet hospital information management is paperless, environmentally friendly and convenient. The traditional pet hospital information management method is manually recorded and archived by employees. This kind of traditional paper-based pet hospital information management, one will have a lot of physical exertion, and the other is a lot of energy. The paperless pet hospital information management only needs to click the mouse in front of the computer, and there is almost no physical consumption, and it is more scientific than the traditional pet hospital information management in terms of environmental protection, efficiency, and targeted daily business. many.

(2) Scientific management, safe and reliable. Traditional pet hospital information management methods often cause information loss or defacement due to various reasons, which brings great inconvenience to pet hospital information management and daily business. As for the pet hospital information management system, the above problems can be solved simply by protecting the system database.

(3) Simplify the work and promote the comprehensive development of other aspects. Due to the intervention and operation of the pet hospital information management system, doctors can free up more time to do more targeted personalized medical services, so that each patient has the opportunity to enjoy more services.

    1. Research status

With the continuous improvement of people's living standards, continuous enrichment of material life, and continuous improvement of spiritual pursuits, people are more and more fond of keeping pets. The rapid development of the pet market in recent years has also attracted more and more people's attention to the benefits of keeping pets, especially in the context of increasingly heavy work for young people, and the elderly who stay at home are becoming more and more lonely. Keeping pets can be regarded as a solution to loneliness. an effective way. With the rapid development of computer network technology in recent years, the network has become an important and indispensable part of people's daily life. Many people want to buy pets but don't know which pets are suitable for them; Nowhere to consult; trying to figure out which pets are suitable for people of all ages but giving up because of the long distance to the physical pet hospital. Therefore, Huanhuan pet hospital management system came into being. Because of its convenience, speed and reliability, it has become a place frequented by many pet lovers. There are many Huanhuan pet hospital management systems at home and abroad. Although the technologies used by these systems are different, the functions and purposes they achieve have one thing in common. The impact on society and the convenience they bring to people are the same. They can meet the needs of most people, so that pet breeders scattered all over the world can find such a virtual pet hospital, so that everyone no longer has to worry about how to adopt, register, and care for their beloved pets.

Now there are many pet hospital information management software at home and abroad, using a variety of technologies, such as based on MySQL and Springboot mode, but most pet hospital information management systems are mainly used in key departments of large pet hospitals. As for small pet hospitals, there are not many organizations using pet hospital information management systems. In response to the huge and basic needs of pet hospital information management at home and abroad, a good pet hospital information management system must have complete functions, easy operation, and a friendly operation interface for users. While perfecting the functions, the flexibility, security and robustness of the system must be taken into consideration.

Each Huanhuan pet hospital management system will have differences in function, but they are all constantly improving, and the pet hospital on the static website is also transitioning to the pet hospital on the dynamic website. With the continuous and rapid development of the Internet, the development and maintenance of static Web sites are becoming more and more difficult. On the one hand, the information is constantly updated and increased, and site maintenance personnel have to frequently modify the page content; on the other hand, static web pages cannot be timely and browsed The viewer interacts effectively, making the viewer feel tedious. So it is necessary to develop dynamic web pages. Dynamic web pages are interactive, and they can dynamically change and respond according to user requirements and choices. Dynamic data access is the feature of dynamic web pages. When the browser accesses the server web page, its web application program accesses the database, retrieves the database in real time, and responds to customer requirements.

    1. Organization of this article

Six chapters together constitute the research and design content of this paper, including:

Chapter One Introduction. At the beginning of this article, some textual descriptions of the research background and research significance of this topic are given.

Chapter Two: Introduction of related technologies. It mainly introduces the Springboot framework, Java embedded scripting language, B/S mode, etc.

Chapter Three: System Analysis. Including the overall system requirements description, analysis of system requirements from a functional point of view, and non-functional analysis of whether the system can be realized.

Chapter Four: System Design. The important part of this article provides the detailed design of the system architecture and the design description of some main functional modules.

Chapter Five: System Realization. The system is divided into the introduction of the development tools of the premise and the realization of the function code in the later stage.

Chapter Six: System Testing. After the system is completed, the functional test of each module is carried out according to the test cases of each module.

  1. Related technology introduction
    1. Development Technical Note

The front-end part of the system is developed based on the MVVM model, using the B/S model, and the back-end part is developed based on the Java springboot framework.

Front-end part: The front-end framework adopts the popular progressive JavaScript framework Vue.js. Use Vue-Router and Vuex to achieve dynamic routing and global state management, Ajax to achieve front-end and back-end communication, Element UI component library to make the page quickly prototype, and the front-end of the project realizes responsiveness through grid layout, which can be adapted to PC, tablet, mobile, etc. Perfect layout display for different screen sizes.

Back-end part: use springboot as the development framework, and integrate MyBatis, Redis and other related technologies at the same time.

    1. Working principle of B/S system

The B/S architecture adopts the working mode of browser request and server response.

Users can access information such as text, data, pictures, animation, video on demand and sound generated by the web server on the Internet through a browser;

And each web server can be connected with the database server in various ways, and a large amount of data is actually stored in the database server;

Download the program from the Web server to execute locally. If an instruction related to the database is encountered during the download process, the Web server will hand it over to the database server for interpretation and execution, and return it to the Web server, and the Web server will return it to the user. In this structure, many networks are connected together to form a huge network, that is, the global network. Each enterprise can build its own Internet on the basis of this structure.

In the B/S mode, the user requests access to many servers distributed on the network through the browser. The browser's request is processed by the server, and the processing result and corresponding information are returned to the browser. Other data Processing and requests are all completed by the Web Server. Through the frame structure and the browser embedded in the operating system, this structure has become the mainstream structure mode of today's software applications.

 

    1. Spring boot framework introduction

The Spring framework is an open source application framework on the Java platform that provides inversion of control features . Although the Spring framework itself has no restrictions on the programming model, its frequent use in Java applications made it so popular that it was later used as a supplement or even a substitute for the EJB (EnterpriseJavaBeans) model. The Spring framework provides a series of solutions for development, such as using the core features of inversion of control, and implementing inversion of control through dependency injection to realize the containerization of the management object life cycle, using aspect-oriented programming for declarative transaction management, and integrating A variety of persistence technologies manage data access, provide a large number of excellent web frameworks to facilitate development, and so on. The Spring framework has the feature of inversion of control (IOC). IOC is designed to facilitate project maintenance and testing. It provides a method for unified configuration and management of Java objects through the Java reflection mechanism. The Spring framework uses the container to manage the life cycle of objects. The container can configure objects by scanning XML files or specific Java annotations on classes. Developers can obtain objects through dependency lookup or dependency injection. Aspect Oriented Programming(AOP) framework, the Spring AOP framework is based on the proxy mode, and can be configured at runtime; the AOP framework is mainly modularized for the cross concerns between modules. The AOP framework of the Spring framework only provides basic AOP features. Although it cannot be compared with the AspectJ framework, it can also meet the basic needs through integration with AspectJ. Functions such as transaction management and remote access under the Spring framework can be realized by using Spring AOP technology. Spring's transaction management framework brings an abstraction mechanism to the Java platform that enables local and global transactions, as well as nested transactions, to work with savepoints and in almost any environment on the Java platform. Spring integrates multiple transaction templates. The system can configure transactions through transaction templates, XML or Java annotations, and the transaction framework integrates functions such as messaging and caching. Spring's data access framework addresses common difficulties developers encounter when using databases in their applications. It not only provides support for all popular data access frameworks such as Java: JDBC, iBATS/MyBATIs, Hibernate, Java Data Objects (JDO), ApacheOJB and Apache Cayne, but also can be used with Spring's transaction management to provide data access Flexible abstraction. The Spring framework initially did not intend to build its own Web MVC framework . During the development process, its developers believed that the separation between the presentation layer and the request processing layer of the existing Struts Web framework and between the request processing layer and the model was not enough, so they created Spring MVC.

 

    1. Introduction to MySQL

MySQL is an open, fast, multi-threaded SQL relational database server. Because of its small size, free, fast running speed, and related free software can be used to check the relevant data structure information in the MySql database and so on. It is loved by the majority of medium and small enterprises and occupies a large position. The system uses MySQL as the database , and manages the MySql database through Nacivat. During the installation of Mysql, the most important thing to pay attention to is the encoding of the database, so when installing the database, you need to set the encoding of the database to Utf-8, which is consistent with the encoding of the front page and the server.

    1. JavaScript runtime mode

JavaScript is a high-level scripting language belonging to the network. It has been widely used in the development of Web applications. It is often used to add various dynamic functions to web pages and provide users with smoother and more beautiful browsing effects. Usually JavaScript scripts realize their own functions by embedding them in HTML

1.8.1 is an interpreted scripting language (code is not precompiled ).

1.8.2 is primarily used to add interactivity to HTML ( an application of Standard Generalized Markup Language ) pages.

1.8.3 can be directly embedded in HTML pages, but written as a separate js file is conducive to the separation of structure and behavior .

1.8.4 Cross-platform feature, with the support of most browsers, it can run on multiple platforms (such as Windows , Linux , Mac , Android , iOS , etc.).

1.8.5 Like other languages, the JavaScript scripting language has its own basic data types, expressions and arithmetic operators , and the basic program framework of the program. JavaScript provides four basic data types and two special data types for processing data and text. Variables provide a place to store information, and expressions can complete more complex information processing.

  1. system analysis
    1. Feasibility Analysis
      1. Legal Feasibility Analysis

Whether the development of software violates the law involves the issue of whether the software or system can be released. If you violate the law, you will be punished by law. A common legal problem is software plagiarism. If you copy someone else's software, you will be severely punished.

      1. Technical Feasibility Analysis

After years of development, the software industry has now reached a large scale, and there are countless professionals engaged in software development. The importance of the software industry has risen to the core position that affects and promotes the development of the national economy. The architecture on which this system is based, the current technology is very mature, and there is no trouble that is difficult to achieve technically.

      1. Economic Feasibility Analysis

In-depth consideration of the time, manpower and material costs required to develop the software, the income after the development is completed, and whether the required functions of the software can be realized under the existing economic conditions from the perspective of return on investment are all in line with the actual requirements. Therefore, Huanhuan pet hospital management system is economically feasible and practical, and can save management costs

    1. Functional Requirements Analysis

Huanhuan pet hospital management system is mainly to improve pet medical services, user information, pet information and user management, pet hotspot management, member message management, vaccine drug management, order list management, abandoned pet management, pet Feed situation, recruit staff, volunteer application, etc. provide convenient mechanisms. There are many types of users in this system, namely administrators and registered users. The following are the functions to be realized by the system from the perspectives of these two kinds of users.

user:

Registration: First check whether the user name and email address exist, if not, you can register, and encrypt the password entered by the user with MD5. After the registration is successful, it will prompt that the registration is successful, and save the user information in the database.

Login: Before using the Huanhuan Pet Hospital Management System, users are required to log in to their personal accounts.

Doctor introduction: When the user logs in to the homepage of the pet hospital management system, he can browse the doctor introduction information, and can view the introduction information of each different doctor according to different doctors.

Pet Encyclopedia: Users can browse the pet encyclopedia and search for details of comments related to a certain pet list. abandoned

Appointment registration: users can view the registration status of the appointment information form, and can initiate a registration application according to the appointment status: including filling in the order number, doctor's job number, doctor's name, department, registration fee, and user name.

administrator:

User management: manage users, user registration, including user nickname, user name, user pet information (pet category, pet gender, age, etc.) user account information:

Doctor introduction information management: maintain doctor introduction information, add, delete, and modify information.

Appointment registration information management: maintain the appointment registration information, add, delete, and modify information.

Medical record information management: maintain medical record information, add, delete, and modify information.

Medical device information management: maintain medical device information, add, delete, and modify information.

Maintenance reporting information management: maintain maintenance reporting information, add, delete, and modify information.

    1. Non-Functional Requirements Analysis

There are many non-functional requirements of the system, such as performance requirements, maximum number of users that can be carried, stability, and usability requirements. The analysis of this system takes into account the requirement of ease of use, because the system is used by people, so it is necessary to fully consider the user experience from the user's point of view, so that the system is easy to understand, easy to use and easy to operate.

    1. use case analysis

1. Ordinary users mainly use the system’s pet hot spots and Huanhuan Pet Hospital management system. The following figure shows the use cases of ordinary users               

 

Figure 3-1 Common user use case diagram

2. The administrator is mainly responsible for user management, pet medical management, product management, product order management, and pet adoption. The following figure describes the use case diagram of the administrator.

                 

 

Figure 3-2 Administrator use case diagram

    1. business process analysis

The system business flow chart is shown below.

                                         

 

Figure 3-3 System business flow chart

Business Flow Diagram (TFD) describes the business processing process through some specific symbols. It emphasizes the relationship between each processing activity in the business process and the specific business department, and selects some modules for specific description. Focus on describing the most important pet transaction and order business in the overall business of this system. After the user enters the Huanhuan Pet Hospital management system, he browses various module information, chooses to make an appointment for registration, and introduces the doctor. In addition, after the management personnel enter Terminal management to implement the relevant management methods of the order information control module, and provide a feedback mechanism to the customer after the solution is resolved.

    1. Data Flow Analysis

The following is the top-level data flow diagram of the system. The external entities include users and administrators, who input data into the system respectively to obtain the data to be output .

    

 

Figure 3-4 System top -level data flow diagram

The following figure shows the underlying data flow diagram of the system .

 

Figure 3- 5 System underlying data flow diagram

The underlying data flow diagram of Huanhuan pet hospital management system mainly describes the data flow, data carrier, data processing, and specific interaction of external entities of the underlying modules of the system. This system is the data interaction between administrators and ordinary users in user management, appointment registration, medical records, medical equipment, maintenance reporting and other modules.

  1. system design
    1. System architecture design

The system architecture design is mainly divided into three layers, mainly including the Web layer, the business layer, and the Model layer. The web layer also includes the View layer and the Controller layer, and the Model layer includes the metadata extension layer and the data access layer.

 

Figure 4-1 System architecture diagram

    1. System function structure

In order to implement the system from "what to do" to "how to do it", based on the system design principles, the system functions are divided into functions that are more suitable for coding implementation. According to the system architecture design in the above figure, a standardized system function structure diagram is sorted out to prepare for the system's implementation and coding.

The following figure shows the functional structure diagram of the system.

 

Figure 4-2 System function structure diagram

    1. Functional module design

User management is for all users and administrators. Unregistered users click Register to enter the registration page and fill in the new user information. After obtaining a custom generated account, the registration is complete. The activity diagram for unregistered user registration is shown in the figure below.

 

Figure 4-3 Unregistered user registration activity diagram

Users can log in to use more functions. First, enter the user login interface, enter the user account and password, and check and verify the account and password information in the background. If the verification is successful, the page will directly display the login user nickname to indicate successful login, otherwise return to the user login interface. The user login activity diagram is shown below.

 

Figure 4-4 User login activity diagram

After the user logs in , he enters the function page, where he can manage his own information , including personal information, appointment registration, medical records, and online consultation . The user usage function activity diagram is shown in the figure below .

 

Figure 4-5 User usage function activity diagram

The user function interface can modify its own password. After entering the password modification interface, check the current password, and fill in the new password after the verification is successful. The change password activity diagram is shown in the figure below.

 

Figure 4-6 Change password activity diagram

    1. Database Design

The database used by Huanhuan pet hospital management system is MySQL, and this part will design a reasonable database according to the system requirements and design. This system takes into account the extended cluster of the system in the future, and the database will not use foreign keys. In addition, data management is simpler when foreign keys are not used, and the operation is more convenient and the performance is higher.

      1. ER diagram

The ER diagram more intuitively tells developers the attributes of each data in the system, the relationship between each data, and the type of each data. Through this model, you can understand the design of the database more intuitively, and gradually improve it accordingly.

The system diagram design is shown in the figure below.

 

Figure 4-7 System ER Diagram

      1. table structure design

This system designs the database according to the idea of ​​the third paradigm to reduce the redundancy to the greatest extent. There are a total of multiple tables, user registry, administrator table, recruiting employee table, pet information table, abandoned pet table, activity center table, member Information sheet, vaccine drug sheet, volunteer application form, etc.

The table structure is as follows.

registered_user table:

name

type

length

not null

primary key

note

registered_user_id

int

11

yes

yes

registered user ID

user_name

varchar

64

yes

no

username

examine_state

varchar

16

yes

no

Approval Status

recommend

int

11

yes

no

Intelligent Recommendation

user_id

int

11

yes

no

User ID

create_time

datetime

0

yes

no

creation time

update_time

timestamp

0

yes

no

update time

online_consultation table:

name

type

length

not null

primary key

note

online_consultation_id

int

11

yes

yes

Online consultation ID

doctor_job_number

int

11

no

no

Doctor ID

name_of_doctor

varchar

64

no

no

doctor name

department

varchar

64

no

no

department

user_name

int

11

no

no

username

pet_variety

varchar

64

no

no

pet breed

consulting_questions

text

0

no

no

Counseling

doctor_reply

text

0

no

no

doctor reply

recommend

int

11

yes

no

Intelligent Recommendation

create_time

datetime

0

yes

no

creation time

update_time

timestamp

0

yes

no

update time

medical_record table:

name

type

length

not null

primary key

note

medical_record__id

int

11

yes

yes

Medical record ID

order_number

varchar

64

no

no

order number

doctor_job_number

int

11

no

no

Doctor ID

name_of_doctor

varchar

64

no

no

doctor name

department

varchar

64

no

no

department

user_name

int

11

no

no

username

pet_variety

varchar

64

no

no

pet breed

pet_age

varchar

64

no

no

pet age

symptom_description

text

0

no

no

symptom description

clinical_diagnosis

text

0

no

no

clinical diagnosis

drug_prescription

text

0

no

no

drug prescription

recommend

int

11

yes

no

Intelligent Recommendation

create_time

datetime

0

yes

no

creation time

update_time

timestamp

0

yes

no

update time

medical_apparatus_and_instruments表:

name

type

length

not null

primary key

note

medical_apparatus_and_instruments_id

int

11

yes

yes

Medical device ID

device_number

varchar

64

no

no

Device number

device_name

varchar

64

no

no

Device name

purchase_date

date

0

no

no

date of purchase

manufactor

varchar

64

no

no

factory

state

varchar

64

no

no

state

maintenance_record

text

0

no

no

Maintenance records

recommend

int

11

yes

no

Intelligent Recommendation

create_time

datetime

0

yes

no

creation time

update_time

timestamp

0

yes

no

update time

maintenance_report表:

名称

类型

长度

不是null

主键

注释

maintenance_report_id

int

11

维修上报ID

device_number

varchar

64

器械编号

device_name

varchar

64

器械名称

related_pictures

varchar

255

相关图片

doctor_job_number

int

11

医生工号

fault_description

text

0

故障描述

examine_state

varchar

16

审核状态

examine_reply

varchar

255

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

abandoned_pets表:

名称

类型

长度

不是null

主键

注释

have_an_appointment_with_a_doctor_id

int

11

预约挂号ID

order_number

varchar

64

订单号

doctor_job_number

int

11

医生工号

name_of_doctor

varchar

64

医生姓名

department

varchar

64

科室

registration_fee

varchar

64

挂号费

user_name

int

11

用户名

pet_variety

varchar

64

宠物品种

pet_age

varchar

64

宠物年龄

pet_sex

varchar

64

宠物性别

contact_number

varchar

64

联系电话

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

doctor_introduction表:

名称

类型

长度

不是null

主键

注释

doctor_introduction_id

int

11

医生介绍ID

doctor_job_number

int

11

医生工号

name_of_doctor

varchar

64

医生姓名

gender

varchar

64

性别

age

varchar

64

年龄

photo

varchar

255

照片

department

varchar

64

科室

registration_fee

int

11

挂号费

areas_of_expertise

text

0

擅长领域

scheduling_time

text

0

排班时间

doctor_introduction

longtext

0

医生介绍

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

doctor表:

名称

类型

长度

不是null

主键

注释

doctor_id

int

11

医生ID

doctor_job_number

varchar

64

医生工号

name_of_doctor

varchar

64

医生姓名

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

  1. 系统实现
    1. 开发工具

系统中应用的开发工具总结如下表所示。

表5-1开发工具

名称

工具

版本

操作系统

IDE(Integrated Development Environment)

Windows

Eclipse

7/8/10

2017

服务器

Tomcat

9.10.7

JDK(Java Development Kit)

JDK

Java SE 8.0 (1.8.0)

数据库

浏览器

界面工具

MySQL

谷歌

Photoshop

5.7

6.0

2016

    1. 注册模块

未注册用户在用户注册界面uerRegister.jsp,输入新用户信息,点击注册后,新用户信息由界面传入控制层userAction,调用addUser(user)方法,通过userDAOImp向数据库用户表插入用户信息,由于用户账号是自动生成的,若成功则反馈注册成功,并提示新用户的用户账号;若失败则回到登录界面,并显示登录失败。

注册界面如下所示。

 

 

图5-1注册界面

用户注册关键代码如下所示。

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

    1. 登录/注销模块

用户在首页点击登录,进入用户登录界面uerLogin.jsp,输入用户账号和密码,点击登录,用户账号和密码信息由界面传入控制层userAction,调用userLogin(user)方法,通过userDAOImp向数据库用户表搜索该用户账号与密码,将最终结果反馈到前端。若成功则回到首页;用户成功登录,若失败则回到登录界面,并显示登录失败。

用户点击注销,清空浏览器session值,然后返回登录页或者首页。

登录界面如下所示。

 

图5-2登录界面

登录界面关键代码如下所示。

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        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.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            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, "账号或密码不正确");

        }

}

    1. 用户模块
      1. 个人资料模块

登录用户在首页点击进入用户中心userCenter.jsp,再点击修改个人信息按钮进入userChangeInfo.jsp界面,系统根据session中存储的目前登录的用户的账号,向控制层userAction发送请求,搜索当前用户信息,userAction向userDAOImp调用queryByUserId(user),向数据库的用户表搜索当前用户信息并将用户信息以对象的形式层层返回到userChangeInfo.jsp界面,显示出当前用户的个人信息。

若用户要对个人信息进行修改,则通过修改当前信息之后点击确认,向控制层userAction发送更改后的用户信息,调用changeUser(user)方法,通过userDAOImp向数据库用户表更新用户信息,若成功则反馈注册成功,则返回的userChangeInfo.jsp界面被更改成功;若失败则显示修改失败。

      1. 宠物百科模块

用户在登录状态下浏览宠物百科时可将该宠物百科加入宠物百科,从session中取出该用户的信息,点击加入宠物百科后前台发起请求,将对应的宠物shuliang、id参数信息从前台传递GoumaiController类里,匹配到add()方法,add()方法调用GoumaiServiceImpl类的add()方法。

宠物百科界面如下所示。

 

图5-4宠物百科界面

      1. 医生介绍模块

用户在登录状态下浏览医生介绍信息时可将该医生介绍信息加入收藏记录,从session中取出该用户的信息,点击加入医生介绍信息收藏前台发起请求,将对应的医生介绍信息shichang、id参数信息从前台传递XiadanController类里,匹配到add()方法,add()方法调用XiadanServiceImpl类的add()方法。

医生介绍信息界面如下所示。

 

图5-5医生介绍界面

    1. 管理员模块
      1. 密码修改模块

管理员选择个人中心的修改本人密码。通过密码框输入现密码和2次新密码,如果现密码错误,则提示修改失败。如果2次新密码不一致,则提示修改失败。都没问题的话,系统提示修改成功,并返回登录界面。

个人信息界面图如下所示。

 

图5-5个人信息界面

密码修改界面如下所示。

 

图5-6密码修改界面

密码修改关键代码如下所示。

  /**

     * 修改密码

     * @param data

     * @param request

     * @return

     */

    @PostMapping("change_password")

    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){

        // 根据Token获取UserId

        String token = request.getHeader("x-auth-token");

        Integer userId = tokenGetUserId(token);

        // 根据UserId和旧密码获取用户

        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));

        Query ret = service.count(query, service.readConfig(request));

        List list = ret.getResultList();

        Object s = list.get(0);

        int count = Integer.parseInt(list.get(0).toString());

        if(count > 0){

            // 修改密码

            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,"密码修改失败!");

    }

      1. 医生管理模块

根据需求,需要对医生进行添加、删除或修改详情信息。删除或修改医生时,系统根据医生的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询医生状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。

添加医生时,会给出数据填写的页面,该页面根据填写好的医生编号同样会事先发送Ajax请求查询编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。

医生页面设计效果如下图所示。

 

图5-7医生管理界面

      1. 预约挂号管理模块

预约挂号功能需要考虑高并发,防止出现疫苗重复预约、挂号状态显示出错等情况,特对挂号这一共享数据增加锁机制。在乐观锁、悲观锁以及线程锁中,综合考虑性能效率和错误的可接受性选择了乐观锁机制。乐观锁的实现方式是使用版本标识来确定读到的数据与提交时的数据是否一致,提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。在数据库疫苗表(对应疫苗实体)设计中增加了version字段,每次数据提交时(更改疫苗状态)会判断version是否匹配,若不匹配停止本次提交,若匹配则提交成功并增加version的值。

预约挂号功能整体流程:用户浏览预约挂号信息时,同时会显示挂号的状态,系统会在其显示详细信息的页面时便会判断挂号的状态,若疫苗状态为可预约,则会显示预约的链接按钮。在用户点击预约按钮时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写预约信息的页面,填写好预约信息之后,点击提交按钮,预约成功之后返回提示信息,告知用户预约成功。

预约挂号流程图如下图所示。

 

图5-8预约挂号流程图

预约挂号界面如下图所示。

 

图5-9预约挂号管理界面

      1. 病历记录管理模块

根据需求,需要对病历记录进行添加、删除或修改详情信息。删除或修改订单时,系统根据病历记录的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询病历状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。

添加病历记录时,会给出数据填写的页面,该页面根据填写好的病历同样会事先发送Ajax请求查询病历编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。

病历记录页面设计效果如下图所示。

 

图5-10病历记录界面图

病历记录管理的关键代码如下。

  @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

  1. 系统测试
    1. 测试概述

软件测试是软件开发完成后必须经过的一道程序,它在软件开发过程中地位十分重要,需要由专业的测试工程师来对软件进行各方面的测试,大到功能模块测试,小到代码的单元测试,这对测试工程师来说需要有足够的耐心和专业的测试方案,软件测试归根结底就是对软件的结构和功能的综合测评,需要做到结构稳定和功能正确,二者兼顾。软件测试也叫寻找系统bug的过程,世界上没有完美无缺、不存在bug的软件,只能将软件的bug降到最低最小,来追求极致。

    1. 测试过程
      1. 登录测试

登录测试是系统最开始就要进行,测试用户能否登录,才能完成后续的功能操作。

登录测试用例表如下所示。

表6-1登录测试

用例编号

YL001

程序版本

1.00

功能名称

使用者登录测试

编制人

李铁蛋

功能描述

根据用户的登录情况测试

用例目的

测试用户登录情况是否正确

测试项

测试数据

测试结果

预期结果

用户名

为空

请输入用户名

请输入用户名

密码

为空

请输入密码

请输入密码

用户密码组合

用户名:klouse 密码 klouses

用户与密码不匹配

用户与密码不匹配

用户密码组合

用户名 : klouse 密码

klouse

进入系统

正确的用户名和密码

登录系统

      1. 信息录入测试

管理员在发布信息页面,通过按照预先格式发布信息,如果因为输入时候缺少相关内容,就不能发布成功,且有相应错误提示

信息录入发布测试用例表如下所示。

表6-1信息录入发布测试

用例编号

YL002

程序版本

1.00

功能名称

信息发布测试

编制人

李铁蛋

功能描述

对使用者发布或者录入信息进行测试,判断其功能是否达到预期的要求

用例目的

对系统使用者录入发布信息进行原型测试。

测试项

测试数据

测试结果

预期结果

属性1

为空

请输入属性1对应的数据

请输入属性1对应的数据

属性2

为空

请输入属性2对应的数据

请输入属性2对应的数据

属性3

为空

请输入属性3对应的数据

请输入属性3对应的数据

全部输入

数据均填入

录入发布成功

录入发布成功

      1. 信息更新测试

管理员在更新信息页面,通过按照预先格式更新信息,如果因为输入时候缺少相关内容或者更新的数据不符合当前规范的话,就不能更新成功,且有相应错误提示

信息更新测试用例表如下所示。

表6-1信息更新测试

用例编号

YL003

程序版本

1.00

功能名称

信息更新测试

编制人

李铁蛋

功能描述

对使用者更新信息进行测试,判断其功能是否达到预期的要求

用例目的

对系统使用者更新信息进行原型测试。

测试项

测试数据

测试结果

预期结果

属性1

编号:321

编号更新成功

编号更新成功

属性2

名称:名称1

名称更新成功

名称更新成功

属性3

内容:内容1234内容

内容更新成功

内容更新成功

全部输入

数据均未更改

更新成功

更新成功

      1. 信息删除测试

管理员在信息页面,通过点击数据删除按钮来删除该条数据,如果该数据和其他数据有关联,则提示是否确定删除。

信息删除测试用例表如下所示。

表6-1信息删除测试

用例编号

YL004

程序版本

1.00

功能名称

信息删除测试

编制人

李铁蛋

功能描述

对使用者删除信息进行测试,判断其功能是否达到预期的要求

用例目的

对系统使用者删除信息进行原型测试。

测试项

测试数据

测试结果

预期结果

数据1

无任何关联的数据1

数据删除成功

数据删除成功

数据2

和其他数据有关联的数据2

请确认是否删除

请确认是否删除

    1. 测试结果

在经过之前的所有的工作之后,通过对软件的测试方法、测试原则还有典型的测试用例进行全面的、深入的介绍。经过对系统的全面测试,系统目前所具有的所有功能均成功的实现并且通过了测试,整个系统实现了基于 Java 开发的期望。

  1. 总结与展望
    1. 总结

欢欢宠物医院管理系统采用Springboot框架开发,该系统非常完美的集优点于一身,成熟、强大、易理解易使用,通过使用这个结构,降低了开发的难度。本系统实现了基于Springboot的宠物管理平台,将数据操作维护的过程转化成电脑操作流程,具体实现了对系统人员管理、预约挂号数据维护、医疗器械数据维护、维修上报数据维护、病历记录管理数据维护,并提供查询统计功能来对欢欢宠物医院管理系统的相关数据进行统计分析,让使用者能更清晰的掌握运营情况,帮助使用者进行数据操作维护,简化工作流程,提高工作效率和盈利。

    1. 展望

目前完成的欢欢宠物医院管理系统,还有许多有待改进的地方。一个是功能上的改进,用户理应可以修改自己的相关信息,故应增设个人中心功能;另外,系统如果能提供更多的功能就会使得系统更加丰富和多样化,比如数据当前分析和未来预测等。第二个是技术上的改进,由于对开发框架不太熟悉,权限管理这部分,本系统采用一个Java页面来规定好导航栏,即跳转的页面,这相对比较不灵活,如果将URL路径记录到数据库并实现增删查改会比较好;另外就是对EasyUI的使用还不够熟练,视觉效果和界面观感有待提升,希望日后能对这个系统有所改进。

参考文献

[1]王月红,蒋冀萍.基于Java的煤矿风险预警与防控系统设计[J].煤炭技术,2022,41(03):173-175.

[2]朱珍珠,段华斌,邓永清,杜丹蕾.基于Java的增值平台的设计与实现[J].办公自动化,2022,27(05):55-58.

[3]曹凯,王嘉月.基于Java语言的单点登录在数字资源整合中的应用[J].中国信息化,2022(02):50-51.

[4]孟晶石. 一种查看java字节码时显示方法调用关系图的方法[P]. 江苏省:CN109901841B,2022-02-18.

[5]刘在英,杨磊. 一种基于SpringBoot框架的企业进存销系统的设计方法[P]. 山东省:CN114003204A,2022-02-01.

[6]彭永鹤. 一种基于大数据与物联网的宠物医院管理系统[P]. 广东省:CN113972002A,2022-01-25.

[7]熊柏祥.基于Springboot和Vue框架的考试资源服务平台的设计与实现[J].信息与电脑(理论版),2022,34(01):97-99+103.

[8]霍福华,韩慧.基于SpringBoot微服务架构下前后端分离的MVVM模型[J].电子技术与软件工程,2022(01):73-76.

[9]王萨仁图雅,薛爱兰.动物医院管理系统软件的应用技巧[J].当代畜禽养殖业,2021(05):63-64.DOI:10.14070/j.cnki.15-1150.2021.05.022.

[10]单树倩,任佳勋.基于SpringBoot和Vue框架的数据库原理网站设计与实现[J].电脑知识与技术,2021,17(30):40-41+50.

[11]苏文强,刘紫阳,苗玉恒.基于SpringBoot的缺陷管理系统设计与实现[J].大众科技,2021,23(10):4-6+10.

[12]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).

[13]刘欣,李亮亮,牛聪. 基于Vue和SpringBoot框架的流域监管平台的研究和应用[C]//.第十一届防汛抗旱信息化论坛论文集.,2021:118-122.

[14]Tian Ming Huang. Design and Implementation of App System for Legal Consulting Based on JAVA Technology[J]. Procedia Computer Science,2020,166(C).

[15]Lei Yu,Cheng Li,Lei Wei,Hu WenYa. Marine biological monitoring and managing system based on Java technology[J]. MIPPR 2019: REMOTE SENSING IMAGE PROCESSING, GEOGRAPHIC INFORMATION SYSTEMS, AND OTHER APPLICATIONS,2020,11432.

[16]SJ/T 11683-2017, Java语言源代码缺陷控制与测试指南[S].

[17]张帆. 华阳社区宠物医院管理系统的设计与实现[D].东北大学,2016.

[18]ANSI/INCITS/ISO/IEC 19777-2-2008, 信息技术.计算机制图和图像处理.可扩展3D(X3D)语言汇编.第2部分:Java[S].

致谢

在老师的教导和帮助下,本人完成了本篇论文,老师对论文的内容、格式都有非常严格的要求,在我写毕业论文的过程中,他多次给出了建议,并定期检查,对我们严格要求,帮助我们在文档的编写上写到极致和正确,他这种教学和工作态度,让我对他产生无限的敬佩感和尊敬感。写毕业论文的同时,作为应届生,我也忙着找工作中,遇到了很多选择,感到困惑迷茫的时候,老师给了我很多意见,感谢老师的耐心开导,跟她的聊天我明白了许多。

I would also like to thank my parents, who have always supported and believed in me, and have given me a lot of strength both spiritually and financially. Now that I will graduate and start working, I can finally repay the kindness of my parents for their upbringing and teaching. And all the teachers and classmates during my university, when I encountered problems, these teachers and classmates always helped me selflessly. I am really grateful, and I will work hard to grow into a useful person.

Like+Favorite+Follow → private message to receive the source code and database

Guess you like

Origin blog.csdn.net/weixin_61498557/article/details/130891973