主要功能截图:
主要数据库设计:
论文结构目录设计 :
获取完整源码:
摘要设计:文末获取源码联系
本次系统设计以方便快捷和安全为出发点,放弃传统的人工记录对学生信息管理的缺陷和不足, 采用全新的方式使学校对学生信息进行存储和维护,增加管理效率。本系统大体分为管理员登录管理后台、学生登录选课及对老师授课等三大模块、并且赋予了管理员很多功能来操作这个系统,包括:学生管理,老师管理,选课管理,密码修改等功能;为学生用户提供了选修改课程查询 、选择、密码修改等功能。通过这些功能模块的设计,满足了老师对学生的信息进行管控所需的功能。系统采用 B/S 三层结构,对动态页面的制作采用了 JSP技术,为了实现管理系统的安全可靠以及对有些代码可以进行重复使用考虑, 对程序的重要代码进行封装时采用 Java Bean。本系统贯彻以人为本的思想,实用性高。
系统功能概述:
主要模块设计如下:使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。
管理员可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。
课程管理:当课程已经有学生选课成功时,将不能删除学生管理:添加学生信息时,其信息也会添加到登录表中教师管理:同上
账户密码重置:
教师登陆后,可以获取其,教授的课程列表,并可以给已经选择该课程的同学打分无法对已经给完分的同学进行二次操作
学生登录后,根据学生信息,获取其已经选择的课程,和已经修完的课程
所有课程: 在这里选修课程,选好后,将会自动跳转到已选课程选项
已选课程: 这里显示的是,还没修完的课程,也就是老师还没给成绩,由于还没有给成绩,所以这里可以进行退课操作
已修课程: 显示已经修完,老师已经给成绩的课程修改密码:
B站视频演示:java毕业设计-SSM学生信息管理系统.mp4
主要功能截图:
**用户登录:**用户登录是选择角色进行登录:管理员、教师、学生
**系统主页:**管理员登录后具体功能模块可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。
**课程管理:**课程列表管理和添加课程等具体操作
添加录入课程信息
**学生管理:**学生列表管理和添加学生等具体操作
添加学生信息教师管理:
文件上传下载: 文件列表和下载文件
文件上传
账号相关:
教师登录后主要页面展示:
查看授课列表
查看该课程学生信息
给学生成绩打分
学生用户登录:
根据学生信息,获取其已经选择的课程,和已经修完的课程主要代码展示:
登录相关
package com.system.controller;
import com.system.exception.CustomException;
import com.system.po.Userlogin;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
- Created by 李杨勇.
*/
@Controller
public class LoginController {
//登录跳转
@RequestMapping(value = “/login”, method = {RequestMethod.GET})
public String loginUI() throws Exception {
return “…/…/login”;
}
//登录表单处理
@RequestMapping(value = “/login”, method = {RequestMethod.POST})
public String login(Userlogin userlogin) throws Exception {
//Shiro实现登录
UsernamePasswordToken token = new UsernamePasswordToken(userlogin.getUsername(),
userlogin.getPassword());
Subject subject = SecurityUtils.getSubject();
//如果获取不到用户名就是登录失败,但登录失败的话,会直接抛出异常
subject.login(token);
if (subject.hasRole(“admin”)&userlogin.getRole()==0) {
return “redirect:/admin/showStudent”;
} else if (subject.hasRole(“teacher”)&userlogin.getRole()==1) {
return “redirect:/teacher/showCourse”;
} else if (subject.hasRole(“student”)&userlogin.getRole()==2) {
return “redirect:/student/showCourse”;
}else throw new CustomException(“请选择正确的身份登陆”);
}
}
文件上传
package com.system.controller;
/**
- 文件上传下载
*/
@Controller
@RequestMapping(“/file”)
public class FileController {
@Resource(name = “fileServiceImpl”)
private FileService fileService;
@RequestMapping(“/upload”)
public String fileUpload(@RequestParam MultipartFile file, FileVO filevo, HttpServletRequest request) throws IOException {
//上传路径保存设置
// 把文件写到磁盘
String fileName = file.getOriginalFilename();
String[] str = fileName.split(“\.”);
String uuid = UUID.randomUUID().toString().replaceAll(“-”,“”);
String headPath = “E://upload/” + uuid+ “.”+str[str.length-1];
File dest = new File(headPath);
file.transferTo(dest);
filevo.setFileID(uuid);
filevo.setFilePath(headPath);
filevo.setUserID(null);
try {
fileService.save(filevo);
} catch (Exception e) {
e.printStackTrace();
}
return “redirect:/admin/showFile”;
}
@RequestMapping(“/downFile”)
public void down(HttpServletRequest request, HttpServletResponse response,String fileID) throws Exception{
FileVO fileVO = fileService.findById(fileID);
String fileName = fileVO.getFilePath();
String[] str = fileName.split(“\.”);
InputStream bis = new BufferedInputStream(new FileInputStream(new File(fileName)));
String filename = fileVO.getFileName()+“\.”+str[str.length-1];
filename = URLEncoder.encode(filename,“UTF-8”);
response.addHeader(“Content-Disposition”, “attachment;filename=” + filename);
response.setContentType(“multipart/form-data”);
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
int len = 0;
while((len = bis.read()) != -1){
out.write(len);
out.flush();
}
out.close();
}
}
异常处理
package com.system.exception;
/**
- 系统自定义异常类,针对预期异常,需要在程序中抛出此类的异常
*/
public class CustomException extends Exception {
//异常信息
public String message;
public CustomException(String message) {
super(message);
this.message=message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
主要数据库设计:
主要数据表有:专业表、课程表、文件信息表、角色表、学生选课表、老师表、学生表等
CREATE TABLE college
(
collegeID
int(11) NOT NULL,
collegeName
varchar(200) NOT NULL COMMENT ‘课程名’,
PRIMARY KEY (collegeID
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into college
(collegeID
,collegeName
) values
(1,‘计算机系’),
(2,‘设计系’),
/*Table structure for table course
*/
DROP TABLE IF EXISTS course
;
CREATE TABLE course
(
courseID
int(11) NOT NULL,
courseName
varchar(200) NOT NULL COMMENT ‘课程名称’,
teacherID
int(11) NOT NULL,
courseTime
varchar(200) DEFAULT NULL COMMENT ‘开课时间’,
classRoom
varchar(200) DEFAULT NULL COMMENT ‘开课地点’,
courseWeek
int(200) DEFAULT NULL COMMENT ‘学时’,
courseType
varchar(20) DEFAULT NULL COMMENT ‘课程类型’,
collegeID
int(11) NOT NULL COMMENT ‘所属院系’,
score
int(11) NOT NULL COMMENT ‘学分’,
PRIMARY KEY (courseID
),
KEY collegeID
(collegeID
),
KEY teacherID
(teacherID
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table course
*/
insert into course
(courseID
,courseName
,teacherID
,courseTime
,classRoom
,courseWeek
,courseType
,collegeID
,score
) values
(1,‘C语言程序设计’,1001,‘周二’,‘科401’,18,‘必修课’,1,3),
(3,‘数据结构’,1001,‘周四’,‘科401’,18,‘必修课’,1,2),
(4,‘Java程序设计’,1002,‘周五’,‘科401’,18,‘必修课’,1,2),
(5,‘英语’,1002,‘周四’,‘X302’,18,‘必修课’,2,2),
(6,‘服装设计’,1003,‘周一’,‘科401’,18,‘选修课’,2,2);
/*Table structure for table role
*/
DROP TABLE IF EXISTS role
;
CREATE TABLE role
(
roleID
int(11) NOT NULL,
roleName
varchar(20) NOT NULL,
permissions
varchar(255) DEFAULT NULL COMMENT ‘权限’,
PRIMARY KEY (roleID
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into role
(roleID
,roleName
,permissions
) values
(0,‘admin’,NULL),
(1,‘teacher’,NULL),
(2,‘student’,NULL);
/*Table structure for table selectedcourse
*/
DROP TABLE IF EXISTS selectedcourse
;
CREATE TABLE selectedcourse
(
courseID
int(11) NOT NULL,
studentID
int(11) NOT NULL,
总结
就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!
金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。
(2,‘student’,NULL);
/*Table structure for table selectedcourse
*/
DROP TABLE IF EXISTS selectedcourse
;
CREATE TABLE selectedcourse
(
courseID
int(11) NOT NULL,
studentID
int(11) NOT NULL,
总结
就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!
金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。
[外链图片转存中…(img-bf7OVfPH-1714307769255)]