




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生毕业论文(设计)题目springboot网络云端日记本系统学院XXXXX专业班级XXXXX用户姓名XXXX指导教师XXXX撰写日期:2023年3月目录TOC\o"1-3"\h\u摘要 .3系统开发技术的特色(1)网络云端日记本系统中的web后台管理中的后端不再使用古老的jsp+javabean+servlet技术,而是使用当前主流的springboot框架,它减少java配置代码,简化编程代码,目前springboot框架也是很多企业选择的框架之一。(2)网络云端日记本系统中的web后台管理中的前端使用的是JavaScript框架,它配合ajax[8]和jquery可以美化页面设计。(3)网络云端日记本系统中数据库用的mysql5.7,它执行效率高。1.4springboot框架介绍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。2网络云端日记本系统分析系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。2.1可行性分析(1)技术可行性分析网络云端日记本系统存储所使用的是mysql数据库以及开发中所使用的是IDEA、Tomcat这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用springboot框架进行开发,使系统的可扩展性和维护性更佳,减少java配置代码,简化编程代码,目前springboot框架也是很多企业选择的框架之一。(2)经济可行性分析在开发网络云端日记本系统中所使用的开发软件像IDEA开发工具、Tomcat8.0服务器、MySQL5.7数据库、Photoshop图片处理软件等,这些都是开源免费的,这些环境在学校都进行了系统的学习,自己能够独立操作完成,不需要额外花费,而且系统的开发工具从网上都可以直接下载,因此在经济方面是可行的。(3)操作可行性分析此次项目设计的时候我参考了很多类似系统的成功案例,对它们的操作界面以及功能都进行了系统的分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。因此操作可行性也没有问题。2.2系统流程分析业务流程是用一些特定的符合和线条来进行演示用户在使用系统时的过程,在进行系统分析的时候,业务流程可以帮助开发人员更好的理解业务,发现错误,完善系统。2.2.1数据增加流程用户成功登入系统后就能够实现增加数据的操作,增加数据的编号是特定的,系统生成,用户不能随意填写,除了编号以外,其他增加信息用户自己填写,填写后的信息经过系统验证,验证合法通过就显示增加数据成功了,相反的话,就没有增加成功,图2-1显示的就是在增加数据时的流程。图2-1数据增加流程图2.2.2数据修改流程数据修改时的流程和上面介绍的数据增加时的流程差不多,如图2-2所示。图2-2数据修改流程图2.2.3数据删除流程如果系统里面存在一些没有用的数据的话,相关的管理人员还可以对这些数据进行删除,图2-3就是数据删除时的流程图。图2-3数据删除流程图2.3系统功能分析2.3.1功能性分析网络云端日记本系统的设计与实现是为了让使用者更加方便的进行管理员工相关联的一些信息,使用者查找管理的时候能够节省大量的时间和精力,有效减少不必要的查找时间。系统在功能上划分为管理员端以及系统用户这两大部分。管理员端:(1)个人资料:管理在登录以后可以修改自己的个人资料以及对自己账号登录的密码进行修改;(2)系统用户:管理员可以对系统中所有的用户角色进行管控,包含了管理员以及系统用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。(3)日记信息:管理员点击“日记信息”会显示出所有的日记信息,支持通过日记信息状态或者输入日记编号或者日记名称对日记信息进行查询,如果想要添加新的日记信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条日记信息,点击“删除”进行删除。(4)备忘录信息:管理员点击“备忘录信息”会显示出所有的备忘录信息,支持输入标题名称或者用户信息对备忘录信息进行查询,如果想要添加新的备忘录信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条备忘录信息,点击“删除”进行删除,也可以点击后面的“提醒”按钮对备忘录信息的提醒信息进行更新维护;(5)提醒信息:管理员点击“提醒信息”会显示出所有的提醒信息,支持通过提醒信息状态或者输入标题名称或者用户信息对提醒信息进行查询,如果想要添加新的提醒信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条提醒信息,点击“删除”进行删除。(6)公告信息:点击“公告信息”这个按钮可以查看到系统中所有的公告信息,支持通过公告编号或者公告标题进行查询公告信息,如果想要添加新的公告信息,点击“添加”按钮然后根据提示输入公告信息,点击“提交”后,在公告信息界面就会显示新增的公告信息,可以点击某一公告信息查看公告信息的详情,也可以直接点击“删除”进行删除公告信息;系统用户端:(1)注册登录:当用户想要对系统中所实现的功能进行查询管理的时候,就必须进行登录到系统当中,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,用户的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录;(2)个人资料:学生在登录以后可以修改自己的个人资料以及对自己账号登录的密码进行修改;(3)日记信息:管理员点击“日记信息”会显示出所有的日记信息,支持通过日记信息状态或者输入日记编号或者日记名称对日记信息进行查询,如果想要添加新的日记信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条日记信息,点击“删除”进行删除。(4)备忘录信息:管理员点击“备忘录信息”会显示出所有的备忘录信息,支持通过标题名称或者用户信息或者用户姓名对备忘录信息进行查询,如果想要添加新的备忘录信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条备忘录信息,点击“删除”进行删除。(5)公告信息:点击“公告信息”这个菜单,可以查看到系统中所有添加的公告信息,支持通过公告编号或者公告标题对公告信息进行查询,如果想要了解某一公告信息的详细信息,点击后面的“详情”会进入详情界面;2.3.2非功能性分析网络云端日记本系统的非功能性需求比如网络云端日记本系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:表3-SEQ表3\*ARABIC1网络云端日记本系统非功能需求表安全性主要指网络云端日记本系统数据库的安装,数据库的使用和密码的设定必须合乎规范。可靠性可靠性是指网络云端日记本系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。性能性能是影响网络云端日记本系统占据市场的必要条件,所以性能最好要佳才好。可扩展性比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。易用性用户只要跟着网络云端日记本系统的页面展示内容进行操作,就可以了。可维护性网络云端日记本系统开发的可维护性是非常重要的,经过测试,可维护性没有问题2.4系统用例分析网络云端日记本系统中系统用户角色用例图如图2-3所示:图2-3网络云端日记本系统系统用户角色用例图网络云端日记本系统中管理员角色用例图如图2-4所示:图2-4网络云端日记本系统管理员角色用例图2.5本章小结本章主要通过对网络云端日记本系统的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个网络云端日记本系统要实现的功能。同时也为网络云端日记本系统的代码实现和测试提供了标准。3网络云端日记本系统总体设计本章主要讨论的内容包括网络云端日记本系统的功能模块设计、数据库系统设计。3.1系统架构设计本网络云端日记本系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。图3-1网络云端日记本系统架构设计图表现层(UI):又称UI层,主要完成本网络云端日记本系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本网络云端日记本系统时的舒适度。UI的界面设计也要适应不同版本的网络云端日记本系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。业务逻辑层(BLL):主要完成本网络云端日记本系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。数据层(DL):由于本网络云端日记本系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本网络云端日记本系统的数据存储和管理功能。3.2系统功能模块设计3.2.1整体功能模块设计在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本网络云端日记本系统中的用例。那么接下来就要开始对本网络云端日记本系统的架构、主要功能和数据库开始进行设计。网络云端日记本系统根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。图3-2网络云端日记本系统功能模块图3.3数据库设计数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。3.3.1数据库概念结构设计下面是整个网络云端日记本系统中主要的数据库表总E-R实体关系图。图3-6网络云端日记本系统总E-R关系图下面根据网络云端日记本系统的数据库总E-R关系图可以得出网络云端日记本系统需要很多E-R图,在此罗列出来一些主要的数据库E-R模型图。图3-7公告信息E-R关系图图3-8日记信息E-R关系图图3-9备忘录信息E-R关系图图3-10系统用户E-R关系图3.3.2数据库逻辑结构设计通过前面E-R关系图可以看到项目需要创建很多个数据表。以下是项目中的主要数据库表的关系模型:表announcement_information(公告信息)编号名称数据类型长度小数位允许空值主键默认值说明1announcement_information_idint100NY公告信息ID2announcement_novarchar640YN公告编号3announcement_titlevarchar640YN公告标题4publishervarchar640YN发布人5release_datedate100YN发布日期6announcement_contenttext655350YN公告内容7recommendint100NN0智能推荐8create_timedatetime190NNCURRENT_TIMESTAMP创建时间9update_timetimestamp190NNCURRENT_TIMESTAMP更新时间表auth(用户权限管理)编号名称数据类型长度小数位允许空值主键默认值说明1auth_idint100NY授权ID:2user_groupvarchar640YN用户组:3mod_namevarchar640YN模块名:4table_namevarchar640YN表名:5page_titlevarchar2550YN页面标题:6pathvarchar2550YN路由路径:7positionvarchar320YN位置:8modevarchar320NN_blank跳转方式:9addtinyint30NN1是否可增加:10deltinyint30NN1是否可删除:11settinyint30NN1是否可修改:12gettinyint30NN1是否可查看:13field_addtext655350YN添加字段:14field_settext655350YN修改字段:15field_gettext655350YN查询字段:16table_nav_namevarchar5000YN跨表导航名称:17table_navvarchar5000YN跨表导航:18optiontext655350YN配置:19create_timetimestamp190NNCURRENT_TIMESTAMP创建时间:20update_timetimestamp190NNCURRENT_TIMESTAMP更新时间:表classification_management(分类管理)编号名称数据类型长度小数位允许空值主键默认值说明1classification_management_idint100NY分类管理ID2journal_classificationvarchar640YN日记分类3recommendint100NN0智能推荐4create_timedatetime190NNCURRENT_TIMESTAMP创建时间5update_timetimestamp190NNCURRENT_TIMESTAMP更新时间表hits(用户点击)编号名称数据类型长度小数位允许空值主键默认值说明1hits_idint100NY点赞ID:2user_idint100NN0点赞人:3create_timetimestamp190NNCURRENT_TIMESTAMP创建时间:4update_timetimestamp190NNCURRENT_TIMESTAMP更新时间:5source_tablevarchar2550YN来源表:6source_fieldvarchar2550YN来源字段:7source_idint100NN0来源ID:表journal_information(日记信息)编号名称数据类型长度小数位允许空值主键默认值说明1journal_information_idint100NY日记信息ID2journal_numbervarchar640YN日记编号3journal_namevarchar640YN日记名称4journal_labelvarchar640YN日记标签5journal_classificationvarchar640YN日记分类6user_informationint100YN0用户信息7user_namevarchar640YN用户姓名8user_gendervarchar640YN用户性别9user_agevarchar640YN用户年龄10number_of_journalsvarchar640YN日记数量11journal_datedate100YN日记日期12journal_picturevarchar2550YN日记图片13journal_audiovarchar2550YN日记音频14journal_videovarchar2550YN日记视频15journal_contenttext655350YN日记内容16recommendint100NN0智能推荐17create_timedatetime190NNCURRENT_TIMESTAMP创建时间18update_timetimestamp190NNCURRENT_TIMESTAMP更新时间表memorandum_information(备忘录信息)编号名称数据类型长度小数位允许空值主键默认值说明1memorandum_information_idint100NY备忘录信息ID2title_namevarchar640YN标题名称3user_informationint100YN0用户信息4user_namevarchar640YN用户姓名5user_gendervarchar640YN用户性别6user_agevarchar640YN用户年龄7content_detailstext655350YN内容详情8recommendint100NN0智能推荐9create_timedatetime190NNCURRENT_TIMESTAMP创建时间10update_timetimestamp190NNCURRENT_TIMESTAMP更新时间表reminder_information(提醒信息)编号名称数据类型长度小数位允许空值主键默认值说明1reminder_information_idint100NY提醒信息ID2title_namevarchar640YN标题名称3user_informationint100YN0用户信息4user_namevarchar640YN用户姓名5user_gendervarchar640YN用户性别6user_agevarchar640YN用户年龄7reminder_contenttext655350YN提醒内容8recommendint100NN0智能推荐9create_timedatetime190NNCURRENT_TIMESTAMP创建时间10update_timetimestamp190NNCURRENT_TIMESTAMP更新时间表system_user(系统用户)编号名称数据类型长度小数位允许空值主键默认值说明1system_user_idint100NY系统用户ID2user_namevarchar640YN用户姓名3user_gendervarchar640YN用户性别4user_agevarchar640YN用户年龄5examine_statevarchar160NN已通过审核状态6recommendint100NN0智能推荐7user_idint100NN0用户ID8create_timedatetime190NNCURRENT_TIMESTAMP创建时间9update_timetimestamp190NNCURRENT_TIMESTAMP更新时间表upload(文件上传)编号名称数据类型长度小数位允许空值主键默认值说明1upload_idint100NY上传ID2namevarchar640YN文件名3pathvarchar2550YN访问路径4filevarchar2550YN文件路径5displayvarchar2550YN显示顺序6father_idint100YN0父级ID7dirvarchar2550YN文件夹8typevarchar320YN文件类型表user(用户账户:用于保存用户登录信息)编号名称数据类型长度小数位允许空值主键默认值说明1user_idmediumint80NY用户ID:[0,8388607]用户获取其他与用户相关的数据2statesmallint50NN1账户状态:[0,10](1可用|2异常|3已冻结|4已注销)3user_groupvarchar320YN所在用户组:[0,32767]决定用户身份和权限4login_timetimestamp190NNCURRENT_TIMESTAMP上次登录时间:5phonevarchar110YN手机号码:[0,11]用户的手机号码,用于找回密码时或登录时6phone_statesmallint50NN0手机认证:[0,1](0未认证|1审核中|2已认证)7usernamevarchar160NN用户名:[0,16]用户登录时所用的账户名称8nicknamevarchar160YN昵称:[0,16]9passwordvarchar640NN密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成10emailvarchar640YN邮箱:[0,64]用户的邮箱,用于找回密码时或登录时11email_statesmallint50NN0邮箱认证:[0,1](0未认证|1审核中|2已认证)12avatarvarchar2550YN头像地址:[0,255]13create_timetimestamp190NNCURRENT_TIMESTAMP创建时间:表user_group(用户组:用于用户前端身份和鉴权)编号名称数据类型长度小数位允许空值主键默认值说明1group_idmediumint80NY用户组ID:[0,8388607]2displaysmallint50NN100显示顺序:[0,1000]3namevarchar160NN名称:[0,16]4descriptionvarchar2550YN描述:[0,255]描述该用户组的特点或权限范围5source_tablevarchar2550YN来源表:6source_fieldvarchar2550YN来源字段:7source_idint100NN0来源ID:8registersmallint50YN0注册位置:9create_timetimestamp190NNCURRENT_TIMESTAMP创建时间:10update_timetimestamp190NNCURRENT_TIMESTAMP更新时间:3.4本章小结整个网络云端日记本系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。4关键模块的设计与实现4.1登录模块管理员和用户在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员和用户的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图4.1所示。图4.1登录界面图登录关键代码如下所示。/***登录*@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,"账号或密码不正确");}}4.2注册模块注册模块满足用户部分,当用户想要进行用户相关信息的查询管理的时候,就必须进行登录,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,注册的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录,其主界面展示如下图4.2所示。图4.2注册界面图注册逻辑代码如下:/***注册*@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;}4.3用户管理模块管理员可以对系统中所有的用户角色进行管控,包含了管理员以及用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户,这里以管理员用户为例。界面如下图4.3所示。图4.3用户管理界面图用户管理逻辑代码如下所示。@RequestMapping(value="/del")@TransactionalpublicMap<String,Object>del(HttpServletRequestrequest){service.delete(service.readQuery(request),service.readConfig(request));returnsuccess(1);}@Transactionalpublicvoiddelete(Map<String,String>query,Map<String,String>config){StringBuffersql=newStringBuffer("DELETEFROM").append("`").append(table).append("`").append("");sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.GROUP_BY))));("[{}]-删除操作:{}",table,sql);Queryquery1=runCountSql(sql.toString());query1.executeUpdate();}4.4日记信息模块管理员点击“日记信息”会显示出所有的日记信息,支持输入日记编号或者日记名称对日记信息进行查询,如果想要添加新的日记信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条日记信息,点击“删除”进行删除,界面如下图4.4所示。图4.4日记信息界面图日记信息关键代码如下所示。@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();}4.5备忘录信息模块管理员点击“备忘录信息”会显示出所有的备忘录信息,支持输入标题名称或者用户信息或者用户姓名对备忘录信息进行查询,如果想要添加新的备忘录信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条备忘录信息,点击“删除”进行删除,也可以点击后面的“提醒”按钮对备忘录信息的提醒信息进行更新维护。界面如下图4.5所示。图4.5备忘录信息界面图备忘录信息关键代码如下所示。@PostMapping("/set")@TransactionalpublicMap<String,Object>set(HttpServletRequestrequest)throwsIOException{service.update(service.readQuery(request),service.readConfig(request),service.readBody(request.getReader()));returnsuccess(1);}publicMap<String,String>readConfig(HttpServletRequestrequest){Map<String,String>map=newHashMap<>();map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));returnmap;}publicMap<String,String>readQuery(HttpServletRequestrequest){StringqueryString=request.getQueryString();if(queryString!=null&&!"".equals(queryString)){String[]querys=queryString.split("&");Map<String,String>map=newHashMap<>();for(Stringquery:querys){String[]q=query.split("=");map.put(q[0],q[1]);}map.remove(FindConfig.PAGE);map.remove(FindConfig.SIZE);map.remove(FindConfig.LIKE);map.remove(FindConfig.ORDER_BY);map.remove(FindConfig.FIELD);map.remove(FindConfig.GROUP_BY);map.remove(FindConfig.MAX_);map.remove(FindConfig.MIN_);returnmap;}else{returnnewHashMap<>();}}@Transactionalpublicvoidupdate(Map<String,String>query,Map<String,String>config,Map<String,Object>body){StringBuffersql=newStringBuffer("UPDATE").append("`").append(table).append("`").append("SET");for(Map.Entry<String,Object>entry:body.entrySet()){Objectvalue=entry.getValue();if(valueinstanceofString){sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");}else{sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");}}sql.deleteCharAt(sql.length()-1);sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));("[{}]-更新操作:{}",table,sql);Queryquery1=runCountSql(sql.toString());query1.executeUpdate();}publicStringtoWhereSql(Map<String,String>query,Booleanlike){if(query.size()>0){try{StringBuildersql=newStringBuilder("WHERE");for(Map.Entry<String,String>entry:query.entrySet()){if(entry.getKey().contains(FindConfig.MIN_)){Stringmin=humpToLine(entry.getKey()).replace("_min","");sql.append("`"+min+"`").append(">='").append(URLDecoder.decode(entry.getValue(),"UTF-8")).append("'and");continue;}if(entry.getKey().contains(FindConfig.MAX_)){Stringmax=humpToLine(entry.getKey()).replace("_max","");sql.append("`"+max+"`").append("<='").append(URLDecoder.decode(entry.getValue(),"UTF-8")).append("'and");continue;}if(like==true){sql.append("`"+humpToLine(entry.getKey())+"`").append("LIKE'%").append(URLDecoder.decode(entry.getValue(),"UTF-8")).append("%'").append("and");}else{sql.append("`"+humpToLine(entry.getKey())+"`").append("='").append(URLDecoder.decode(entry.getValue(),"UTF-8")).append("'").append("and");}}sql.delete(sql.length()-4,sql.length());sql.append("");returnsql.toString();}catch(UnsupportedEncodingExceptione){("拼接sql失败:{}",e.getMessage());}}return"";}4.6提醒信息模块管理员和用户点击“提醒信息”这个按钮可以查看到系统中的提醒信息,支持通过标题名称或者用户信息或者用户性别进行查询提醒信息,如果想要添加新的提醒信息,点击“添加”按钮然后根据提示输入提醒信息,点击“提交”后,在提醒信息界面就会显示新增的提醒信息,可以点击某一提醒信息查看提醒信息的详情,也可以直接点击“删除”进行删除提醒信息。界面如下图4.6所示。图4.6提醒信息界面图提醒信息关键代码如下所示。@RequestMapping(value="/del")@TransactionalpublicMap<String,Object>del(HttpServletRequestrequest){service.delete(service.readQuery(request),service.readConfig(request));returnsuccess(1);}@Transactionalpublicvoiddelete(Map<String,String>query,Map<String,String>config){StringBuffersql=newStringBuffer("DELETEFROM").append("`").append(table).append("`").append("");sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.GROUP_BY))));("[{}]-删除操作:{}",table,sql);Queryquery1=runCountSql(sql.toString());query1.executeUpdate();}4.7公告信息模块点击“公告信息”这个菜单,可以查看到系统中所有添加的公告信息,支持通过公告编号或者公告标题对公告信息进行查询,只有管理员用户可以添加新的公告信息,点击“添加”按钮,根据提示输入公告信息,点击“提交”按钮,新的公告信息就在系统中显示出来了,也可以对添加的公告信息进行删除。界面如下图4.7所示。图4.7公告信息界面图4.8修改密码模块管理员和用户点击“修改密码”按钮,可以对登录密码进行更改,首先输入原密码,然后再输入新密码和确认密码,当原密码正确,输入两次新密码一致,则修改成功,否则给出错误提示信息。修改密码界面如下图4.8所示。图4.8修改密码界面图5系统测试5.1系统测试的目的 系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。5.2系统测试用例系统测试包括:用户登录功能测试、日记信息展示功能测试、日记信息添加、日记信息搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:用户登录功能测试:表5-1用户登录功能测试表用例名称用户登录系统目的测试用户通过正确的用户名和密码可否登录功能前提未登录的情况下测试流程1)进入登录页面2)输入正确的用户名和密码预期结果用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入实际结果实际结果与预期结果一致日记信息查看功能测试:表5-2日记信息查看功能测试表用例名称日记信息查看目的测试日记信息查看功能前提用户登录测试流程点击日记信息列表预期结果可以查看到所有日记信息实际结果实际结果与预期结果一致管理员添加日记信息界面测试:表5-3管理员添加日记信息界面测试表用例名称日记信息发布测试用例目的测试日记信息发布功能前提用户正常登录情况下测试流程1)点击日记信息管理就,然后点击添加后并填写信息。2)点击进行提交。预期结果提交以后,页面首页会显示新的日记信息实际结果实际结果与预期结果一致日记信息搜索功能测试:表5-4日记信息搜索
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蜜饯制作与食品加工设备优化选择考核试卷
- 道路交通设施设计与施工考核试卷
- 缫丝行业的环保与绿色生产考核试卷
- 环境保护服务项目策划考核试卷
- 豪华住宅建筑设计与装修考核试卷
- 计算机租赁业务中的服务品质提升与客户满意度持续改进措施考核试卷
- 网红炸鸡品牌品牌授权终止及后续处理合同
- 同声传译租赁合同费用结算补充协议
- 海外房产买卖合同翻译及公证附件服务合同
- 拼多多平台店铺客户服务外包执行协议
- 保温安全生产管理制度
- 2023年中国铁路沈阳局集团有限公司招聘高校毕业生考试真题
- 戊酸二氟可龙乳膏-临床用药解读
- 2024年临期食品创新创业计划书
- 2023钢膜结构停车棚施工合同协议书
- 电力行业安全检查表(文档-)(正式版)
- 小学生古诗词知识竞赛题(附答案)
- 基于激光点云数据的三维模型构建
- 乔木栽植施工方案
- 《新时代劳动教育》新时代劳动价值观
- 6人小品《没有学习的人不伤心》台词完整版
评论
0/150
提交评论