基于SSM的面向过程考核的高校课程实验系统-00941(免费领取源码+数据库) 可做计算机毕业设计 JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案等
4 面向过程性考核的高校课程实验系统详细设计与实现
面向过程性考核的高校课程实验系统的详细设计与实现主要是根据前面的面向过程性考核的高校课程实验系统的需求分析和面向过程性考核的高校课程实验系统的总体设计来设计页面并实现业务逻辑。主要从面向过程性考核的高校课程实验系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入面向过程性考核的高校课程实验系统的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2用户登录界面
面向过程性考核的高校课程实验系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到面向过程性考核的高校课程实验系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-2所示。
图4-2用户登录界面图
登录关键代码如下所示。
/**
* 登录
* @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.1.3用户注册界面
不是面向过程性考核的高校课程实验系统中正式用户的是可以在线进行注册的,如果你没有本面向过程性考核的高校课程实验系统的账号的话,添加“注册”,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-3所示。
图4-2用户注册界面图
注册关键代码如下所示。
/**
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
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);
}
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){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
4.1.4学习视频界面
用户点击“学习视频”菜单可以查看所有学习视频信息,可以按照条件查看学习视频,或者输入关键词进行查询,点击可以进入学习视频详细展示界面,在此界面用户可以收藏和评论。界面如下图4-4所示。
图4-4学习视频界面图
4.1.5实验任务界面
当用户点击“实验任务”这一菜单按钮,会显示管理员在后台发布的所有的实验任务,支持通过关键词对实验任务进行搜索,选择需要的实验任务点击可以进入到实验任务详细的介绍界面,在详细界面可以查看到实验任务的实验名称、班级名称、实验要求、实验目的、演示视频、报告附体、教师用户等信息,同时可以进行提交报告、收藏、评论操作,实验任务界面如下图4-5所示。
图4-5实验任务界面图
4.1.6提交报告界面
当用户在实验任务详情界面想要进行提交报告,点击下方的“提交报告”按钮,就会跳转到提交报告信息填写界面,根据界面提示输入提交报告信息,点击“提交”按钮,提交报告就完成了,提交报告界面如下图4-6所示。
图4-6提交报告界面图
4.1.7我的账户界面
当用户点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料、登录系统的密码以及自己收藏的信息进行设置管理,我的账户界面如下图4-7所示。
图4-7我的账户界面图
4.2管理员功能模块
面向过程性考核的高校课程实验系统的理员拥有最高的权限,可以对用户信息、系统信息以及面向过程性考核的高校课程实验系统相关信息进行管控。
4.2.1登录界面
管理员在后台可以通过账号和密码进行登录,管理员的账号和密码是在数据库中直接设定的。界面展示如下图4-8所示。
图4-8登录界面图
4.2.2用户管理管理界面
管理员点击“用户管理”这一菜单会显示管理员、教师用户、学生用户这三个子菜单,管理员可以对这三个角色的信息进行增删改查操作。界面如下图4-9所示。
图4-9用户管理管理界面图
用户管理管理关键代码如下所示。
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.3公共管理界面
面向过程性考核的高校课程实验系统中的管理人员在“公共管理”这一菜单中是可以对前台显示的轮播图进行管控。界面如下图4-10所示。
图4-10公共管理界面图
4.2.4实验成绩管理界面
管理员点击“实验成绩”会显示出所有的实验成绩信息,支持通过教师评分或者互评总分对实验成绩信息进行查询,如果想要添加新的实验成绩信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条实验成绩信息,点击“删除”进行删除。界面如下图4-11所示。
图4-11实验成绩管理界面图
4.2.5实验报告管理界面
管理员点击“实验报告”会显示出所有的实验报告信息,支持输入报告编号或者实验名称对实验报告信息进行查询,如果想要添加新的实验报告信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条实验报告信息,点击“删除”进行删除,也可以点击后面的“互评”、“实验成绩”按钮对实验报告的互评/实验成绩信息进行更新维护、也可以对用户提交的实验报告评论的信息进行管控。界面如下图4-12所示。
图4-12实验报告管理界面图
实验报告管理关键代码如下所示。
@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系统测试
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)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 |
页面显示包含有搜索关键字的实验任务 |
实际结果 |
实际结果与预期结果一致 |
密码修改功能测试:
表5-5 密码修改功能测试表
用例名称 |
密码修改测试用例 |
目的 |
测试管理员密码修改功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 |
使用新的密码可以登录 |
实际结果 |
实际结果与预期结果一致 |
5.3 系统测试结果
通过编写面向过程性考核的高校课程实验系统的测试用例,已经检测完毕用户登录模块、实验任务查看模块、实验任务添加模块、实验任务搜索模块、密码修改功能测试,通过这5大模块为面向过程性考核的高校课程实验系统的后期推广运营提供了强力的技术支撑。