基于JavaSpringMvc+mybatis实现学生信息管理系统
博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,专注于Java技术领域
作者主页 超级帅帅吴
Java毕设项目精品实战案例《500套》欢迎点赞 收藏 ⭐留言
文末获取源码
文章目录
- 基于JavaSpringMvc+mybatis实现学生信息管理系统
- 摘要设计:
- 系统功能概述:
- 主要功能截图:
- 教师登录后主要页面展示:
- 学生用户登录:
- 主要代码展示:
- 主要数据库设计:
- 获取源码:
摘要设计:
本次系统设计以方便快捷和安全为出发点,放弃传统的人工记录对学生信息管理的缺陷和不足, 采用全新的方式使学校对学生信息进行存储和维护,增加管理效率。本系统大体分为管理员登录管理后台、学生登录选课及对老师授课等三大模块、并且赋予了管理员很多功能来操作这个系统,包括:学生管理,老师管理,选课管理,密码修改等功能;为学生用户提供了选修改课程查询 、选择、密码修改等功能。通过这些功能模块的设计,满足了老师对学生的信息进行管控所需的功能。系统采用 B/S 三层结构,对动态页面的制作采用了 JSP技术,为了实现管理系统的安全可靠以及对有些代码可以进行重复使用考虑, 对程序的重要代码进行封装时采用 Java Bean。本系统贯彻以人为本的思想,实用性高。
系统功能概述:
主要模块设计如下:
使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。 管理员可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。
课程管理:当课程已经有学生选课成功时,将不能删除学生管理:添加学生信息时,其信息也会添加到登录表中教师管理:同上账户密码重置:
教师登陆后,可以获取其,教授的课程列表,并可以给已经选择该课程的同学打分无法对已经给完分的同学进行二次操作
学生登录后,根据学生信息,获取其已经选择的课程,和已经修完的课程
所有课程: 在这里选修课程,选好后,将会自动跳转到已选课程选项
已选课程: 这里显示的是,还没修完的课程,也就是老师还没给成绩,由于还没有给成绩,所以这里可以进行退课操作
已修课程: 显示已经修完,老师已经给成绩的课程修改密码:
主要功能截图:
用户登录:用户登录是选择角色进行登录:管理员、教师、学生
系统主页:管理员登录后具体功能模块可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。
课程管理:课程列表管理和添加课程等具体操作
添加录入课程信息
学生管理:学生列表管理和添加学生等具体操作
添加学生信息
教师管理:
文件上传下载:
文件列表和下载文件
文件上传
账号相关:
教师登录后主要页面展示:
查看授课列表
查看该课程学生信息
给学生成绩打分
学生用户登录:
根据学生信息,获取其已经选择的课程,和已经修完的课程
主要代码展示:
登录相关
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;
import com.system.po.FileVO;
import com.system.service.FileService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.UUID;
/**
* 文件上传下载
*/
@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;
/*Data for the table `college` */
insert into `college`(`collegeID`,`collegeName`) values
(1,'计算机系'),
(2,'设计系'),
(3,'财经系');
/*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),
(2,'Python爬虫技巧',1001,'周四','X402',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;
/*Data for the table `role` */
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,
`mark` int(11) DEFAULT NULL COMMENT '成绩',
KEY `courseID` (`courseID`),
KEY `studentID` (`studentID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `selectedcourse` */
insert into `selectedcourse`(`courseID`,`studentID`,`mark`) values
(2,10001,12),
(1,10001,95),
(1,10002,66),
(2,10003,99),
(5,10001,NULL),
(3,10001,NULL),
(1,10003,NULL),
(4,10003,NULL);
/*Table structure for table `student` */
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`userID` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(200) NOT NULL,
`sex` varchar(20) DEFAULT NULL,
`birthYear` date DEFAULT NULL COMMENT '出生日期',
`grade` date DEFAULT NULL COMMENT '入学时间',
`collegeID` int(11) NOT NULL COMMENT '院系id',
PRIMARY KEY (`userID`),
KEY `collegeID` (`collegeID`)
) ENGINE=InnoDB AUTO_INCREMENT=10008 DEFAULT CHARSET=utf8;
/*Data for the table `student` */
insert into `student`(`userID`,`userName`,`sex`,`birthYear`,`grade`,`collegeID`) values
(9999,'mike1','男','1996-09-03','2019-11-13',3),
(10001,'小红','男','2020-03-02','2020-03-02',1),
(10002,'小绿','男','2020-03-10','2020-03-10',1),
(10003,'小陈','女','1996-09-02','2015-09-02',2),
(10005,'小左','女','1996-09-02','2015-09-02',2),
(10007,'MIke','男','1996-09-02','2015-09-02',2);
/*Table structure for table `teacher` */
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`userID` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(200) NOT NULL,
`sex` varchar(20) DEFAULT NULL,
`birthYear` date NOT NULL,
`degree` varchar(20) DEFAULT NULL COMMENT '学历',
`title` varchar(255) DEFAULT NULL COMMENT '职称',
`grade` date DEFAULT NULL COMMENT '入职时间',
`collegeID` int(11) NOT NULL COMMENT '院系',
PRIMARY KEY (`userID`),
KEY `collegeID` (`collegeID`)
) ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8;
/*Data for the table `teacher` */
insert into `teacher`(`userID`,`userName`,`sex`,`birthYear`,`degree`,`title`,`grade`,`collegeID`) values
(1001,'刘老师','女','1990-03-08','硕士','副教授','2015-09-02',2),
(1002,'张老师','女','1996-09-02','博士','讲师','2015-09-02',1),
(1003,'软老师','女','1996-09-02','硕士','助教','2017-07-07',1);
/*Table structure for table `userlogin` */
DROP TABLE IF EXISTS `userlogin`;
CREATE TABLE `userlogin` (
`userID` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(200) NOT NULL,
`password` varchar(200) NOT NULL,
`role` int(11) NOT NULL DEFAULT '2' COMMENT '角色权限',
PRIMARY KEY (`userID`),
KEY `role` (`role`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
/*Data for the table `userlogin` */
insert into `userlogin`(`userID`,`userName`,`password`,`role`) values
(1,'admin','123',0),
(10,'10003','123',2),
(11,'10005','123',2),
(14,'1001','123',1),
(15,'1002','123',1),
(16,'1003','123',1),
(20,'9999','123',2),
(21,'10001','123',2),
(22,'10002','123',2);
获取源码:
大家点赞、收藏、关注、评论啦