Java项目:108SSM教务管理系统

博主主页:Java旅途
简介:分享计算机知识、学习路线、系统源码及教程
文末获取源码

一、项目介绍

教务管理系统基于Spring+SpringMVC+Mybatis开发,功能和学生成绩管理系统,学生选课管理系统类似,也可以做学生成绩管理系统,学生选课管理系统。系统分为管理员,教师,学生三种角色。

管理员功能如下:

  • 课程管理
  • 学生管理
  • 教师管理

教师功能如下:

  • 我的课程
  • 成绩打分

学生功能如下:

  • 查看课程
  • 选课
  • 退课
  • 查看成绩

二、技术框架

  • 后端:Spring,Springmvc,Mybatis
  • 前端:bootstrap

三、安装教程

  1. 用idea打开项目
  2. 在idea中配置jdk环境
  3. 配置maven环境并下载依赖
  4. 配置tomcat8.0
  5. 新建数据库,导入数据库文件
  6. 在mysql.properties文件中将数据库账号密码改成自己本地的
  7. 启动运行, 管理员账号密码 admin/123456,教师账号密码 1001/123456,学生账号密码 10001/123456

四、项目截图

image-20230711164959949

image-20230711164944391

image-20230711165022124

image-20230711165038018

image-20230711165049545

image-20230711165100896

五、相关代码

LoginController

package com.system.controller;import com.system.po.Userlogin;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
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;@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")) {return "redirect:/admin/showCourse";} else if (subject.hasRole("teacher")) {return "redirect:/teacher/showCourse";} else if (subject.hasRole("student")) {return "redirect:/student/showCourse";}return "/login";}}

StudentController

