文末获取源码
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、Vue.js 、css3
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
数据库:MySQL 5.7/8.0
数据库管理工具:phpstudy/Navicat
JDK版本:Java jdk8
Maven:apache-maven 3.8.1-bin
目录
一、前言介绍
二、功能需求分析
2.1学生模块
2.2教师模块
2.3管理员模块
三、管理员功能模块
3.1学生管理页面
3.2班级管理页面
3.3每日安排管理页面
3.4每日打卡管理页面
3.5疫情上报管理页面
四、学生功能模块
4.1通知公告页面
4.2每日打卡页面
4.3学生请假页面
五、教师功能模块
5.1学生请假管理页面
5.2学生日记管理页面
六、部分核心代码
6.1学生管理关键代码
6.2通知公告管理关键代码
6.3每日打卡界面逻辑代码
6.4学生请假管理关键代码
6.5登录关键代码
一、前言介绍
系统采用了Java技术,将所有业务模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,开发工具选择My eclipse来进行系统的设计。基本实现了高校学生健康打卡系统应有的主要功能模块,本系统有管理员、教师、学生。管理员:管理员:首页、用户管理(管理员、教师、学生)更多管理(班级管理、通知公告、每日安排、每日打卡、学生请假、学生日记、疫情上报)。教师;教师:首页、学生管理、通知公告、每日安排、每日打卡、学生请假、学生日记、疫情上报。学生;首页、通知公告、每日安排、每日打卡、学生请假、学生日记、疫情上报管理等。
对系统进行测试后,改善了程序逻辑和代码。同时确保系统中所有的程序都能正常运行,所有的功能都能操作,并且该系统有很好的操作体验,实现了对于高校学生健康打卡系统对学生管理、教师管理双赢。
二、功能需求分析
在系统开发设计前,应该对功能做初步设想,清楚这个管理系统有什么板块,每个板块有什么功能,整体的设计是否满足使用者的需求,接着对所开发的系统功能进行的详细分析总结,从而设计出完整的系统并将其实现。用户和开发人员的交流分析,使其达到最佳理解程度,使系统功能达到最佳。
学生后台功能图
管理员后台功能图
教师后台功能图
高校学生健康打卡系统在对需求做解析后,整个系统主要分为三个部分:管理员、教师和学生,每个模块下的分支功能不一样。对功能做出如下说明:
2.1学生模块
账号登录认证。
管理个人资料信息,修改可修改的信息项。
每日安排(健康打卡、请假、日记)添加和查询已有安排的记录。
2.2教师模块
个人资料管理,修改删除自己的信息。
学生的添加与查询、每日安排的查询、健康打卡的查询、请假管理的查询与审核请假、日记管理的查询及删除、通知公告的查询、日记统计的查看。
2.3管理员模块
系统用户的管理,管理和添加删除管理员,可以设置登录权限,或者删除所有用户账号。
教师管理,添加教师的具体信息与查询教师同时也具备删除教师。
通知管理,添加发布公告查询公告和删除公告的功能。
学生管理,查询学生的信息,也具备修改和删除功能。
每日安排管理,查询学生安排的信息,也具备修改和删除功能。
健康打卡管理,查询学生打卡的信息,也具备修改和删除功能。
请假管理,查询学生请假的信息,也具备修改和删除功能。
日记管理,查询学生日记的信息,也具备修改和删除功能。
日记统计,查询统计视图。
系统管理,系统的备份功能。
三、管理员功能模块
3.1学生管理页面
3.2班级管理页面
3.3每日安排管理页面
3.4每日打卡管理页面
3.5疫情上报管理页面
四、学生功能模块
4.1通知公告页面
4.2每日打卡页面
4.3学生请假页面
五、教师功能模块
5.1学生请假管理页面
5.2学生日记管理页面
六、部分核心代码
6.1学生管理关键代码
学生管理关键代码如下所示。
public String encryption(String plainText) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return re_md5;
}
6.2通知公告管理关键代码
@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();
6.3每日打卡界面逻辑代码
<mapper namespace="com.project.demo.dao.base.BaseMapper">
<select id="selectBaseList" resultType="java.util.LinkedHashMap">
${select}
</select>
<select id="selectBaseCount" resultType="Integer">
${count}
</select>
<select id="selectBaseOne" resultType="Object">
${select}
</select>
<update id="updateBaseSql">
${sql}
</update>
<delete id="deleteBaseSql">
${sql}
</delete>
</mapper>
6.4学生请假管理关键代码
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
6.5登录关键代码
/**
* 登录
* @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, "账号或密码不正确");
}
}