摘 要
信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对个人健康信息管理系统等问题,对个人健康信息管理系统进行研究分析,然后开发设计出个人健康信息管理系统以解决问题。
个人健康信息管理系统主要功能模块包括系统用户、健康知识管理、病史记录管理、用药记录管理、监测信息管理、监测记录管理、病历记录管理、感受记录管理等功能,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取 Mysql 作为后台数据的主要存储单元,采用 Java技术、Ajax 技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、意义,为研究工作的合理性打下了基础。针对个人健康信息管理系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现个人健康信息管理系统和部署运行使用它。
关键词:Java开发语言;springboot框架;个人健康信息管理系统
Abstract
In the information society, there is a need for targeted information acquisition channels, but the expansion of these channels is basically the direction that people are striving for. Due to the deviation in their perspective, people often have access to different types of information, which is also the most difficult problem for technology to overcome. Research and analyze the personal health information management system to address issues such as personal health information management, and then develop and design a personal health information management system to address these issues.
The main functional modules of the personal health information management system include system users, health knowledge management, medical history record management, medication record management, monitoring information management, monitoring record management, medical record management, sensation record management, etc. The system adopts an object-oriented development model for software development and hardware installation, which can well meet the actual needs of use, improve the corresponding software installation and program coding work, Adopting MySQL as the main storage unit for backend data, using Java and Ajax technologies for business system coding and development, all functions of this system have been achieved. This report first analyzes the background and significance of the research, laying the foundation for the rationality of the research work. An analysis was conducted on the various requirements and technical issues of the personal health information management system, demonstrating the necessity and feasibility of the system. Then, a basic introduction was made to the technical software and design ideas required for designing the system. Finally, the implementation and deployment of the personal health information management system were discussed.
Key words:Java development language; Springboot framework; Personal Health Information Management System
目 录
致谢 37
- 绪论
- 研究背景与意义
随着我国经济的高速发展和互联网的飞速发展,人们生活质量明显提高,民众的自我保健意识也得到提高,人们日益关注自身健康问题,不同与传统的有病才去医院诊治的卫生服务模式,现在人们更注重健康生活疾病预防,即健康管理,人们需要可以实时监测自身健康状况并及时干预的新型医疗服务模式.在互联网时代发展的大潮流里,互联网+医疗健康也呈现出迅猛的发展势头,涌现出一批健康类软件应用,如春雨医生、好大夫、平安好医生等,此类应用主要为了方便用户预约挂号、在线问诊以及提供健康商城、健康新闻等资讯,这样用户通过移动终端设备实时与医生沟通,获得远程医疗服务,但这些应用有一定的缺陷,其尚不能根据用户历来健康数据情况形成持久的病历档案,且患者在各医疗机构看病相关数据都分散在各个机构中,医生不能对患者整体情况及时了解,对医生的诊断判定有一定的局限性,因此有必要建立针对用户个人的健康数据档案,用户可将每日测量健康数据记录起来,也可将在不同地方医疗机构看病或体检后的健康数据录入同一地方,形成用户个人历史健康档案,本个人健康管理系统解决了这个问题。
我国影响人群健康的疾病已从传染病向慢性非传染病转变,慢性病已经成为影响居民健康的主要问题.尤其是针对青年、中年人,生活工作压力的增大、还要应对各种社交场合,长期饮食作息不规律导致的高血压、糖尿病等慢性疾病,但慢性病是可以预防的,通过定期检查自身各健康指标,结合健康的饮食及作息时间,一旦某段时间身体健康指标出现偏差,及时调整,方能起到预防慢性疾病的作用,而健康管理正是利用互联网的便捷性、智能化的为人们提供健康指标记录、观察、预警、指导等功能,是预防慢性病的有效手段。
健康管理的每一个环节都离不开信息技术的支撑,从用户基本信息的录入,到体检结果的收集、传输,再到数据的分析、发布与管理,信息技术都起到了不可替代的作用。
在互联网进入医疗领域初期,随着健康信息技术(IT)基础设施的发展,许多医疗保健提供者采用了某种形式的电子病历系统.基于纸张的患者记录转换成电子档案形式,以电子健康记录(EHR)的形式存储在中央数据库中,从而能够通过因特网进行访问.随着我国互联网及信息化的发展,健康管理在可穿戴设备、移动医疗领域应用程序爆炸式增长,人们可以通过智能终端轻松获取血压、血氧饱和度、血糖等人体生理数据,对这些数据进行有效管理和利用,一种智能、可访问、通信安全的健康管理系统将成为未来发展的必然趋势。
-
- 项目背景
随着现代生活方式的改变和健康意识的提高,个人健康管理成为人们关注的焦点。个人健康管理系统旨在帮助人们更好地管理自己的健康状况、预防疾病和提升生活质量。然而,传统的健康管理方式往往依赖于纸质记录和手动计算,无法满足个性化、实时化的健康管理需求。因此,设计和实现一个个人健康管理系统具有重要的背景和意义。该系统将基于数字化和智能化的技术手段,为个人提供全面、便捷的健康管理服务,帮助人们跟踪健康指标、制定健康计划、获取健康知识和进行远程咨询。
首先,个人健康管理系统可以帮助个人跟踪和管理健康指标。通过与各种健康设备(如智能手环、血压计)的连接,系统可以自动收集和分析个人的身体数据,如心率、步数、睡眠质量等。个人可以通过系统查看自己的健康状况趋势,并根据健康指标制定相应的健康计划和目标。
其次,个人健康管理系统将提供个性化的健康建议和知识。根据个人的身体数据和健康目标,系统可以提供针对性的健康建议,如饮食调整、运动计划等。同时,系统还将提供健康知识库,包括常见疾病的预防、营养指导、健康生活方式等方面的信息,帮助个人获取健康知识和自我管理能力。
此外,个人健康管理系统还将支持远程咨询和在线预约服务。个人可以通过系统与医生或健康专家进行在线沟通和咨询,避免因时间和地域限制而无法得到及时的健康咨询。同时,个人还可以通过系统进行在线预约就诊和检查,提高就医效率和便捷度。
通过设计和实现个人健康管理系统,可以促进个人健康管理的数字化转型和智能化发展。个人可以方便地记录和管理自己的健康数据,及时了解自己的健康状况,并得到个性化的健康建议和咨询服务。这将有助于提高个人健康管理水平,预防疾病发生,改善生活质量。
早在上个世纪90年代,Java就由詹姆斯·高斯林进行开发,自诞生之日起,Java就一直深深的受到了程序开发者的广泛喜爱,它作为计算机主要的编程语言,一直到今。Java语言是真的是一种纯面向对象的计算机语言,在Java的世界中,所有的方法、数据类型、符号等都是以类的方式存在的,最顶层的就是Object,所有的类都是对object的继承。继承是Java中的核心思想,与C语言不同的是,子类只有一个父类,这样的好处就是操作更加的简便,让人更容易理解,在代码的书写上也会容易较多。Java另外一个特性就是多态性,调用父类接口的方法可以实现子类的实现,这样的好处就是很好的对实现方法进行了隐藏(封装),而且又能够把API进行公开,一举两得。接口思想很好的诠释了想象对象的思想,让面向对象编程渐渐转向面向接口编程。如今,随着编程思想的继续发展,Java也加入了一些函数式编程的思想,这样的好处就是让编程代码更加的简洁与方便。本管理系统采用Java编程语言进行后台的开发,一是鉴于标准化制定以后,Java语言常用于大型商业应用程序后台系统中,生态稳定;二是也希望通过本系统的开发提高自己编写Java代码的能力。
-
- springboot框架介绍
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。
数据库作为数据的存储地方是项目必须的,MySQL是一款非常优秀的关系型数据库,早期的Mysql并不是甲骨文公司的,后来才被他收购的。Mysql非常的小巧,安装包才几兆,sql语言的书写也比较容易学习,最重要的是mysql同时也是一款开源的软件,所以不需要额外进行付费,本系统本身也是以学习总结所学知识为主,在系统的开发上最好尽量使用免费的软件,所以选用mysql进行数据库管理。Mysql的容量也是非常大的,同时支持分库分表的操作,支持分布式,所以越来越多的中小企业选择该款数据库管理工具。另外值得一提的是,开源也有一个不好的地方,就是容易遭到破解和黑客攻击,所以mysql在使用上还是更多的使用在中小项目中。
为了迎合当今社会的现况,便于在市场中打开局面、占有一席之地;在大数据时代下,所有的信息化资源全部都是共享资源、为了长远性考虑,对此需要考虑如何推动整体的系统开发实现标准化。保证系统成功,所以就必须从效益、技术等上面做可行性报告研究。
-
-
- 操作可行性
-
个人健康信息管理系统的注册与登陆页面设计简洁容易应用,可以通过最常见的页面窗口来登录页面,并利用过计算机实现登录功能,因此使用者只要平时利用过计算机都可以实现登录应用。此操作系统的研发工作环境运用了Java技术,并运用了B/S结构,这些研发工作环境都使得此系统功能更为完整,使整个设计更为个性化,使用者功能也更为简洁方便。本个人健康信息管理系统具备了易于运行、容易管理、交互性较好的优点,在实际操作上也是非常简单的。因此,本个人健康信息管理系统也可进行商业设计。
综上所述,该设备的研发符合技术、工艺和技术要求,因此其研发具有可操作性。
-
-
- 技术可行性
-
技术可行性是指所确定的科学技术或决策方法中的科学技术均未突破组织掌握或相关人员熟悉的科学技术资源的界限。在技术研究过程中,应注意全面调查系统研发过程中包含的各种关键技术问题,尽可能选择成熟技术,认真引用先进技术,关注特定的研究平台和开发人员,评估关键技术的有效性。
Java技术对于该个人健康信息管理系统的设计和实施很是关键,基于B/S架构的和MySQL数据库管理,对于前台的应用和后台的数据库管理都是至关重要的,要想有效应用该程序,就需要保持功能全面、易懂易简单使用的特性。构建数据库管理时,需要确保数据分析信息完全、数据分析信息稳定性好、数据分析信息稳定性较高的库。在早期,人们对Java的基本重要知识点就有理解和熟悉,对MySQL数据库发生过简要的掌握、熟悉,在早期对软件工程测试,以及UML语言等基础课程发生过大致的掌握和练习,经过对上述课程练习,就能够对上述课程有相应的信息系统开发、检验和判断。
Java可以和MySQL结合起来研发一个个人健康信息管理系统,一定是合理而且有效的。
正因为本系统是在服务器的基础上开发的,系统开发成功以后,用户无需导航指导便可自己上手进行操作。系统一经开发测试后,在计算机移动客户端能上网的情况下,只需在浏览器里完成所有可用操作,也无需配置复杂的使用环境,只需一个网址便可进入系统。
-
- 系统功能需求
用户用例图如下所示。
图3-1 用户用例图
管理员用例图如下所示。
图3-2 管理员用例图
表3-1 公告浏览用例描述
描述项 | 说明 |
用例名称 | 公告查询 |
用例描述 | 用户可以查看公告的详情 |
参与者 | 用户 |
前置条件 | 使用者是普通用户类型并成功进入该系统 |
后置条件 | 浏览成功 |
主事件流 | (1)用户可以浏览公告的模块、公告的内容 (2)用户点击公告可以对公告进行详情阅读 |
异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-1 个人信息管理用例描述
用例名称 | 管理和修改个人信息 |
参与者 | 用户 |
描述 | 用户查看、修改个人信息 |
前置条件 | 用户已登录到系统中 |
后置条件 | 无 |
事件流 | (1)用户查看个人信息 (2)用户修改个人信息 |
补充说明 | (a)用户可修改密码 (b)用户可修改个人资料,例如姓名,头像等 |
表3-1 用户管理用例描述
描述项 | 说明 |
用例名称 | 用户操作 |
用例描述 | 管理员正确登录后台管理的条件下,对用户进行管理 |
参与者 | 管理员 |
前置条件 | 管理员登录成功并跳转到后台主界面 |
后置条件 | 操作成功 |
主事件流 | 管理员跳转用户管理页面,查询用户详情的信息 管理员可以删除用户信息 |
异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-1 健康知识管理用例描述
描述项 | 说明 |
用例名称 | 健康知识操作 |
用例描述 | 管理员正确登录后台管理的条件下,对健康知识模块进行管理 |
参与者 | 管理员 |
前置条件 | 管理员成功登录 |
后置条件 | 操作成功 |
主事件流 | (1)管理员进入健康知识管理页面,查询健康知识的信息 (2)管理员可以对健康知识进行增删除和编辑健康知识操作 (3)管理员新增健康知识,添加成功跳转到查询页面 |
异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-1 用药记录管理用例描述
描述项 | 说明 |
用例名称 | 用药记录操作 |
用例描述 | 管理员正确登录后台管理的条件下,对用药记录模块进行管理 |
参与者 | 管理员 |
前置条件 | 管理员成功登录 |
后置条件 | 操作成功 |
主事件流 | (1)管理员进入用药记录管理页面,查询用药记录的信息 (2)管理员可以对用药记录进行增删除和编辑用药记录操作 (3)管理员新增用药记录,添加成功跳转到查询页面 |
异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-1 体检记录管理用例描述
描述项 | 说明 |
用例名称 | 体检记录操作 |
用例描述 | 管理员正确登录后台管理的条件下,对体检记录模块进行管理 |
参与者 | 管理员 |
前置条件 | 管理员成功登录 |
后置条件 | 操作成功 |
主事件流 | (1)管理员进入体检记录管理页面,查询体检记录的信息 (2)管理员可以对体检记录进行增删除和编辑体检记录操作 (3)管理员新增体检记录,添加成功跳转到查询页面 |
异常事件流 | e1.报500错误 e2.数据库连接异常 |
表3-1 评论管理用例描述
描述项 | 说明 |
用例名称 | 评论操作 |
用例描述 | 管理员正确登录后台管理的条件下,评论模块进行管理 |
参与者 | 管理员 |
前置条件 | 管理员成功登录 |
后置条件 | 操作成功 |
主事件流 | (1)管理员进入评论管理页面,查询评论内容的信息 (2)管理员可以从用户评论中删除数据 |
异常事件流 | e1.报500错误 e2.数据库连接异常 |
-
- 系统性能需求
(1)友好界面:系统应具备友好的用户界面,简洁明了、易于操作和导航,提供良好的用户体验。
(2)稳定性要求:系统应具备高度的稳定性和可靠性,能够长时间稳定运行,不易出现系统崩溃或故障,确保用户数据的安全性和完整性。
(3)可扩展性:系统应具备良好的可扩展性,能够满足不断变化的用户需求和业务增长,支持灵活的功能扩展和模块添加,方便后续的系统升级和功能拓展。
(4)满足需求:系统应能够满足个人健康信息管理的核心需求,包括健康知识管理、病史记录管理、用药记录管理、监测信息管理、监测记录管理、病历记录管理、感受记录管理等功能。系统需要提供准确、实时、可靠的数据管理和查询服务,以满足用户对于健康信息的管理和参考需求。
层次框图是一系列由多层矩形框架组成的树,其顶部为矩形框架,表示整个数据结构,下方的长方形立方体表示独立的数据,下方的长方形表示该数据的实际数据(不能进行分割)。由于这个架构的精炼,层级方块图描述的资料结构也愈加详尽,这个模型很好地满足了需求分析的要求。首先对最上层的信息进行分类,然后在图表中的每个路径上重复地进行优化,直至完整的数据结构被确定。
这个系统由三个模块组成,一是管理员,二是普通用户、三是医生用户,这三个部分看起来是独立的,实际上却是连接着数据库,每个模块都有自己的权限,唯一不同的,就是访问的方式不同。在调研资料的基础上,完成了各个模块的功能。在对上述功能进行分析的基础上,本系统提出了三个主要的模块,每个单元可划分为若干小单元。
系统的功能结构图如下图所示。
图4-2 系统功能结构图
个人健康信息管理系统在前端设计采用多种技术交互使用达到界面简洁大方,使用Java作为系统的编译语言,对于之前的分析所产生的问题进行解决,功能模块设计后进行编码实现具体功能:
登录模块:使用者必须输入正确的账号与密码才能访问系统。
健康知识管理模块:管理者根据选择,可以给用户发布健康知识信息,在添加健康知识是输入健康知识的详细信息,添加需要上传的文件之后回到健康知识管理界面,在修改健康知识时修改不对的信息,也可以删除重新添加健康知识。
病历记录管理模块:相关权限用户可以进行病史记录信息的查询、添加、修改、删除操作,也可以对记录用户、用户姓名等数据项进行单独操作,设置数据类型等参数。
公告消息管理模块:本个人健康信息管理系统中的公告消息管理,管理方式都是对信息的三种基本操作:一种是完成公告消息信息的添加,在这里会对公告消息信息的录入情况来判断;一种是对公告消息信息的修改,另一种就是对公告消息信息的删除。其后两种操作都是要建立在第一种操作而生成的公告消息列表的基础上完成的。
个人健康信息管理系统总体ER图如下图所示。
图4-8 总体ER图
所有系统的应用数据相互区分。一旦在相应的系统中实现,它们将与自己相应的网络和服务器通信。所以这个系统可以连接这些数据。当我们选择桥梁截面时,以下将简要介绍如何建立系统。在单击上一个按键的时候,就会自动在对话框中弹出数据源的名字,之后再单击下一个按键时,就在填写相对应的身份验证和登录信息。按照系统功能设计的特点与职能模块的分类,个人健康信息管理系统的总体设计和实施过程一共涉及到了几个资料表格。
以下就介绍了一些根据各类别主要数据库表的设计结构以及基本功能建立数据库表:
表doctor_users (医生用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | doctor_users_id | int | 10 | 0 | N | Y | 医生用户ID | |
2 | doctors_name | varchar | 64 | 0 | Y | N | 医生姓名 | |
3 | doctors_gender | varchar | 64 | 0 | Y | N | 医生性别 | |
4 | doctors_mobile_phone | varchar | 64 | 0 | Y | N | 医生手机 | |
5 | doctors_age | varchar | 64 | 0 | Y | N | 医生年龄 | |
6 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
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 | 更新时间 |
表feeling_record (感受记录)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | feeling_record_id | int | 10 | 0 | N | Y | 感受记录ID | |
2 | record_users | int | 10 | 0 | Y | N | 0 | 记录用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | record_labels | varchar | 64 | 0 | Y | N | 记录标签 | |
5 | record_description | varchar | 64 | 0 | Y | N | 记录描述 | |
6 | mark_type | varchar | 64 | 0 | Y | N | 标记类型 | |
7 | record_date | date | 10 | 0 | Y | N | 记录日期 | |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表health_knowledge (健康知识)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | health_knowledge_id | int | 10 | 0 | N | Y | 健康知识ID | |
2 | knowledge_title | varchar | 64 | 0 | Y | N | 知识标题 | |
3 | knowledge_type | varchar | 64 | 0 | Y | N | 知识类型 | |
4 | knowledge_tags | varchar | 64 | 0 | Y | N | 知识标签 | |
5 | publish_doctor | int | 10 | 0 | Y | N | 0 | 发布医生 |
6 | release_date | date | 10 | 0 | Y | N | 发布日期 | |
7 | cover_photo | varchar | 255 | 0 | Y | N | 封面图片 | |
8 | knowledge_description | text | 65535 | 0 | Y | N | 知识描述 | |
9 | knowledge_details | longtext | 2147483647 | 0 | Y | N | 知识详情 | |
10 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
11 | praise_len | 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 | 更新时间 |
表medical_examination_records (体检记录)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | medical_examination_records_id | int | 10 | 0 | N | Y | 体检记录ID | |
2 | record_users | int | 10 | 0 | Y | N | 0 | 记录用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | medical_examination_title | varchar | 64 | 0 | Y | N | 体检标题 | |
5 | record_labels | varchar | 64 | 0 | Y | N | 记录标签 | |
6 | physical_examination_items | varchar | 64 | 0 | Y | N | 体检项目 | |
7 | physical_examination_date | date | 10 | 0 | Y | N | 体检日期 | |
8 | physical_examination_results | text | 65535 | 0 | Y | N | 体检结果 | |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表medical_history_records (病史记录)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | medical_history_records_id | int | 10 | 0 | N | Y | 病史记录ID | |
2 | record_users | int | 10 | 0 | Y | N | 0 | 记录用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | medical_history_title | varchar | 64 | 0 | Y | N | 病史标题 | |
5 | record_labels | varchar | 64 | 0 | Y | N | 记录标签 | |
6 | record_date | date | 10 | 0 | Y | N | 记录日期 | |
7 | record_content | text | 65535 | 0 | Y | N | 记录内容 | |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表medical_record (病历记录)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | medical_record_id | int | 10 | 0 | N | Y | 病历记录ID | |
2 | record_users | int | 10 | 0 | Y | N | 0 | 记录用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | case_title | varchar | 64 | 0 | Y | N | 病例标题 | |
5 | case_labels | varchar | 64 | 0 | Y | N | 病例标签 | |
6 | record_date | date | 10 | 0 | Y | N | 记录日期 | |
7 | case_description | varchar | 64 | 0 | Y | N | 病例描述 | |
8 | case_content | text | 65535 | 0 | Y | N | 病例内容 | |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表medication_records (用药记录)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | medication_records_id | int | 10 | 0 | N | Y | 用药记录ID | |
2 | record_users | int | 10 | 0 | Y | N | 0 | 记录用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | medication_title | varchar | 64 | 0 | Y | N | 用药标题 | |
5 | medication_labels | varchar | 64 | 0 | Y | N | 用药标签 | |
6 | medication_date | date | 10 | 0 | Y | N | 用药日期 | |
7 | medication_content | text | 65535 | 0 | Y | N | 用药内容 | |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表monitoring_information (监测信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | monitoring_information_id | int | 10 | 0 | N | Y | 监测信息ID | |
2 | monitoring_doctors | int | 10 | 0 | Y | N | 0 | 监测医生 |
3 | doctors_name | varchar | 64 | 0 | Y | N | 医生姓名 | |
4 | monitoring_users | int | 10 | 0 | Y | N | 0 | 监测用户 |
5 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
6 | monitoring_date | date | 10 | 0 | Y | N | 监测日期 | |
7 | monitoring_title | varchar | 64 | 0 | Y | N | 监测标题 | |
8 | monitoring_tags | varchar | 64 | 0 | Y | N | 监测标签 | |
9 | monitoring_content | text | 65535 | 0 | Y | N | 监测内容 | |
10 | doctors_advice | text | 65535 | 0 | Y | N | 医生嘱咐 | |
11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表monitoring_records (监测记录)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | monitoring_records_id | int | 10 | 0 | N | Y | 监测记录ID | |
2 | monitoring_doctors | int | 10 | 0 | Y | N | 0 | 监测医生 |
3 | doctors_name | varchar | 64 | 0 | Y | N | 医生姓名 | |
4 | monitoring_users | int | 10 | 0 | Y | N | 0 | 监测用户 |
5 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
6 | monitoring_date | date | 10 | 0 | Y | N | 监测日期 | |
7 | monitoring_title | varchar | 64 | 0 | Y | N | 监测标题 | |
8 | monitoring_tags | varchar | 64 | 0 | Y | N | 监测标签 | |
9 | monitoring_content | text | 65535 | 0 | Y | N | 监测内容 | |
10 | doctors_advice | text | 65535 | 0 | Y | N | 医生嘱咐 | |
11 | record_date | date | 10 | 0 | Y | N | 记录日期 | |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表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 | 更新时间: |
表regular_users (普通用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | users_mobile_phone | varchar | 64 | 0 | Y | N | 用户手机 | |
5 | user_age | varchar | 64 | 0 | Y | N | 用户年龄 | |
6 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp |
用户登录的验证将不再局限于登录信息和权限的匹配验证,而是另外增加了一个验证码,只有界面上所有的编辑框数据都准确的情况下才能实现登录成功。管理员的登录和前台用户登录是一样的过程,其主要就是利用权限字段来完成对用户或管理员的角色识别。
用户登录流程图如下所示。
图5-1 用户登录流程图
登录界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/5cb5bc8723bc4ddf91d437ea3f13c66f.png)
图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.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
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());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
// 返回用户信息
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, "账号或密码不正确");
}
}
注册的本质是后台拿到前台的数据,使用的方法是request.getParameter方法,然后拿到的数据再封装到会员实体类中,保存到数据库中。值得注意的是,注册的时候是需要输入合法的字符的,不合法那么则会进行红色报错,这个功能的实现是通过validate框架实现的,本质是封装好了的正则表达式。
用户注册流程图如下所示。
图5-3用户注册流程
用户注册界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/9c602cf0de534a7cba0f447a7b027dd6.png)
图5-4 注册界面
注册逻辑代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
-
-
- 密码修改模块的实现
-
用户使用该个人健康信息管理系统注册完成后,用户对登录密码有修改需求时,系统也可以提供用户修改密码权限。系统中所有的操作者能够变更自己的密码信息,执行该功能首先必须要登入系统,然后选择密码变更选项以后在给定的文本框中填写初始密码和新密码来完成修改密码的操作。在填写的时候,假如两次密码填写存在差异,那么此次密码变更操作失败,下面的图片展示的就是该板块对应的工作面。
密码修改流程图如下所示。
图5-5 密码修改流程图
密码修改界面如图所示。
![](https://i-blog.csdnimg.cn/direct/b1a8d006b18549f5ae47641b2517aa88.png)
图5-6 密码修改界面
-
-
- 健康知识收藏模块的实现
-
用户选择相应的健康知识收藏,通过id传参,找到id为此传参的健康知识,在收藏页提交收藏记录表单,生成收藏记录,用户在个人中心管理个人的收藏夹。
健康知识收藏界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/2696499179cb4a29a6c26ceb4ebc963c.png)
图5-7 健康知识收藏界面
用户点击某个健康知识进入健康知识详细页,点击评论按钮进入评论页,提交评论信息,成功发布评论,管理员管理用户的评论信息。
发布评论流程图如下所示。
图5-8 发布评论流程图
发布评论界面如图所示。
![](https://i-blog.csdnimg.cn/direct/baaed1c40a2e4ca1888d62eab7f655a1.png)
图5-9 发布评论界面
用户信息管理与账号管理相比更侧重对个人信息的管理,如年龄,电话,性别等,管理员可以对此部分信息进行增删改查,相应的会改变数据库存储的数据。
用户管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/cf1515a7c01f492cb005546723a216de.png)
图5-10用户管理界面
用户管理关键代码如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
管理员执行健康知识管理,并可以操作相关内容,例如添加,查看,编辑和删除。通过单击“添加健康知识”,可以通过健康知识添加界面添加详细信息并添加健康知识注释。单击查看字段级别链接以查看有关所选字段级别的信息。然后单击“提交”跳转重返到添加页面。添加成功后的信息会载入到健康知识查询列表中,管理员可进行编辑以及修改。
健康知识管理流程如下图所示。
图5-11 健康知识管理流程
健康知识管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/13ad1bea8588473a835771337c8f31ec.png)
图5-12 健康知识管理界面
健康知识管理关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
-
-
- 感受记录管理模块的实现
-
在主页左侧菜单栏中点击“感受记录管理”按钮,再从二级目录中点击“新增感受记录”按钮,进入到新增感受记录界面。在此处感受记录可以添加感受记录的记录用户、用户姓名、记录标签、记录类型、标记类型。
在主页左侧菜单栏中点击“感受记录管理”按钮,再从二级目录中点击“查询感受记录”按钮,进入到查询感受记录界面。在此处感受记录可以查询当前所有感受记录记录。
感受记录管理流程如下图所示。
图5-13 感受记录管理流程
感受记录管理界面如所示。
![](https://i-blog.csdnimg.cn/direct/dcaeb3d50f8548599d214840961bb43e.png)
图5-14 感受记录管理界面
感受记录管理关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
-
-
- 体检记录管理模块的实现
-
体检记录管理包括新增体检记录、删除体检记录、修改体检记录、查询体检记录等,以体检记录新增为例,在视图层请求体检记录信息新增,反馈后,调用业务逻辑层,通过业务逻辑层的接口调用底层的数据逻辑层完成数据库联动操作。
体检记录管理的流程如所示。
图5-15体检记录管理流程
体检记录管理界面如所示。
![](https://i-blog.csdnimg.cn/direct/84ba8b50e75c496aba3e7ea888c13a51.png)
图5-16 体检记录管理界面
对每个用源码进行的单元检测,以验证每个单元能否正常地执行预先设定的函数。在进行单元代码编写的过程中,采用了详细的编程指导,并通过关键的数据界面和路线的检测来检测模块中的缺陷。该试验使用了每个由源码所完成的程序,并按照程序的内部构造来进行测试,以检验各个程序的功能。
集成测试是对单位试验的延伸。装配好的试验组件,并对相关的设计进行软件体系结构的检测。其具体实施方法为:将两个以上的单元模块合并为一个部件进行试验,并进行界面的调试。针对具体的试验,采用了不同的模块整合方法。而将模组转换为体系的方式有两种:一次整合与一次繁殖整合。
浏览器兼容性问题:随着ES6标准的制定,目前主流的浏览器都是符合ES6标准的,尤其是以谷歌为核心的内核,然后IE浏览器的相对于早期的版本是使用的微软人家自己的内容,对信息的兼容性产生影响。测试结果表明,目前的主要浏览器包括谷歌,IE,360,火狐浏览器最近的版本的运行都是没有问题的,状态良好,就是使用IE的早期版本有会有图片展示问题,通过对代码的修改,进行了改善,所以总的来说浏览器兼容性是没有问题的。
JDK、tomcat等兼容性问题。JDK这里使用的1.8的版本,tomcat是springboot自动搭配的9.0版本,mysql是5.5版本,自己尝试了使用1.7以上的版本的JDK,是可以的,1.7以下的版本不兼容。Mysql版本如果出现冲突,需要更改配置文件中的类信息,tomcat兼容性较好,8版本以上都兼容。
-
- 测试用例
(1)登录测试
登录测试用例如下表所示。
表6-1 登录测试用例
测试用例编号 | YL_01 | |
测试用例名称 | 系统使用者登录 | |
测试用例描述 | 登录者输入用户名、密码和验证码 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
输入正确的用户名、密码和验证码 | 提示“登录成功”,并进入系统 | 预期结果 |
输入错误的用户名、密码和验证码 | 提示“登录失败”,并返回登录界面 | 预期结果 |
不输入用户名、密码和验证码 | 提示“请输入完整” | 预期结果 |
注册测试用例如下表所示。
表6-2 注册测试用例
测试用例编号 | YL_02 | |
测试用例名称 | 系统使用者注册账号 | |
测试用例描述 | 使用者输入用户名、密码以及个人信息进行账号注册 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
输入系统不存在的用户名、密码和个人信息 | 提示“注册成功” | 预期结果 |
输入系统已存在的用户名 | 提示“注册失败”,并返回注册界面 | 预期结果 |
不输入用户名、密码和个人信息 | 提示“请输入完整” | 预期结果 |
新增资讯测试用例如下表所示。
表6-3 新增资讯测试用例
测试用例编号 | YL_04 | |
测试用例名称 | 系统使用者进行新增资讯 | |
测试用例描述 | 使用者输入资讯标题、内容等信息 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
输入完整的资讯标题和内容 | 提示“新增成功”,并进入系统 | 预期结果 |
不输入的资讯标题和内容 | 提示“请输入完整” | 预期结果 |
在本次测试的过程主要针对所有功能下的添加操作,修改操作和删除操作,并以真实数据一一进行相关功能项目的输入,最终能够保证每个项目涉及的功能都是能够正常运行,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。
结 论
个人健康信息管理系统的设计和实现对于提升个人健康管理的效率和便捷性具有重要意义。通过友好界面、稳定性要求、可扩展性和满足需求等系统性能需求的满足,可以提供良好的用户体验,确保系统的稳定运行,并满足用户对个人健康信息管理的核心需求。该系统的友好界面将使用户操作简单直观,提供良好的用户体验,增加用户的使用乐趣和积极性。稳定性要求的满足将确保系统长时间稳定运行,减少故障和崩溃的风险,保护用户数据的安全性和完整性。系统的可扩展性将使其适应不断变化的用户需求和业务增长,支持功能扩展和模块添加,为后续系统升级和拓展提供便利。
最重要的是,个人健康信息管理系统应能够满足用户对个人健康信息管理的核心需求,包括系统用户、健康知识管理、病史记录管理、用药记录管理、监测信息管理、监测记录管理、病历记录管理、感受记录管理等功能。系统需要提供准确、实时、可靠的数据管理和查询服务,帮助用户更好地管理个人健康信息,提供参考和决策支持。
个人健康信息管理系统的设计和实现将为用户提供便捷、高效的个人健康管理服务,满足用户对个人健康信息的管理和参考需求。通过系统的友好界面、稳定性要求、可扩展性和满足需求等系统性能需求的满足,可以实现系统的高效运行和用户满意度的提升,进一步促进个人健康管理的发展。
参考文献
[1]吴昊,张丹. 基于SpringBoot框架的大学生网上兼职系统设计与实现 [J]. 电脑知识与技术, 2023, 19 (35): 68-72.
[2]苏婉怡,揣小龙,刘美瑜等. 基于Java技术的实验室管理系统设计与实现 [J]. 无线互联科技, 2023, 20 (23): 58-60.
[3]李冉,杨军,宁玉富等. 基于SpringBoot框架和CNN-SVM算法的浸润性肺腺癌细胞的初步诊断筛选系统 [J]. 无线互联科技, 2023, 20 (22): 58-61.
[4]田玉昆. 基于Java Web技术的手机销售网站的设计与实现 [J]. 电脑知识与技术, 2023, 19 (32): 47-49.
[5]陈方元. 个人健康信息管理实践调查与分析——基于国内外比较的视角 [J]. 兰台世界, 2023, (07): 22-27.
[6]Yitao C ,Linhua W . Towards Designing Personal Health Information Management System Based on Java [J]. Mobile Information Systems, 2021, 2021
[7]高志平. 基于SpringBoot框架与ITIL方法的运维管理系统的设计与实现[D]. 华东师范大学, 2021.
[8]Pravin P ,Neeraj P ,Sameer S , et al. eHealthChain-a blockchain-based personal health information management system. [J]. Annales des telecommunications, 2021, 77 (1-2): 11-13.
[9]郑在勇,胡厚祥,王小波等. 一种个人医疗健康信息管理系统及其方法[P]. 四川省: CN112967774A, 2021-06-15.
[10]赵郑,段小霞,于言言等. 一种利用区块链网络的个人医疗健康信息管理系统[P]. 北京市: CN112732030A, 2021-04-30.
[11]陆鹏,葛嵩韬,吴响等. 基于ZigBee的个人健康信息管理与隐私保护系统设计 [J]. 计算机测量与控制, 2021, 29 (04): 170-174.
[12]邹凯,刘阳,刘钊等. 中美比较视野下我国个人健康信息管理的现状、问题及对策 [J]. 图书馆, 2020, (09): 92-97.
[13]刘东. 基于MVC模式的个人健康管理系统 [J]. 电子技术与软件工程, 2019, (06): 169-170.
[14]贾顺贺. 基于Java EE平台的个人健康信息管理系统设计与实现[D]. 南京邮电大学, 2019.
[15]贾顺贺,陈建飞,陈古运等. 基于MVC架构的个人健康信息管理系统设计与实现 [J]. 计算机应用与软件, 2019, 35 (03): 43-48.
[16]Neyens M D ,Childers K A . Determining Barriers and Facilitators Associated With Willingness to Use a Personal Health Information Management System to Support Worksite Wellness Programs [J]. American Journal of Health Promotion, 2019, 31 (4): 310-317.
[17]石刚, 个人健康信息管理与服务系统. 辽宁省, 中国科学院沈阳自动化研究所, 2019-12-01.
致 谢
在完成个人健康信息管理系统的论文过程中,我经历了许多辛勤的努力和付出,感谢所有在这个过程中给予我帮助和支持的人们。首先,我要衷心感谢我的导师,感谢您不厌其烦地指导我、解答我的问题,在我设计过程中给予了宝贵的意见和建议。您的支持和鼓励是我前进的动力。同时,也要感谢所有为我授业解惑的老师们,您们传授给我知识和技能,让我能够顺利完成这篇论文。您们严谨的治学态度和专业的知识为我树立了榜样。
我还要感谢那些在Java技术领域做出杰出贡献的学者们,他们的著作和科研成果为我提供了重要的参考和借鉴。感谢Google等搜索引擎公司,他们强大的搜索引擎让我能够方便地查阅资料,节省了我的时间和精力。最后,我要诚挚地向批评和指正我的老师表示感谢。虽然我在本文中尽力去避免错误和不当之处,但由于我的学识有限,难免存在一些问题。我真诚希望您能给予批评和改正的指导,让我能够不断进步。
再次感谢所有为我付出过的人们,是你们的帮助和支持让我能够完成这篇论文。谢谢大家!
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~