基于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.hqwc.cn/news/424386.html

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

相关文章

中华恐龙园贺春首播嗨爆全场,蓝海创意云开启文旅直播营销新篇章

2024年1月18日&#xff0c;常州中华恐龙园“双龙贺春”虚拟直播活动正式上线&#xff0c;活动累计交易金额&#xff08;GMV&#xff09;超500万&#xff0c;成交订单数达11000个&#xff0c;累计曝光量超300万&#xff0c;迅速占据团购带货全国周榜榜首。本次直播&#xff0c;中…

分布式一致性算法---Raft初探

读Raft论文也有一段时间了&#xff0c;但是自己总是以目前并没有完全掌握为由拖着这篇博客。今天先以目前的理解程度&#xff08;做了6.824的lab2A和lab2B&#xff09;对这篇论文做一个初步总结&#xff0c;之后有了更深入的理解之后再进行迭代&#xff0c;关于本文有任何疑问欢…

嵌入式条码二维码读码引擎安装注意事项

一、静电保护 &#xff1a; 帕德盾条码二维码扫描设备均已设计了对静电的防护&#xff0c;并使用了防静电包装&#xff0c;但在拆封和使用过程中仍需注意防静电措施&#xff0c;如使用接地腕带和工作区域接地等措施。 二、防尘防污&#xff1a; 帕德盾嵌入式引擎在保存及使用过…

SpringBoot 自定义Filter 提前返回 CORS 错误 处理前后端分离跨域配置无效问题解析

前言 浏览器有跨域限制&#xff0c;非同源策略 (协议、主机名或端口不同) 被视为跨域请求&#xff0c;解决跨域有跨域资源共享(CORS)、反向代理和 JSONP的方式。本篇通过 SpringBoot 的资源共享配置 (CORS) 来解决前后端分离项目的跨域&#xff0c;以及从原理上去解决跨域配置…

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 此自动化脚本将帮助你使用 Python 中的 Android 调试桥 (ADB) 自动化你的智能手机。下面我将展示如何自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 您可以了解有关 ADB 的更多信息,…

采用企业应用开发平台实现提质增效!

当前&#xff0c;为了实现提质增效的办公目的&#xff0c;有不少企业都倾向于使用低代码技术平台&#xff0c;企业应用开发平台就是大家常用的软件平台&#xff0c;由于具有效率高、简便灵活、可视化设计等诸多优势特点&#xff0c;因而在业务量上涨的现代化职场办公中&#xf…

Postman工作协同:生成接口文档和示例,超实用

Postman这个Documentation功能对于前后端分离的团队&#xff0c;接口开发团队来说真的是提升沟通效率和工作效率的一个利器。废话不多说&#xff0c;直接上干货来看如何通过Postman来生成接口文档和发布接口文档&#xff0c;以及如何定制化文档中的内容。 流程概要&#xff1a…

牛仔服装行业研究:预计到2025年将达到约650亿美元

牛仔服装是指原美国西部垦拓者(牛仔)穿着的服装&#xff0c;一般用纯棉或棉纤维为主要原材料混纺、交织的色织牛仔布制作。 牛仔布的生产起源于美国。牛仔服装历经百年变迁&#xff0c;由最初的工装演变为时装&#xff0c;征服了人们不同阶段挑剔的目光&#xff0c;最终成为服装…

伊恩·斯图尔特《改变世界的17个方程》麦克斯韦方程方程笔记

它告诉我们什么&#xff1f; 电和磁并不会随便乱跑。旋转的电场区域会产生垂直于旋转方向的磁场。旋转的磁场区域也会产生垂直于旋转方向的电场&#xff0c;但方向相反。 为什么重要&#xff1f; 这是物理力的第一次重大统一&#xff0c;表明电和磁是密切相关的。 它带来了什么…

echarts绘制多条刻度线仪表盘,文本内容带背景且颜色渐变,echarts绘制复杂仪表盘

option {series: [{// 最外圈type: gauge,radius: 80%,center: [50%, 90%],startAngle: 180,endAngle: 0,min: 0,max: 100,progress: {show: false,width: 8},pointer: {show: false},axisLine: {show: false,lineStyle: {width: 50,color: [// axisTick使用的是这里的颜色[0.…

Java项目:基于ssm框架实现的电影评论系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm826基于ssm框架实现的电影评论系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#x…

切鱼达人,Android休闲游戏开发

使用 Android Studio 开发了一款休闲游戏 —— 《切鱼达人》 A. 项目描述 《切鱼达人》是一款有趣的休闲游戏app&#xff0c;让玩家在虚拟的海洋世界中体验切割各种鱼类的乐趣。 《切鱼达人》玩法简单而富有挑战性。玩家需要在游戏中扮演一名渔民&#xff0c;使用手指在屏幕上…