毕业设计(论文)-srpingboot流浪狗领养管理设计_第1页
毕业设计(论文)-srpingboot流浪狗领养管理设计_第2页
毕业设计(论文)-srpingboot流浪狗领养管理设计_第3页
毕业设计(论文)-srpingboot流浪狗领养管理设计_第4页
毕业设计(论文)-srpingboot流浪狗领养管理设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

绪论研究的目的及意义随着国内经济的不断发展,人民收入水平的提高以及对于情感需求的日益强,宠物饲养成为了一种流行趋势。宠物的增多不可避免地造成了流浪宠物的泛滥,它们大多来自被主人遗弃的动物或这些动物繁衍的后代。它们没有管束,游走在人类居住区的边缘,给人们的生活带来了不小的困扰。如今也存在由爱心人士组织的流浪动物救助站收养一些流浪狗,但有时救助站的宠物过多,难以应付以致很多宠物都只能被执行“安乐死”。为了解决当前的流浪宠物问题,传统低效的线下登记领养逐渐被取代,随之而来的是使用终端设备便可浏览访问的流浪狗领养管理系统。通过设计基于springboot框架的流浪狗领养管理,效率比起传统线下登记形式有了很大的提高。首先,管理员可对现有的流浪狗信息进行直观地管理,避免了传统模式下信息缺失遗漏的情况;其次它为需要领养宠物的用户提供了一个便利的领养平台。流浪狗领养管理使用B/S架构,因为客户端(计算机)仅用作浏览器,所以维护人员只需要良好的服务器维护。无论客户规模大小,都不会增加业务强度。使用B/S结构将大大减少不必要的人力和物力,从而提高工作效率。国内外研究现状在前几年国人的观念中,国外的宠物饲养就主要是通过领养的方式了,国内一直都是用购买的方式进行。实从宠物的饲养数量上来看:国内饲养宠物的人数已经比世界上任何一个国家都要多,要因素是我国的人口基数大,也正因如此,弃养的宠物更是数不胜数。大部分人看来,宠物只是宠物,而宠物带来的负面影响会导致弃养,比如说宠物生病带来的费用难以承担就直接弃养。而宠物的领养政策的完善不是一蹴而就的,涉及到经济、政策、民生、不同地区对不同种类的动物的管理政策、接收程度。我国的宠物市场近几年才发展起来,很多方面并不完善,动物收养所便是重要一环。宠物行业涉及的范围较广,国内主要包括两大产业,一类是宠物产品,一类是宠物服务。其中,宠物产品包括宠物交易、宠物主粮、宠物零食、宠物清洁用品等;宠物服务则包括宠物医疗、宠物美容、宠物培训等。在没有了解这些内容的情况下,很多人还是一种冲动的领养。而随着国内互联网技术的发展和应用成熟度越来越高,人们获取资讯以及了解信息的途径大部分都是通过网络进行。因此通过建立一个宠物领养系统能够实现包括宠物领养.以及宠物信息、论坛、社交、在线服务、电子商、社区020、活动等功能,为宠物主人提供360度全方位服务,同时还可以为爱心创业者提供一个创业平台。本文的组织结构六个章节共同组成了本文研究及设计内容,包括:第一章:绪论。本文章的开头部分,对本题目的研究的目的及意义和研究现状等一些做文字性的描述。第二章:相关技术介绍。主要介绍Springboot框架、Java嵌入式脚本语言、B/S模式等。第三章:系统分析。包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。第四章:系统设计。本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。第五章:系统实现。将本系统分为前提的开发工具介绍和后期的功能代码实现。第六章:系统测试。系统完成后,根据各个模块的测试用例才对各个模块进行功能测试。相关技术介绍开发技术说明本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的springboot框架进行开发。前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,ElementUI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。B/S体系工作原理B/S架构采取浏览器请求,服务器响应的工作模式。用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。在B/S模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由WebServer完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。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是一个开放的、快速的、多线程的SQL关系型数据库服务器。由于其体积小、免费、运行速度快以及可以通过相关免费的软件来对MySql数据库中的相关数据结构信息等等优点。受广大中等、小型企业所喜爱并占据了很大地位。本系统在数据库方面选用MySQL,并通过Nacivat来进行MySql数据库的管理。在Mysql的安装过程中,最需要注意的就是数据库的编码问题,所以在安装数据库时需要设置数据库的编码为Utf-8,与前台页面和服务器的编码相一致。JavaScript运行模式JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。1.1是一种解释性脚本语言(代码不进行预编译)。1.2主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。1.3可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。1.4跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。1.5JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。JavaScript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。

