2 系统开发环境
Java语言是在二十世纪末由Sun公司发布的,而且公开源代码,这一优点吸引了许多世界各地优秀的编程爱好者,也使得他们开发出当时一款又一款经典好玩的小游戏。Java语言是纯面向对象语言之一,从发布初期到现今,可以说有将近20多年的历史,已发展成为人类计算机编程语言发展史上的一个深远影响。
Java语言具有非常多种的特性:(1)跨平台的无关性;(2)面向对象; (3)安全性得以保障;(4)支持多个任务;(5)多种编写方式,代码编写简单。对比其他的低级语言、高级语言,Java语言具有明显的显著优势以及未来开阔的前景,可以广泛的应用在个人笔记本电脑、大数据、大型游戏等等。
首先,Java语言具有面向对象的特性,并且易于理解。关于对象,其实可以理解成每一种事物都是一种对象,包括我们人类自身都是一种对象。利用面向对象语言的基本特征来解决软件开发中的实际问题,为有效软件开发提供了技术支持。
其次,Java 语言具有很好的跨平台无关性。所编写出来的应用程序是Java语言编写的,那么就无需再使用编译器来修改程序代码,可以直接在任何计算机系统中运行,Windows系统可以运行,在Linux系统中也可以,也就是经过一次编译,可以到处运行,所以Java语言具有卓越的可移植性,可以很好的跨平台实现。
2.2 Mysql数据库
Mysql是一个多用户、多线程的服务器,采用SQL的数据库,数据库管理系统是基于SQL的用户以及服务器模式的关系,它的优点有强大的功能、操作简单、管理方便、可靠安全、运行较快、多线程、跨平台性、完全网络化、稳定性等,非常适合Web站点或者其他应用软件,在数据库后端的开发。此外,利用许多语言,会员可以编写和访问Mysql数据库的程序。Mysql数据库也是开放源代码的,开发者越来越喜欢使用Mysql关系数据库,应用范围也被推而广之。这是由于速度快和易用性, Web站点或应用软件的数据库后端的开发也都在使用它。
mysql 数据库它有很多的优点,例如它在操作上能够让人通俗易懂、功能强大、信息储存量高等优点。所以被人们广泛应用,对于mysql数据库来说它一般主要是对数据进行编码和查询,而且在很多的设计当中都应用到了该数据库,在此过程当中我们可以对常规的数据进行查询和组合,所以我们在进行使用mysql数据库的时候只要对编写一小段的数据就能实现相应的功能。数据库,就是数据存储的储藏室,只不过数据是存储在计算机上的,而不是现实中的储藏室,数据的存放是按固定格式,而不是无序的,则定义就是 :长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要包括数据表的建立,数据存储、修改和增加数据,为了使数据库系统能够正常运行,相关人员进行的管理工作。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。
BROWSER/SERVER程序架构方式是使用电脑中安装的各种浏览器来进行访问和使用的,相比C/S的程序结构不需要进行程序的安装就可以直接使用。BROWSER/SERVER架构的运行方式是在远程的服务器上进行安装一个,然后在任何接入互联网的电脑上访问和使用。BROWSER/SERVER架构的开发方式给用户带来了极大的便利,在任何时间和地点都可以使用开发的程序系统。
在B/S的结构中,用户可以在任何可以上网的地方访问和使用系统网站的功能,没有地域和时间等方面的限制,B/S结构是把程序完整放置到计算机网络的服务器上,通过计算机互联网给用户提供远程的网络服务。在三层体系结构的B/S系统中,通过浏览器,会员可以对很多服务器发出请求, B/S系统会很大程度的降低工作量,用户只需要安装运行较少的用户端即可,大量的工作将由服务器承担,另外,服务器也完成包括访问数据库,执行应用程序的工作等等。
B/S结构主要有三层,分别为数据层、控制逻辑层和视图层。用户通过视图层,让控制层调用数据层的数据,从而达到整个访问过程。三层相互独立,维护方便,使用安全,三层有互相调用,提高效率。
2.4 Spring boot框架
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。
3 系统分析
所谓系统分析就是,需求人员通过与用户的沟通,所获取的信息,然后把这些信息通过需求说明书的方式展示给用户和开发人员。在软件功能发展的历史长河中,很长时间,特别是最开始的时候,需求分析的重要性并不被人们所认同,例如当时美国IBM公司为英国电信公司开发一套信息管理系统,在需求不明确的情况下开始开发,最初的工期为一年,由于需求获取不清晰导致工期推迟了半年多,造成巨大损失。我们很多软件公司也存在这种情况,边需求,边开发,甚至与用户没有沟通清楚的情况下,直接照搬同类型的项目进行更改,导致到系统验收的时候,重新更改,造成了人力、物力的极大浪费。而导致这一切后果的原因就是需求获取不及时、不清楚、不全面。
3.1 可行性分析
学生宿舍管理系统主要目标是实现首页、站点管理、(轮播图、公告栏、)用户管理(管理员)更多管理(更换寝室管理、体温上报、维修申请、缺勤信息、物品借用、宿舍缴费)系统管理的相关信息管理服务。在确定了目标后,我们从以下四方面对能否实现本系统目标进行可行性分析。
学生宿舍管理系统主要采用Springboot框架,基于B/S结构,Mysql数据库,对于应用程序的开发要求具备完整功能,使用简单的特点,并建立一个数据完整安全稳定的数据库。学生宿舍管理系统的开发技术具有很高可行性,且开发人员掌握了一定的开发技术,所以系统的开发具有可行性。
3.1.2操作可行性
学生宿舍管理系统的登录界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,会员只要平时使用过电脑都能进行访问操作。此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。本系统具有易操作、易管理、交互性好的特点,在操作上是非常简单的。因此本系统可以进行开发。
3.1.3 经济可行性
学生宿舍管理系统是基于B/S模式,采用Mysql数据库储存数据,所要求的硬件和软件环境,市场上都很容易购买,程序开发主要是管理系统的开发和维护。所以程序在开发人力、财力上要求不高,而且此系统不是很复杂,开发周期短,在经济方面具有较高的可行性。
3.1.4 法律可行性
此学生宿舍管理系统是自己设计的管理系统,具有很大的实际意义。因为无论是软件还是数据库,采用的都是开源代码,因此这个系统的开发和设计,并不存在侵权等问题,在法律上完全具有可行性。
综上所述,学生宿舍管理系统在技术、经济、操作和法律上都具有很高的可行性,开发此程序是可行的。
3.2系统流程分析
学生宿舍管理系统开发时,首先进行需求分析,进而对系统进行总体的设计规划,设计系统功能模块,数据库的选择等,本系统的开发流程如图3-1所示
图3-1系统开发流程图
3.2.2 用户登录流程
为了保证系统的安全性,要使用本系统对系统信息进行管理,必须先登陆到系统中。如图3-2所示。
图3-2 登录流程图
3.2.3 系统操作流程
用户打开并进入系统后,会先显示登录界面,输入正确的用户名和密码,系统自动检测信息,若信息无误,则用户会进入系统功能界面,进行操作,否则会提示错误无法登录,操作流程如图3-3所示。
图3-3 系统操作流程图
3.2.4 添加信息流程
管理员可以对书籍类型管理进行信息的添加,用户可以对自己权限内的信息进行添加,输入信息后,系统会自行验证输入的信息和数据,若信息正确,会将其添加到数据库内,若信息有误,则会提示重新输入信息,添加信息流程如图3-4所示。
图3-4 添加信息流程图
3.2.5 修改信息流程
管理员可以对书籍信息管理进行的修改,用户可以对自己权限内的信息进行修改,首先进入修改信息界面,输入修改信息数据,系统进行数据的判断验证,修改信息合法则修改成功,信息更新至数据库,信息不合法则修改失败,重新输入。修改信息流程图如图3-5所示。
图3-5 修改信息流程图
3.2.6 删除信息流程
管理员可以对留言板管理进行信息的删除,对要删除的信息进行选中后,点击删除按钮,系统会询问是否确定,若点击确定,则系统会删除掉选中的信息,并在数据库内对信息进行删除,删除信息流程图如图3-6所示。
图3-6 删除信息流程图
3.3系统用例分析
3.3.1管理员用例图
系统中的核心用户是系统管理员,管理员登录后,通过管理员菜单来管理后台系统。主要功能有:首页、用户管理、宿舍信息管理、换寝申请管理、物品借用管理、晚归信息管理、体温上报管理、维修申请管理等功能。管理员用例如图3-7所示。
图3-7 管理员用例图
学生前台进入系统可以进行首页、宿更换寝室。缺勤信息、维修申请、体温上报、宿舍缴费、物品借用等。用户前台用例如图3-8所示。
图3-8 学生前台用例图
4 系统设计
进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数据等。而且我们通过总体设计,大致可以划分出了程序的模块,以及功能。但是只是一个初步的分类,并没有真正的实现。
整体设计,只是一个初步设计,而且,对于一个项目,我们可以进行多个整体设计,通过对比,包括性能的对比、成本的对比、效益的对比,来最终确定一个最优的设计方案,选择优秀的整体设计可以降低开发成本,增加公司效益,从这一点来讲,整体设计还是非常重要的。
学生宿舍管理系统工作原理图如图4-1所示:
图4-1 系统工作原理图
系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。学生宿舍管理系统的整体结构设计如图4-2所示。
图4-2 系统结构图
数据库是计算机信息系统的基础。目前,电脑系统的关键与核心部分就是数据库。数据库开发的优劣对整个系统的质量和速度有着直接影响。
数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示用户工作环境中所涉及的事物,属性则是对实体特性的描述。在系统设计当中数据库起着决定性的因素。下面设计出这几个关键实体的实体—关系图。
4.3.2 数据库实体
数据模型中的实体(Entity),也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。
本系统的E-R图如下图所示:
1、缺勤信息实体图如图4-3所示:
图4-3缺勤信息实体图
2、用户信息实体图如图4-4所示:
图4-4用户信息实体图
3、维修申请实体图如图4-5所示:
图4-5维修申请实体图
名称 |
类型 |
长度 |
不是null |
主键 |
注释 |
student_user_id |
int |
11 |
是 |
是 |
学生用户ID |
student_name |
varchar |
64 |
否 |
否 |
学生姓名 |
student_number |
varchar |
64 |
是 |
否 |
学生学号 |
student_gender |
varchar |
64 |
否 |
否 |
学生性别 |
college |
varchar |
64 |
否 |
否 |
所在学院 |
enrollment_year_ |
varchar |
64 |
否 |
否 |
入学年份 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
recommend |
int |
11 |
是 |
否 |
智能推荐 |
user_id |
int |
11 |
是 |
否 |
用户ID |
create_time |
datetime |
0 |
是 |
否 |
创建时间 |
update_time |
timestamp |
0 |
是 |
否 |
更新时间 |
名称 |
类型 |
长度 |
不是null |
主键 |
注释 |
temperature_reporting_id |
int |
11 |
是 |
是 |
体温上报ID |
student_number |
varchar |
64 |
否 |
否 |
学生学号 |
student_name |
int |
11 |
否 |
否 |
学生姓名 |
student_gender |
varchar |
64 |
否 |
否 |
学生性别 |
college |
varchar |
64 |
否 |
否 |
所在学院 |
class_information |
varchar |
64 |
否 |
否 |
班级信息 |
student_telephone |
varchar |
64 |
否 |
否 |
学生电话 |
abnormal_date |
date |
0 |
否 |
否 |
异常日期 |
temperature_at_that_time |
varchar |
64 |
否 |
否 |
当时体温 |
physical_condition |
varchar |
64 |
否 |
否 |
身体状况 |
processing_status |
varchar |
64 |
否 |
否 |
处理状态 |
recommend |
int |
11 |
是 |
否 |
智能推荐 |
create_time |
datetime |
0 |
是 |
否 |
创建时间 |
update_time |
timestamp |
0 |
是 |
否 |
更新时间 |
名称 |
类型 |
长度 |
不是null |
主键 |
注释 |
student_information_id |
int |
11 |
是 |
是 |
学生信息ID |
student_number |
varchar |
64 |
否 |
否 |
学生学号 |
student_name |
int |
11 |
否 |
否 |
学生姓名 |
student_gender |
varchar |
64 |
否 |
否 |
学生性别 |
college |
varchar |
64 |
否 |
否 |
所在学院 |
class_information |
varchar |
64 |
否 |
否 |
班级信息 |
province_of_origin |
varchar |
64 |
否 |
否 |
生源地省份 |
student_telephone |
varchar |
64 |
否 |
否 |
学生电话 |
dormitory_building_id |
varchar |
64 |
否 |
否 |
宿舍楼ID |
dormitory_no |
varchar |
64 |
否 |
否 |
宿舍编号 |
dormitory_electricity_balance |
varchar |
64 |
否 |
否 |
宿舍电费余额 |
enrollment_year_ |
varchar |
64 |
否 |
否 |
入学年份 |
recommend |
int |
11 |
是 |
否 |
智能推荐 |
create_time |
datetime |
0 |
是 |
否 |
创建时间 |
update_time |
timestamp |
0 |
是 |
否 |
更新时间 |
名称 |
类型 |
长度 |
不是null |
主键 |
注释 |
maintenance_application_id |
int |
11 |
是 |
是 |
维修申请ID |
student_number |
varchar |
64 |
否 |
否 |
学生学号 |
student_name |
int |
11 |
否 |
否 |
学生姓名 |
student_gender |
varchar |
64 |
否 |
否 |
学生性别 |
college |
varchar |
64 |
否 |
否 |
所在学院 |
class_information |
varchar |
64 |
否 |
否 |
班级信息 |
student_telephone |
varchar |
64 |
否 |
否 |
学生电话 |
dormitory_building_id |
varchar |
64 |
否 |
否 |
宿舍楼ID |
dormitory_no |
varchar |
64 |
否 |
否 |
宿舍编号 |
application_date |
date |
0 |
否 |
否 |
申请日期 |
fault_location |
varchar |
64 |
否 |
否 |
故障地点 |
fault_photos |
varchar |
255 |
否 |
否 |
故障照片 |
processing_status |
varchar |
64 |
否 |
否 |
处理状态 |
cause_of_failure |
longtext |
0 |
否 |
否 |
故障原因 |
recommend |
int |
11 |
是 |
否 |
智能推荐 |
create_time |
datetime |
0 |
是 |
否 |
创建时间 |
update_time |
timestamp |
0 |
是 |
否 |
更新时间 |
名称 |
类型 |
长度 |
不是null |
主键 |
注释 |
late_return_id |
int |
11 |
是 |
是 |
晚归信息ID |
student_number |
varchar |
64 |
否 |
否 |
学生学号 |
student_name |
int |
11 |
否 |
否 |
学生姓名 |
student_gender |
varchar |
64 |
否 |
否 |
学生性别 |
dormitory_building_id |
varchar |
64 |
否 |
否 |
宿舍楼ID |
dormitory_no |
varchar |
64 |
否 |
否 |
宿舍编号 |
late_return_date |
date |
0 |
否 |
否 |
晚归日期 |
reasons_for_late_return |
longtext |
0 |
否 |
否 |
晚归原因 |
recommend |
int |
11 |
是 |
否 |
智能推荐 |
create_time |
datetime |
0 |
是 |
否 |
创建时间 |
update_time |
timestamp |
0 |
是 |
否 |
更新时间 |
名称 |
类型 |
长度 |
不是null |
主键 |
注释 |
change_dormitory_id |
int |
11 |
是 |
是 |
更换寝室ID |
student_number |
varchar |
64 |
否 |
否 |
学生学号 |
student_name |
int |
11 |
否 |
否 |
学生姓名 |
student_gender |
varchar |
64 |
否 |
否 |
学生性别 |
college |
varchar |
64 |
否 |
否 |
所在学院 |
class_information |
varchar |
64 |
否 |
否 |
班级信息 |
student_telephone |
varchar |
64 |
否 |
否 |
学生电话 |
dormitory_building_id |
varchar |
64 |
否 |
否 |
宿舍楼ID |
dormitory_no |
varchar |
64 |
否 |
否 |
宿舍编号 |
application_date |
date |
0 |
否 |
否 |
申请日期 |
processing_status |
varchar |
64 |
否 |
否 |
处理状态 |
reason_for_changing_sleep |
longtext |
0 |
否 |
否 |
换寝原因 |
recommend |
int |
11 |
是 |
否 |
智能推荐 |
create_time |
datetime |
0 |
是 |
否 |
创建时间 |
update_time |
timestamp |
0 |
是 |
否 |
更新时间 |
5系统详细设计
5.1用户前台功能模块
学生宿舍管理系统,在系统首页可以查看首页、更换寝室、体温上报、维修申请、晚归信息、宿舍缴费等内容,如图5-1所示。
图5-1用户前台功能界面图
用户注册,在用户注册页面可以填写账号、密码、昵称、邮箱、手机号码、身份、性别、身份证号码等详细内容进行注册,如图5-2所示。
图5-2用户注册界面图
用户注册关键代码如下所示。
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
登录,在登录页面通过填写账号、密码等信息完成登录,如图5-3所示。更换寝室页面通过填写学生信息、宿舍楼、宿舍编号、申请日期、换寝原因、处理状态等信息进行提交操作,如图5-4所示。
图5-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.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}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.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
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());
tokenService.save(accessToken);
// 返回用户信息
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, "账号或密码不正确");
}
}
图5-4更换寝室界面图
维修申请,在申请页面通过填写学生信息、宿舍楼、宿舍编号、处理状态、故障原因等信息进行立即提交申请,如图5-5所示。体温上报页面填写具体学生信息、身体状况、体温、处理状态进行提交,如图5-6所示。
图5-5维修申请界面图
图5-6体温上报界面图
体温上报的逻辑代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
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()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
管理员登录,通过填写注册时输入的用户名、密码、进行登录,如图5-7所示。
图5-7管理员登录界面图
管理员登录进入学生宿舍管理系统后的主要功能是:首页、用户管理、更换寝室管理、体温上报管理、维修申请管理、晚归信息、宿舍缴费管理等信息。5-8所示。还可以对更换寝室信息等进行管理操作,如图5-9所示。
图5-8首页展示界面图
图5-9更换寝室管理界面图
更换寝室管理界面逻辑代码如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
体温上报管理,在体温上报管理页面中可以对学生信息、上报体温、异常情况等信息进行管理,并可以对报修申请进行提交等操作,如图5-10所示。
图5-10体温上报管理界面图
缺勤信息管理,在缺勤信息页面中可以对:学生信息、宿舍楼、所在学院、所在学校、缺勤信息等维护管理,并可以对需要修改的信息进行修改或删除等详细操作,如图5-11所示。
图5-11缺勤信息管理界面图
缺勤信息管理界面逻辑代码如下:
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
宿舍公告管理,在宿舍公告页面中可以查看标题、内容等内容,并且可以对新的宿舍公告进行发布,修改或删除等详细操作,如图5-12所示。
图5-12宿舍公告管理界面图
物品借用页面中主要包括:学生信息、所在学校、班级信息、借用日期等信息,如图5-13所示。
图5-13物品借用管理界面图
学生管理,在学生管理页面中可以查看学生姓名、密码、姓名、性别、头像等内容,并且根据需要对已有学生管理进行详情,修改或删除等详细操作,如图5-14所示。
图5-14学生管理界面图
学生管理界面关键代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
6系统测试
系统开发的最后一个步骤就是系统测试,系统测试也是整个系统十分重要的一个环节,测试的好坏关系到产品的发展。用户对软件的质量、性能和可靠性等需求就要通过测试来实现。测试过程要必须遵循严谨性、完善性、规范性的原则,测试的主要目的就是看看在系统运行中,是否会出现bug,然后对出现的bug进行调试,直到程序完美运行。但是软件的测试只能尽可能的减少bug,理论上来说是无法达到消除bug。但是bug越少,系统出错的几率就越低,用户使用起来也更方便、更安全。
近年来,软件包含测试从现在的检验当中来看,系统接近预期目标可能出现的问题,并对这些错误做出相应的修正,假如我们不进行早期的测试错误就会延续下去,最后所做出的成品就会有很大的困难。
我们要在这个测试的过程当中找出错误。测试成软件开发的主要一部分,自从有了程序的设计那天开始,它就成为了重要的组成部分。经过统计来看,软件测试可以占据这个系统45%的工作量,而在软件开发的成本当中,对于测试成本来说它包含了很多的测试工作。每个程序测试时都会出现和遇到错误。在整个程序的开发过程当中,人为去查找错误是非常复杂和困难的,所以我们一般都会找一些测试的工具来进行测试。
6.1系统测试的意义
随着现代信息的快速发展,在社会各大领域中已经都开始应用网络信息技术,在应用网络技术的同时人们也开始把软件的质量问题作为了一个重要焦点来关注,因为一个软件的好与坏它决定着这个系统在市场上的生存,所以我们必须要把软件质量来做好,这样才有一定的生存能力。对于用户来说它们首先选用的都是保证这个系统软件的质量问题,因为一个系统的软件质量决定着用户在后期上成本经济的问题。
具体测试方法包括:黑盒测试和白盒测试。
黑盒测试又被人们称作为功能测试,通常是在程序的接口来做一些测试的方法,它一般包括对程序的功能和使用的方法来做出一些数据的接受和输出,同时还可以做出正确的输出信息,并保证与外部信息的完整性。
白盒测试通常被人们称作为结构测试,在整个程序的结构和处理当中它是由程序当中的逻辑测试和检验程序来完成一些正确的工作。
具体的功能测试它是包括:系统的适用性、准确性、安全性等功能测试。
6.3测试分析
学生宿舍管理系统满足相关信息的管理需求,在设计时借鉴了国内外优秀网站的优点,从界面到系统设计都保证了管理员以及用户能够方便操作。系统的主要特点和优点归纳如下:
(1)本系统用的移置性和针对性都比较高,因为针对性高可以提供更好的服务而移置性可以在多个系统上运行,更给用户带来了极大的方便。
(2)该学生宿舍管理系统内容全面,管理方便可以及时的全面的处理各种错误,异常,这样避免了很多因用户的马虎操作而出现的失误,其操作方便,用户界面友好,能够上网的人都可以很好的进行操作。
经过对上述的测试结果分析,所有基本功能齐全,操作简单,系统运行性能良好,系统安全可靠,能促进学生宿舍管理系统的发展,发展前景广阔。
[1]孙妃,李可心,刘楠,王晓兰,孔荣荣,王慧.学生宿舍管理系统的设计与实现[J].江苏科技信息,2021,38(29):40-42+75.
[2]朱宏斌.智能控电管理系统在高校学生公寓中的应用——以宿迁学院为例[J].数字通信世界,2021(10):194-195.
[3]黄炜钢.基于移动端的中职学生宿舍管理系统的设计与实现[J].信息与电脑(理论版),2021,33(02):141-144.
[4]冯晓春,陈艳.基于web开发的学生公寓管理系统设计与实现[J].科技创新与应用,2020(31):77-78.
[5]王锋,金晶.高校学生宿舍水电表管理系统设计与实现[J].智能计算机与应用,2020,10(06):191-194.
[6]辛阅,黄浪尘,李家儿.学生宿舍远程智能管理系统设计[J].软件,2020,41(03):79-83.
[7]Xiaochen Geng,Sha Liu. Application of Modular Interface Design in Student Dormitory Management System[C]//Proceedings of 4th International Conference on Culture,Education and Economic Development of Modern Society(ICCESE 2020)(Advances in Social Science,Education and Humanities Research,VOL.416).Proceedings of 4th International Conference on Culture,2020:173-180.
[8]欧畅.宿舍管理系统的前端设计与实现[J].湖北农机化,2020(02):186-187.
[9]贾树刚.学生宿舍管理系统的设计与实现[J].辽宁师专学报(自然科学版),2019,21(04):44-46+100.
[10]初庆东,张敏霞,崔卫韬.一种新型高校学生信息管理系统的设计与实现[J].信息技术,2019,43(06):69-71+76.
[11]王青.高校宿舍智能管理系统设计[J].微型电脑应用,2019,35(06):135-137.
[12]俞玲.基于数据挖掘的高校学生宿舍管理系统研究与设计[J].信息与电脑(理论版),2019(04):121-122.
[13]徐洋.关于“互联网+高校学生宿舍”的研究[J].长江丛刊,2019(04):147-148.
[14]黄敏.基于B/S架构的学生宿舍管理系统数据库设计与实践[J].电脑知识与技术,2018,14(35):83-84+92.
[15]Wang Xi,Wang De. Research of Student Management Mechanism under the Background of Credit System Based on Student Dormitory[C]//Proceedings of the 14th International Conference on Innovation and Management.,2017:1676-1680.