Springboot宠物医院管理系统的设计与实现-计算机毕设 附源码84724

news2024/11/17 17:27:48

Springboot宠物医院管理系统的设计与实现

摘 要

现如今生活质量提高,人们追求精神健康,与家中宠物朝夕相处,感情深厚,宠物渐渐成了我们身边的朋友。因而宠物生病了,需要去看病,自古医院救死扶伤,生命无贵贱,无论人类还是动物都需要合适而又方便的场所看病。同时智能化医院的普及,以往兽医站开始尝试改善自我经营的诊所,采用高效的新技术向正规化且办公化管理的医院转型,这样便可使管理高效,服务优质,方便快捷地对运营的各个部门得到全方位的改善。因而基于宠物医院的办公管理系统是宠物医院的重要工具,简单、实用、灵活,可以事半功倍。

本系统是基于浏览器与服务器架构,采用跨平台的JAVA语言开发,利用WEB浏览器就可以使工作人员操作本应用,实现对系统各方位信息的操作,无论大型宠物医院还是小型宠物诊所,均可自建局域网管理,方便办公,减少不必要的成本消耗。该系统沿用MVC思想,利用springboot类的封装进行逻辑控制,利用Java技术完成访问页面的展示,利用MySQL数据库存储数据,最后Tomcat服务器完成网站发布,系统可在多个环境下运行。

本课题在经过了宠物医院正常办公流程下的需求分析后,完成实现了系统用户、宠物商品、购买信息、退货信息、宠物寄养、美容师预约、医生预约、问诊信息、病历信息、化验记录、疫苗记录、回访记录等功能。

关键词:宠物医院管理,Springboot框架,MySQL数据库

Design and Implementation of Springboot Pet Hospital Management System

Abstract

Nowadays, the quality of life has improved, people pursue mental health, get along with pets at home day and night, and have deep feelings. Pets have gradually become friends around us. As a result, pets are sick and need to go to see a doctor. Since ancient times, the hospital has saved the lives of the sick and the wounded. Life is of 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, veterinary stations in the past began to try to improve self-operated clinics and adopt efficient new technologies to transform into formal and office managed hospitals, which can make management efficient, service quality, and convenient and efficient to improve all departments in operation. Therefore, the office management system based on pet hospitals is an important tool for pet hospitals, which is simple, practical, flexible and can achieve twice the result with half the effort..

The system is based on browser and server architecture, and is developed with cross-platform JAVA language. Using WEB browser, staff can operate the application and realize the operation of all aspects of the system information. No matter large pet hospitals or small pet clinics, they can build their own local area network management, which is convenient for office work and reduces unnecessary cost consumption. The system follows the MVC idea, uses the encapsulation of spring boot class for logic control, uses Java technology to complete the display of access pages, uses MySQL database to store data, and finally completes the website publishing by Tomcat server. The system can run in multiple environments.

After the demand analysis under the normal office process of the pet hospital, this project has completed the functions of system users, pet products, purchase information, return information, pet foster care, beautician appointment, doctor appointment, consultation information, medical record information, laboratory records, vaccine records, return visit records, etc.

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

目  录

第1章 绪论

1.1 研究背景

1.2 研究现状

1.3 本文的组织结构

第2章 相关技术介绍

2.1 相关技术说明

2.2 B/S体系工作原理

2.3 Springboot框架介绍

2.4 MySQL简介

2.5 JavaScript运行模式

第3章 系统分析

3.1 可行性分析

3.1.1 法律可行性分析

3.1.2 技术可行性分析

3.1.3 经济可行性分析

3.2 功能需求分析

3.3 非功能需求分析 7

3.4 用例分析 7

3.5 业务流程分析

3.6 数据流程分析

第4章 系统设计

4.1 系统架构设计

4.2 系统功能结构 12

4.3 功能模块设计

4.4 数据库设计

4.4.1 E-R

4.4.2 表结构设计

第5章 系统实现

5.1 开发工具

5.2 注册模块

5.3 登录/注销模块

5.4 用户功能模块

5.5 管理员功能模块

第6章 系统测试 35

6.1 测试概述 35

6.2 测试过程 35

6.2.1 登录测试 35

6.2.2 信息录入测试 35

6.2.3 信息更新测试 36

6.2.4 信息删除测试 36

6.3 测试结果 36

第7章 总结与展望

7.1 总结

7.2 展望

参考文献

致谢 41

  1. 绪论
    1. 研究背景

目前,很多国内宠物医院信息管理一般采用纯手工管理这种方法的弊端在于参与管理的人员文化水平不一,字迹不一,互相之间会导致信息传达不便,而.且纸质信息传载媒体有着一个很大的弱点就是容易损坏,造成信息丢失。在当前的信息化时代中,任何宠物医院,都需要一个实用的宠物医院信息管理系统来规范宠物医院信息的管理,这将会大大提高宠物医院的管理水平,优化资源,实现效益的最大化。