系统分析可行性分析法律可行性分析开发软件有没有触犯法律,这涉及到软件或者系统能不能发布的问题。如果触犯了法律,就必将会受到法律的制裁。常见法律问题就是软件抄袭问题,若是抄袭别人软件,将会受到严厉惩罚。技术可行性分析软件产业经过多年的发展,现在已经达到了很大的规模,从事软件开发的专业人员不计其数,软件产业的重要性已经上升到了影响和推动国民经济发展的核心地位。本系统基于的架构,目前技术已经非常的成熟,是不存在技术上面难以实现的麻烦。经济可行性分析开发软件所需的时间、人力和物力成本,开发完成后的收益如何,从投资回报的角度软件所需功能在现有经济条件能不能实现等进行深入的考虑,都符合实际的要求。所以流浪狗领养管理系统具有经济可行性和实用性,可以节约管理成本功能需求分析流浪狗领养管理系统主要是为了更加地完善流浪狗领养情况,对用户的信息、领养信息、领养记录、回访记录、分类管理等提供了方便的机制。本系统有多类使用者,分别是管理员和普通用户。以下是从这两种用户的角度分别介绍本系统所要实现的功能。用户:注册:首先检查用户名和邮箱是否存在,如不存在即可进行注册,并将用户输入的密码进行MD5加密,注册成功后提示注册成功,并将用户信息保存到数据库中。登录:使用流浪狗领养管理系统前是需要用户登录个人账号。宠物知识:用户进行宠物知识的阅览,查看管理员发布的宠物知识信息。交流中心:用户在交流论坛这一菜单下对用户在线交流的查看、同时也可以发布、评论。领养信息:用户对宠物信息的查询,包括标题名称、宠物状态、宠物名称、宠物性别。管理员:用户管理:对用户进行管理,用户的注册,包括用户昵称、用户名、用户的宠物信息(宠物状态、宠物名称、宠物性别等)用户的账号信息:领养记录管理:对领养记录进行维护管理。宠物信息管理:对宠物信息进行维护管理。回访记录管理:对宠物的回访记录信息进行维护管理。非功能需求分析系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。用例分析普通用户主要使用系统的宠物热点和流浪狗领养管理系统,下图所示为普通用户的用例图3-1普通用户用例图2.管理员主要负责用户管理、领养记录、宠物信息、回访记录、分类管理,下图所示描述管理员的用例图。图3-2管理员用例图业务流程分析系统业务流程图如下所示。图3-3系统业务流程图业务流程图(TFD)通过一些特定的符号描述业务的处理过程,它重点强调业务过程中每一项处理活动和具体业务部门的关系,选择部分模块进行具体描述。重点对本系统整体业务中最为主要的宠物狗领养信息以及领养记录进行描述,用户进入流浪狗领养管理系统后进行各种模块信息的浏览,选择想要领养信息、领养记录,另外,管理人员进入后端管理,以执行该领养信息控制模块的相关管理方法,并在解决后向客户提供反馈机制。数据流程分析如下为系统的顶层数据流图,外部实体有用户和管理员,分别对系统输入数据,从而得到要输出的数据。图3-4系统顶层数据流图如下图所示为系统底层数据流图。图3-5系统底层数据流图流浪狗领养管理系统底层数据流图主要描述系统底层模块的数据流、数据载体、数据处理、外部实体的具体交互。本系统就是管理员和普通用户在用户管理、领养信息、领养记录、回访记录等模块上的数据交互。系统设计系统架构设计本系统架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。图4-1系统架构图系统功能结构为了将系统从“做什么”落实到“怎么做”,基于系统设计原则,对系统功能进行更适合编码实现的功能划分。根据上图的系统架构设计,整理出规范的系统功能结构图,为系统的实现编码做好准备。如下图所示为系统功能结构图。图4-2系统功能结构图功能模块设计用户管理针对所有用户和管理员。未注册用户点击注册,进入注册页面填写新用户信息,得到自定义生成账号后,注册完成。未注册用户注册的活动图如下图所示。图4-3未注册用户注册活动图用户可进行登录使用更多功能,首先进入用户登录界面,输入用户账号和密码,后台对账号和密码信息进行核对验证,验证成功则页面直接显示登录用户昵称代表登录成功,否则返回用户登录界面。用户登录活动图如下图。图4-4用户登录活动图用户登录后,进入功能页面,可对自己的信息进行管理,包括个人信息,预约挂号、病历记录、在线咨询。用户使用功能活动图如下图所示。图4-5用户使用功能活动图用户功能界面可对自己的密码进行修改。进入修改密码界面后核对当前密码,核对成功后填写新密码。修改密码活动图如下图所示。图4-6修改密码活动图数据库设计流浪狗领养管理系统采用的数据库是MySQL,该部分将根据系统需求和设计,设计合理的数据库。本系统考虑到之后系统的扩展集群,数据库将不使用外键。此外,不用外键时数据管理也较为简单,操作更加方便,性能更高。E-R图E-R图,更加直观的告诉开发人员系统的各个数据的属性,各个数据之间的联系,各个数据的类型。能通过该模型更直观地了解数据库的设计,并根据对其逐渐改善。本系统图设计,如下图所示。图4-7系统E-R图表结构设计本系统根据第三范式的思想设计数据库,减少最大程度的冗余,总共建立有多个表,用户注册表、管理员表、宠物信息表、评论表、领养记录表、回访记录表、等。return_visit_record表:名称类型长度不是null主键注释return_visit_record_idint11是是回访记录IDpet_namevarchar64否否宠物名称pet_sexvarchar64否否宠物性别pet_agevarchar64否否宠物年龄adopterint11否否领养人return_visit_photosvarchar255否否回访照片return_visit_descriptiontext0否否回访描述recommendint11是否智能推荐create_timedatetime0是否创建时间update_timetimestamp0是否更新时间ordinary_users表:名称类型长度不是null主键注释ordinary_users_idint11是是普通用户IDfull_namevarchar64否否姓名gendervarchar64否否性别examine_statevarchar16是否审核状态recommendint11是否智能推荐user_idint11是否用户IDcreate_timedatetime0是否创建时间update_timetimestamp0是否更新时间classification_management表名称类型长度不是null主键注释classification_management_idint11是是分类管理IDpet_speciesvarchar64否否宠物种类recommendint11是否智能推荐create_timedatetime0是否创建时间update_timetimestamp0是否更新时间adoption_record表:名称类型长度不是null主键注释adoption_record_idint11是是领养记录IDpet_namevarchar64否否宠物名称pet_sexvarchar64否否宠物性别pet_agevarchar64否否宠物年龄adopterint11否否领养人contact_numbervarchar16否否联系电话adoption_statusvarchar64否否领养状态return_visit_statusvarchar64否否回访状态reasons_for_adoptiontext0否否领养原由reply_messagetext0否否回复信息recommendint11是否智能推荐create_timedatetime0是否创建时间update_timetimestamp0是否更新时间adoption_information表:名称类型长度不是null主键注释adoption_information_idint11是是领养信息IDtitle_namevarchar64否否标题名称release_timedate0否否发布时间pet_statusvarchar64否否宠物状态pet_namevarchar64否否宠物名称pet_speciesvarchar64否否宠物种类pet_sexvarchar64否否宠物性别pet_agevarchar64否否宠物年龄pet_picturesvarchar255否否宠物图片detailed_informationtext0否否详细信息remark_informationtext0否否备注信息hitsint11是否点击数recommendint11是否智能推荐create_timedatetime0是否创建时间update_timetimestamp0是否更新时间Comment表:名称类型长度不是null主键注释comment_idint11是是评论IDuser_idint11是否评论人IDreply_to_idint11是否回复评论IDcontentlongtext0否否内容nicknamevarchar255否否昵称avatarvarchar255否否头像地址create_timetimestamp0是否创建时间update_timetimestamp0是否更新时间source_tablevarchar255否否来源表source_fieldvarchar255否否来源字段source_idint10是否来源ID系统实现开发工具系统中应用的开发工具总结如下表所示。表5-1开发工具名称工具版本操作系统IDE(IntegratedDevelopmentEnvironment)WindowsEclipse7/8/102017服务器Tomcat9.10.7JDK(JavaDevelopmentKit)JDKJavaSE8.0(1.8.0)数据库浏览器界面工具MySQL谷歌Photoshop5.76.02016注册模块未注册用户在用户注册界面uerRegister.Java,输入新用户信息,点击注册后,新用户信息由界面传入控制层userAction,调用addUser(user)方法,通过userDAOImp向数据库用户表插入用户信息,由于用户账号是自动生成的,若成功则反馈注册成功,并提示新用户的用户账号;若失败则回到登录界面,并显示登录失败。注册界面如下所示。图5-1注册界面用户注册关键代码如下所示。/***注册*@paramuser*@return*/@PostMapping("register")publicMap<String,Object>signUp(@RequestBodyUseruser){//查询用户Map<String,String>query=newHashMap<>();query.put("username",user.getUsername());Listlist=service.select(query,newHashMap<>()).getResultList();if(list.size()>0){returnerror(30000,"用户已存在");}user.setUserId(null);user.setPassword(service.encryption(user.getPassword()));service.save(user);returnsuccess(1);}/***用户ID:[0,8388607]用户获取其他与用户相关的数据*/@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="user_id")privateIntegeruserId;/***账户状态:[0,10](1可用|2异常|3已冻结|4已注销)*/@Basic@Column(name="state")privateIntegerstate;/***所在用户组:[0,32767]决定用户身份和权限*/@Basic@Column(name="user_group")privateStringuserGroup;/***上次登录时间:*/@Basic@Column(name="login_time")privateTimestamploginTime;/***手机号码:[0,11]用户的手机号码,用于找回密码时或登录时*/@Basic@Column(name="phone")privateStringphone;/***手机认证:[0,1](0未认证|1审核中|2已认证)*/@Basic@Column(name="phone_state")privateIntegerphoneState;/***用户名:[0,16]用户登录时所用的账户名称*/@Basic@Column(name="username")privateStringusername;/***昵称:[0,16]*/@Basic@Column(name="nickname")privateStringnickname;/***密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成*/@Basic@Column(name="password")privateStringpassword;/***邮箱:[0,64]用户的邮箱,用于找回密码时或登录时*/@Basic@Column(name="email")privateStringemail;/***邮箱认证:[0,1](0未认证|1审核中|2已认证)*/@Basic@Column(name="email_state")privateIntegeremailState;/***头像地址:[0,255]*/@Basic@Column(name="avatar")privateStringavatar;/***创建时间:*/@Basic@Column(name="create_time")@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateTimestampcreateTime;@Basic@TransientprivateStringcode;}登录/注销模块用户在首页点击登录,进入用户登录界面uerLogin.jsp,输入用户账号和密码,点击登录,用户账号和密码信息由界面传入控制层userAction,调用userLogin(user)方法,通过userDAOImp向数据库用户表搜索该用户账号与密码,将最终结果反馈到前端。若成功则回到首页;用户成功登录,若失败则回到登录界面,并显示登录失败。用户点击注销,清空浏览器session值,然后返回登录页或者首页。登录界面如下所示。图5-2登录界面登录界面关键代码如下所示。/***登录*@paramdata*@paramhttpServletRequest*@return*/@PostMapping("login")publicMap<String,Object>login(@RequestBodyMap<String,String>data,HttpServletRequesthttpServletRequest){("[执行登录接口]");Stringusername=data.get("username");Stringemail=data.get("email");Stringphone=data.get("phone");Stringpassword=data.get("password");ListresultList=null;Map<String,String>map=newHashMap<>();if(username!=null&&"".equals(username)==false){map.put("username",username);resultList=service.select(map,newHashMap<>()).getResultList();}elseif(email!=null&&"".equals(email)==false){map.put("email",email);resultList=service.select(map,newHashMap<>()).getResultList();}elseif(phone!=null&&"".equals(phone)==false){map.put("phone",phone);resultList=service.select(map,newHashMap<>()).getResultList();}else{returnerror(30000,"账号或密码不能为空");}if(resultList==null||password==null){returnerror(30000,"账号或密码不能为空");}//判断是否有这个用户if(resultList.size()<=0){returnerror(30000,"用户不存在");}UserbyUsername=(User)resultList.get(0);Map<String,String>groupMap=newHashMap<>();groupMap.put("name",byUsername.getUserGroup());ListgroupList=userGroupService.select(groupMap,newHashMap<>()).getResultList();if(groupList.size()<1){returnerror(30000,"用户组不存在");}UserGroupuserGroup=(UserGroup)groupList.get(0);//查询用户审核状态if(!StringUtils.isEmpty(userGroup.getSourceTable())){Stringsql="selectexamine_statefrom"+userGroup.getSourceTable()+"WHEREuser_id="+byUsername.getUserId();Stringres=String.valueOf(service.runCountSql(sql).getSingleResult());if(res==null){returnerror(30000,"用户不存在");}if(!res.equals("已通过")){returnerror(30000,"该用户审核未通过");}}//查询用户状态if(byUsername.getState()!=1){returnerror(30000,"用户非可用状态,不能登录");}Stringmd5password=service.encryption(password);if(byUsername.getPassword().equals(md5password)){//存储Token到数据库AccessTokenaccessToken=newAccessToken();accessToken.setToken(UUID.randomUUID().toString().replaceAll("-",""));accessToken.setUser_id(byUsername.getUserId());tokenService.save(accessToken);//返回用户信息JSONObjectuser=JSONObject.parseObject(JSONObject.toJSONString(byUsername));user.put("token",accessToken.getToken());JSONObjectret=newJSONObject();ret.put("obj",user);returnsuccess(ret);}else{returnerror(30000,"账号或密码不正确");}}宠物知识模块用户在登录状态下浏览宠物知识时可将该宠物知识加入宠物信息,从session中取出该用户的信息,点击加入宠物知识后前台发起请求,将对应的宠物shuliang、id参数信息从前台传递GoumaiController类里,匹配到add()方法,add()方法调用GoumaiServiceImpl类的add()方法。宠物知识界面如下所示。图5-4宠物知识界面用户管理模块根据需求,需要对用户进行添加、删除或修改详情信息。删除或修改用户时,系统根据用户的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询用户状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。添加用户时,会给出数据填写的页面,该页面根据填写好的用户编号同样会事先发送Ajax请求查询编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。用户页面设计效果如下图所示。图5-5用户管理界面领养信息管理模块领养信息功能需要考虑高并发,防止出现领养重复信息、领养状态显示出错等情况,特对领养这一共享数据增加锁机制。在乐观锁、悲观锁以及线程锁中,综合考虑性能效率和错误的可接受性选择了乐观锁机制。乐观锁的实现方式是使用版本标识来确定读到的数据与提交时的数据是否一致,提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。在数据库领养表(对应领养信息实体)设计中增加了version字段,每次数据提交时(更改疫苗状态)会判断version是否匹配,若不匹配停止本次提交,若匹配则提交成功并增加version的值。领养信息功能整体流程:用户浏览领养信息时,同时会显示领养的状态,系统会在其显示详细信息的页面时便会判断领养的状态,若宠物状态为可领养,则会显示领养的链接按钮。在用户点击领养按钮时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写领养信息的页面,填写好领养信息之后,点击提交按钮,领养成功之后返回提示信息,告知用户领养成功。领养信息流程图如下图所示。图5-6领养信息流程图领养信息界面如下图所示。图5-7领养信息管理界面领养记录管理模块根据需求,需要对领养记录进行添加、删除或修改详情信息。删除或修改订单时,系统根据领养记录的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询领养状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。添加领养记录时,会给出数据填写的页面,该页面根据填写好的领养同样会事先发送Ajax请求查询领养编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。领养记录页面设计效果如下图所示。图5-8领养记录界面图领养记录管理的关键代码如下。@PostMapping("/add")@TransactionalpublicMap<String,Object>add(HttpServletRequestrequest)throwsIOException{service.insert(service.readBody(request.getReader()));returnsuccess(1);}@TransactionalpublicMap<String,Object>addMap(Map<String,Object>map){service.insert(map);returnsuccess(1);}publicMap<String,Object>readBody(BufferedReaderreader){BufferedReaderbr=null;StringBuildersb=newStringBuilder("");try{br=reader;Stringstr;while((str=br.readLine())!=null){sb.append(str);}br.close();Stringjson=sb.toString();returnJSONObject.parseObject(json,Map.class);}catch(IOExceptione){e.printStackTrace();}finally{if(null!=br){try{br.close();}catch(IOExceptione){e.printStackTrace();}}}returnnull;}publicvoidinsert(Map<String,Object>body){StringBuffersql=newStringBuffer("INSERTINTO");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()){Objectvalue=entry.getValue();if(valueinstanceofString){sql.append("'").append(entry.getValue()).append("'").append(",");}else{sql.append(entry.getValue()).append(",");}}sql.deleteCharAt(sql.length()-1);sql.append(")");("[{}]-插入操作:{}",table,sql);Queryquery=runCountSql(sql.toString());query.executeUpdate();}系统测试测试概述软件测试是软件开发完成后必须经过的一道程序,它在软件开发过程中地位十分重要,需要由专业的测试工程师来对软件进行各方面的测试,大到功能模块测试,小到代码的单元测试,这对测试工程师来说需要有足够的耐心和专业的测试方案,软件测试归根结底就是对软件的结构和功能的综合测评,需要做到结构稳定和功能正确,二者兼顾。软件测试也叫寻找系统bug的过程,世界上没有完美无缺、不存在bug的软件,只能将软件的bug降到最低最小,来追求极致。测试过程登录测试登录测试是系统最开始就要进行,测试用户能否登录,才能完成后续的功能操作。登录测试用例表如下所示。表6-1登录测试用例编号YL001程序版本1.00功能名称使用者登录测试编制人李铁蛋功能描述根据用户的登录情况测试用例目的测试用户登录情况是否正确测试项测试数据测试结果预期结果用户名为空请输入用户名请输入用户名密码为空请输入密码请输入密码用户密码组合用户名:klouse密码klouses用户与密码不匹配用户与密码不匹配用户密码组合用户名:klouse密码klouse进入系统正确的用户名和密码登录系统信息录入测试管理员在发布信息页面,通过按照预先格式发布信息,如果因为输入时候缺少相关内容,就不能发布成功,且有相应错误提示信息录入发布测试用例表如下所示。表6-1信息录入发布测试用例编号YL002程序版本1.00功能名称信息发布测试编制人李铁蛋功能描述对使用者发布或者录入信息进行测试,判断其功能是否达到预期的要求用例目的对系统使用者录入发布信息进行原型测试。测试项测试数据测试结果预期结果属性1为空请输入属性1对应的数据请输入属性1对应的数据属性2为空请输入属性2对应的数据请输入属性2对应的数据属性3为空请输入属性3对应的数据请输入属性3对应的数据全部输入数据均填入录入发布成功录入发布成功信息更新测试管理员在更新信息页面,通过按照预先格式更新信息,如果因为输入时候缺少相关内容或者更新的数据不符合当前规范的话,就不能更新成功,且有相应错误提示信息更新测试用例表如下所示。表6-1信息更新测试用例编号YL003程序版本1.00功能名称信息更新测试编制人李铁蛋功能描述对使用者更新信息进行测试,判断其功能是否达到预期的要求用例目的对系统使用者更新信息进行原型测试。测试项测试数据测试结果预期结果属性1编号:321编号更新成功编号更新成功属性2名称:名称1名称更新成功名称更新成功属性3内容:内容1234内容内容更新成功内容更新成功全部输入数据均未更改更新成功更新成功信息删除测试管理员在信息页面,通过点击数据删除按钮来删除该条数据,如果该数据和其他数据有关联,则提示是否确定删除。信息删除测试用例表如下所示。表6-1信息删除测试用例编号YL004程序版本1.00功能名称信息删除测试编制人李铁蛋功能描述对使用者删除信息进行测试,判断其功能是否达到预期的要求用例目的对系统使用者删除信息进行原型测试。测试项测试数据测试结果预期结果数据1无任何关联的数据1数据删除成功数据删除成功数据2和其他数据有关联的数据2请确认是否删除请确认是否删除测试结果在经过之前的所有的工作之后,通过对软件的测试方法、测试原则还有典型的测试用例进行全面的、深入的介绍。经过对系统的全面测试,系统目前所具有的所有功能均成功的实现并且通过了测试,整个系统实现了基于Java开发的期望。总结与展望总结流浪狗领养管理系统采用Springboot框架开发,该系统非常完美的集优点于一身,成熟、强大、易理解易使用,通过使用这个结构,降低了开发的难度。本系统实现了基于Springboot的流浪狗领养管理,将数据操作维护的过程转化成电脑操作流程,具体实现了对系统人员管理、领养信息数据维护、用户信息数据维护、回访记录数据维护、领养记录管理数据维护,并提供查询统计功能来对流浪狗领养管理系统的相关数据进行统计分析,让使用者能更清晰的掌握运营情况,帮助使用者进行数据操作维护,简化工作流程,提高工作效率和盈利。展望目前完成的流浪狗领养管理系统,还有许多有待改进的地方。一个是功能上的改进,用户理应可以修改自己的相关信息,故应增设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论