Java SpringMVC毕业项目实战-学生信息管理系统(1)
主要功能截图:
主要数据库设计:
论文结构目录设计 :
获取完整源码:
摘要设计:文末获取源码联系
本次系统设计以便捷性和安全性为核心目标,在不再依赖人工记录的基础上
系统功能概述:
主要模块的设计包括基于Shiro的权限管理框架,并实现了身份认证功能及相应的认证信息存储。系统能够根据不同的登录账号赋予相应的权限等级,并对各个页面地址进行权限分配。
管理员能够进行教师信息、学生信息以及课程信息的增删改查操作。相应的用户账号具备重置其他用户账号密码的能力。
课程相关:当有学生完成选课操作后,则不允许删除学生的相关操作;在新增或输入学生的相关信息时,请注意这些信息会同步记录至教师登录界面。教师管理:同理
账户密码重置:
教师登录系统后,可查看其教授的课程安排,并具备对学生已选课程进行评价的能力。但该系统不允许对已完成评价的学生再次修改评分。
学生登录后,根据学生信息,获取其已经选择的课程,和已经修完的课程
所有课程: 在这里选修课程,选好后,将会自动跳转到已选课程选项
已选课程: 这一栏显示的是尚未完成的课程信息, 即表明老师尚未给出成绩评价。因为尚未获得老师的评分结果, 所以学生在此处可以选择退课
已修课程: 显示已经修完,老师已经给成绩的课程修改密码:
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实现登录
Initialize a token instance as a new instance of UsernamePasswordToken, passing the username obtained from userlogin.
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(“.”);
该变量bis被赋值为一个BufferedInputStream实例;该实例被包裹了一个FileInputStream对象;该FileInputStream对象用于读取来自文件fileName的内容。
String filename = fileVO.getFileName()+“.”+str[str.length-1];
filename = URLEncoder.encode(filename,“UTF-8”);
在响应中设置Content-Disposition头,并指定文件名的附件
response.setContentType(“multipart/form-data”);
out是一个通过响应输入流创建的BufferedOutputStream实例
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;
}
}
主要数据库设计:
主要包含的数据表格包括专业相关的信息表格、课程管理相关的表格、与文件信息相关的表格、角色信息管理的表格以及学生选课记录的 tables 等其他相关数据 tables
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核心知识将成为关键步骤可以说毫无疑问掌握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
九月与十月即将结束之际,在国内各大企业的招聘流程中
[外链图片转存中…(img-bf7OVfPH-1714307769255)]
一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码
头部IT企业Java面试重点解析+核心知识点总结和学习指导+官方讲解视频资源+实践项目源代码库