现在国内也有一些宠物医院信息管理管理的软件,采用的技术也是多种多样,但大多数宠物医院信息管理系统主要用于大型宠物医院的关键部门。至于小型宠物医院,利用宠物医院信息管理系统管理日常业务的并不多。针对国内对宠物医院信息管理软件的巨大需要和基本需要,一个好的宠物医院信息管理软件,必须功能齐全,操作简便,向用户展示简单明了的操作界面。在完善功能的同时又必须兼顾系统的灵活性,安全性。

宠物医院管理系统的优势主要表现在三个方面:

(1)宠物医院信息管理无纸化,环保又方便。传统的宠物医院信息管理方式,都是经由员工手工记录存档。这种传统的纸质宠物医院信息管理管理,-是会有很大的体力消耗,二是在精力上也是不小的付出。而无纸化宠物医院信息管理,只需在电脑前点点鼠标,在体力上几乎没有多大的消耗,而且在环保、效率、针对性日常业务方面做得要比传统的宠物医院信息管理管理科学得多。

(2)科学管理,安全可靠。传统的宠物医院信息管理管理方式,经常会由于各种原因,产生信息的丢失或是污损,给宠物医院信息管理和日常业务带来很大的不便。而对于宠物医院信息管理系统,只需做好系统数据库的保护,以上问题可以迎刃而解了。

(3)简化工作,促进其他方面的综合发展。由于宠物医院信息管理系统的介入运行,可以使医生腾出更多的时间,做更多针对性的个性化医疗服务,从而使每个病人都有机会享受更多的服务。

    1. 研究现状

随着人们的生活水平的不断提高、物质生活不断丰富、精神追求不断提升,人们也越来亲睐于饲养宠物。近年来宠物市场的急剧发展,也让更多的人们关注饲养宠物的益处,特别是年轻人工作愈发繁重的背景下,留守家中的老年人变得越来越孤独,饲养宠物不失为排解孤独的一种有效途径。近几年计算机网络技术的飞速发展,网络已经成了人们日常生活中重要且必不可少的一部分,很多人想要购买宠物却不知道哪种宠物适合自己;想要了解哪些宠物的饲养习性却无处咨询;想弄清楚哪些宠物适合各年龄段的人却因实体宠物医院路途遥远等原因而作罢。于是,宠物医院管理系统应运而生。由于其方便性、快捷性、可靠性,已成为众多宠物爱好者经常光顾的地方。国内外的宠物医院管理系统众多,虽然这些系统运用的技术有所不同,但是他们实现的功能和目的都有一个共同点,对社会的影响、给人们带来的方便是一样的。他们都能满足绝大多数人的需求,使得分散于各地的宠物饲养者们能找到这样一个虚拟的宠物医院,使得大家不用再为如何领养、挂号、爱护自己的爱宠而发愁。

现在国内外也有很多宠物医院信息管理的软件,采用的技术也是多种多样,如基于MySQLSpringboot模式,但大多数宠物医院信息管理系统主要用于大型宠物医院的关键部门。至于小型宠物医院,利用宠物医院信息管理系统组织管理的并不多。针对国内外对宠物医院信息管理的巨大需要和基本需要,一个好的宠物医院信息管理系统,必须功能齐全,操作简便,向用户展示友善的操作界面。在完善功能的同时又必须兼顾系统的灵活性,安全性,健壮性。

各个宠物医院管理系统在功能上会存在差异,但都在不断完善,静态网站的宠物医院也在向动态网站的宠物医院过渡。随着Internet的不断快速发展,静态Web站点的开发与维护越来越困难,一方面是信息不断更新和增加,不得不让站点维护人员经常修改页面内容;另一方面静态网页不能及时的与浏览者进行有效交互,使浏览者感觉到乏味。所以开发动态网页是很有必要的。动态网页具有交互性,它能根据用户的要求和选择而动态改变和响应。动态数据访问就是动态网页的特征,当浏览器访问服务器网页时,其Web应用程序才访问数据库,实时检索数据库,响应客户要求。

    1. 本文的组织结构

六个章节共同组成了本文研究及设计内容,包括:

第一章:绪论。本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。

第二章:相关技术介绍。主要介绍Springboot框架、Java嵌入式脚本语言、B/S模式等。

第三章:系统分析。包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。

第四章:系统设计。本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。

第五章:系统实现。将本系统分为前提的开发工具介绍和后期的功能代码实现。

第六章:系统测试。系统完成后,根据各个模块的测试用例才对各个模块进行功能测试。

  1. 相关技术介绍
    1. 开发技术说明

本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的springboot框架进行开发。

前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。

后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。

    1. B/S体系工作原理

B/S架构采取浏览器请求,服务器响应的工作模式。

用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;

而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;

Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。

在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。

    1. spring boot框架介绍

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。

    1. MySQL简介

