目录
📚 前言
📑博客主页:@丘比特惩罚陆
💖欢迎关注:点赞收藏⭐留言✒
💬系列专栏:Java Springboot 毕设实战专栏
🎮 加入社区: 丘比特惩罚陆
🥇人生格言:选对方向,每走一步都是进步!
✒️欢迎大佬指正,一起学习!一起加油!👏 希望大家能小手一动,帮忙点个赞!
📑摘要
系统选用B/S模式,应用java技术,MySQL为后台数据库。系统主要包括首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能模块。
学生考勤管理的技术发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E/R图。
📑 学生考勤管理系统的特点
学生考勤管理系统能做到的不仅是大大简化管理员的信息管理工作,在提高学生考勤管理效率的同时还能缩减开支,更能在数字化的平面网络上将学生考勤管理最好的一面展示给客户和潜在客户,而这个系统在带给学生考勤管理全新用户信息管理统计和分类的同时,还成为日后学生考勤管理制定管理方式的重要数据参考。
📑系统登录流程
青年公寓服务管理系统的开发也是有对应的流程,开发之前必须要进行用户功能需求的分析,最后根据功能需求进行网站设计还有数据库相关数据的设计工作,此次开发的青年公寓服务平台开发流程。
流程图
添加信息流程:
添加信息流程图
📚 系统架构设计
体系架构
学生考勤管理系统的总体架构图形如下:
学生考勤管理系统的结构:
系统对这些功能进行整合,产生的功能结构图如下:
📚 数据库设计
💬 考勤信息管理E/R图
💬 学生信息实体属性
📚 系统功能的具体实现
💬 系统登录注册
系统登录
用户在登录页面通过填写用户名,密码,选择相对应的角色等信息进行登录操作
学生注册
在学生注册页面通过填写学号,密码,确认密码,姓名,年级,专业,班级,手机等信息进行注册操作;
班级管理
在班级管理页面中可以查看班级等信息,并可根据需要对班级管理进行详情、修改或删除等操作;
💬 管理员功能模块
公告信息管理
管理员登录进入系统可以查看首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能,并进行详细操作
学生管理
在学生管理页面中可以查看索引,学号,姓名,性别,年级,专业,班级,手机,照片等内容,并进行详情,统计考勤,修改和删除操作
教师管理
在教师管理页面中可以查看索引,教师工号,教师姓名,性别,职称,手机,邮箱,照片等内容,并进行详情,修改和删除操作
班级信息管理
在班级信息管理页面中可以查看索引,班级号,班级名称,班级图片,所属院系,所属专业,班主任,班级人数等内容,并进行排课程表,修改和删除操作
考勤信息管理
考勤信息管理;在考勤信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,周次,上课日,节次,教师工号,教师姓名,签到状态,截止时间,学号,姓名,签到时间等内容,并进行修改和删除操作
💬 教师功能模块
学生管理
在学生管理页面中可以查看索引,学号,姓名,性别,年级,专业,班级,手机,照片等内容,并进行详情,统计考勤操作
课程信息管理
在课程信息管理页面中可以查看索引,班级名称,课程号,课程名称,课程类别,图片,周次,上课日,节次等内容,并进行发起签到操作
等等
✒️ 源码实现
/**
* 考勤信息
* 后端接口
* @author
* @email
* @date 2022-03-28 16:41:16
*/
@RestController
@RequestMapping("/kaoqinxinxi")
public class KaoqinxinxiController {
@Autowired
private KaoqinxinxiService kaoqinxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,KaoqinxinxiEntity kaoqinxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaoshi")) {
kaoqinxinxi.setJiaoshigonghao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("xuesheng")) {
kaoqinxinxi.setXuehao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<KaoqinxinxiEntity> ew = new EntityWrapper<KaoqinxinxiEntity>();
PageUtils page = kaoqinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kaoqinxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,KaoqinxinxiEntity kaoqinxinxi,
HttpServletRequest request){
EntityWrapper<KaoqinxinxiEntity> ew = new EntityWrapper<KaoqinxinxiEntity>();
PageUtils page = kaoqinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kaoqinxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( KaoqinxinxiEntity kaoqinxinxi){
EntityWrapper<KaoqinxinxiEntity> ew = new EntityWrapper<KaoqinxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( kaoqinxinxi, "kaoqinxinxi"));
return R.ok().put("data", kaoqinxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(KaoqinxinxiEntity kaoqinxinxi){
EntityWrapper< KaoqinxinxiEntity> ew = new EntityWrapper< KaoqinxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( kaoqinxinxi, "kaoqinxinxi"));
KaoqinxinxiView kaoqinxinxiView = kaoqinxinxiService.selectView(ew);
return R.ok("查询考勤信息成功").put("data", kaoqinxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
KaoqinxinxiEntity kaoqinxinxi = kaoqinxinxiService.selectById(id);
return R.ok().put("data", kaoqinxinxi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
KaoqinxinxiEntity kaoqinxinxi = kaoqinxinxiService.selectById(id);
return R.ok().put("data", kaoqinxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody KaoqinxinxiEntity kaoqinxinxi, HttpServletRequest request){
kaoqinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(kaoqinxinxi);
kaoqinxinxiService.insert(kaoqinxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody KaoqinxinxiEntity kaoqinxinxi, HttpServletRequest request){
kaoqinxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(kaoqinxinxi);
kaoqinxinxiService.insert(kaoqinxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody KaoqinxinxiEntity kaoqinxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(kaoqinxinxi);
kaoqinxinxiService.updateById(kaoqinxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
kaoqinxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<KaoqinxinxiEntity> wrapper = new EntityWrapper<KaoqinxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaoshi")) {
wrapper.eq("jiaoshigonghao", (String)request.getSession().getAttribute("username"));
}
if(tableName.equals("xuesheng")) {
wrapper.eq("xuehao", (String)request.getSession().getAttribute("username"));
}
int count = kaoqinxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
💖 源码获取
点赞、收藏、关注!!!
非无偿源码!获取源码请添加up主!!
😁 联系方式
文章最底下有微信联系方式!!!