package com.system.controller;import com.system.exception.CustomException;
import com.system.po.*;
import com.system.service.CourseService;
import com.system.service.SelectedCourseService;
import com.system.service.StudentService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.annotation.Resource;
import java.util.List;@Controller
@RequestMapping(value = "/student")
public class StudentController {@Resource(name = "courseServiceImpl")private CourseService courseService;@Resource(name = "studentServiceImpl")private StudentService studentService;@Resource(name = "selectedCourseServiceImpl")private SelectedCourseService selectedCourseService;@RequestMapping(value = "/showCourse")public String stuCourseShow(Model model, Integer page) throws Exception {List<CourseCustom> list = null;//页码对象PagingVO pagingVO = new PagingVO();//设置总页数pagingVO.setTotalCount(courseService.getCountCouse());if (page == null || page == 0) {pagingVO.setToPageNo(1);list = courseService.findByPaging(1);} else {pagingVO.setToPageNo(page);list = courseService.findByPaging(page);}model.addAttribute("courseList", list);model.addAttribute("pagingVO", pagingVO);return "student/showCourse";}// 选课操作@RequestMapping(value = "/stuSelectedCourse")public String stuSelectedCourse(int id) throws Exception {//获取当前用户名Subject subject = SecurityUtils.getSubject();String username = (String) subject.getPrincipal();SelectedCourseCustom selectedCourseCustom = new SelectedCourseCustom();selectedCourseCustom.setCourseid(id);selectedCourseCustom.setStudentid(Integer.parseInt(username));SelectedCourseCustom s = selectedCourseService.findOne(selectedCourseCustom);if (s == null) {selectedCourseService.save(selectedCourseCustom);} else {throw new CustomException("该门课程你已经选了,不能再选");}return "redirect:/student/selectedCourse";}// 退课操作@RequestMapping(value = "/outCourse")public String outCourse(int id) throws Exception {Subject subject = SecurityUtils.getSubject();String username = (String) subject.getPrincipal();SelectedCourseCustom selectedCourseCustom = new SelectedCourseCustom();selectedCourseCustom.setCourseid(id);selectedCourseCustom.setStudentid(Integer.parseInt(username));selectedCourseService.remove(selectedCourseCustom);return "redirect:/student/selectedCourse";}// 已选课程@RequestMapping(value = "/selectedCourse")public String selectedCourse(Model model) throws Exception {//获取当前用户名Subject subject = SecurityUtils.getSubject();StudentCustom studentCustom = studentService.findStudentAndSelectCourseListByName((String) subject.getPrincipal());List<SelectedCourseCustom> list = studentCustom.getSelectedCourseList();model.addAttribute("selectedCourseList", list);return "student/selectCourse";}// 已修课程@RequestMapping(value = "/overCourse")public String overCourse(Model model) throws Exception {//获取当前用户名Subject subject = SecurityUtils.getSubject();StudentCustom studentCustom = studentService.findStudentAndSelectCourseListByName((String) subject.getPrincipal());List<SelectedCourseCustom> list = studentCustom.getSelectedCourseList();model.addAttribute("selectedCourseList", list);return "student/overCourse";}//修改密码@RequestMapping(value = "/passwordRest")public String passwordRest() throws Exception {return "student/passwordRest";}}

大家点赞、收藏、关注、评论啦 、👇🏻点开下方卡片👇🏻关注后回复 102

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# .Net学习笔记—— 异步和多线程(Task)

一、概念 Task是DotNet3.0之后所推出的一种新的使用多线程的方式&#xff0c;它是基于ThreadPool线程进行封装的。 二、使用多线程的时机 任务能够并发运行的时候&#xff0c;提升速度&#xff1b;优化体验 三、基本使用方法 private void button5_Click(object sender, Ev…

Mysql 动态链接库配置步骤+ 完成封装init和close接口

1、创建新项目 动态链接库dll 2、将附带的文件都删除&#xff0c;创建LXMysql.cpp 3、项目设置 3.1、预编译头&#xff0c;不使用预编译头 3.2、添加头文件 3.3、添加类 3.4、写初始化函数 4、项目配置 4.1、右键解决方案-属性-常规-输出目录 ..\..\bin 4.2、生成lib文件 右…

Debian部署Mysql8.0

1、下载对应系统的mysql-apt-config包 wget https://repo.mysql.com/apt/debian/pool/mysql-apt-config/m/mysql-apt-config/mysql-apt-config_0.8.29-1_all.deb2、安装mysql-apt-config包 # 安装下载的deb包 sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb上下键选择菜单中…

Go语言中的HTTP请求和响应处理

在Web开发中&#xff0c;HTTP请求和响应是核心的交互方式。Go语言&#xff0c;作为一种高效且现代的编程语言&#xff0c;为开发者提供了简洁、强大的工具来处理HTTP请求和响应。本文将简要介绍在Go语言中如何处理HTTP请求和响应。 在Go语言中&#xff0c;HTTP请求和响应的处理…

[Linux c/c++] 关于进程名,线程名,/proc文件系统 等

参考&#xff1a; kernel - Why is the name of a process in /proc/PID/status not matching package name or ps command - Stack Overflowhttps://stackoverflow.com/questions/14176058/why-is-the-name-of-a-process-in-proc-pid-status-not-matching-package-name-or-ps…

prometheus grafana redis安装配置监控

文章目录 前传安装redis-exporterredis_exporter参数配置参考配置prometheus查看promethues redis job节点grafana配置外传 前传 prometheus grafana的安装使用&#xff1a;https://nanxiang.blog.csdn.net/article/details/135384541 本文说下监控nginx&#xff0c;promethe…

OpenTiny 2023年度共建者榜单大曝光!!!

沐光而行&#xff0c;逐梦未来&#xff0c; 行至一载&#xff0c;归来仍是少年&#xff01; 新年已至&#xff0c; OpenTiny 感谢大家一年来的陪伴~ 这一年&#xff0c;OpenTiny 结识了很多开源共建者&#xff0c; 这一年&#xff0c;OpenTiny 被很多前端开发者认识&#…

H5C3练习心得 2024.01.04(鼠标悬停缩放效果)--box-shadow,font字体,文本样式

&#xff08;一&#xff09;box-shadow 1.作用 为盒子添加阴影 2.属性语法 box-shadow&#xff1a;h-shadow v-shadow blur spread color position h-shadow:水平阴影的的位置&#xff0c;允许负值&#xff08;必填&#xff09;v-shadow&#xff1a;垂直阴影的位置&#x…

揭秘Python的运算符:从加减乘除到幂次开方,一网打尽!

文章目录 一、python运算符二、运算符1.算术运算符1.1 加1.2 减1.3 乘1.4 除1.5 取模1.6 幂1.7 取整除 2.比较运算符2.1 等于2.2 不等于2.3 大于2.4 小于2.5 大于等于2.6 小于等于 3.赋值运算符3.1 加法赋值运算符3.2 减法赋值运算符3.3 乘法赋值运算符3.4 除法赋值运算符3.5 取…

vue-打包

打包的作用 说明&#xff1a;vue脚手架只是开发过程中&#xff0c;协助开发的工具&#xff0c;当真正开发完了>脚手架不参与上线 打包的作用&#xff1a; 1&#xff09;将多个文件压缩合并成一个文件 2&#xff09;语法降级 3&#xff09;less sass ts语法解析 打包后…

视频号小店全新赛道,新手如何入驻?

我是电商珠珠 视频号小店为视频号团队所研发。距今为止也才发展了一年时间&#xff0c;在23年下半年掀起了不小的浪花。 我做视频号小店也有一年时间了&#xff0c;在他刚开始三个月的时候&#xff0c;就开始带着团队一起做。到现在也拥有了自己的视频号小店运营团队&#xf…

【LeetCode每日一题】2487. 从链表中移除节点(调用栈+递归+翻转链表)

2024-1-3 文章目录 [2487. 从链表中移除节点](https://leetcode.cn/problems/remove-nodes-from-linked-list/)方法一&#xff1a;调用栈方法二&#xff1a;递归方法三&#xff1a;翻转链表 2487. 从链表中移除节点 方法一&#xff1a;调用栈 1.将所有节点按顺序压入栈中 2.从…

【 Rosetta:多目标抗体设计全攻略】

Rosetta&#xff0c;一个在抗体设计界具有划时代意义的软件&#xff0c;被誉为抗体设计界的封神之作。它由美国华盛顿大学开发&#xff0c;旨在通过计算机模拟技术&#xff0c;快速、准确地预测抗体的结构和性质&#xff0c;为抗体药物研发提供了强有力的支持。 在抗体设计领域…

Linux进程管理和计划任务

前言 上篇关于进程管理命令使用说明尚未完结&#xff0c;本篇将继续介绍相关命令以及计划任务管理。 目录 前言 一、控制进程 1. vmstat 2. free 3. iostat 4. iotop/iftop 5. uptime 6. mpstat 7. dstat 8. webadin 9. 服务器五大性能 二、进程管理 1. 手动…

跨国公司为什么要部署SD-WAN

随着全球化进一步加深&#xff0c;越来越多的企业开始实施跨国战略&#xff0c;但要在各个地区建立分支机构、数据中心&#xff0c;跨国企业可能会遇到各地区之间网络性能差异大、导致数据传输效率低下的问题&#xff0c;而且由于网络场景复杂&#xff0c;网络设备和运维成本高…

Django 6 后台与便签

1. 什么是后台管理 后台管理是网页管理员利用网页的后台程序管理和更新网站上网页的内容。各网站里网页内容更新就是通过网站管理员通过后台管理更新的。 2. 创建超级用户 1. python .\manage.py createsuperuser 2. 输入账号密码等信息 Username (leave blank to use syl…

对图片进行数据增强(基于pytorch)

背景 在进行机器学习的任务中&#xff0c;我们的训练数据往往是有限的&#xff0c;在有限的数据集上获得较好的模型训练结果&#xff0c;我们不仅要在模型结构上下功夫&#xff0c;另一方面也需要对数据集进行数据增强 图片数据增强 图像数据增强是一种在训练机器学习和深度学…

计算化学顶刊封面!玻色量子联合上海交大张健课题组发表量子计算重要成果

​2023年12月13日&#xff0c;北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;联合上海交通大学在中科院分区1区、计算化学领域Top刊物JCTC&#xff08;Journal of Chemical Theory and Computation&#xff09;内刊的封面上发表了以“Encoding Molecul…

国内CRM系统哪个品牌比较好?

国内CRM系统哪个品牌比较好? 作为简道云第一个以“独立套件”开发出来的业务系统&#xff0c;对于简道云CRM我从来都是“昂首挺胸”的骄傲和自豪的&#xff01; 下面就从功能、价格、自定义3大块儿来介绍下简道云CRM管理系统&#xff01; CRM管理系统&#xff0c;即开即用​…

单位转换工具类

单位转换工具类 1. 工具类转换- 定义装换枚举转换类型- 创建转换工具类,1. 通过反射去除字段,2.对照传入map标记的字段需要转换的类型转换3. 重新赋值 2. 注解转换- 定义注解- 解析注解 1. 工具类转换 - 定义装换枚举转换类型 public enum UnitConvertType {/*** 精确度*/ACC…