MySQL是一个开放的、快速的、多线程的SQL关系型数据库服务器。由于其体积小、免费、运行速度快以及可以通过相关免费的软件来对MySql数据库中的相关数据结构信息等等优点。受广大中等、小型企业所喜爱并占据了很大地位。本系统在数据库方面选用MySQL,并通过Nacivat来进行MySql数据库的管理。在Mysql的安装过程中,最需要注意的就是数据库的编码问题,所以在安装数据库时需要设置数据库的编码为Utf-8,与前台页面和服务器的编码相一致。

    1. JavaScript 运行模式

JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的

1.1是一种解释性脚本语言(代码不进行预编译)。

1.2主要用来向HTML标准通用标记语言下的一个应用)页面添加交互行为。

1.3可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离

1.4跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如WindowsLinuxMacAndroidiOS等)。

1.5 JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。JavaScript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。

  1. 系统分析
    1. 可行性分析
      1. 法律可行性分析

开发软件有没有触犯法律,这涉及到软件或者系统能不能发布的问题。如果触犯了法律,就必将会受到法律的制裁。常见法律问题就是软件抄袭问题,若是抄袭别人软件,将会受到严厉惩罚。

      1. 技术可行性分析

软件产业经过多年的发展,现在已经达到了很大的规模,从事软件开发的专业人员不计其数,软件产业的重要性已经上升到了影响和推动国民经济发展的核心地位。本系统基于的架构,目前技术已经非常的成熟,是不存在技术上面难以实现的麻烦。

      1. 经济可行性分析

开发软件所需的时间、人力和物力成本,开发完成后的收益如何,从投资回报的角度软件所需功能在现有经济条件能不能实现等进行深入的考虑,都符合实际的要求。所以宠物医院管理系统具有经济可行性和实用性,可以节约管理成本

    1. 功能需求分析

宠物医院管理系统主要是为了更加地完善宠物医疗的服务情况,对用户的信息、从无商品购买、宠物信息和用户管理、病例记录管理、宠物寄养管理、疫苗记录管理、回访记录管理等提供了方便的机制。本系统有多类使用者,分别是管理员和用户医生登录。以下是从这种用户的角度分别介绍本系统所要实现的功能。

用户:

注册:首先检查用户名和邮箱是否存在,如不存在即可进行注册,并将用户输入的密码进行MD5加密,注册成功后提示注册成功,并将用户信息保存到数据库中。

登录:使用宠物医院管理系统前是需要用户登录个人账号。

购买信息:用户登录宠物医院管理系统首页时,可以浏览系统发布的宠物商品信息进行购买等。

退货信息:用户可以在线进行退货申请操作。

宠物寄养:用户可以进行宠物的寄养申请

美容师预约:可以在线进行宠物美容师的预约。

医生预约:可以在线进行宠物医生预约看诊。

病历信息:用户可以查看宠物的病历内容。

化验记录:存储宠物的化验报告信息。

疫苗激励:查看宠物的疫苗接种记录信息。

医生:

登录:输入用户名以及密码进行系统的登录。

医生信息:个信息的维护。

医生预约:可以处理用户的预约信息。

问诊信息:宠物的看病问诊信息。

病历信息:上传宠物的病历信息。

化验记录:发布宠物的化验单据等。

疫苗记录:宠物的疫苗接种情况。

美容师:

登录:输入账户以及密码进行账户登录。

美容师信息:上传发布美容师信息。

美容师预约:处理用户的美容师预约信息。

管理员:

用户管理:对用户进行管理,用户的注册,包括用户昵称、用户名、用户的宠物信息(宠物类别、宠物性别、年龄等)用户的账号信息:

商品管理:对商品信息进行发布管理。

订单管理:对用户的订单进行维护管理。

问诊管理:对宠物的问诊记录信息进行维护管理。

病历管理:对宠物的病历信息进行维护管理。

化验记录管理:对宠物的化验报告进行管理。

疫苗记录管理。

回访登记管理。

    1. 非功能需求分析

系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。

    1. 用例分析

1.普通用户主要使用系统的宠物热点和宠物医院管理系统,下图所示为普通用户的图。

图3-1 普通用户用例图

2.管理员主要负责用户管理医生预约管理、病历信息管理、疫苗记录管理化验记录管理,下图所示描述管理员的用例图。

                 

图3-2 管理员用例图

3.医生主要负责处理预约、问诊信息、病历信息、疫苗记录、化验记录、回访登记下图所示描述医生的用例图。

                 

图3-3 医生用例图

4.美容师主要负责上传美容师信息以及处理用户预约的用例图。

                 

图3-2 美容师用例图

    1. 业务流程分析

系统业务流程图如下所示。

图3-3 系统业务流程图

