博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。
文末联系获取
一、项目介绍
软件工程课程在线考试系统主要功能模块包括首页、资源管理(在线考试)、系统用户(管理员、学生用户、教师用户)、模块管理(班级信息),采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用springboot框架、Java技术技术进行业务系统的编码及其开发,实现了本系统的全部功能。
二、项目主要技术
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、Vue 、css3
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
数据库:MySQL 5.7/8.0
数据库管理工具:phpstudy/Navicat
JDK版本:jdk1.8
Maven: apache-maven 3.8.1-bin
三、系统功能
本系统使用的角色大概分为学生、教师和管理员。
3.1学生需求
学生登陆系统主要进行三类操作:在线考试,成绩查询与个人信息管理。
(1)在线考试
系统能自动给学生选题,考题必须是随机分配的,以保证考试的公平性。学生在考试过程中页面将提供考试时间倒计时功能,使学生随时了解考试剩余时间。在考试时间到时,系统将自动地将学生考试试卷提交,将提醒学生离开考场。当考试试卷提交时,教师为学生提交的答卷进行评分。
(2)成绩查询与个人信息维护
学生可以登陆系统查询各科成绩,其中成绩信息包括每种题型的得分,如单选题,判断题等。别外学生还可以查询自己的做错的题目,了解自己的考试情况。
除此之外,学生登陆系统可以查看和修改个人的基本信息,如修改密码等。
3.2管理员需求
系统管理员登陆系统后主要进行四类操作:
(1)在线考试信息的维护
在线考试信息的维护主要是对于学生提交的答卷信息、评分信息、题库信息进行维护。
(2)用户维护
系统管理员可以对用户信息(包括学生信息)进行增,删,改查操作。
(3)个人信息维护
管理员也可以对自己的基本信息的维护。
(4)班级信息维护
管理员管理和维护班级信息。
3.3教师需求
教师登陆系统后主要进行三类操作:
(1)在线考试
在线考试主要是对于学生提交的答卷进行评分、添加题库等。
(2)个人信息维护
教师可以查看和修改个人的基本信息,如修改密码等。
(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, "账号或密码不正确");
}
}