摘要
信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对校园健康异常申报系统等问题,对校园健康异常申报系统进行研究分析,然后开发设计出校园健康异常申报系统以解决问题。
校园健康异常申报系统主要功能模块包括系统用户(管理员、学生用户、教师用户)模块管理(异常分类、学院信息、班级管理、异常申报、外出申请、学生请假、通知公告),采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用SSM框架、Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对校园健康异常申报系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现校园健康异常申报系统和部署运行使用它。
关键词:校园健康异常申报系统;Java;SSM;MYSQL
- 4 章 关键模块的设计与实现
- 登录模块
管理员、教师和学生在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员、教师和学生的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图4.1所示。
图4.1 登录界面图
登录关键代码如下所示。
/**
* 登录
* @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;
QueryWrapper wrapper = new QueryWrapper<User>();
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());
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, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
- 系统用户模块
管理员可以对系统中所有的用户角色进行管控,包含了管理员、教师以及学生这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户,这里以教师用户为例。界面如下图4.2所示。
图4.2 系统用户界面图
- 学院信息模块
管理员和学生点击“学院信息”这个按钮可以查看到系统中的学院信息,支持通过学院或者学院负责人进行查询学院信息,如果想要添加新的学院信息,点击“添加”按钮然后根据提示输入学院信息,点击“提交”后,在学院信息界面就会显示新增的学院信息,可以点击某一学院信息查看学院信息的详情,也可以直接点击“删除”进行删除学院信息。界面如下图4.3所示。
图4.3 学院信息界面图
学院信息关键代码如下所示。
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
- 班级管理模块
管理员和学生点击“班级管理”这个按钮可以查看到系统中的班级管理信息,支持通过班级名称或者班级人数进行查询班级管理信息,如果想要添加新的班级管理信息,点击“添加”按钮然后根据提示输入班级管理信息,点击“提交”后,在班级管理界面就会显示新增的班级管理信息,可以点击某一班级管理信息查看班级管理信息的详情,也可以直接点击“删除”进行删除班级管理。界面如下图4.4所示。
图4.4 班级管理界面图
班级管理关键代码如下所示。
@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);
}
- 异常申报模块
管理员和学生点击“异常申报”这个按钮可以查看到系统中的异常申报信息,支持通过学生或者学生姓名进行查询异常申报信息,如果想要添加新的异常申报信息,点击“添加”按钮然后根据提示输入异常申报信息,点击“提交”后,在异常申报界面就会显示新增的异常申报信息,可以点击某一异常申报信息查看异常申报信息的详情,也可以直接点击“删除”进行删除异常申报。界面如下图4.5所示。
图4.5 异常申报界面图
异常申报关键代码如下所示。
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
- 外出申请模块
点击“外出申请”这个按钮可以查看到系统中的外出申请信息,支持通过学生姓名或者班级名称或者申请教师进行查询外出申请信息,如果想要添加新的外出申请信息,点击“添加”按钮然后根据提示输入外出申请信息,点击“提交”后,在外出申请界面就会显示新增的外出申请信息,可以点击某一外出申请信息查看外出申请信息的详情,也可以直接点击“删除”进行删除外出申请。界面如下图4.6所示。
图4.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);
}
- 学生请假模块
点击“学生请假”这个按钮可以查看到系统中的学生请假信息,支持通过学生姓名或者班级名称或者请假教师进行查询学生请假信息,如果想要添加新的学生请假信息,点击“添加”按钮然后根据提示输入学生请假信息,点击“提交”后,在学生请假界面就会显示新增的学生请假信息,可以点击某一学生请假信息查看学生请假信息的详情,也可以直接点击“删除”进行删除学生请假。界面如下图4.7所示。
图4.7 学生请假界面图
学生请假关键代码:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
- 通知公告模块
点击“通知公告”这个菜单,可以查看到系统中所有添加的通知公告信息,支持通过标题或者发布人对通知公告信息进行查询,只有管理员用户可以添加新的通知公告,点击“添加”按钮,根据提示输入通知公告信息,点击“提交”按钮,新的通知公告信息就在系统中显示出来了,也可以对添加的通知公告信息进行删除。界面如下图4.8所示。
图4.8 通知公告界面图
通知公告关键代码如下所示。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
- 5 章 系统实验与结果分析
- 测试的目的
通过前面章节的介绍,我们可以看到本校园健康异常申报系统已经完成了,但是能不能投入使用还是未知,因为在每个项目正式使用之前必须对开发的项目进行测试,如果不进行测试一旦投入使用可能会出现很多未可知的问题,比如使用人数太多导致系统瘫痪,比如某一功能存在bug信息填写错误等等,这些错误将给使用者带来很多的困扰,甚至造成更大的损失,因此测试是项目投入使用的最后一步,为用户提供一个运行顺畅、完美的项目也就是我们进行最后测试的目的。
- 系统部分测试
用户登录功能测试:
表5.1 用户登录功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
用户登录模块测试 | 用户登录成功的情况 | 点击前登录界面输入账号和密码分别输入admin和admin后点击“登录”按钮。 | 登录成功并调整到用户界面 | 正确 |
学院信息添加功能测试:
表5.2 学院信息添加功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
学院添加模块测试 | 学院添加成功的情况 | 在学院信息的页面中将点击添加,输入学院关信息,输入正确的信息后然后点击“提交”按钮。 | 提示添加成功 | 正确 |
学院添加模块测试 | 学院添加失败的情况 | 在学院页面中不填写的学院、学院负责人,其他信息正常输入“提交”按钮。 | 提示“添加失败,信息不能为空” | 正确 |
查询学生请假功能模块测试:
表5.3 查询学生请假功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
查询学生请假功能测试 | 查询成功的情况 | 在选课界面输入学生或者学生姓名进行查询 | 查询成功 | 正确 |
班级管理添加功能测试:
表5.4 班级管理添加功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
班级管理添加模块测试 | 班级管理添加成功的情况 | 在班级管理的页面中将点击添加,输入班级相关信息,输入正确的信息后然后点击“提交”按钮。 | 提示添加成功 | 正确 |
班级管理添加模块测试 | 班级管理添加失败的情况 | 在班级管理页面中不填写的班级名称或者班级人数,其他信息正常输入“提交”按钮。 | 提示“添加失败,信息不能为空” | 正确 |
- 系统测试结果
通过编写校园健康异常申报系统的测试用例,已经检测完毕用户的登录模块、学院信息添加模块、查询外出申请模块、班级管理添加模块的功能测试,在对以上功能得测试过程中,发现了系统中的很多漏送并进行了完善,经过多人在线进行测试,系统完全可以正常运行,当然在后期的维护中系统将不断完善。
- 6 章 结论
在开发本校园健康异常申报系统之前我胸有成竹,觉得很简单,但在实际的开发中我发现了自身的很多问题,许多编程思想和方法都还没有掌握牢靠,比如Bootsatrp、Jquery、AJAX 、Spring、SpringMVC、mybeatis等许多Java Web开发技术,通过开发这个校园健康异常申报系统我成长了很多,懂得了做什么事情都要脚踏实地,不能眼高手低,在本次校园健康异常申报系统的开发中我逐渐掌握逐渐熟悉的技术。
本次校园健康异常申报系统的开发中我还学会了例如良好的编程思想和完善的规划思想。在着手编程之前需要罗列出程序框架的大概,脑海中构建出程序的主题框架。做好这一步我们才能胸有成竹的经行开发项目。当设计框架了熟于心之后,需要思考本次编程所需的主要知识点和技术点,并充分学习。如此一来项目的开发才能循序渐进、如丝般顺滑,长久以往就能养成良好的开发习惯。一个程序好不好还要看出的bug多不多,如果在项目完成前做好bug的查验与预防可能发生的事故才能保证程序的稳定长久性运行。如果项目在完工后出现各种问题自己,那么在进入社会后,不仅会给公司团队带来麻烦和增加不必要的工作,还会导致客户流失,公司对自己的评价下降。
在本次项目中我也暴露了诸多问题。对于Java的编程知识有所欠缺,环境配置和算法上出现诸多问题,时常导致项目运行出错,或者目标的实现有问题。或者实现想法时算法未优化,使得代码冗长,程序运行不顺畅。
源码获取