基于SpringBoot的教务管理系统设计与实现(源码+调试)

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教务管理系统设计与实现。

功能需求

本教务管理系统通过分析和确定系统的角色和功能划分,按照业务合理区分为不同的菜单功能模块。从教学业务以及学校管理人员的角度出发,对每个功能的需求实现点进行人性化详细的构思。本系统未做完善的用户体系,只是简单的分为了4个用户分别为:

  1. 系统管理员:顶层管理员,是教务人员的上级,只管理教务中公共基础的数据,例如:角色管理,权限管理等,如果需要配置角色权限,请登录该用户。
  2. 教务人员:学院级别,每个学院的教务管理员管理自己学院下的相关信息。
  3. 教师
  4. 学生
    具体功能可以根据角色权限配置菜单按钮。
部分效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部分代码
   @GetMapping("/data")@ResponseBodypublic Map<String, Object> mainData() {Map<String, Object> map = new ConcurrentHashMap<>();MemoryMXBean mem = ManagementFactory.getMemoryMXBean();MemoryUsage nonHeapMemoryUsage = mem.getNonHeapMemoryUsage();MemoryUsage heapMemoryUsage = mem.getHeapMemoryUsage();//初始的总内存long init = heapMemoryUsage.getInit();//最大可用内存long max = heapMemoryUsage.getMax();//已使用的内存long used = heapMemoryUsage.getUsed();long total = heapMemoryUsage.getCommitted();long max1 = nonHeapMemoryUsage.getMax() / 1024 / 1024;long free = (nonHeapMemoryUsage.getCommitted() - nonHeapMemoryUsage.getUsed()) / 1024 / 1024;long used1 = nonHeapMemoryUsage.getUsed() / 1024 / 1024;long total1 = nonHeapMemoryUsage.getCommitted() / 1024 / 1024;long totalMemory = total / 1024 / 1024;long freeMemory = (total - used) / 1024 / 1024;long maxMemory = max / 1024 / 1024;long UsedMemory = used / 1024 / 1024;map.put("totalMemory", totalMemory);map.put("freeMemory", freeMemory);map.put("maxMemory", maxMemory);map.put("UsedMemory", UsedMemory);map.put("nontotalMemory", total1);map.put("nonfreeMemory", free);map.put("nonmaxMemory", max1);map.put("nonUsedMemory", used1);return map;}@GetMapping("/page/{page}")public String page(@PathVariable("page") String page) {return "/web/" + page;}@GetMapping("/page/{category}/{page}")public String page(@PathVariable("category") String category, @PathVariable("page") String page) {return "/web/" + category + "/" + page;}@GetMapping("/findStudentPanel")public ResponseEntity findStudentPanel() {DecimalFormat df = new DecimalFormat(".0");TStudent student = (TStudent) getRealm();TClasses classes = classesService.findById(student.getClassesId());TSpecialty specialty = specialtyService.findById(classes.getSpecialtyId());List<CourseDTO> list = scoreService.findCourseByStudent(student.getId());StudentPanel studentPanel = new StudentPanel();studentPanel.setCourseNum(list.size());studentPanel.setStudent(student);studentPanel.setSpecialty(specialty);// 成绩能力模型int tongshi = 0;int zhuanye = 0;int shijian = 0;int gonggong = 0;int xueke = 0;for (CourseDTO courseDTO : list) {studentPanel.setTotalTime(studentPanel.getTotalTime() + courseDTO.getTotalTime());if (courseDTO.getScore() >= 60) {// 合格率studentPanel.setPassNum(studentPanel.getPassNum() + 1);}if (courseDTO.getSystemId().equals("1")) {gonggong += 1;studentPanel.setGonggong(studentPanel.getGonggong() + courseDTO.getScore());}if (courseDTO.getSystemId().equals("2")) {zhuanye += 1;studentPanel.setZhuanye(studentPanel.getZhuanye() + courseDTO.getScore());}if (courseDTO.getSystemId().equals("4")) {tongshi += 1;studentPanel.setTongshi(studentPanel.getTongshi() + courseDTO.getScore());}if (courseDTO.getSystemId().equals("5")) {shijian += 1;studentPanel.setShijan(studentPanel.getShijan() + courseDTO.getScore());}if (courseDTO.getSystemId().equals("6")) {xueke += 1;studentPanel.setXueke(studentPanel.getXueke() + courseDTO.getScore());}}// 缺勤次数studentPanel.setDisciplinary(student.getAbsent());// 合格率studentPanel.setEligiableRate(studentPanel.getPassNum() == 0 ? 0 : Double.valueOf(df.format(studentPanel.getPassNum() / (studentPanel.getCourseNum() * 1.0) * 100)));// 到课率studentPanel.setUpCourseRate(studentPanel.getDisciplinary() == 0 ? 0 : Double.valueOf(df.format(100.0 - studentPanel.getDisciplinary() / (studentPanel.getTotalTime() / 2.0) * 100)));// 成绩能力模型studentPanel.setGonggongRate(studentPanel.getGonggong() == 0 ? 0 : Double.valueOf(df.format(studentPanel.getGonggong() / (gonggong * 100.0) * 100)));studentPanel.setZhuanyeRate(studentPanel.getZhuanye() == 0 ? 0 : Double.valueOf(df.format(studentPanel.getZhuanye() / (zhuanye * 100.0) * 100)));studentPanel.setTongshiRate(studentPanel.getTongshi() == 0 ? 0 : Double.valueOf(df.format(studentPanel.getTongshi() / (tongshi * 100.0) * 100)));studentPanel.setXuekeRate(studentPanel.getXueke() == 0 ? 0 : Double.valueOf(df.format(studentPanel.getXueke() / (xueke * 100.0) * 100)));studentPanel.setShijanRate(studentPanel.getShijan() == 0 ? 0 : Double.valueOf(df.format(studentPanel.getShijan() / (shijian * 100.0) * 100)));// 统计缺勤int[][] absentCount = absentService.countStudentAbsent(getUserId());studentPanel.setAbsentCount(absentCount);return ResponseEntity.ok(studentPanel);}@GetMapping("/findUserPanel")public ResponseEntity findUserPanel() {JWPanel jwPanel = new JWPanel();// 统计最近7天缺勤int[][] absentCount = absentService.countStudentByJW(getRealm());jwPanel.setAbsentCount(absentCount);// 统计在校人数List<Integer> countGrade = studentService.countPeople(getRealm());jwPanel.setCountGrade(countGrade);// 统计缺课课时int[] courseDTOList = courseService.countDownCourseRate(getRealm(), absentCount);jwPanel.setDownCourseRate(courseDTOList);// 统计旷课时段int[] list = teacherCourseService.countDownCourseSection(getRealm(), absentCount);jwPanel.setDownCourseSectionRate(list);// 通知公告List moticeLists = userNoticeService.findNoticeByJW(getRealm());jwPanel.setNoticeList(moticeLists);return ResponseEntity.ok(jwPanel);}@GetMapping("/findTeacherPanel")public ResponseEntity findTeacherPanel(String teamId) {TeacherPanel teacherPanel = new TeacherPanel();// 通知公告List moticeLists = userNoticeService.findNoticeByTeacher(getRealm());teacherPanel.setNoticeList(moticeLists);// 教学完成进度TeacherSchedule teacherSchedule = teacherCourseService.countTeacherSchedule(getRealm(), teamId);// 缺课情况List<CourseDTO> list = teacherCourseService.countAbsent(getRealm(), teamId);teacherPanel.setCourseList(list);teacherPanel.setTeacherSchedule(teacherSchedule);return ResponseEntity.ok(teacherPanel);}
安装部署需求

前后端分离,idea运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装node14并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在idea中运行打包;

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL5.7
4.框架:SpringBoot+vue

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 IDEA
语言 JDK1.8 、SpringBoot、vue
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

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

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

相关文章

QuestDB时序数据库快速入门

简介 QuestDB是一个开源的高性能时序数据库&#xff0c;专门用于处理时间序列相关的数据存储与查询&#xff1b; QuestDB使用列式存储模型。数据存储在表中&#xff0c;每列存储在其自己的文件和其自己的本机格式中。新数据被附加到每列的底部&#xff0c;以便能够按照与摄取…

别再局限于Android和iOS了尝试鸿蒙APP系统开发吧!

最近&#xff0c;多家互联网公司也发布了鸿蒙OS的App开发工程师的岗位&#xff0c;开启了抢人大战&#xff0c;有的企业开出了近百万的年薪招聘鸿蒙OS工程师&#xff0c;而华为甚至为鸿蒙OS资深架构师开出了100万元—160万元的年薪。 「纯血」鸿蒙开启&#xff0c;欲与 Andori…

WEBDYNPRO FPM 框架

框架搭建 1、FPM_OVP_COMPONENT 1 METHOD change_toolbar_btn .2 * enabled "ABAP_TRUE可用 ABAP_FALSE不可用3 * visibility "01不可见 02可见4 DATA: ls_btn TYPE if_fpm_ovp>ty_s_toolbar_button.5 CHECK wd_this->mo_cnr IS BOUND.6 7 TRY .8 …

2011-2022年北大数字普惠金融指数“第五期”(包括省市县)

2011-2022年北大数字普惠金融指数“第五期”&#xff08;包括省市县&#xff09; 1、时间&#xff1a;2011-2022年 其中县级的时间为2014-2022年 2、来源&#xff1a;北大数字普惠金融指数 3、范围&#xff1a;全国31省&#xff0c;337个地级市以及2800个县 4、指标&#x…

API调试?试试Apipost

你是否经常遇到接口开发过程中的各种问题&#xff1f;或许你曾为接口测试与调试的繁琐流程而烦恼。不要担心&#xff01;今天我将向大家介绍一款功能强大、易于上手的接口测试工具——Apipost&#xff0c;并带你深入了解如何玩转它&#xff0c;轻松实现接口测试与调试。 什么是…

linux更新内核

内核介绍 官网链接:https://kernel.org 内核下载库: https://mirrors.edge.kernel.org/pub/linux/kernel/ 更新软件源 rootcary:~# apt-get update rootcary:~# sudo apt-get install libncurses5-dev build-essential kernel-package flex bison libelf-dev libssl-dev 下…

机器学习实验报告——Bayes算法

目录 一、算法介绍 1.1算法背景 1.2算法假设 1.3 贝叶斯与朴素贝叶斯 1.4算法原理 二、算法推导 2.1朴素贝叶斯介绍 2.2朴素贝叶斯算法推导 2.2.1先验后验概率 2.2.2条件概率公式 2.3 独立性假设 2.4 朴素贝叶斯推导 三、算法实现 3.1数据集描述 3.2代码实现 四…

SpringBoot:Bean生命周期自定义初始化和销毁

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、Bean注解指…

如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(三)

前言 今天我们继续聊聊在 项目开发阶段&#xff0c;项目经理需要做好的事情 &#x1f603; 二、项目开发阶段&#xff08;续&#xff09; 4. 控制好项目开发质量 要控制好项目开发质量&#xff0c;主要是依赖测试&#xff0c;好的产品都是靠不断地测试&#xff0c;不断地试…

《WebKit 技术内幕》学习之四(3): 资源加载和网络栈

3. 网络栈 3.1 WebKit的网络设施 WebKit的资源加载其实是交由各个移植来实现的&#xff0c;所以WebCore其实并没有什么特别的基础设施&#xff0c;每个移植的网络实现是非常不一样的。 从WebKit的代码结构中可以看出&#xff0c;网络部分代码的确比较少的&#xff0c;它们都在…

西方企业在与中国的竞争中,无可避免地“效仿中国”

长期以来&#xff0c;在西方观察家的视野里&#xff0c;中国科技领域的成功突破主要归结于三大支柱&#xff1a;一是中国建立了完备的基础设施网络&#xff1b;二是大量创新型企业如雨后春笋般涌现&#xff0c;以惊人的速度追赶乃至超越美国硅谷的企业&#xff1b;三是这些创新…

wps word 文档里的空白空间太大了

wps word 文档里的空白空间太大了&#xff0c;如下图1 点击【页面】--->【页边距】&#xff0c;把左边、右边的页边距调为0厘米。如下图2 点击【视图】--->【显示比例】从75%改为页宽&#xff0c;页宽的意思是使页面的宽度与窗口的宽度一致。如下图3 图1

浪花 - 用户加入队伍

一、接口设计 1. 请求参数&#xff1a;TeamJoinRequest package com.example.usercenter.model.request;import lombok.Data; import java.io.Serializable;/*** 加入队伍请求参数封装类*/ Data public class TeamJoinRequest implements Serializable {private static final…

用Axure RP 9制作弹出框

制作流程 1.准备文本框 下拉列表 按钮 动态面板 如图 2.先把下拉列表放好 再放动态面板覆盖 3.点动态面板 进入界面 如图 4.给按钮添加交互 3个按钮一样的 如图 5.提交按钮添加交互 如图

linux安装python3.11

yum -y gcc install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel下载地址 https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tar.xz 上传python文件&#x…

Kafka(二)【文件存储机制 生产者】

目录 一、Kafka 文件存储机制 二、Kafka 生产者 1、生产者消息发送流程 1.1、发送原理 2、异步发送 API 2.1、普通异步发送 案例演示 2.2、带回调函数的异步发送 2.3、同步发送 API 3、生产者分区 3.1、分区的好处 3.2、生产者发送消息的分区策略 &#xff08;1&am…

基于springboot+vue的学科竞赛管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

12.常用统计分析方法——聚类分析

目录 基础知识 实操 层次聚类 划分聚类 方法一&#xff1a;K均值聚类&#xff08;最常见&#xff09; 方法二&#xff1a;基于中心点的划分&#xff08;PAM&#xff09; 避免不存在的类 基础知识 概念&#xff1a; 聚类分析是一种数据归约技术&#xff0c;旨在揭露一个…

Python基础之数据库操作

一、安装第三方库PyMySQL 1、在PyCharm中通过 【File】-【setting】-【Python Interpreter】搜索 PyMySQL进行安装 2、通过PyCharm中的 Terminal 命令行 输入: pip install PyMySQL 注&#xff1a;通过pip安装&#xff0c;可能会提示需要更新pip&#xff0c;这时可执行&#…

discuz论坛附件上传限制大小2MB

我遇到了这个问题&#xff0c;去修改了配置PHP.ini文件没有解决. 我把他变成2000M依旧没有用&#xff0c;然后我选择了用户组&#xff0c;附件部分。如图所示&#xff1a; 然后这个时候我还是没有好&#xff0c;我同事的却不限制大小了&#xff0c;我去清理缓存&#xff…