业务流程图(TFD)通过一些特定的符号描述业务的处理过程,它重点强调业务过程中每一项处理活动和具体业务部门的关系,选择部分模块进行具体描述。重点对本系统整体业务中最为主要的宠物交易及订单业务进行描述。

    1. 数据流程分析

如下为系统的层数据流图,外部实体有用户和管理员,分别对系统输入数据,从而得到要输出的数据

    

图3-4系统顶层数据流图

如下图所示为系统层数据流图。

图3-5系统底层数据流图

  1. 系统设计
    1. 系统架构设计

本系统架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。

图4-1系统架构图

    1. 系统功能结构

为了将系统从“做什么”落实到“怎么做”,基于系统设计原则,对系统功能进行更适合编码实现的功能划分。根据上图的系统架构设计,整理出规范的系统功能结构图,为系统的实现编码做好准备。

如下图所示为系统功能结构图。

图4-2系统功能结构图

    1. 功能模块设计

用户管理针对所有用户和管理员。未注册用户点击注册,进入注册页面填写新用户信息,得到自定义生成账号后,注册完成。未注册用户注册的活动图如下图所示。

图4-3未注册用户注册活动图

用户可进行登录使用更多功能,首先进入用户登录界面,输入用户账号和密码,后台对账号和密码信息进行核对验证,验证成功则页面直接显示登录用户昵称代表登录成功,否则返回用户登录界面。用户登录活动图如下图。

图4-4用户登录活动图

用户登录后,进入功能页面,可自己的信息进行管理,包括个人信息,预约挂号、病历记录、在线咨询用户使用功能活动图如所示

图4-5用户使用功能活动图

用户功能界面可对自己的密码进行修改。进入修改密码界面后核对当前密码,核对成功后填写新密码。修改密码活动图如下图所示。

图4-6修改密码活动图

    1. 数据库设计

宠物医院管理系统采用的数据库是MySQL,该部分将根据系统需求和设计,设计合理的数据库。本系统考虑到之后系统的扩展集群,数据库将不使用外键。此外,不用外键时数据管理也较为简单,操作更加方便,性能更高。

      1. E-R图

E-R图,更加直观的告诉开发人员系统的各个数据的属性,各个数据之间的联系,各个数据的类型。能通过该模型更直观地了解数据库的设计,并根据对其逐渐改善。

本系统图设计,如下图所示。

图4-7系统E-R图

      1. 表结构设计

本系统根据第三范式的思想设计数据库,减少最大程度的冗余,总共建立有多个表,以下是数据标展示

表结构如下所示。

    1. 表beautician_appointment (美容师预约)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

beautician_appointment_id

int

10

0

N

Y

美容师预约ID

2

beautician_user

int

10

0

Y

N

0

美容师用户

3

name_of_beautician

varchar

64

0

Y

N

美容师姓名

4

sex_of_beautician

varchar

64

0

Y

N

美容师性别

5

beautician_job_number

varchar

64

0

Y

N

美容师工号

6

user_information

int

10

0

Y

N

0

用户信息

7

user_name

varchar

64

0

Y

N

用户姓名

8

contact_number

varchar

64

0

Y

N

联系电话

9

pet_type

varchar

64

0

Y

N

宠物种类

10

time_of_appointment

datetime

19

0

Y

N

预约时间

11

order_status

varchar

64

0

Y

N

订单状态

12

order_remarks

text

65535

0

Y

N

订单备注

13

recommend

int

10

0

N

N

0

智能推荐

14

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

