摘要
本文介绍了基于Spring Boot的流浪小动物领养系统。该系统旨在帮助流浪小动物找到一个温暖的家庭,同时方便用户浏览和领养流浪小动物。
系统使用Spring Boot作为后端框架,采用了MVC(Model-View-Controller)架构模式。前端页面使用Thymeleaf模板引擎进行渲染,实现了动态页面展示和交互。
系统功能主要包括有:宠物信息管理、领养信息管理、宠物知识管理等。
通过该系统,希望能够提高流浪小动物的领养率,减少流浪动物的数量,同时为用户提供一个方便快捷的流浪小动物领养平台。
关键词: Spring Boot,流浪小动物领养系统,数据库
Abstract
This paper introduces the stray animal adoption system based on Spring Boot. The system is designed to help stray animals find a warm home while making it easy for users to browse and adopt stray animals.
The system uses Spring Boot as the back-end framework and adopts the MVC (Model-View-Controller) architecture pattern. The front-end page is rendered using the Thymeleaf template engine to realize dynamic page display and interaction.
The system functions mainly include: pet information management, adoption information management, pet knowledge management and so on.
Through this system, we hope to improve the adoption rate of stray small animals, reduce the number of stray animals, and provide users with a convenient and fast adoption platform for stray small animals.
Key words:Spring Boot, Stray animal adoption system, database
目录
1 绪论
流浪小动物一直是一个全球性的社会问题,它们常常面临饥饿、疾病和虐待等困境。为了解决这个问题,许多组织和个人致力于推动流浪小动物领养,希望能够给这些无家可归的动物提供一个温暖的家 庭。
然而,传统的流浪小动物领养方式存在一些问题,如信息不透明、流程繁琐、时间成本高等。因此,基于现代技术的流浪小动物领养系统变得尤为重要。
Spring Boot作为一种快速开发框架,具有简化配置、高效运行和易于扩展等优点,可以很好地支持流浪小动物领养系统的开发。通过利用Spring Boot的特性,我们可以构建一个用户友好的、高效的流浪小动物领养平台,方便用户浏览和选择适合自己的流浪小动物,并提供给管理员一个方便管理的后台系统。
该研究旨在利用Spring Boot的优势,设计和实现一个功能完善的流浪小动物领养系统,提高流浪小动物的领养率,减少流浪动物的数量,同时为用户提供一个方便快捷的流浪小动物领养平台。通过这样的研究,希望能够改善流浪小动物的生活,并促进人与动物的和谐共处。
1.3研究现状
目前,基于Spring Boot的流浪小动物领养系统在实际应用中得到了广泛关注和应用。许多组织和个人意识到利用现代技术来解决流浪小动物问题的重要性,并开始采用基于Spring Boot的系统来提升领养流程的效率和透明度。
在研究现状方面,已经有一些类似的系统存在。这些系统通过整合信息、提供在线申请和管理流程等功能,为用户和管理员提供了更便捷的操作方式。同时,一些系统还加入了推荐算法,根据用户的偏好匹配合适的流浪小动物,进一步提高了领养成功的几率。
此外,一些研究还关注于数据分析和统计,通过收集和分析领养数据,为政府和相关组织提供参考,以制定更有效的流浪动物保护政策和措施。
然而,目前的研究还存在一些挑战和改进空间。例如,如何确保流浪小动物信息的真实性和准确性,如何提高用户体验和界面设计的友好性,如何进一步完善系统的权限控制和安全性等。
因此,未来的研究可以进一步探索这些问题,并结合最新的技术发展,如人工智能、大数据分析等,进一步提升基于Spring Boot的流浪小动物领养系统的功能和效果,为流浪小动物提供更好的保护和关爱。
1.4论文结构安排
本文共分为六章,章节内容安排如下:
第一章:引言。第一章主要介绍了课题研究的背景,国内目前相关研究现状以及本文的研究内容与主要工作。
第二章:系统需求分析。第而章主要从系统的用户、功能等方面进行需求分析。
第三章:系统概要设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试
第六章:总结。
2 系统需求分析
系统需求分析是系统开发的一个关键环节,它在系统的设计和实现上起到了一个承上启下的位置。系统需求分析是对所需要做的系统进行一个需求的挖掘,如果分析的准确可以精准的解决现实中碰到的问题。如果分析不到位会影响后期系统的实现。一个系统的优秀程度需求分析也是占据了非常大的比例,如果需求分析不到位,后面的系统设计要实现就是一个偏离导航的设计。
2.1 可行性分析
系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及操作层面的可行性上进行分析,如果三个层面都通过,我们则认为系统是比较可行的。
2.1.1 技术可行性分析
SpringBoot流浪小动物领养系统的设计与实现是一个基于宠物领养管理平台,我们在实现这个系统所采用的技术方案是基于Java语言,采用的是比较流行的SpringBoot框架以及MySQL数据库,在大学的学习中这两门课程都已经学过,而且自己也用这些技术开发过小的项目,在平时的课程设计以及作业也经常用到Java、SpringBoot和MySQL,在技术上实现自己的自主开发是可行的。
2.1.2 经济可行性分析
开发本SpringBoot流浪小动物领养系统的技术都是可以从网上直接免费下载,不用花一分钱,而且系统的源代码都是自己进行设计开发的,不需要成本,如果后期想要进行运营,只要把配置到服务器上,花费服务器的租赁费用,在使用中可以进行增加广告收益,因此在经济方面是可性的。
2.1.3 操作可行性分析
当下网络新时代,计算机已经得到了普及,多数人对计算机都比较的熟悉,知道如何使用它,当然也存在对计算机比较陌生的这一群体,也需要对其进行考虑。在进行SpringBoot流浪小动物领养系统页面的设计的时候,考虑到使用人群,可能也存在对计算机比较陌生的人,所以,在页面的设计方面,设计的很是简单、简洁,布局明了,色调明朗,让无论是对计算机陌生还是对计算机熟悉的使用者,都可以使用自如,这也说明了该程序的操作方面非常可行。
2.2 系统用例分析
流浪小动物领养系统的完整用例图分别是图2-1、图2-2和图2-3。在参与者上包括普通用户、医生以及管理员。
普通用户角色用例如图2-1所示。
图2-1 系统普通用户角色用例图
管理员角色用例如图2-2所示。
2.3 功能需求分析
普通用户:
(1)注册登录:用户通过注册登录系统,可通过点击头像中我的账户,对个人信息进行增删改查。比如个人资料、头像和密码修改。
(2)交流社区:管理员点击可查看交流社区帖子,同时可对社区帖子进行点赞、收藏和评论;同时可进行发布帖子的操作。
(3)公告信息:用户点击可查看网站公告、关于我们、联系方式和网站介绍。
(4)宠物咨讯:用户点击可查看宠物咨讯,同时可对咨讯文章进行点赞、收藏和评论。
(5)反馈信息:用户点击“发布内容”可进行发布反馈信息内容。
(6)宠物信息:用户点击可查看宠物信息列表,同时可对宠物信息进行点赞、收藏、评论和领养申请操作。
(7)宠物知识:用户点击可查看宠物知识列表,同时可对宠物宠物知识进行点赞、收藏和评论。
(8)个人中心:用户点击头像可查看“个人中心”,包括个人首页、宠物信息、领养信息和收藏。点击“宠物信息”,输入宠物名称,选择宠物类型,输入宠物年龄,选择宠物性别,上传宠物图片,输入宠物体重,选择是否打疫苗,输入疫苗针数、绝生育情况、遗传病史、病因备注、宠物喜好,上传送养资格,输入宠物详情,点击“提交”按钮进行添加。
管理员:
(1)登录:管理员的账号是在数据列表中直接设置生成的,不需要进行注册,可直接输入账号密码登录,同时可对管理员资料进行增删改查。
(2)系统用户:当管理员点击“系统用户”时,可管理管理员和普通用户,同时可对系统用户进行增删改查。
(3)宠物分类管理:管理员点击可查看宠物分类列表和宠物分类添加,同时可对宠物分类进行增删改查。
(4)宠物信息管理:管理员点击可查看宠物信息列表。
(5)领养信息管理:管理员点击可查看领养信息列表,同时可对领养信息进行审核回复。
(6)宠物知识管理:管理员点击可查看宠物知识列表和宠物知识添加;点击“宠物知识添加”,输入发布人,选择发布日期,输入知识类型,上传知识封面,输入知识描述和知识内容,点击“提交”按钮进行添加。
(7)系统管理:管理员点击可查看轮播图管理和敏感词管理;如需添加新的轮播图,点击右侧“添加”按钮,上传图片,输入标题,点击“确认”按钮进行添加;同时可对敏感词汇进行增删改查。
(8)留言管理:管理员点击可查看留言信息,同时可对留言进行回复。
(9)公告信息管理:当管理点击“公告信息管理”时,可查看公告信息;如需添加新的公告信息,点击右侧“添加”按钮,输入标题和正文,点击“确认”按钮进行添加。
(10)资源管理:当管理员点击“资源管理”时,可查宠物咨讯和咨讯分类。如需添加新的宠物咨讯,点击“添加”按钮,上传封面图,输入标题,选择分类,输入标签、描述和正文,点击“提交”按钮进行添加。同时可对咨讯进行增删改查。
(11)交流管理:管理员点击可查看交流社区和社区分类;同时可以的交流信息进行增删改查。
2.4 非功能性需求分析
流浪小动物领养系统的非功能性需求比如流浪小动物领养系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下2-1表格中:
表2-1流浪小动物领养系统非功能需求表
安全性 | 主要指流浪小动物领养系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指流浪小动物领养系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响流浪小动物领养系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着流浪小动物领养系统的页面展示内容进行操作,就可以了。 |
可维护性 | 流浪小动物领养系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
3 系统概要设计
3.1系统架构设计
本流浪小动物领养系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1 系统架构设计图
3.2系统功能结构设计
系统在结构上的设计至关重要,要考虑周全,设计全面,一个完善的结构体系,能够满足用户在使用时的各种需求,这样会让提高程序的使用率,保证程序被长久的利用。在设计流浪小动物领养系统的结构时,也列入重点,采用模块化的方法来进行设计,即首先将大模块确定下来,再慢慢的将大模块进行补充完善,向下分支出小模块,一起共同组成的系统的结构体系,下图是该流浪小动物领养系统的结构设计图,直观明了的可以看出本项目程序的功能。
流浪小动物领养系统模块图如图3-2所示。
图3-2 系统功能结构图
3.3系统数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.3.1 数据库概念结构设计
在数据库概念模型设计的时候,一般都采用E-R实体图进行展示,在实体图中可以展示出数据库表中的所有字段名称。下面是整个SpringBoot流浪小动物领养系统中主要的数据库表总E-R实体关系图。
图3-3 系统总E-R关系图
3.3.2 数据库逻辑结构设计
在数据库表中我们会看到系统的表名、主键、外键等信息,我们通过数据库表的主键、外键把每个表关联起来,然后在界面中展示,本SpringBoot流浪小动物领养系统的主要的数据库表如下:
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | adoption_information_id | int | 10 | 0 | N | Y | 领养信息ID | |
2 | delivery_users | int | 10 | 0 | Y | N | 0 | 送养用户 |
3 | pet_name | varchar | 64 | 0 | Y | N | 宠物名称 | |
4 | pet_type | varchar | 64 | 0 | Y | N | 宠物类型 | |
5 | pet_age | varchar | 64 | 0 | Y | N | 宠物年龄 | |
6 | pet_gender | varchar | 64 | 0 | Y | N | 宠物性别 | |
7 | adoptive_users | int | 10 | 0 | Y | N | 0 | 领养用户 |
8 | adoption_time | date | 10 | 0 | Y | N | 领养时间 | |
9 | adoption_instructions | text | 65535 | 0 | Y | N | 领养说明 | |
10 | adoption_information | varchar | 255 | 0 | Y | N | 领养资料 | |
11 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
12 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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_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 | forum_id | mediumint | 8 | 0 | N | Y | 论坛id | |
2 | display | smallint | 5 | 0 | N | N | 100 | 排序 |
3 | user_id | mediumint | 8 | 0 | N | N | 0 | 用户ID |
4 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
5 | praise_len | int | 10 | 0 | Y | N | 0 | 点赞数 |
6 | hits | int | 10 | 0 | N | N | 0 | 访问数 |
7 | title | varchar | 125 | 0 | N | N | 标题 | |
8 | keywords | varchar | 125 | 0 | Y | N | 关键词 | |
9 | description | varchar | 255 | 0 | Y | N | 描述 | |
10 | url | varchar | 255 | 0 | Y | N | 来源地址 | |
11 | tag | varchar | 255 | 0 | Y | N | 标签 | |
12 | img | text | 65535 | 0 | Y | N | 封面图 | |
13 | content | longtext | 2147483647 | 0 | Y | N | 正文 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
16 | avatar | varchar | 255 | 0 | Y | N | 发帖人头像: | |
17 | type | varchar | 64 | 0 | N | N | 0 | 论坛分类:[0,1000]用来搜索指定类型的论坛帖 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
3 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
4 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
5 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
6 | icon | varchar | 255 | 0 | Y | N | 分类图标: | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | message_id | int | 10 | 0 | N | Y | 留言板ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 用户ID: |
3 | title | varchar | 64 | 0 | Y | N | 标题: | |
4 | content | longtext | 2147483647 | 0 | N | N | 内容: | |
5 | nickname | varchar | 32 | 0 | N | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像: | |
7 | | varchar | 125 | 0 | Y | N | 留言者邮箱 | |
8 | phone | varchar | 11 | 0 | Y | N | 留言者手机号码 | |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
11 | reply | longtext | 2147483647 | 0 | Y | N | 回复 | |
12 | reply_state | tinyint | 4 | 0 | Y | N | 0 | 回复状态 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | pet_classification_id | int | 10 | 0 | N | Y | 宠物分类ID | |
2 | pet_type | varchar | 64 | 0 | Y | N | 宠物类型 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | pet_information_id | int | 10 | 0 | N | Y | 宠物信息ID | |
2 | delivery_users | int | 10 | 0 | Y | N | 0 | 送养用户 |
3 | pet_name | varchar | 64 | 0 | N | N | 宠物名称 | |
4 | pet_type | varchar | 64 | 0 | N | N | 宠物类型 | |
5 | pet_age | varchar | 64 | 0 | Y | N | 宠物年龄 | |
6 | pet_gender | varchar | 64 | 0 | Y | N | 宠物性别 | |
7 | pet_photos | varchar | 255 | 0 | Y | N | 宠物照片 | |
8 | pet_weight | varchar | 64 | 0 | Y | N | 宠物体重 | |
9 | whether_to_get_vaccinated_or_not | varchar | 64 | 0 | Y | N | 是否打疫苗 | |
10 | vaccine_doses | varchar | 64 | 0 | Y | N | 疫苗针数 | |
11 | infertility_situation | text | 65535 | 0 | Y | N | 绝生育情况 | |
12 | genetic_history | text | 65535 | 0 | Y | N | 遗传病史 | |
13 | etiological_notes | text | 65535 | 0 | Y | N | 病因备注 | |
14 | pet_preferences | text | 65535 | 0 | Y | N | 宠物喜好 | |
15 | eligibility_for_sending_out_children_for_adoption | varchar | 255 | 0 | Y | N | 送养资格 | |
16 | pet_details | longtext | 2147483647 | 0 | Y | N | 宠物详情 | |
17 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
18 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
19 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
20 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
21 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | pet_knowledge_id | int | 10 | 0 | N | Y | 宠物知识ID | |
2 | knowledge_title | varchar | 64 | 0 | Y | N | 知识标题 | |
3 | publisher | varchar | 64 | 0 | Y | N | 发布人 | |
4 | release_date | date | 10 | 0 | Y | N | 发布日期 | |
5 | knowledge_type | varchar | 64 | 0 | Y | N | 知识类型 | |
6 | knowledge_cover | varchar | 255 | 0 | Y | N | 知识封面 | |
7 | knowledge_description | text | 65535 | 0 | Y | N | 知识描述 | |
8 | knowledge_content | longtext | 2147483647 | 0 | Y | N | 知识内容 | |
9 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
10 | praise_len | 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 | 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 | 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 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | sensitive_vocabulary_id | int | 10 | 0 | N | Y | 敏感词汇ID | |
2 | sensitive_vocabulary | varchar | 64 | 0 | Y | N | 敏感词汇 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
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 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
4 系统实现
4.1普通用户功能模块
4.1.1 前台首页界面
用户进入系统后可以查看系统的信息,包含了程序的标题、导航栏、轮播图、宠物咨讯等,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2用户注册界面
普通用户注册并登录系统,可对个人信息进行增删改查,比如个人资料、头像和密码修改。注册界面展示如下图4-2所示。
图4-2注册界面图
注册代码如下:
/**
* 注册
* @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);
}
4.1.3登录界面
用户注册登录后可查看首页信息,包括(首页、通知公告、宠物咨讯、宠物商城、商城管理、宠物信息)登录界面如下图4-3所示。
图4-3 首页界面图
登录代码如下:
/**
* 登录
* @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, "账号或密码不正确");
}
}
4.1.4 交流社区界面
交流社区:管理员点击可查看交流社区帖子,同时可对社区帖子进行点赞、收藏和评论;同时可进行发布帖子的操作。界面如下图所示。
图4-4 交流社区面图
4.1.5 宠物咨讯界面
宠物咨讯:用户点击可查看宠物咨讯,同时可对咨讯文章进行点赞、收藏和评论。界面如下图所示。
图4-5 宠物咨讯界面图
4.1.6 宠物信息界面
宠物信息:用户点击可查看宠物信息列表,同时可对宠物信息进行点赞、收藏、评论和领养申请操作。界面图如图所示。
图4-8 宠物信息界面图
4.1.7宠物知识界面
宠物知识:用户点击可查看宠物知识列表,同时可对宠物宠物知识进行点赞、收藏和评论。界面如下图所示。
图4-7 宠物知识界面图
4.1.8 个人中心
个人中心:用户点击头像可查看“个人中心”,包括个人首页、宠物信息、领养信息和收藏。点击“宠物信息”,输入宠物名称,选择宠物类型,输入宠物年龄,选择宠物性别,上传宠物图片,输入宠物体重,选择是否打疫苗,输入疫苗针数、绝生育情况、遗传病史、病因备注、宠物喜好,上传送养资格,输入宠物详情,点击“提交”按钮进行添加。界面图如下。
图4-8 个人中心界面图
4.3管理员功能模块
4.3.1宠物知识管理界面
宠物知识管理:管理员点击可查看宠物知识列表和宠物知识添加;点击“宠物知识添加”,输入发布人,选择发布日期,输入知识类型,上传知识封面,输入知识描述和知识内容,点击“提交”按钮进行添加。界面如下图所示。
图4-9 宠物知识息界面图
增加数据代码如下:
@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);
}
4.3.2系统管理界面
系统管理:管理员点击可查看轮播图管理和敏感词管理;如需添加新的轮播图,点击右侧“添加”按钮,上传图片,输入标题,点击“确认”按钮进行添加;同时可对敏感词汇进行增删改查。界面如下图所示。
图4-10 系统管理界面图
图片上传代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
4.3.3资源管理界面
资源管理:当管理员点击“资源管理”时,可查宠物咨讯和咨讯分类。如需添加新的宠物咨讯,点击“添加”按钮,上传封面图,输入标题,选择分类,输入标签、描述和正文,点击“提交”按钮进行添加。同时可对咨讯进行增删改查。界面如下图4-11所示。
图4-11 资源管理界面图
5系统的测试
5.1测试的目的
一个系统测试的目的就是检验系统在真正的工作环境、条件下是不是能够正常运行,各种功能能不能符合设计的要求,通过测试发现系统当中存在的一些潜在的错误,然后对系统进行改进,使得系统最终以完美的形式展现给用户,提高用户使用过程中的体验度,真正达到项目的实际使用目的。
5.2 系统测试用例
系统测试包括:管理员登录功能测试、宠物咨讯查看功能测试、宠物信息添加功能测试功能测试,如表5-1、5-2、5-3、所示:
表5-1 管理员登录功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
登录模块测试 | 登录成功的情况 | 管理员可以通过浏览器进入到SpringBoot流浪小动物领养系统后台登录界面,输入用户名:admin和密码admin后,点击“登录”按钮。 | 成功登录到管理员管理的界面 | 正确 |
登录模块测试 | 登录失败的情况 | 管理员可以通过浏览器进入到SpringBoot流浪小动物领养系统后台登录界面,输入用户名:admin和密码111后,点击“登录”按钮。 | 系统提示“用户名和密码不匹配” | 正确 |
宠物咨讯查看功能测试:
表5-2 宠物咨讯查看功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
查询宠物咨讯功能测试 | 查询成功的情况 | 用户在导航栏中点击“宠物咨讯”,输入关键词宠物咨讯,输入的信息在系统中存在,显示查询宠物咨讯 | 查询成功 | 正确 |
管理员宠物信息添加界面测试:
表5-3 管理员添加宠物信息界面测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
宠物信息添加模块测试 | 商品添加成功的情况 | 在“宠物信息管理”菜单中点击“宠物信息添加”会显示出所有的宠物信息,点击“添加”,输入宠物信息,输入正确的信息后,点击“提交”按钮。 | 提示添加成功 | 正确 |
宠物信息添加模块测试 | 宠物信息添加失败的情况 | 在“宠物信息管理”菜单中点击“宠物信息添加”会显示出所有的医生信息,点击“添加”,不输入宠物名称,其他信息正常填写后,点击“提交”按钮。 | 提示“添加失败,宠物名称不能为空” | 正确 |
5.3 系统测试结果
本次开发的系统是一个宠物身上管理系统,主要功能就是实现用户的在线预约,通过对管理员登录功能测试、宠物咨讯查看功能测试、宠物信息添加功能等方面的测试可以看出系统的功能,而且在测试的过程中也对界面的展示进行了查看,发现界面并没有出现扭曲、混乱等情况,能够满足用户的需求,系统运行良好,是可以进行投入使用的。
结论
经过了几个月的努力,基于SpringBoot的流浪小动物领养系统终于完成了,虽然在校期间也开发过一些小型的系统,但是都是在老师的讲解以及辅助下完成的,没有经历过开发之前的需求分析、系统分析,都是直接从系统设计开始的,因此本次开发的SpringBoot流浪小动物领养系统对我意义重大。
在开发系统最初,首先对用户宠物领养方面的需求进行调研,了解对于用户来说,开发的系统需要实现哪些功能才能满足使用者的需求,对需求进行分析;其次选择自己比较熟悉的Java语言,MySQL数据库,使用SpringBoot框架来设计开发,通过知网库、学校图书馆等地方查阅、学习这些技术,掌握编程的思想和方法,然后就是对系统进行分析,从系统开发的可行性、系统实现的功能、系统应该具备的性能以及系统的操作流程方面,对系统进行全方位的分析,确定系统的最终功能,从而对系统的功能和数据库进行设计,最后就是系统的实现以及对实现的功能的测试,确保系统能够稳定的运行。
在开发的过程中暴露出了自己的很多问题,比如前期的准备还是不够充分,不能完全掌握其操作流程;在开发过程中对SpringBoot的编程掌握的还不够熟练以及对系统的环境配置上还存在很多问题,经常会导致项目在运行的时候出现错误。学无止境,通过一边查阅资料一边向导师请教,慢慢的解决了这些问题,在以后的学习、工作者我会更加严谨,通过本项目的开发,我将会受益终生!
参考文献
[1]Liu F Y ,Wilson C ,Bedny M . Contribution of the language network to the comprehension of Python programming code.[J]. Brain and language,2024,251.
[2]路龙宾,孙家泽,滑文强等.兴趣驱动、能力导向、价值引领的Python语言程序设计课程创新与实践[J].计算机教育,2024(02):177-182.DOI:10.16512/j.cnki.jsjjy.2024.02.021.
[3]梁琛,马天鸣.Python数据分析在商业领域的应用[J].现代信息科技,2024,8(03):99-102.DOI:10.19850/j.cnki.2096-4706.2024.03.021.
[4]徐志英.Python程序设计课程思政教学实践探索[J].船舶职业教育,2024,12(01):44-46.DOI:10.16850/j.cnki.21-1590/g4.2024.01.014.
[5]龚平,刘晖,廖亦凡.Python程序设计专业基础课程拓展式教学改革[J].湖南邮电职业技术学院学报,2023,22(04):89-93.
[6]张雨蝶,周春柳.高校流浪动物的数字化管理探索[J].中国动物检疫,2023,40(11):41-45+88.
[7]费天乐,刘君.宠物领养一站式服务平台可行性及运行模式研究[J].国际公关,2023(12):170-172.DOI:10.16645/j.cnki.cn11-5281/c.2023.12.003.
[8]郑沁. 美国流浪动物收容制度研究[D].华东政法大学,2023.DOI:10.27150/d.cnki.ghdzc.2023.000184.
[9]李超. 基于和谐社会视角下社会工作介入社区流浪动物现状及对策分析[D].山东大学,2024.DOI:10.27272/d.cnki.gshdu.2023.005558.
[10]赵亚洲,杨晓冬.动物领养管理系统的设计与实现[J].无线互联科技,2022,19(18):61-65+72.
[11]丁晶晶. 大理市城市流浪动物协同治理研究[D].云南财经大学,2022.DOI:10.27455/d.cnki.gycmc.2022.000727.
[12]安琪. 基于服务设计思维的城市流浪动物助养系统设计研究[D].北京化工大学,2023.DOI:10.26939/d.cnki.gbhgu.2022.001964.
[13]刘蕾. 北京市流浪动物治理研究[D].中央财经大学,2022.DOI:10.27665/d.cnki.gzcju.2022.000189.
[14]李喻.宠物领养也“配对”[J].销售与市场(管理版),2022(03):102.
[15]邢月,喻德荣.简析流浪动物救助实践困境与路径优化[J].大众标准化,2021(04):71-73.
[16]赵灿. 《宠爱》移动应用设计的研究[D].北京印刷学院,2021.DOI:10.26968/d.cnki.gbjyc.2020.000217.
[17]姜苏. 基于互联网平台解决社会流浪动物问题的可行性研究[D].山东农业大学,2021.DOI:10.27277/d.cnki.gsdnu.2020.001043.
致谢
“致谢”意味着论文的结束,也意味着自己的毕业设计顺利完成,同时也代表了自己的大学生涯即将结束,我即将要离开自己敬爱的老师和亲爱的同学们,在这里我首先要感谢的就是所有的老师,“春满江山绿满园,桃李争春露笑颜,东西南北春常在,唯有师恩留心间”,他们无论在我的学业还是在我的生活上付出了所有,对我谆谆教诲;其次我要感谢我的指导老师,他在我的整个毕业设计当中起着引导作用,每当我有困难的时候,他总会第一时间帮助我,引导我进行解决问题,而不是直接告诉我答案,“授人以鱼不如授人以渔”,指导老师的这种做法让我受益终生,同时我也从指导老师身上学习到了许多的开发技巧以及检验,这对我今后的开发起着十分重要的作用;再次,我需要感谢我的同学、室友,他们不仅仅在毕业设计上给我许多帮助意见,在大学同窗四年,他们给过我的帮助太多了,我对他们有太多的不舍,无法用言语表示,我相信在以后的人生道路上只要想到他们,我心里就会很温暖,这种友情是任何感情替代不了的;最后我还要感谢家人,感谢自己,感谢家人对我的支持,感谢自己在学业上的坚持,我相信我以后的道路会越来越好。