基于ssm教务管理系统
一、项目背景介绍:
教务管理系统是一种基于信息技术的管理工具,可以用来管理学生、教师、课程、考试、教学资源等方面的信息,以实现高效、科学、规范的教务管理。随着信息技术的迅速发展,教务管理系统已经成为现代高校的必备设施之一。
教务管理系统的出现,旨在帮助学校更好地管理和利用教学资源,提高教学质量和效率。教务管理系统可以通过网络平台进行信息共享和交流,有效地解决了传统教务管理方式中存在的一系列问题,例如信息不及时、重复劳动、管理不规范等等。
在教务管理系统中,学生可以通过在线选课、查询课程信息、成绩查询等功能实现自我管理;教师可以通过发布课程信息、在线作业布置、学生成绩管理等功能实现教学管理;管理人员可以通过维护学生、教师、课程、考试等信息,实现教务管理的全过程。
因此,教务管理系统对于提高学校管理效率和教学质量具有重要意义。同时,教务管理系统也是学校信息化建设中的重要组成部分。随着信息技术的发展和普及,教务管理系统的功能和应用也在不断拓展和完善。
本篇论文旨在探讨教务管理系统的发展、现状、优势和未来趋势,深入分析教务管理系统对教育教学的影响和作用。同时,我们将以某高校的教务管理系统为例,介绍其设计与实现过程,以及其应用效果和意义。
二、项目技术简介:
- JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。 - Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
- Jsp:JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。 - Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
- Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。 - shiro:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
三、系统功能模块介绍:
四、数据库设计:
1:absence(absence)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
absence_id | int | NULL | 缺勤表ID |
student_id | int | NULL | 学生ID |
student_name | varchar | NULL | 学生姓名 |
course_id | int | NULL | 课程ID |
absence_time | varchar | NULL | 缺勤时间 |
2:class(class)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
class_id | int | NULL | 班级ID |
class_name | varchar | NULL | 班级名 |
department_id | int | NULL | 专业名 |
creation_time | date | NULL | 班级的创建时间 |
creat_number | int | NULL | 班级的创建人数 |
class_deleted | int | NULL | 用于删除的标志字段 |
3:classroom(classroom)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
classroom_id | int | NULL | 教室ID |
classroom_name | varchar | NULL | 教室名 |
classroom_state | int | NULL | 教室可用状态,默认为0空 |
classroom_contain | int | NULL | 教室可容纳人数 |
classroom_phone | varchar | NULL | 本教室后勤电话 |
classroom_deleted | int | NULL | 教室删除状态 |
4:course(course)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
course_id | int | NULL | 课程ID |
course_name | varchar | NULL | 课程名 |
department_id | int | NULL | 专业ID |
state | int | NULL | 当前课程被老师占用状态,0为没有老师占用,1为老师占用 |
5:department(department)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
department_id | int | NULL | 专业ID |
department_name | varchar | NULL | 专业名 |
6:headmaster(headmaster)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
headmaster_id | int | NULL | 班主任ID |
headmaster_name | varchar | NULL | 班主任姓名 |
class_id | int | NULL | 教师ID |
heademaster_deleted | int | NULL | 班主任状态 |
headmaster_phone | bigint | NULL | 班主任联系电话 |
headmaster_sex | int | NULL | 性别 |
headmaster_state | int | NULL |
7:image_user(image_user)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
image_id | int | NULL | 图片id |
image_name | varchar | NULL | 图片名字 |
user_id | int | NULL | 用户id |
8:permission(permission)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
permission_id | int | NULL | 权限id,主键 |
name | varchar | NULL | 权限名称 |
parent_pid | int | NULL | 父级权限id |
type | varchar | NULL | 权限类型: menu:菜单, button:按钮, page:页面 |
url | varchar | NULL | 权限访问的url资源 |
sort | tinyint | NULL | 序号,菜单、按钮排序用,大的排后面 |
state | tinyint | NULL | 状态,1可用,0不可用 |
9:record(record)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
record_id | int | NULL | 授课信息ID |
teacher_id | int | NULL | 教师ID |
class_id | int | NULL | 班级ID |
course_id | int | NULL | 课程ID |
classroom_id | int | NULL | 教室ID |
record_date | date | NULL | 授课日期 |
record_index | int | NULL | 第几节课 |
10:registrar(registrar)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
registrar_id | int | NULL | 教导主任ID |
registrar_name | varchar | NULL | 教导主任名字 |
registrar_sex | int | NULL | 教导主任性别 |
department_id | int | NULL | 管理院系 |
registrar_phone | bigint | NULL | 教务主任电话 |
registrar_deleted | int | NULL | 逻辑删除 |
11:role(role)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
role_id | int | NULL | 角色id |
name | varchar | NULL | 角色名 |
state | tinyint | NULL | 状态,1可用,0不可用 |
12:role_permission(role_permission)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | 主键 |
role_id | int | NULL | 关联role表的角色id |
permission_id | int | NULL | 关联permission表的权限id |
13:score(score)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
score_id | int | NULL | 成绩表ID |
score_GPA | int | NULL | 平时成绩 |
score_exam | int | NULL | 考试成绩 |
absence | int | NULL | 缺勤次数 |
student_id | int | NULL | 学生ID |
course_id | int | NULL | 课程id |
14:student(student)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
student_id | int | NULL | 学生ID |
student_name | varchar | NULL | 学生姓名 |
student_age | int | NULL | 学生年龄 |
student_phone | bigint | NULL | 学生电话 |
class_id | int | NULL | 班级ID |
student_sex | int | NULL | 性别,0为女 |
student_deleted | int | NULL | 学生状态,默认1为未删除 |
15:teacher(teacher)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
teacher_id | int | NULL | 教师ID |
teacher_name | varchar | NULL | 教师姓名 |
teacher_sex | int | NULL | 教师性别0女 |
course_id | int | NULL | 课程ID |
teacher_deleted | int | NULL | 教师状态 |
teacher_phone | varchar | NULL | 教师联系电话 |
16:user(user)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
user_id | int | NULL | 用户ID |
user_name | varchar | NULL | 用户登录名 |
user_password | varchar | NULL | 用户密码 |
user_nickname | varchar | NULL | 用户昵称 |
user_deleted | int | NULL | 用户状态 |
17:user_headmaster(user_headmaster)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
user_headmaster_id | int | NULL | 用户班主任关联表ID |
user_id | int | NULL | 用户ID |
headmaster_id | int | NULL | 班主任ID |
18:user_registrar(user_registrar)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
user_registrar_id | int | NULL | 用户教务主任关联表ID |
user_id | int | NULL | 用户ID |
registrar_id | int | NULL | 教务主任ID |
19:user_role(user_role)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int | NULL | |
user_id | int | NULL | 用户ID |
role_id | int | NULL | 角色ID |
20:user_student(user_student)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
user_student_id | int | NULL | 用户学生表ID |
user_id | int | NULL | 用户ID |
student_id | int | NULL | 学生ID |
21:user_teacher(user_teacher)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
user_teacher_id | int | NULL | 关联表ID |
user_id | int | NULL | 用户ID |
teacher_id | int | NULL | 教师ID |
五、功能模块:
-
用户模块:
分三类角色:教务主任、班主任、任课教师、不同角色对应可访问的功能模块不同,及权限不同。登录模块(shiro) -
院系管理:院系管理(决定课程方向):类似如JAVA、嵌入式、H5,学生专业的增删改查
-
课程管理: 管理维护基本课程信息:类似如JAVA基础、JAVA面向对象核心编程、Mysql数据库编程,增删改查课程
-
班级信息管理: 管理、维护班级信息(信息的增删改查)、指定班主任,增删改查班级信息
-
教室管理:管理维护教室信息;
-
教师信息管理:管理维护教师信息
-
授课信息管理:授课信息管理:管理、维护授课信息、如发布、调整教学计划、打印课程表
-
考勤管理、成绩管理:考勤管理:管理维护学生考勤
成绩管理:管理维护学生所学课程的考核结果,添加修改平时成绩、添加修改考试成绩
下面是一些账号信息,因本系统使用 加密的方式保存密码,所以无法直接从数据库中查看用户的密码信息,故在此备注一些账号密码,后期可自己使用管理员账号添加修改用户密码信息
学生信息管理:ryj,123(java1班班主任),headmaster22,123(嵌入式1班班主任)
教室管理:ryj,123(Java1班班主任)
教师信息管理:persist,123(Java教务主任),registrar3,123(嵌入式教务主任)
考勤管理:ryj,123(java1班班主任)headmaster22,123456(嵌入式1班班主任)
院系管理:persist,123(java教务主任),registrar3 123456(嵌入式教务主任)
H5教务主任:登录名:zhulaoshi 密码:123
java教务主任:登录名:zh_test: 密码:123
成绩管理 teacher122 123(任课教师)
班级管理 persist 123 (Java教务主任) zhulaoshi 123(H5教务主任).
六、代码示例:
用户模块
public Map<String, Object> login(String username, String password, String remember) {
Map<String, Object> result = new HashMap<>();
//获取shiro框架认为的当前用户
Subject cuurentUser = SecurityUtils.getSubject();
//判断是否已经认证过,认证过,就不需要再次认证了
if (!cuurentUser.isAuthenticated()) {
//当没有认证过时,使用用户输入的用户名和密码进行认证
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
if (remember.equals("yes")) {
token.setRememberMe(true);
}
//shiro执行登录操作
try {
cuurentUser.login(token);
} catch (UnknownAccountException e) {
//用户不存在
result.put("code", -1);
result.put("message", "账号错误!");
return result;
} catch (IncorrectCredentialsException e) {
//密码错误
result.put("code", -2);
result.put("message", "密码错误!");
return result;
} catch (AuthenticationException e) {
//抛出错误
e.printStackTrace();
result.put("code", -3);
result.put("message", "登录失败!");
return result;
}
}
User user = (User) cuurentUser.getSession().getAttribute("user");
result.put("code", 1);
result.put("message", "登录成功!");
result.put("user", user);
return result;
}
院系管理
@RequestMapping("/getone")
@ResponseBody
public Map<String,Object> getOne(int studentId){
Map<String,Object> result=new HashMap<>();
//根据学生的id查询出学生的基本信息
StudentInfo student = departmentService.getById(studentId);
if (student==null){
result.put("code",-1);
result.put("message","无此学生");
} else {
result.put("code",0);
result.put("student",student);
}
System.out.println(result);
return result;
}
@RequestMapping("/updateok")
@ResponseBody
public Map<String,Object>updateByClassId(String className,int studentId){
Map<String,Object>result=new HashMap<>();
System.out.println(className);
System.out.println(studentId);
//根据班级姓名查询班级ID
int classId = departmentService.getClassIdByClassName(className);
int i = departmentService.updateByClassId(classId, studentId);
if (i>0){
result.put("code",0);
}else {
result.put("code",-1);
result.put("massage","修改失败");
}
return result;
}
课程管理
@RequestMapping("queryAll")
@ResponseBody
public Map<String,Object> queryAll(){
List<Course> courses = courseService.queryAll();
// System.out.println(courses +"========================");
Map<String,Object> result = new HashMap<>();
result.put("code",0);
result.put("message","获取用户数据成功");
result.put("courseList",courses);
return result;
}
@RequestMapping("queryAllCourseDepartment")
@ResponseBody
public Map<String,Object> queryAllCourseDepartment(){
List<CourseInfo> courses = courseService.queryAllCourseDepartment();
Map<String, Object> result = new HashMap<>();
result.put("code",0);
result.put("message","获取用户数据成功");
result.put("courseList",courses);
return result;
}
//添加课程专业信息
@RequestMapping("addCourseDepartment")
@ResponseBody
public Map<String, Object> addCourseDepartment(CourseInfo courseInfo){
// System.out.println(courseInfo);
courseService.addCourseDepartment(courseInfo);
Map<String, Object> result = new HashMap<>();
result.put("code",0);
result.put("message","添加课程信息成功");
return result;
}
班级信息管理
@Override
public int deleteClassInfoByClassId(Integer classId) {
return classManagementDao.deleteClassInfoByClassId(classId);
}
@Override
public int updateHeadmasterStateByClassId(Integer classId) {
return classManagementDao.updateHeadmasterStateByClassId(classId);
}
@Override
public List<Headmaster> getOneHeadmasterInfoByClassId( ) {
return classManagementDao.getOneHeadmasterInfoByClassId();
}
@Override
public List<Class> getOneClassInfo(Integer classId) {
return classManagementDao.getOneClassInfo(classId);
}
@Override
public int updateHeadmasterInfo(Headmaster headmaster) {
return classManagementDao.updateHeadmasterInfo(headmaster);
}
教室管理
public Map<String,Object>updateByClassId(String className,int studentId){
Map<String,Object>result=new HashMap<>();
System.out.println(className);
System.out.println(studentId);
//根据班级姓名查询班级ID
int classId = departmentService.getClassIdByClassName(className);
int i = departmentService.updateByClassId(classId, studentId);
if (i>0){
result.put("code",0);
}else {
result.put("code",-1);
result.put("massage","修改失败");
}
return result;
}
教师信息管理
@RequestMapping("/seletedByName")
@ResponseBody
public Map<String,Object> seletedByName(String studentName){
Map<String, Object> result = new HashMap<>();
Set<StudentClassDepartment> student = departmentService.getByName(studentName);
System.out.println(student);
if (student!=null && !student.isEmpty()){
result.put("code",0);
result.put("student",student);
}else {
result.put("code",-1);
result.put("message","本专业无此人");
}
return result;
}
授课信息管理
@RequestMapping("teaching/beforeGet")
public String beginGet(Model model){
Session session= SecurityUtils.getSubject().getSession();
List<String> roles=new ArrayList<>();
Set<String> permissions=new HashSet<>();
User user= (User) session.getAttribute("user");
for(Role r:user.getRoles()){
roles.add(r.getName());
Role role1=roleService.queryRoleInfoByRoleId(r.getRoleId());
if (role1.getPermissions()!=null) {
for (Permission per : role1.getPermissions()) {
permissions.add(per.getName());
}
}
}
session.setAttribute("roles",roles);
session.setAttribute("permissions",permissions);
model.addAttribute("dateStr",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
return "teaching/tabs";
}
考勤管理、成绩管理
public Map<String, Object> login(String username, String password, String remember) {
Map<String, Object> result = new HashMap<>();
//获取shiro框架认为的当前用户
Subject cuurentUser = SecurityUtils.getSubject();
//判断是否已经认证过,认证过,就不需要再次认证了
if (!cuurentUser.isAuthenticated()) {
//当没有认证过时,使用用户输入的用户名和密码进行认证
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
if (remember.equals("yes")) {
token.setRememberMe(true);
}
//shiro执行登录操作
try {
cuurentUser.login(token);
} catch (UnknownAccountException e) {
//用户不存在
result.put("code", -1);
result.put("message", "账号错误!");
return result;
} catch (IncorrectCredentialsException e) {
//密码错误
result.put("code", -2);
result.put("message", "密码错误!");
return result;
} catch (AuthenticationException e) {
//抛出错误
e.printStackTrace();
result.put("code", -3);
result.put("message", "登录失败!");
return result;
}
}
User user = (User) cuurentUser.getSession().getAttribute("user");
result.put("code", 1);
result.put("message", "登录成功!");
result.put("user", user);
return result;
}
七、项目总结:
本项目是基于信息技术实现的教务管理系统,旨在提高学校教务管理的效率和质量。项目采用了Java语言和Spring框架进行开发。通过该系统,学校可以更加便捷地管理学生、教师、课程、考试、教学资源等信息,从而实现高效、科学、规范的教务管理。
在项目开发过程中,我们采用了敏捷开发的方法,并以团队合作为核心,保证了项目开发的高效性和质量。我们注重需求分析和设计,通过反复的沟通和讨论,建立了清晰的需求文档和详细的系统设计文档。我们在实现过程中,采用了严谨的开发流程和测试机制,保证了系统的稳定性和安全性。
在项目的最终结果中,我们提供了一个全面、高效、易用的教务管理系统,能够满足学校教务管理的各项需求。系统中提供了学生选课、成绩查询、课程管理、考试安排等一系列功能,教师可以通过该系统发布课程信息、布置作业、管理成绩等,同时系统管理员也可以通过该系统进行维护和管理。我们还提供了多维度的数据分析和可视化报表功能,方便管理员对教务管理进行分析和评估。
总之,我们的项目团队在这个项目中付出了很多努力,并成功地开发了一个高质量、高效的教务管理系统,该系统可以帮助学校更加便捷地管理和利用教学资源,提高教学质量和效率。我们相信这个系统将对学生、教师和管理人员产生积极的影响。
八、代码下载:
代码下载:点击获取