15

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表beautician_information (美容师信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

beautician_information_id

int

10

0

N

Y

美容师信息ID

2

beautician_user

int

10

0

Y

N

0

美容师用户

3

name_of_beautician

varchar

64

0

Y

N

美容师姓名

4

sex_of_beautician

varchar

64

0

Y

N

美容师性别

5

beautician_job_number

varchar

64

0

Y

N

美容师工号

6

photos_of_beauticians

varchar

255

0

Y

N

美容师照片

7

about_beauticians

longtext

2147483647

0

Y

N

美容师简介

8

praise_len

int

10

0

N

N

0

点赞数

9

recommend

int

10

0

N

N

0

智能推荐

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表beautician_user (美容师用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

beautician_user_id

int

10

0

N

Y

美容师用户ID

2

name_of_beautician

varchar

64

0

Y

N

美容师姓名

3

sex_of_beautician

varchar

64

0

Y

N

美容师性别

4

beautician_job_number

varchar

64

0

N

N

美容师工号

5

examine_state

varchar

16

0

N

N

已通过

审核状态

6

recommend

int

10

0

N

N

0

智能推荐

7

user_id

int

10

0

N

N

0

用户ID

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表collect (收藏)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

collect_id

int

10

0

N

Y

收藏ID:

2

user_id

int

10

0

N

N

0

收藏人ID:

3

source_table

varchar

255

0

Y

N

来源表:

4

source_field

varchar

255

0

Y

N

来源字段:

5

source_id

int

10

0

N

N

0

来源ID:

6

title

varchar

255

0

Y

N

标题:

7

img

varchar

255

0

Y

N

封面:

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

    1. 表comment (评论)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

comment_id

int

10

0

N

Y

评论ID:

2

user_id

int

10

0

N

N

0

评论人ID:

3

reply_to_id

int

10

0

N

N

0

回复评论ID:空为0

4

content

longtext

2147483647

0

Y

N

内容:

5

nickname

varchar

255

0

Y

N

昵称:

6

avatar

varchar

255

0

Y

N

头像地址:[0,255]

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

source_table

varchar

255

0

Y

N

来源表:

10

source_field

varchar

255

0

Y

N

来源字段:

11

source_id

int

10

0

N

N

0

来源ID:

    1. 表consultation_information (问诊信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

consultation_information_id

int

10

0

N

Y

问诊信息ID

2

doctor_user

int

10

0

Y

N

0

医生用户

3

doctors_name

varchar

64

0

Y

N

医生姓名

4

doctors_gender

varchar

64

0

Y

N

医生性别

5

doctor_id

varchar

64

0

Y

N

医生工号

6

user_information

int

10

0

Y

N

0

用户信息

7

user_name

varchar

64

0

Y

N

用户姓名

8

consultation_content

text

65535

0

Y

N

咨询内容

9

reply_content

text

65535

0

Y

N

回复内容

10

recommend

int

10

0

N

N

0

智能推荐

11

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

12

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表customer_information (客户信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

customer_information_id

int

10

0

N

Y

客户信息ID

2

customer_no

varchar

64

0

Y

N

客户编号

3

customer_name

varchar

64

0

Y

N

客户名称

4

customer_telephone

varchar

64

0

Y

N

客户电话

5

customer_address

text

65535

0

Y

N

客户地址

6

customer_introduction

text

65535

0

Y

N

客户介绍

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表delivery_record (出库记录)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

delivery_record_id

int

10

0

N

Y

出库记录ID

2

article_no

varchar

64

0

Y

N

用品编号

3

item_name

varchar

64

0

Y

N

用品名称

4

delivery_quantity

int

10

0

Y

N

0

出库数量

5

delivery_date

date

10

0

Y

N

出库日期

6

issue_remarks

text

65535

0

Y

N

出库备注

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表device_information (设备信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

device_information_id

int

10

0

N

Y

设备信息ID

2

equipment_name

varchar

64

0

Y

N

设备名称

3

equipment_type

varchar

64

0

Y

N

设备类型

4

equipment_location

varchar

64

0

Y

N

设备位置

5

device_picture

varchar

255

0

Y

N

设备图片

6

equipment_introduction

text

65535

0

Y

N

设备介绍

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表doctor_appointment (医生预约)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

doctor_appointment_id

int

10

0

N

Y

医生预约ID

2

doctor_user

int

10

0

Y

N

0

医生用户

3

doctors_name

varchar

64

0

Y

N

医生姓名

4

doctors_gender

varchar

64

0

Y

N

医生性别

5

doctor_id

varchar

64

0

Y

N

医生工号

6

user_information

int

10

0

Y

N

0

用户信息

7

user_name

varchar

64

0

Y

N

用户姓名

8

contact_number

varchar

64

0

Y

N

联系电话

9

pet_type

varchar

64

0

Y

N

宠物种类

10

time_of_appointment

datetime

19

0

Y

N

预约时间

11

order_status

varchar

64

0

Y

N

订单状态

12

order_remarks

text

65535

0

Y

N

订单备注

13

recommend

int

10

0

N

N

0

智能推荐

14

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

15

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表doctor_information (医生信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

doctor_information_id

int

10

0

N

Y

医生信息ID

2

doctor_user

int

10

0

Y

N

0

医生用户

3

doctors_name

varchar

64

0

Y

N

医生姓名

4

doctors_gender

varchar

64

0

Y

N

医生性别

5

doctor_id

varchar

64

0

Y

N

医生工号

6

doctors_photo

varchar

255

0

Y

N

医生照片

7

doctor_profile

longtext

2147483647

0

Y

N

医生简介

8

praise_len

int

10

0

N

N

0

点赞数

9

recommend

int

10

0

N

N

0

智能推荐

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表doctor_user (医生用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

doctor_user_id

int

10

0

N

Y

医生用户ID

2

doctors_name

varchar

64

0

Y

N

医生姓名

3

doctors_gender

varchar

64

0

Y

N

医生性别

4

doctor_id

varchar

64

0

N

N

医生工号

5

examine_state

varchar

16

0

N

N

已通过

审核状态

6

recommend

int

10

0

N

N

0

智能推荐

7

user_id

int

10

0

N

N

0

用户ID

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表foster_care_information (寄养信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

foster_care_information_id

int

10

0

N

Y

寄养信息ID

2

user_information

int

10

0

Y

N

0

用户信息

3

user_name

varchar

64

0

Y

N

用户姓名

4

contact_number

varchar

64

0

Y

N

联系电话

5

foster_pet

varchar

64

0

Y

N

寄养宠物

6

date_of_foster_care

date

10

0

Y

N

寄养日期

7

days_of_foster_care

varchar

64

0

Y

N

寄养天数

8

foster_care_notes

text

65535

0

Y

N

寄养备注

9

examine_state

varchar

16

0

N

N

未审核

审核状态

10

examine_reply

varchar

16

0

Y

N

审核回复

11

recommend

int

10

0

N

N

0

智能推荐

12

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

13

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表goods_delivery (商品出库)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

goods_delivery_id

int

10

0

N

Y

商品出库ID

2

item_no

varchar

64

0

Y

N

商品编号

3

trade_name

varchar

64

0

Y

N

商品名称

4

issue_type

varchar

64

0

Y

N

出库类型

5

delivery_quantity

int

10

0

Y

N

0

出库数量

6

issue_remarks

varchar

64

0

Y

N

出库备注

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表goods_warehousing (商品入库)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

goods_warehousing_id

int

10

0

N

Y

商品入库ID

2

item_no

varchar

64

0

Y

N

商品编号

3

trade_name

varchar

64

0

Y

N

商品名称

4

receipt_type

varchar

64

0

Y

N

入库类型

5

receipt_quantity

int

10

0

Y

N

0

入库数量

6

warehousing_remarks

text

65535

0

Y

N

入库备注

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表hits (用户点击)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

hits_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

    1. 表hospital_supplies (医院用品)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

hospital_supplies_id

int

10

0

N

Y

医院用品ID

2

article_no

varchar

64

0

Y

N

用品编号

3

item_name

varchar

64

0

Y

N

用品名称

4

supplies_inventory

int

10

0

Y

N

0

用品库存

5

articles_picture

varchar

255

0

Y

N

用品图片

6

articles_introduction

text

65535

0

Y

N

用品介绍

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表medical_record_information (病历信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

medical_record_information_id

int

10

0

N

Y

病历信息ID

2

medical_record_name

varchar

64

0

Y

N

病历名称

3

doctor_user

int

10

0

Y

N

0

医生用户

4

user_information

int

10

0

Y

N

0

用户信息

5

user_name

varchar

64

0

Y

N

用户姓名

6

pet_type

varchar

64

0

Y

N

宠物种类

7

medical_record_content

text

65535

0

Y

N

病历内容

8

recommend

int

10

0

N

N

0

智能推荐

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表message_feedback (留言反馈)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

message_feedback_id

int

10

0

N

Y

留言反馈ID

2

title_name

varchar

64

0

Y

N

标题名称

3

message_user

int

10

0

Y

N

0

留言用户

4

user_name

varchar

64

0

Y

N

用户姓名

5

message_content

text

65535

0

Y

N

留言内容

6

reply_content

text

65535

0

Y

N

回复内容

7

recommend

int

10

0

N

N

0

智能推荐

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

    1. 表notice (公告)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

notice_id

mediumint

8

0

N

Y

公告id:

2

title

varchar

125

0

N

N

标题:

3

content

longtext

2147483647

0

Y

N

正文:

4

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

    1. 表praise (点赞)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

praise_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

status

bit

1

0

N

N

1

点赞状态:1为点赞,0已取消

    1. 表product_information (商品信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

product_information_id

int

10

0

N

Y

商品信息ID

2

item_no

varchar

64

0

Y

N

商品编号

3

trade_name

varchar

64

0

Y

N

商品名称

4

commodity_price

int

10

0

Y

N

0

商品价格

5

commodity_inventory

int

10

0

Y

N

0

商品库存

6

cover_photo

varchar

255

0

Y

N

封面图片

7

product_introduction

longtext

2147483647

0

Y

N

商品简介

8

hits

int

10

0

N

N

0

点击数

9

praise_len

int

10

0

N

N

0

点赞数

10

recommend

int

10

0

N

N

0

智能推荐

11

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

12

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  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-3商品信息界面

      1. 医生预约模块

用户在登录状态下可以查看医生信息,在医生信息下方可以进行医生预约提交操作

医生预约界面如下所示。

图5-4医生预约界面

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

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

公告信息界面图如下所示。

图5-5公告信息界面

用户管理界面如下所示。

图5-6用户管理界面

      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]单树倩,任佳勋.基于SpringBoot和Vue框架的数据库原理网站设计与实现[J].电脑知识与技术,2021,17(30):40-41+50.DOI:10.14004/j.cnki.ckt.2021.2868.

[2]喻佳,吴丹新.基于SpringBoot的Web快速开发框架[J].电脑编程技巧与维护,2021(09):31-33.DOI:10.16184/j.cnki.comprg.2021.09.013.

[3]巢晟盛.基于SpringBoot微服务架构下前后端分离的MVVM模型浅析[J].电脑知识与技术,2021,17(23):128-129+141.DOI:10.14004/j.cnki.ckt.2021.2412.

[4]杨思涵.流浪动物相关法律与现实问题[J].法制博览,2021(14):154-156.

[5]邢月,喻德荣.简析流浪动物救助实践困境与路径优化[J].大众标准化,2021(04):71-73.

[6]罗雪樱,张云雁.流浪动物的法律保护研究——以宁夏为例[J].法制博览,2020(36):35-36.

[7]赵灿. 《宠爱》移动应用设计的研究[D].北京印刷学院,2020.DOI:10.26968/d.cnki.gbjyc.2020.000217.

[8]姜苏. 基于互联网平台解决社会流浪动物问题的可行性研究[D].山东农业大学,2020.DOI:10.27277/d.cnki.gsdnu.2020.001043.

[9]陈薇,刘梓媛,尹婷.新媒体背景下流浪动物救助微信公众号运营研究[J].现代营销(下旬刊),2020(05):85-86.DOI:10.19932/j.cnki.22-1256/f.2020.05.049.

[10]张雨彤,段娜,杨萌,宁旭,李昶宏.流浪动物导致社会问题的救济方式[J].法制博览,2018(12):136+135.

[11]蒋静,王冰洁.M仔:走在救助路上的爱心姑娘——腾讯公益项目“关爱生命,善待动物”探访纪实[J].中国社会组织,2018(04):50-52.

[12]楊陽,沈海濱,VCG.用心感受狗狗的脉搏[J].金桥,2018(02):38-41.

[13]王波,同雯,王梓昕,李子杰.基于APPCAN的流浪动物救助APP系统设计[J].电脑知识与技术,2018,13(36):76-77+79.DOI:10.14004/j.cnki.ckt.2018.3953.

[14]张秋雨.流浪动物救助实践困境与路径优化——基于四川省宜宾市的实证分析[J].法制与社会,2018(15):188-190.DOI:10.19387/j.cnki.1009-0592.2017.05.371.

[15] Jeev Aashraya - A leading Animal Protection and Care Organization to develop additional Shelters for stray Animals in India[J]. M2 Presswire,2018:

[16]Francis E. Hamilton. Leading and Organizing Social Change for Companion Animals[J]. Anthrozoös,2018,23(3):

致谢

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

我还要感谢我的父母,一直以来都非常支持和相信我,在精神和经济上给了我很多力量,如今我将毕业走上工作之路,终于能报答父母的养育教导之恩。还有我大学期间所有老师和全体同学,遇到问题时,这些老师同学总是无私地帮助我,真的非常感谢,我也会加油努力成长为一个有用的人。

请关注点赞+私信博主,免费领取项目源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW开发汽车发动机故障模拟器

LabVIEW开发汽车发动机故障模拟器 汽车发动机故障模拟器是一种电子培训系统&#xff0c;旨在指导初学者了解发动机的各种故障。有一些参数称为发动机故障&#xff0c;例如脏油、压缩不良、冷却液损失、润滑不良、散热器堵塞、火花爆震和火花塞磨损。任何系统在存在时都有一些缺…

分布式系统的事务处理:2PC与3PC的演化与挑战

在传统的单体应用中&#xff0c;事务管理相对较为简单&#xff0c;可以通过数据库事务来实现数据的一致性。然而&#xff0c;随着系统的拆分和分布式架构的应用&#xff0c;跨多个服务的事务操作变得更为复杂。这就引出了分布式事务的概念&#xff0c;它是保证分布式系统数据一…

io.netty学习(十二)Netty 工作原理

目录 前言 Netty 模型 代码示例 引入Maven依赖 服务端的管道处理器 服务端主程序 客户端管道处理器 客户端主程序 测试运行 总结 前言 上一篇文章我们对 Reactor 模型进行了详细的讲解&#xff0c;下面我们就来探究一下 Netty 模型&#xff0c;Netty 采用的就是 主从…

一章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统

简单明了&#xff0c;希望对于伙伴们有帮助&#xff01;&#xff01;&#xff01; 目录 一、使用ultraiso制作启动u盘 二、老毛桃制作winPE镜像 三、硬盘安装系统 等待完成即可 一、使用ultraiso制作启动u盘 第一步 双击打开ultraiso&#xff0c;点击文件->打开->选…

Navicat for Redis 功能介绍

Navicat Premium 版本 16.2在原本已很优秀的产品上新增了多个令人兴奋的新功能&#xff0c;其中最值得注意的是对 Redis 的支持。现在&#xff0c;Navicat 有一个特别针对 Redis 管理和开发的客户端——Navicat for Redis。它为用户提供了一个易于访问的界面&#xff0c;以可视…

花了3周理解的xgboost算法原理

文章目录 算法流程CART树最佳节点值最佳树结构 算法流程 先学决策树&#xff0c;再学随机森林&#xff0c;最后才来到xgboost。本以为如此平滑地过渡过来&#xff0c;会容易一些&#xff0c;没想到还是这么艰难。零零散散花了3周多的时间&#xff0c;看了好多文章的解释和阐述…

大数据从0到1的完美落地之Flume案例2

案例演示 实时采集(监听目录)&#xff1a;Spool File HDFS Spool 是Source来源于目录&#xff0c;有文件进入目录就摄取&#xff0c;File Channel将它暂存到磁盘&#xff0c;最终目的地是HDFS 即只要某个目录不断有文件&#xff0c;HDFS上也会同步到所有数据。 配置方案 [ro…

机器学习:基于逻辑回归对航空公司乘客满意度的因素分析

机器学习&#xff1a;基于逻辑回归对航空公司乘客满意度的因素分析 作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点…

前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容

前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13183 效果图如下&#xff1a; # cc-shopDialog #### 使用方法 使用注意&#xff1a; 该插件需引用…

【软件基础】面向对象编程知识总结

文章目录 前言一、面向对象要解决的问题1、 软件重用性差2、软件可维护性差3、不能满足用户需求 二、面向对象的基本概念三、面向对象的特征四、面向对象的要素五、面向对象的开发方法六、面向对象的模型1、对象模型2、动态模型3、功能模型 总结1、鸭子抽象类2、鸭子类3、鸭子动…

【Tableau案例】神奇宝贝属性及实力强弱|数据可视化

提前声明&#xff1a;神奇宝贝的数据分析仅供参考&#xff0c;不涉及对于神奇宝贝的各种评价&#xff0c;另外我是初学tableau&#xff0c;涉及到使用的tableau操作可能很简单&#xff0c;复杂的还掌握不熟练&#xff0c;之后会拿时间系统学习tabelau。 数据预处理 该数据集有…

电容笔和触控笔哪个好用?推荐平价好用的电容笔

实际上&#xff0c;电容笔和触控笔这两款笔最大的区别&#xff0c;就在于它的应用范围&#xff0c;一个是适用电容型屏幕&#xff0c;一个是适用电阻型屏幕。如果你想要一个与IPAD相匹配的电容笔&#xff0c;苹果的Pencil将会是一个很好的选择。实际上&#xff0c;平替的电容笔…

Java-API简析_java.lang.Throwable类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131367906 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

成都爱尔林江院长解析看懂验光单,掌握配镜“秘密”

想要更了解自己的“数据”&#xff0c; 想知道自己近视有没有增长&#xff0c; 该如何知道自己的度数呢&#xff1f; 到医院进行验光&#xff0c; 验光后得到的验光单&#xff0c;自己有仔细看过吗&#xff1f; 一串字母与数字&#xff0c;知道都代表着什么吗&#xff1f;…

警惕度量指标陷阱

本文首发于个人网站「BY林子」&#xff0c;转载请参考版权声明。 近日&#xff0c;某群有人发了领导制定的绩效考核指标&#xff1a; 对测试人员的工作成效进行考核&#xff0c;指标是发现的 Bug 的情况&#xff0c;甚至有参考指标细到每个小时要求发现多少 Bug&#xff0c;同时…

VUE L ClassStyle ⑦

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs C l a s s Class Class与 S t y l e Style Style绑定总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持…

scratch绘制正方形 少儿编程 电子学会图形化编程scratch编程等级考试二级真题和答案解析2023年5月

目录 scratch绘制正方形 一、题目要求 1、准备工作 2、功能实现 二、案例分析</

动态规划之下降路径最小和

1. 题目分析 题目链接选自力扣 : 下降路径最小和 如果光看这个题目说明的话, 是有点抽象的. 我们结合实例 1 来看 : 总的来说就是, 起始点是第一行中的任意一点, 每个点只有三个方向可以走即向下, 左下, 右下. 当到达最后一行的任意一点即算作到达终点. 期间不同的路径上不同…

mysql单机安装

准备工作 检测项 检测命令 标配值 服务器内存 free -m 32G 硬盘 df -h 1T seLinux getenforce Disabled&#xff08;disabled指关闭&#xff0c;Enforcing指开启 文件描述符大小 ulimit -n 65535 其他优化 Other Other 清理环境 卸载服务器自带…

佩戴比较舒适的蓝牙耳机有哪些?长久佩戴舒适的蓝牙耳机推荐

​听歌、刷剧、游戏&#xff0c;运动、吃饭、睡觉等&#xff0c;要说现在年轻人除了离不开手机之外&#xff0c;还有就是蓝牙耳机了&#xff01;当然&#xff0c;随着蓝牙耳机的快速发展&#xff0c;各种各样的蓝牙耳机都有&#xff0c;导致很多人不知道耳机怎么选了&#xff0…