🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
摘 要
互联网的组成离不开各种各样的服务软件,每个服务软件都针对不同的人群实现不同的功能。采用当前互联网最成熟的技术解决特定的问题,是一个大的趋势。针对当前社区宠物相关信息的处理流程,设计一款社区宠物管理与服务系统这款操作难度低,可以解决社区宠物信息处理的相关问题的软件则是很有必要的。
该系统使用Java语言和SSM框架等技术实现编程,数据库使用到了MySQL数据库。系统的主要功能包括自愿者管理,宠物不良记录管理,宠物健康状况管理,物资捐赠管理,宠物医院管理,流浪动物管理,举报信息管理,使用说明管理等功能。
社区宠物管理与服务系统不仅可以提高社区宠物相关信息的处理效率,规范社区宠物管理操作流程,保证社区宠物相关信息安全,是一款非常有用的程序。
关键字:社区宠物管理与服务系统,Java语言,SSM框架
第一章 绪论
1.1选题背景
信息社会就是一个不断的产生信息并且信息量也在以几何数级的增长的社会,每时每刻都在产生大量的数据,而如此众多的数据如果需要寻找一些相关数据保存起来,并且把数据处理到自己想要的程度,那只能采用计算机的编程技术来开发一个符合当前生产需要的一款软件。因为面对的需求不同,每个行业甚至是每个公司以及每个人,面对的对象不一样,需要的数据也不一样,所以产生了各种各样的软件,软件行业就是变成了通用性软件以及定制化软件。定制化软件可以完全符合需要的流程操作,并且完美贴合实际需求,通用类型软件基本上是一个大杂烩,里面各种各样的功能都有,并且大部分都使用不到,体积庞大又臃肿。在这样的背景下,针对社区宠物信息的管理,用极小的代价来开发一款社区宠物管理与服务系统就可以在业务匹配度上达到最高,并且能极大的提高相关的信息处理效率,对社会的节能减排也会做出贡献,这也是当前社会的发展主流。社区宠物管理与服务系统可以把相关数据通过网络形式进行备份,并且可以加密,还可以把服务器放到任何自己想要的位置,可以放到云服务商提供的云服务器上面,也可以自己搭建到自我感觉安全的地方,可以对社区宠物管理与服务系统的数据实现完美掌控。
1.2选题意义
对于社区宠物信息的管理,一方面要求提高信息处理效率,一方面又要求降低信息处理成本,并且维护信息处理流程要变得清晰且透明,那么只能采用当前社会的最前沿的信息处理标准,就是开发一款社区宠物管理与服务系统。当开发了社区宠物管理与服务系统后,信息的录入变得更加清晰,可以专门对一些需要录入信息的角色开发信息录入的权限,并且录入后可以查看录入的效果,对需要进行处理的流程以及汇总权限可以单独设置。当一切可以设计的权限以及角色的形成,就可以设定相关的信息处理流程,设定好后,在专门的社区宠物管理与服务系统里面,数据就是按照设定的要求以及格式来进行传递,可以极大的降低人为出错几率,并且哪个环节出错也可以及时的发现,数据可以完美的备份并且可以及时的查询汇总,基本上实现了想到就可以查到的结果。社区宠物管理与服务系统的实现是非常的有意义的,有那么多的好处,对比传统信息处理水平可以说是不可同日而语。
1.3研究内容
本文从以下六个章节来介绍系统。
第一章:从选题背景意义的角度来介绍为何要开发本系统。
第二章:从开发系统的环境的角度来介绍系统的数据库,开发工具等内容。
第三章:从系统功能分析的角度来介绍系统的功能,从非功能分析的角度来分析系统的性能。
第四章:从设计的数据库,设计的系统功能的角度来进行介绍。
第五章:从实现的功能界面来展示系统的实现成果。
第六章:从系统的功能测试方面来检测系统的运行情况。
第二章 开发环境
2.1 IDEA开发工具
IDEA是一款集成式的开发工具,诞生于欧洲中部的一个名字叫捷克的国家,目前这款IDEA被行业大部分人成为最好用的工具。IDEA的开发人员刚开始也是用的开源的Eclipse开发工具,可以这么说,只要学习Java的都用过Eclipse开发工具,这是因为Eclipse是开源免费的,不管是各种盈利性机构还是非营利性机构都可以无偿使用,因为开源,所以有很多人贡献各种原版的Eclipse无法提供的插件,用起来的确有点不尽人意,于是捷克的程序员自己研发了IDEA这款软件。IDEA的好处不能仅仅拿出来说,需要有对比的,没有对比就没有人能感觉到IDEA的好处所在。IDEA集成了各种插件,并且有很多版本,总有一款适合你。IDEA有个智能选取的功能,如果用Eclipse来做,需要手动选取某些代码,用鼠标进行选取,有时候会多一行有时候会少一行,全靠眼力劲,对于代码里某个方法的边界不清楚的话,选取的过程会让人头大,IDEA就不用这么麻烦,IDEA可以用默认的Ctrl+W快捷键对某些实现方法的选取,并且可以逐步扩大,有效的避免了人为一行一行的选择,可以站在更高的层次来观看代码运行,提高了开发效率。
2.2 MySQL数据库
只要学习数据库的人肯定需要学习关系型数据库,而关系型数据库则会有几种选择,比如有的人学习的是微软的SQL Server数据库,有的人学的是Oracle数据库,有的人学习的是MySQL数据库,这三个数据库是学习初期都差别不大,都是先从SQL规范开始学习的,并且逐渐的他们的语法有了一些区别而已。选择使用MySQL数据库主要原因就是它身材的小巧,占地方小,只需要几百兆的磁盘安装空间即可,这对于自己使用的电脑来讲,像Oracle或者SQL Server数据库占地好几个G的空间是自己电脑无法带动的,就像小马拉大车一样吃力。问题是MySQL的小巧并不会让功能小巧,功能还是足够使用的。MySQL不仅仅是小巧功能强大,还有一个最重要的就是开源免费,只要不是用来做商业程序谋利益,那么完全不必担心版权问题,可以尽情的使用它的所有功能。市面上所有已知的操作系统平台都是支持MySQL数据库的,所以不用担心数据库的后续迁移问题,完全可以从开发电脑都后续平台的无缝迁移。
2.3 Java语言
Java语言是可以做很多种类型的程序的,Java不仅仅是一种语言,也是一种平台,也就是说,只要可以运行Java虚拟机的地方,Java语言开发的程序都可以运行。现在市面上主流的都是各种类型的电脑,比如笔记本或者台式机,以及各种平台的服务器,可手持移动终端等电子设备,这些设备上只要可以安装Java的虚拟机,就可以运行相应的Java程序。好多年以前的诺基亚手机,里面的贪吃蛇或者俄罗斯方块,当启动游戏的时候都会有个Java界面,也就是说Java是可以做类似于窗口式的应用程序的。对于可以使用浏览器的用户来讲,访问任何的网页都不会感觉到网站具体是用的Java还是其他语言进行开发的,但是真的很多企业使用的专业软件就是用到了Java语言,尤其是对安全有一定要求的企业。Java语言的安全在于几个方面,首先就是对于文件的类可以自由定制,在源头就让代码有了执行边界。其次就是运行在服务器上面的程序文件都是编译后的让虚拟机直接执行翻译的语言,并且可以在编译的时候对文件进行加密,也就是拒绝反编译,当有黑客进入某些服务器,也不能看到代码的运行逻辑,因为反编译无效。Java语言的安全性是不用质疑的,要相信Java语言的开发者是比我们普通的程序员考虑问题会更全面的。
2.4 SSM框架
SSM框架是三个框架的总称缩写,内容很多,原理也很复杂,所以这里只能写一些这三个框架的作用。在这几年,SSM框架是依然在Java Web领域独领风骚的框架。Spring框架主要是控制反转和注入依赖,主要是减少开发过程中对数据库操作的重复性配置和依赖;Spring MVC框架主要是对开发过程的一个分离,让前端页面获取到相应的参数;MyBatis框架主要做数据库数据类型与Java的对象类型的自动转换和数据操作步骤。三个框架分工合作,在程序开发的过程中会更快捷和方便。
第三章 系统分析
开发社区宠物管理与服务系统需要分析系统的功能,并且制定系统的结构,对数据库进行设计和规划,对社区宠物管理与服务系统进行代码的编写和测试。在这里面的系统分析中,最主要做的就是对功能的分析。
3.1可行性分析
可行性分析一般是在项目开发之前就需要进行分析的步骤,是非常科学的一个环节。技术角度是从可实现角度来分析的,经济角度直接绝对是否能承受这样的开发,操作角度上面分析是否能设计符合操作要求的设计,这些都是科学的可行性分析。
(1)技术可行性
能否实现的第一个前提是先看市面上有没有相关可以实现要求的技术条件,如果没有相关条件是否自己能创造相关的实现技术。本设计所需要的技术市面上已经有成熟的案例,所以技术上可行性是可以实现的。
(2)经济可行性
经济条件不太宽裕,但是实现技术是开源并且是免费的,学习上也学习过,开发设备用自己的电脑即可实现,也就是说不需要额外的考虑经济上面的投入即可开发当前设计,经济上是可行的。
(3)操作可行性
操作上面要求符合大众的直觉认知,不需要反人类设计,颜色搭配符合视觉审美,尽量不产生视觉疲劳操作,页面符合大众认知,操作是可行的。
社区宠物管理与服务系统通过三个重要环节的分析是可以实现的。
3.2功能需求分析
社区宠物管理与服务系统具有多个操作主体,分别有管理员,自愿者,用户。各个角色可供操作的系统功能不一样,其操作的功能可以通过用例图展示。
管理员用例图见图3.1。其中管理员需要管理自愿者信息,宠物健康状况信息,宠物医院,宠物不良记录信息,流浪动物信息,社区交流信息,物资捐赠信息,使用说明信息以及举报信息等。
图3.1管理员用例图
自愿者用例图见图3.2。自愿者主要参与管理流浪动物信息以及管理社区交流信息,查看宠物信息,查看举报信息,查看宠物医院等。
图3.2 自愿者用例图
用户用例图见图3.3。用户对通知公告,使用说明,流浪动物,宠物医院,物资捐赠信息只有查询和查看的权限。用户需要在个人中心模块发布宠物信息,发布举报信息以及发布宠物接种疫苗信息。
3.3非功能性需求分析
分析系统的功能主要以用户需求为核心,而与功能需求分析同等重要的非功能需求分析则关系着系统整体在后期能否投入市场运行使用。所以,在分析阶段,全面分析系统的非功能性需求也是非常重要的分析内容。
(1)性能需求
系统在运行期间,一般都是与用户进行数据交互,所以稳定可靠的运行是前提条件。试想而知,如果一个系统总是在运行期间卡机或者用户稍微提交数据就出现崩溃等现象,那么该系统则会流失许多用户,很容易在短时间内被淘汰。另外,还有一个性能要求就是每当接收用户的操作请求时,比如修改具体某个数据,或者添加某条新的数据等操作请求,系统响应时间不能太长,一定要在用户能够承受的范围及时响应。同时系统也应该对用户的修改数据操作以及录入数据操作有一定的纠错机制,可以及时提醒用户补充漏填数据或者重新更新错误的数据输入,引导用户能够正确的操作系统。对于本系统的功能展示,应该合理布局,切记颜色搭配混乱,界面的设计应该遵循大方,友好,简洁的设计原则,这样可以降低初次使用系统的用户的培训难度。
(2)安全性需求
本系统的功能与保存的数据相互独立,相互依赖,但是用户通过前端的功能界面输入了太多类型的数据,这些数据不乏有用户的密码,用户的身份信息,用户的个人资料等,如果系统存在安全漏洞,则很容易泄露系统的关键数据,试想而知,一个系统连关键的数据都确保不了安全,那么这个系统跟报废的系统有啥区别。所以,对系统的安全,可靠也提出了重要的要求。
①鉴于系统的体系结构属于B/S结构,用户输入的数据主要是通过浏览器录入,最后数据会保存在数据库中,期间,这些数据主要是通过网络传输,因此,如果网络传输的过程没有安全保证,那么很容易数据就会在传输的中途被人窃取或泄露,所以,按照加密机制和标准把数据在网络传输过程中加密也是一种安全手段。同时,为了确保数据库的数据可靠,完整,就有必要在固定时间内进行数据备份,这样在遇到系统突发的故障时,也不用担心数据丢失,可以及时使用备份的数据进行数据恢复,降低系统故障产生的损失。
②用户的权限设置一定要合理,不同权限对应的菜单栏和数据项都不一样,因此每个用户必须完善填写个人信息,并实名认证,防止出现越级操作现象。
③系统无论在任何时候,都要以保证所有业务正常进行为前提,哪怕中途出现故障,也不能影响系统的整体使用,而系统针对各种故障,也应短时间内采用针对性的解决方案及时排除故障,恢复系统正常使用。
3.4系统流程分析
(1)系统操作流程如图3.5所示。
图3.5 操作流程
社区宠物管理与服务系统的工作流程大致为先登录系统,筛选出合法用户,然后展示给合法用户相对应的功能操作界面。
(2)添加信息流程如图3.6所示。
图3.6 添加信息流程
用户进入数据录入界面时,要避免录入非法字符,虽然系统会自动判断数据的合法性,但是也需要用户提交数据前,大致检查一下录入的数据。
(3)修改信息流程如图3.7所示。
图3.7 修改信息流程图
人为的录入数据难免会出现一些错别字或者表达的信息比较模糊的数据,这时采用系统提供的修改功能即可更正有误数据。
(4)删除信息流程如图3.8所示。
图3.8 删除信息流程
用户使用系统的删除功能可以帮助清理社区宠物管理与服务系统的无用数据,让社区宠物管理与服务系统可以快速瘦身,变得更轻盈。
第四章 系统设计
系统需要一个科学的设计,要符合操作人员的正常认知,不要产生违反操作逻辑出现的设计流程,尽量把业务处理逻辑理清弄通,让操作人员使用起来稍加熟悉就能上手操作。
4.1系统设计思想
当进入到系统设计阶段,就需要有一个清晰的认知,就是如何统一设计思想,从哪些方面进行考虑,如何统一,要求有哪些,这些都会影响系统设计,以下将描述本设计的系统设计思想。
(1)扩展性:需求大部分都是在变化的,但是有些相关的需求类型是没有变化的,如果设计一个程序耦合性太高,那将不利于程序的后续扩展,尽量的把系统设计的抽象化,这样如果需要扩展某些功能,只需要重新编写或者修改相关功能模块就行,不需要对程序的重新设计和编写,这就是程序的扩展性设计要求。
(2)实用性:不管程序设计的如何抽象,最终让用户使用的过程必须符合操作流程的,也就是说实用性要高,用户需要的数据要符合用户的认知数据,尽量把常用的功能放到一个模块里面,程序的操作顺序符合从上而已,从左而右的操作规范,让操作人员在使用过程中不会太反感,实用性能大大的增加。
(3)安全性:安全性从数据的安全性和软件的安全性来进行考虑。数据安全性要对数据进行备份操作,尽量让数据不要单独的存放,这是物理角度的对数据的安全性考虑。软件的安全性尽量使用用户在浏览器上面不能访问后台代码的设计规则,尽量让用户的请求都通过服务端处理相关数据到用户操作界面进行返回。
(4)先进性:尽量采用开发技术的稳定版本,但是稳定版本要选择最近的稳定版本,不能选择太旧的版本,稳定是一切的前提。实现技术开发角度的先进性就需要不断的进取精神,时刻保证技术的先进性。
(5)维护性:设计之初就要考虑维护问题,不管是数据的可维护性还是程序的可维护性都需要考虑,比如数据的冗余备份还是系统的相关软件图片的备份,都要有一套行之有效的操作规范,这样哪怕程序上线后出现相关问题不至于手忙脚乱。
4.2功能结构设计
在系统的设计中,尤其需要对系统的功能进行详细设计,虽然系统已经分析出大致的功能,但是对功能细分还是很有必要的。
图4.1展示的是管理员功能结构。系统把区域管理,不良类型管理,宠物品种管理,健康类型管理,举报类型管理,流浪动物类型管理,公告类型管理,使用说明类型管理,物资类型管理,宠物性别管理,宠物医院类型管理子功能划分到基础数据管理这个功能模块中。
图4.1管理员功能结构图
图4.2展示的是自愿者功能结构。自愿者主要参与管理流浪动物信息以及管理社区交流信息,查看宠物信息,查看举报信息,查看宠物医院等。
图4.2自愿者功能结构图
图4.3展示的是用户功能结构。用户对通知公告,使用说明,流浪动物,宠物医院,物资捐赠信息只有查询和查看的权限。用户需要在个人中心模块发布宠物信息,发布举报信息以及发布宠物接种疫苗信息。
图4.3用户功能结构图
4.3数据库设计
数据有数据的存储规则,采用现有成熟的数据管理工具,可以提升开发效率。目前市面上主流还是采用关系型数据库来进行数据的存储操作。关系型数据库的优点就是每个有关系的数据在数据库里存放的时候都是互相关联的,比较好理解。选择合适的数据库这个比较容易,但是对数据分析并且设定相关数据的存储规则以及查询请求,如果优化数据库的结构,只有优化过的数据库才能在数据的查询以及各项请求上面有很好的用户体验。
4.3.1数据库概念设计
本章节将描述有关于数据库相关的概念设计。通过采用Visio工具来进行画图描述数据对象之间的关系。数据对象也就是实体,每个数据对象都可以看做是一个实体存在,每个实体都有相关的属性,用Visio画图工具可以更好的描述实体与实体之间的关联。E-R图是专门用来描述实体数据之间的关系的专业用图。可以通过长方形图案代表实体,可以在长方形里面写入相关实体的名字,用椭圆形的图案描述相关属性,属性也可以写到椭圆形里面,之间的联系则用菱形来进行描述。E-R图的存在可以更直观的看到数据实体与之属性相对应的关系,更能有助于理解实体的相关设计。
(1)宠物实体图如图4.4所示。
图4.4宠物实体图
(2)用户实体图如图4.5所示。
图4.5用户实体图
(3)宠物医院实体图如图4.6所示。
图4.6宠物医院实体图
(4)举报信息实体图如图4.7所示。
图4.7举报信息实体图
(5)物资捐赠实体图如图4.8所示。
图4.8物资捐赠实体图
(6)实体间关系E-R图如图4.9所示。
图4.9实体间关系E-R图
4.3.2数据库物理设计
数据存储需要符合科学的设计,如果不符合相关的科学设计,那么数据存储将会出现问题,比如数据冗余,性能下降等一系列不可控制的后果。数据表内每个字段必有其含义,每个字段都不可以重复,需要表达的意思也需要准确,如果需要多个属性来进行描述就需要有多个字段来存储多个属性对应的数据。每个表都要有属于自己表的主键,一般设置为自增模式,这样的好处是可以让每条数据都可以从自己的主键上面进行了区分。一个字段是否为空,表名称和字段名称尽量不要使用中文来进行描述,字段可以在数据库表里面进行中文的描述和备注,只要牵扯到数据定义的就不要使用中文,因为数据库设定的时候如果采用中文可能会导致代码里面出现未知错误。中文字符占用的数据长度相对也比较长,当数据量增长到一定程度会给数据库引擎带了多余的压力。数据库表内容设计下面将展示说明。
表4.1 宠物不良记录登记表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
chongwu_id | int(11) | 宠物 | 允许空 |
buliangdengji_name | varchar(200) | 标题 | 允许空 |
buliangdengji_photo | varchar(200) | 照片 | 允许空 |
buliangdengji_types | int(11) | 类型 | 允许空 |
buliangdengji_content | text | 详情备注 | 允许空 |
insert_time | timestamp | 添加时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.2 宠物表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
chongwu_name | varchar(200) | 宠物名称 | 允许空 |
chongwu_photo | varchar(200) | 宠物照片 | 允许空 |
chongwu_types | int(11) | 宠物品种 | 允许空 |
chongwu_age | int(11) | 宠物年龄 | 允许空 |
xingbie_types | int(11) | 宠物性别 | 允许空 |
chongwu_file | varchar(200) | 准养证 | 允许空 |
yonghu_id | int(11) | 主人姓名 | 允许空 |
chongwu_tezheng | varchar(200) | 宠物特征 | 允许空 |
chongwu_delete | int(11) | 逻辑删除 | 允许空 |
chongwu_content | text | 宠物简介 | 允许空 |
xingbie_yesno_types | int(11) | 信息审核 | 允许空 |
xingbie_yesno_text | text | 审核结果 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.3 社区交流表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
forum_name | varchar(200) | 帖子标题 | 允许空 |
yonghu_id | int(11) | 用户 | 允许空 |
ziyuanzhe_id | int(11) | 自愿者 | 允许空 |
users_id | int(11) | 管理员 | 允许空 |
forum_content | text | 发布内容 | 允许空 |
super_ids | int(11) | 父id | 允许空 |
forum_state_types | int(11) | 帖子状态 | 允许空 |
insert_time | timestamp | 发帖时间 | 允许空 |
update_time | timestamp | 修改时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.4 宠物健康状况表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
chongwu_id | int(11) | 宠物 | 允许空 |
jiankangzhugtai_name | varchar(200) | 标题 | 允许空 |
jiankangzhugtai_photo | varchar(200) | 证明照片 | 允许空 |
jiankangzhugtai_file | varchar(200) | 证明文件 | 允许空 |
jiankangzhugtai_types | int(11) | 类型 | 允许空 |
jiankangzhugtai_content | text | 详情备注 | 允许空 |
insert_time | timestamp | 添加时间 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.5 举报信息表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
yonghu_id | int(11) | 用户 | 允许空 |
jubao_name | varchar(200) | 举报标题 | 允许空 |
jubao_types | int(11) | 举报类型 | 允许空 |
insert_time | timestamp | 添加时间 | 允许空 |
jubao_content | text | 举报详情 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.6 流浪动物表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
liulangdongwu_name | varchar(200) | 流浪动物名称 | 允许空 |
liulangdongwu_photo | varchar(200) | 流浪动物照片 | 允许空 |
liulangdongwu_types | int(11) | 流浪动物类型 | 允许空 |
chongwu_types | int(11) | 流浪动物品种 | 允许空 |
liulangdongwu_age | int(11) | 流浪动物年龄 | 允许空 |
liulangdongwu_jiezhong | varchar(11) | 疫苗接种 | 允许空 |
xingbie_types | int(11) | 性别 | 允许空 |
liulangdongwu_content | text | 流浪动物简介 | 允许空 |
liulangdongwu_delete | int(11) | 逻辑删除 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.7 通知公告表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
news_name | varchar(200) | 公告标题 | 允许空 |
news_types | int(11) | 公告类型 | 允许空 |
news_photo | varchar(200) | 公告图片 | 允许空 |
insert_time | timestamp | 添加时间 | 允许空 |
news_content | text | 公告详情 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.8 使用说明表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
shiyongshuoming_name | varchar(200) | 标题 | 允许空 |
shiyongshuoming_types | int(11) | 类型 | 允许空 |
shiyongshuoming_photo | varchar(200) | 图片 | 允许空 |
insert_time | timestamp | 添加时间 | 允许空 |
shiyongshuoming_content | text | 详情 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.9 管理员表
字段 | 类型 | 说明 | 允许空 |
id (主键) | bigint(20) | 主键 | 不允许空 |
username | varchar(100) | 用户名 | 不允许空 |
password | varchar(100) | 密码 | 不允许空 |
role | varchar(100) | 角色 | 允许空 |
addtime | timestamp | 新增时间 | 不允许空 |
表4.10 物资捐赠表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
wuzi_name | varchar(200) | 物资名称 | 允许空 |
wuzi_photo | varchar(200) | 物资照片 | 允许空 |
wuzi_types | int(11) | 物资类型 | 允许空 |
wuzi_number | int(11) | 捐赠数量 | 允许空 |
wuzi_ren | varchar(200) | 捐赠人 | 允许空 |
wuzi_content | text | 捐赠备注 | 允许空 |
wuzi_delete | int(11) | 逻辑删除 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.11 宠物医院表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
yiyuan_name | varchar(200) | 宠物医院名称 | 允许空 |
yiyuan_photo | varchar(200) | 宠物医院照片 | 允许空 |
yiyuan_types | int(11) | 宠物医院类型 | 允许空 |
address_types | int(11) | 所在区域 | 允许空 |
yiyuan_content | text | 医院详情 | 允许空 |
yiyuan_delete | int(11) | 逻辑删除 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.12 用户表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
username | varchar(200) | 账户 | 允许空 |
password | varchar(200) | 密码 | 允许空 |
yonghu_name | varchar(200) | 用户姓名 | 允许空 |
sex_types | int(11) | 性别 | 允许空 |
yonghu_photo | varchar(200) | 用户头像 | 允许空 |
yonghu_id_number | varchar(200) | 身份证号 | 允许空 |
yonghu_phone | varchar(200) | 联系方式 | 允许空 |
yonghu_email | varchar(200) | 电子邮箱 | 允许空 |
address_types | int(11) | 区域 | 允许空 |
yonghu_delete | int(11) | 逻辑删除 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
表4.13 自愿者表
字段 | 类型 | 说明 | 允许空 |
id (主键) | int(11) | 主键 | 不允许空 |
username | varchar(200) | 账户 | 允许空 |
password | varchar(200) | 密码 | 允许空 |
ziyuanzhe_name | varchar(200) | 自愿者姓名 | 允许空 |
sex_types | int(11) | 性别 | 允许空 |
ziyuanzhe_photo | varchar(200) | 自愿者头像 | 允许空 |
ziyuanzhe_id_number | varchar(200) | 身份证号 | 允许空 |
ziyuanzhe_phone | varchar(200) | 联系方式 | 允许空 |
ziyuanzhe_email | varchar(200) | 电子邮箱 | 允许空 |
ziyuanzhe_address | varchar(200) | 地址 | 允许空 |
shijain_num | int(11) | 志愿时长 | 允许空 |
ziyuanzhe_delete | int(11) | 逻辑删除 | 允许空 |
create_time | timestamp | 创建时间 | 允许空 |
第五章 系统实现
描述功能的实现通过图片加文字的结合形式来表达系统的某个页面或者某个功能的实现。图片就是已经实现的功能页面,文字则是描述当前图片主要表达的功能含义以及功能操作。
5.1管理员功能实现
5.1.1 宠物不良记录管理
宠物不良记录管理界面如图5.1所示。
图5.1 宠物不良记录管理界面
此界面把宠物不良记录信息展示了出来,其中包括宠物品种,宠物名称等信息。每条宠物不良记录信息最右侧都会显示详情,修改,删除,这些表示管理员对宠物不良记录信息的操作功能。在界面的顶部区域,管理员可以实现宠物不良记录信息的查询,新增和删除操作。
5.1.2 宠物医院管理
宠物医院管理界面如图5.2所示。
图5.2 宠物医院管理界面
此界面把宠物医院的基础信息进行了展示,主要包括宠物医院名称,所在区域等信息。管理员除了新增宠物医院信息外,也能修改宠物医院信息。
5.1.3 举报信息管理
举报信息管理界面如图5.3所示。
图5.3 举报信息管理界面
此界面把用户提交的举报信息进行了展示,其中有用户姓名,举报标题,举报类型等信息。每条举报数据都允许管理员修改,删除。
5.1.4 使用说明管理
使用说明管理界面如图5.4所示。
图5.4 使用说明管理界面
此界面把使用说明信息进行了展示,其中有标题,图片,类型等信息,每条使用说明数据右侧区域都有设置相应的操作,包括删除,修改等。
5.1.5 宠物健康状况管理
宠物健康状况管理界面如图5.5所示。
图5.5 宠物健康状况管理界面
此界面把宠物健康状况的信息都进行了展示。而管理员需要做的工作就是下载宠物健康状况的证明文件,查看宠物品种,宠物名称等信息,修改,删除宠物健康状况信息。
5.2 自愿者功能实现
5.2.1 流浪动物管理
流浪动物管理界面如图5.6所示。
图5.6 流浪动物管理界面
此界面把流浪动物的流浪动物的年龄,疫苗接种,性别等信息进行了展示,每条流浪动物数据的右侧区域都展示了相应的操作,包括修改,查看详情。作为自愿者,其也具有发布流浪动物信息的权限。
5.2.2 社区交流管理
社区交流管理界面如图5.7所示。
图5.7 社区交流管理界面
此界面把社区交流的信息进行了展示,其中包括帖子标题,姓名,手机号等信息。自愿者除了查看论坛回复信息之外,其也能评论帖子,发布帖子等。
5.2.3 举报信息查看
举报信息查看界面如图5.8所示。
图5.8 举报信息查看界面
此界面把用户姓名,举报标题,举报类型等信息都进行了展示,每条举报数据都允许自愿者查看其详情。
5.2.4 通知公告查看
通知公告查看界面如图5.9所示。
图5.9 通知公告查看界面
此界面主要展示通知公告的具体内容,而自愿者需要做的工作就是查看各个通知公告的详情。
5.3用户功能实现
5.3.1 宠物信息管理
宠物信息管理界面如图5.10所示。
图5.10 宠物信息管理界面
此界面主要展示用户自己发布的宠物信息。该信息允许用户在后期进行修改,删除。
5.3.2 举报信息管理
举报信息管理界面如图5.11所示。
图5.11 举报信息管理界面
此界面展示用户提交的所有的举报信息,用户本人可以删除举报信息,或者添加新的举报信息。
5.3.3 宠物疫苗信息管理
宠物疫苗信息管理界面如图5.12所示。
图5.12 宠物疫苗信息管理界面
此界面主要展示用户本人添加的宠物接种疫苗的信息,每条信息都有相应的证明照片,作为用户,其可以修改,删除这些数据。
5.3.4 物资捐赠
物资捐赠界面如图5.13所示。
图5.13 物资捐赠界面
此界面主要让用户本人查看各种捐赠的物资信息,用户可以通过物资名称查询捐赠的物资信息。
5.3.5 宠物医院
宠物医院界面如图5.14所示。
图5.14 宠物医院界面
此界面主要让用户本人查看各种宠物医院信息,用户可以通过宠物医院名称查询宠物医院信息。或者通过宠物医院类型来查找宠物医院信息。
第六章 系统测试
系统测试是一种程序编码过程中比不可少的一个环节,一般出现在编码完成之后。程序的编码都是阶段性的,对某个模块或者某个功能进行细节性的拆分然后进行编码,所以一般在编码之后就会进行系统测试。
6.1系统测试的类型
从系统测试的角度出发,主要分为以下几种类型。
(1)性能测试
性能测试主要是从数据的并发量以及对硬盘的读写量这两个方面来进行压力测试,测试出程序的最大处理性能要求和最小占用性能要求。这样有针对性的测试可以在运营状态提供一些必要的辅助。
(2)功能测试
测试功能的实现与否,要求是每个页面每个角色要求的功能都要实现。
(3)模块测试
先把程序划分成模块测试数据传递,然后再整个程序全部流程测试一遍,就能测试出是某个模块出现的问题还是模块连接出现的问题。
(4)容灾测试
如果程序有自动备份的设定那么就需要测试容灾测试环节。
(5)安全性测试
主要测试不同权限之间的不同操作,比如用户登录看看是否可以修改管理员的账号,这个就必须不能实现的功能。或者不经过登录就可以对一些敏感数据进行操作,这些也需要测试。
(6)兼容性设置
在不同的设备或者不同的浏览器版本上面进行测试,看软件是否会出现异常,如果会出现异常就需要提示用户必须在某些版本的浏览器上面进行操作。毕竟不可能开发兼容所有浏览器版本的软件。
(7)易用性测试
好用不好用肯定不能自己说了算,要让甲方委托相关人员测试。
6.2系统功能测试
由于系统实现的功能比较多,本节选用部分功能进行测试用例的编写。
(1)登录功能测试
表6.1为登录功能测试表。登录功能对账号,密码的格式,填写的内容都有限制要求,成功操作的唯一条件即管理员登记的这两项数据都正确才行。
表6.1 登录功能测试表
操作流程 | 输入的数据 | 预期结果 | 实际结果 | 是否达标 |
管理员在账号后面的输入框中填写账号信息,在密码后面的输入框中填写密码信息,最后点击“登录”按钮提交信息 | 管理员正确填写账号,同时正确填写密码信息 | 操作成功 | 成功登录 | 是 |
管理员错误登记账号,正确登记密码 | 操作失败 | 登录失败,提示账号错误 | 是 | |
管理员正确登记账号,错误登记密码 | 操作失败 | 登录失败,提示密码错误 | 是 |
(2)宠物查询功能测试
表6.2为宠物查询功能测试表,当系统数据有成千上万条时,管理员才会发现查询功能的设置为管理员寻找数据提供了很大的便利。
表6.2 宠物查询功能测试表
操作流程 | 输入的数据 | 预期结果 | 实际结果 | 是否达标 |
管理员首先需要进入宠物查询界面,然后在查询功能的文本输入框中,填写宠物名称的关键字,最后点击“查询”按钮提交操作请求 | 管理员登记的宠物名称的关键字信息是正确的信息 | 查询到管理员需要的信息 | 系统在当前界面展示出管理员需要的信息 | 是 |
管理员登记的宠物名称存在错误数据 | 查询失败 | 查询失败 | 是 |
6.3系统测试总结
从系统测试过程中,对页面布局进行了微调,操作流程符合设计规范,基本上当前使用的电脑都可以进行操作,使用简单,功能完备,测试结果符合设计要求。
结 论
先确定选题,然后经过了资料搜集,确定功能,设计系统方案,编码实现系统功能以及测试系统等一系列工作之后,一个完整的能够独立运行的社区宠物管理与服务系统就呈现出来了。此系统已经实现的功能有自愿者管理,宠物不良记录管理,宠物健康状况管理,物资捐赠管理,宠物医院管理,流浪动物管理,举报信息管理,使用说明管理
等功能。
系统编码的语言是Java,这种语言开发跨平台软件非常高效和安全。在数据库工具的选择上,为了能够更好的完成社区宠物管理与服务系统的开发任务,选择数据查询以及数据存储效率比较高,开放的源码能够降低开发成本的MySQL工具。同时,在对系统的设计过程中,也充分考虑系统今后的功能扩展问题,以及系统运行之后的可维护性问题,因此在系统编码期间,也完全遵循系统的设计方案进行,在经过了系统的整体测试以及局部功能测试之后,发现系统的功能可以正常使用,使用者也可以轻松操作系统。
社区宠物管理与服务系统的设计与开发其实是一个具有很多工作量的项目,从商业角度来讲,是需要整个团队的各个成员相互配合来完成的,比如有单独的编码成员,有单独的测试成员等。但由于是个人的毕业作品,所以也是为了让自己更深刻的体会开发一个项目的不容易,以及理解开发一个项目的总体流程,社区宠物管理与服务系统从选题到呈现作品,几乎都是本人独立完成,任何一个阶段性过程,包括需求分析,编码,测试等都是自己独立进行。所以整个系统依靠自己全程开发下来,学会的东西有很多。虽然每个阶段都有遇到困难,其中包括功能模块的划分,函数的调用等问题,但最终,我还是通过资料查找或询问老师寻找到相应的解决办法。
开发社区宠物管理与服务系统,让我学习了很多新知识的同时,我也获取了一些开发经验,总体上对自己的此次实战还是挺满意的,虽然自己开发技术上还是有欠缺,加上时间紧迫等主客观原因,让此次系统的开发还是存在许多不足的地方。比如界面的设计还是比较粗糙,对系统代码的标注也不是很全面,还有系统的函数调用步骤也比较繁琐等等。这些问题都需要花时间去分析和进一步对系统进行更深入的研究。
参考文献
[1]庄帅. 宠物管理系统的设计及实现[J]. 福建电脑,2022,38(05):68-72.
[2]王亚文,赵翠. 基于SSM框架的社区宠物信息管理系统设计与分析[J]. 电脑编程技巧与维护,2021,(01):103-105.
[3]金澜. MySQL索引是如何形成的[J]. 计算机与网络,2022,48(02):42-43.
[4]冯凯. “MySQL数据库”课程教学中常见问题探析[J]. 无线互联科技,2021,18(24):158-159.
[5]赵学作. MySQL数据库主从数据同步的设置[J]. 网络安全和信息化,2021,(11):94-97.
[6]吴拓. Java编程语言在计算机软件开发中的应用[J]. 无线互联科技,2022,19(12):35-37.
[7]杨迎. Java语言异常处理机制的分析[J]. 电子技术,2022,51(03):42-43.
[8]曹嵩彭,王鹏宇. 浅析Java语言在软件开发中的应用[J]. 信息记录材料,2022,23(03):114-116.
[9]张烈超,胡迎九. 典型Java Web开发框架模型的研究[J]. 武汉交通职业学院学报,2021,23(04):122-127.
[10]邱丹萍. Web开发中SSM框架的分析[J]. 电脑知识与技术,2020,16(17):81-82.
[11]曾艳丽,李诺. 针对SSM框架Web系统的相关思考[J]. 信息与电脑(理论版),2019,(03):116-117.
[12]唐权. SSM框架条件分页查询研究与实现[J]. 四川职业技术学院学报,2019,29(01):139-143.
[13]谭少华. Java Web管理信息系统快速开发平台的设计与实现[D].电子科技大学,2018.
[14]孔璐.软件开发中数据库设计理论与实践分析[J].南方农机,2019,50(04):135.
[15]Konstantins Gusarovs. An Analysis on Java Programming Language Decompiler Capabilities[J]. Applied Computer Systems,2018,23(2).
[16]Tan Yiyu. A Hardware-oriented Object Model for Java in an Embedded Processor[J]. Microprocessors and Microsystems,2018.
致 谢
本次课题不仅需要呈现设计与实现的系统,还需要对系统以论文文档的方式进行阐述,所以工作量也比较大,需要经过的过程也非常多,刚开始时,需要选择题目,题目确定好之后需要进行开题报告的撰写,然后分析系统,设计实现以及测试,最后撰写论文。这期间的每一个环节至少需要一周的完成时间,而我的导师就负责对我的课题层层把关,不仅在系统制作上给与指导,在论文上也是一遍又一遍的指出问题,并引导我正确的撰写论文。所以我非常庆幸遇到了一位好导师,也为学院有这样一位老师而感到开心。
我的作品大部分制作时间都是在校园度过的,所以对同学和老师接触得比较多,他们总是在不经意间关心着我的作品进展情况以及时不时的提供帮助,让我省去了很多查找资料,寻求解决办法的时间。所以非常感谢这些老师和同学。同时也对我的家人和朋友表示感谢,因为他们总是在我伤心失意时鼓励我,支持我,从心理上给与我很多安慰。
这里我也要对我工作的同事还有领导表示感谢,他们主要是在我的技术问题上提供指导,很多技术上的小技巧他们都能教我,让我在系统编码上比较顺利。
最后,感谢学校。自从走出学校参加实习工作之后,才发现,学校的环境是多么美,学校的学习氛围相当浓厚,非常容易让人静下心来学习,尤其是图书馆,每次进入图书馆寻找资料,看书学习都觉得是非常享受的一件事情。所以感谢学校提供的学习氛围,这种氛围很容易激发大家对知识的渴望,从而很努力的学习。
核心代码展示
/**
* 公告通知
* 后端接口
* @author
* @email
* @date 2021-03-09 11:33:59
*/
@RestController
@RequestMapping("/news")
public class NewsController {
@Autowired
private NewsService newsService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NewsEntity news){
EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
NewsView newsView = newsService.selectView(ew);
return R.ok("查询公告通知成功").put("data", newsView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
newsService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = newsService.selectCount(wrapper);
return R.ok().put("count", count);
}
}