基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」Java经典基础毕设项目–学生信息管理系统详细设计【附源码】主要模块设计如下:使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。管理员可对教师信息、学生信息、课程信息进行增删改查操作,管理员账户,可以重置非管理员账户的密码。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

? 作者主页:Java李杨勇 

? 简介:Java领域优质创作者?、【java李杨勇】公号作者✌  简历模板、学习资料、面试题库【关注我,都给你】

?文末获取源码联系?

 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里,你想解决的问题,在下方专栏????????

❤️Java项目精品实战案例❤️

❤️web前端期末大作业网页实战❤️

 都能满足你的需求。原始Jsp、SSM、SpringBoot、以及HTML+CSS+JS页面设计, web大学生网页设计作业源码等等都可以参考得到解决。话不多说直接拿一个学生信息管理系统来举例

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

摘要设计:

       本次系统设计以方便快捷和安全为出发点,放弃传统的人工记录对学生信息管理的缺陷和不足, 采用全新的方式使学校对学生信息进行存储和维护,增加管理效率。本系统大体分为管理员登录管理后台、学生登录选课及对老师授课等三大模块、并且赋予了管理员很多功能来操作这个系统,包括:学生管理,老师管理,选课管理,密码修改等功能;为学生用户提供了选修改课程查询 、选择、密码修改等功能。通过这些功能模块的设计,满足了老师对学生的信息进行管控所需的功能。系统采用 B/S 三层结构,对动态页面的制作采用了 JSP技术,为了实现管理系统的安全可靠以及对有些代码可以进行重复使用考虑, 对程序的重要代码进行封装时采用 Java Bean。本系统贯彻以人为本的思想,实用性高。 

系统功能概述:

主要模块设计如下:

使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。

   管理员可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。

课程管理:当课程已经有学生选课成功时,将不能删除学生管理:添加学生信息时,其信息也会添加到登录表中教师管理:同上

账户密码重置:

教师登陆后,可以获取其,教授的课程列表,并可以给已经选择该课程的同学打分无法对已经给完分的同学进行二次操作

学生登录后,根据学生信息,获取其已经选择的课程,和已经修完的课程

所有课程: 在这里选修课程,选好后,将会自动跳转到已选课程选项

已选课程: 这里显示的是,还没修完的课程,也就是老师还没给成绩,由于还没有给成绩,所以这里可以进行退课操作

已修课程: 显示已经修完,老师已经给成绩的课程修改密码:

 B站视频演示:java毕业设计-SSM学生信息管理系统_bilibili (2).mp4

 主要功能截图: 

用户登录:用户登录是选择角色进行登录:管理员、教师、学生

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

系统主页:管理员登录后具体功能模块可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

课程管理:课程列表管理和添加课程等具体操作

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

 添加录入课程信息

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

学生管理:学生列表管理和添加学生等具体操作

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

 添加学生信息基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

教师管理:

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

文件上传下载: 

文件列表和下载文件

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

文件上传

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

账号相关: 

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

教师登录后主要页面展示:

查看授课列表

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

查看该课程学生信息

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

给学生成绩打分 

基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

 学生用户登录:

 根据学生信息,获取其已经选择的课程,和已经修完的课程基于JavaSpringMvc+mybatis实现学生信息管理系统「建议收藏」

 主要代码展示: 

登录相关

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);

论文结构目录设计 :

一、 绪论 4

1.1 研究背景 4

1.2 系统设计概述 4

1.3 研究的内容 5

二、相关技术介绍 5

2.1 spring 5

2.2 Spring MVC 6

2.3 mybatis 7

2.4 JSP技术 7

2.5 jQuery 8

2.6 Mysql 8

三、需求分析和可行性 11

3.1 系统功能概述 11

3.2 系统运行环境 11

3.3 技术设计 12

3.4 社会可行性 12

3.5 安全性可行性 12

3.6 经济可行性 12

3.7 法律可行性 12

四、系统设计 13

4.1 系统模式架构 13

4.2系统层次架构 13

4.3系统功能详情设计 14

4.4数据流图 14

4.5源码架构 15

五、系统实现 17

5.1 程序主要类 17

5.1.1用户登录类 17

5.1.2教师信息类 17

5.1.3角色权限类 17

5.1.4课程信息类 17

5.1.5学生信息类 18

5.1.6学生选课类 18

5.2系统功能主要实现模块截图 18

5.2.1关键代码实现 18

5.2.2部分功能截图 23

六、数据库设计 26

6.1表基本设计 26

6.2数据库三范式要求: 26

6.3数据库表ER图 27

6.4用户登录表设计 27

6.5老师表设计 28

6.6学生信息表设计 29

6.7学生选课表设计 30

6.8角色权限表设计 31

 6.9课程表设计 31

6.10院系表设计 32

七、开发心得体会 33

八、测试实例 33

九、参考献文 34

 相关系统设计实现推荐:

基于java springboot+mybatis电影售票网站管理系统前台+后台设计和实现

基于java ssm springboot+mybatis酒庄内部管理系统设计和实现

基于JAVA springboot+mybatis智慧生活分享平台设计和实现

基于Java springboot+vue+redis前后端分离家具商城平台系统设计和实现

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现

获取完整源码:

大家点赞、收藏、关注、评论啦 、查看??????微信公众号获取联系??????

打卡 文章 更新 79/  100天

 精彩专栏推荐:

Java毕设项目精品实战案例《100套》

HTML5大作业实战案例《100套》

web大作业前端网页实战《100套》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181028.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ov7670图像传感器_cmos图像传感器封装

    ov7670图像传感器_cmos图像传感器封装注释:配置方法由其他博文复制整理而来,不是个人原创,感恩原作者 图像传感器(sensor)概述: 现在用的传感器主要有两种:一种是CCD,另一种是CMOS,现在主流的是CMOS对于CCD传感器,其输出的是带制式的模拟信号,需要经过视频解码后得到数字信号对于CMOS传感器,其直接输出数字信号,可以直接与控制器连接 像素部分 那么对于像素部分,我们常常听到30万像素,…

  • eclipse乱码解决方法

    eclipse乱码解决方法eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的。一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同,就会产生中文的乱码问题,这其中还有几种情况。如果导入的整个工程的编码方式与eclipse的编码方式有冲突,那么这个工程里所有的中文都是乱码;如果所有工程的编码方式与eclipse工作空间的

  • 操作系统:银行家算法(C语言代码)详解

    操作系统:银行家算法(C语言代码)详解银行家算法流程图:银行家算法自然语言描述:设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:(1)如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requesti[j]≤Available[j],便转向步骤3;否则,表示尚无足够资源,Pi须等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据..

  • Win8.1应用开发之异步编程

    Win8.1应用开发之异步编程

  • shell运维脚本实例_100个必会的shell脚本

    shell运维脚本实例_100个必会的shell脚本无论是系统运维,还是应用运维,均可分为“**纯手工”—>“脚本化”—>“自动化”—>“智能化”**几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避免重复性操作及风险,另一方面提高执行效率。在自动化运维的转变过程中,经常使用的可能就是shell脚本了。很多人认为shell脚本简单,但其实Shell的小脚本却有大智慧。别小看几十行代码,它夹杂着系统设计、代码规范和操作经验等等细节,在建设自动化运维的工作中,还是很值得我们研究学习的。为了帮助大.

  • 4.vue 的双向绑定的原理是什么?_监听门事件

    4.vue 的双向绑定的原理是什么?_监听门事件vue:双向绑定原理、监视函数、事件修饰符、双向绑定在不同表单元素中的原理。

    2022年10月17日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号