基于Vue+SpringBoot的高校学生管理系统 开源项目

在这里插入图片描述
项目编号: S 029 ,文末获取源码。 \color{red}{项目编号:S029,文末获取源码。} 项目编号:S029,文末获取源码。


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 学生管理模块
    • 2.2 学院课程模块
    • 2.3 学生选课模块
    • 2.4 成绩管理模块
  • 三、系统设计
    • 3.1 用例设计
    • 3.2 数据库设计
      • 3.2.1 学生表
      • 3.2.2 学院课程表
      • 3.2.3 学生选课表
      • 3.2.4 学生成绩表
  • 四、系统展示
  • 五、核心代码
    • 5.1 查询课程
    • 5.2 新增学生选课
    • 5.3 编辑学生选课
    • 5.4 课程打分
    • 5.5 安排补考
  • 六、免责说明


一、摘要

1.1 项目介绍

基于Vue+SpringBoot+MySQL的高校学生管理系统包含学院课程模块、学生选课模块、课程补考模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,高校学生管理系统基于角色的访问控制,给教务管理员、教师、学生使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求,项目编号S029。

1.2 项目录屏

源码下载


二、功能模块

在这里插入图片描述

2.1 学生管理模块

学生管理模块帮助学校或教育机构更好地管理和监督学生的学习情况,提高教育质量,学生管理模块可以记录学生的个人基本信息、学习成绩、考勤状态等信息,有助于将学生数据保存,这些信息对于学校了解学生的情况、与家长沟通以及做出教育决策非常重要。学生管理模块帮助学校创建和发布课程,让学生了解他们的上课时间和内容,也可以使用它来管理考试,例如考试时间表和成绩统计,学生管理模块帮助学校更好地管理课堂,包括课堂内的互动、活动组织和学生评分,学生管理模块可以方便教师和家长之间的沟通,传达学生的在校表现和学习情况,学生管理模块能够帮助学校更好地管理和监督学生,提高教育质量,全面提高学生的成绩,有助于学生管理模式的促进发展。

2.2 学院课程模块

大学课程模块使学生和其他用户更容易找到、选择、管理和学习适合学生的内容,在现代社会,知识的代际变化非常快,有必要通过学习不断提高自己,传统的教育方式越来越难以满足大众化和个性化学习的需要,学院课程模块可以通过互联网技术和数据分析的方法,为学生提供更加多样化和灵活的学习资源和服务,学院课程模块为学生提供更全面、个性化和高效的学习模式,它可以提供好处,帮助您更好地满足时代对知识更新的需求。

2.3 学生选课模块

学生选课模块帮助学校更好地管理和安排教育资源,同时为学生提供更独立、更方便的选择体验,首先,学校可以通过学生选修科目模块实现对选修科目数据的实时监控和统计,掌握每节课的选考情况,对下学期的教学进度做出科学合理的决策。第二,学生可以通过学生选择模块自由选择自己感兴趣的课程,并可以实时查看选择结果,了解自己的选择情况,从而大大提高选修课的效率和准确性。最后,在学生选课模块中,学生可以看到班级介绍、班级评价等信息,从而更好地了解自己选择的班级的内容和特点,更好地规划自己的学习生活。

2.4 成绩管理模块

成绩管理模块帮助学生和教师更好地管理和理解学生的表现,对于学生来说,通过成绩管理模块,他们可以及时跟踪自己的成绩、考试时间表和各科的学习进度,从而全面掌握自己的学习情况,同时成绩管理模块为学生提供个性化的成绩报告,让他们更好地了解自己需要加强的地方。对于教师来说,成绩中心模块帮助他们快速准确地输入和组织学生的成绩信息,并根据学生的表现提供合理的评估和分析,这样教师可以及时发现学生的问题和困难,并根据目的进行指导和指导,有助于提高学生的学习效果和学业水平。此外成绩管理模块为教师提供了统计分析的功能,使他们能够更全面地了解班级或学院的学业情况,并制定更合理的教育计划和策略。


三、系统设计

3.1 用例设计

在这里插入图片描述

3.2 数据库设计

3.2.1 学生表

在这里插入图片描述

3.2.2 学院课程表

在这里插入图片描述

3.2.3 学生选课表

在这里插入图片描述

3.2.4 学生成绩表

在这里插入图片描述


四、系统展示

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


五、核心代码

5.1 查询课程

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询课程")
public Result<IPage<Curriculum>> getByPage(@ModelAttribute Curriculum curriculum ,@ModelAttribute PageVo page){
    QueryWrapper<Curriculum> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(curriculum.getTitle())) {
        qw.like("title",curriculum.getTitle());
    }
    if(!ZwzNullUtils.isNull(curriculum.getType())) {
        qw.eq("type",curriculum.getType());
    }
    if(!ZwzNullUtils.isNull(curriculum.getLevel())) {
        qw.eq("level",curriculum.getLevel());
    }
    IPage<Curriculum> data = iCurriculumService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Curriculum>>().setData(data);
}

5.2 新增学生选课

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增选课")
public Result<CourseSelection> insert(CourseSelection courseSelection){
    Curriculum curriculum = iCurriculumService.getById(courseSelection.getCurriculumId());
    if(curriculum == null) {
        return ResultUtil.error("课程不存在");
    }
    QueryWrapper<CourseSelection> oldQw = new QueryWrapper<>();
    oldQw.eq("curriculum_id",courseSelection.getCurriculumId());
    oldQw.eq("student_id",courseSelection.getStudentId());
    if(iCourseSelectionService.count(oldQw) > 0L) {
        return ResultUtil.error("已完成选课");
    }
    courseSelection.setTitle(curriculum.getTitle());
    courseSelection.setType(curriculum.getType());
    courseSelection.setContent(curriculum.getContent());
    courseSelection.setKnowledgePoints(curriculum.getKnowledgePoints());
    courseSelection.setWeeklyHours(curriculum.getWeeklyHours());
    courseSelection.setLevel(curriculum.getLevel());
    User student = iUserService.getById(courseSelection.getStudentId());
    if(student == null) {
        return ResultUtil.error("学生不存在");
    }
    courseSelection.setStudentName(student.getNickname());
    courseSelection.setGrade(BigDecimal.ZERO);
    courseSelection.setGradeUser("");
    courseSelection.setGradeTime("");
    courseSelection.setMakeupExam("");
    iCourseSelectionService.saveOrUpdate(courseSelection);
    return new ResultUtil<CourseSelection>().setData(courseSelection);
}

5.3 编辑学生选课

@RequestMapping(value = "/update", method = RequestMethod.POST)
@ApiOperation(value = "编辑选课")
public Result<CourseSelection> update(CourseSelection courseSelection){
    Curriculum curriculum = iCurriculumService.getById(courseSelection.getCurriculumId());
    if(curriculum == null) {
        return ResultUtil.error("课程不存在");
    }
    QueryWrapper<CourseSelection> oldQw = new QueryWrapper<>();
    oldQw.eq("curriculum_id",courseSelection.getCurriculumId());
    oldQw.eq("student_id",courseSelection.getStudentId());
    if(iCourseSelectionService.count(oldQw) > 0L) {
        return ResultUtil.error("已完成选课");
    }
    courseSelection.setTitle(curriculum.getTitle());
    courseSelection.setType(curriculum.getType());
    courseSelection.setContent(curriculum.getContent());
    courseSelection.setKnowledgePoints(curriculum.getKnowledgePoints());
    courseSelection.setWeeklyHours(curriculum.getWeeklyHours());
    courseSelection.setLevel(curriculum.getLevel());
    User student = iUserService.getById(courseSelection.getStudentId());
    if(student == null) {
        return ResultUtil.error("学生不存在");
    }
    courseSelection.setStudentName(student.getNickname());
    iCourseSelectionService.saveOrUpdate(courseSelection);
    return new ResultUtil<CourseSelection>().setData(courseSelection);
}

5.4 课程打分

@RequestMapping(value = "/check", method = RequestMethod.GET)
@ApiOperation(value = "打分")
public Result<CourseSelection> check(@RequestParam String id,@RequestParam BigDecimal grade){
    CourseSelection cs = iCourseSelectionService.getById(id);
    if(cs == null) {
        return ResultUtil.error("选课不存在");
    }
    User currUser = securityUtil.getCurrUser();
    cs.setGrade(grade);
    cs.setGradeUser(currUser.getNickname());
    cs.setGradeTime(DateUtil.now());
    if(grade.compareTo(BigDecimal.valueOf(60)) >= 0) {
        cs.setMakeupExam("无需补考");
    } else {
        cs.setMakeupExam("补考待安排");
    }
    iCourseSelectionService.saveOrUpdate(cs);
    return ResultUtil.success();
}

5.5 安排补考

@RequestMapping(value = "/make", method = RequestMethod.GET)
@ApiOperation(value = "安排补考")
public Result<CourseSelection> make(@RequestParam String id,@RequestParam String makeupExam){
    CourseSelection cs = iCourseSelectionService.getById(id);
    if(cs == null) {
        return ResultUtil.error("选课不存在");
    }
    cs.setMakeupExam(makeupExam);
    iCourseSelectionService.saveOrUpdate(cs);
    return ResultUtil.success();
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV C++ 图像处理实战 ——《OCR字符识别》

OpenCV C++ 图像处理实战 ——《OCR字符识别》 一、结果演示二、tesseract库配置2.1下载编译三、OCR字符识别3.1 文本检测方式3.1.1 RIL_BLOCK3.1.2 RIL_PARA3.1.3 RIL_TEXTLINE3.1.4 RIL_WORD3.1.5 RIL_SYMBOL3.2 英文文本检测3.3 中英文本检测四、源码测试图像下载总结一、结…

【广州华锐互动】VR可视化政务服务为公众提供更直观、形象的政策解读

虚拟现实&#xff08;VR&#xff09;技术正在逐渐应用于政务服务领域&#xff0c;为公众提供更加便捷、高效和个性化的服务体验。通过VR眼镜、手机等设备&#xff0c;公众可以在虚拟环境中参观政务服务中心&#xff0c;并根据自己的需求选择不同的办事窗口或事项进行咨询和办理…

【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Nacos 一、nacos实现配置管理1.1 统一配置管…

圆弧插补-逐点比较法

圆弧插补-逐点比较法 逐点比较法直线插补流程 逐点比较法直线插补流程 逐点比较法第I象限逆圆插补 在圆弧加工过程中&#xff0c;要描述刀具位置与被加工圆弧之间的相对位置关系&#xff0c;可用动点到圆心的距离大小来反映。 如下图所示&#xff0c;假设被加工零件的轮廓为第…

【案例分享】BenchmarkSQL 5.0 压测 openGauss 5.0.0

一、前言 本次BenchmarkSQL 压测openGauss仅作为学习使用压测工具测试tpcc为目的&#xff0c;并不代表数据库性能如本次压测所得数据。实际生产性能压测&#xff0c;还需结合服务器软硬件配置、数据库性能参数调优、BenchmarkSQL 配置文件参数相结合&#xff0c;是一个复杂的过…

redis集群-主从复制

目录 一、主从复制概念二、单机安装Redis2.1、安装 Redis 需要的软件 gcc 和 tcl2.2、上传Redis压缩包2.3、编辑 redis.conf 文件2.4、执行安装 Redis 命令2.5、注意防火墙配置 三、主从复制 - 环境搭建3.1、配置一个 master 节点&#xff0c;两个 slave 节点3.2、配置 redis63…

数组的访问

注意&#xff1a;如果一个数组对象指向null&#xff0c;那么该数组对象中不存储任何地址。 这时使用System.out.println(a); System.out.println(a[0]);会出现空指针报错

SHELL中的循环语句

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;博主会及时修改&#xff09; 循环结构 连续出现的功能性代码 shell循环有四种: while 条件成立,循环就开始 直到循环条件不满足或者跳出…

Vatee万腾科技引领创新潮流:Vatee数字化探索的前沿之光

在Vatee万腾科技引领创新潮流的浪潮中&#xff0c;我们见证了一场数字化探索的前沿之光。Vatee万腾以其卓越的科技实力和创新精神&#xff0c;成为数字化时代的领军者&#xff0c;为创新潮流注入了强大动力。 Vatee万腾积极探索数字化的前沿&#xff0c;不断挑战科技的极限。他…

2023-11-18 Android Linux资源限制命令 ulimit,比如ulimit -d 是设置进程占用的最大数据段大小,默认是unlimited。

一、通过ulimit -a 命令可以查看当前的各种资源限制&#xff0c;比如ulimit -d 是 进程占用的最大数据段大小。 # ulimit -a -t: time(cpu-seconds) unlimited -f: file(blocks) unlimited -c: coredump(blocks) 0 -d: data(KiB) unlimited -s:…

VS2022 配置 OpenCV并开始第一个程序

VS2022安装 首先下载 VisualStudioSetup.exe 下载连接&#xff1a;Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 点击上面的链接即可进入到下载页面。进入到下载页面&#xff0c;可看到有几个版本可选&#xff0c;如下&#xff1a; 我选择的是企业版&#xff1a;E…

Angular菜单项激活状态保持

菜单项激活状态保持 需求描述详细需求 解决方案 需求描述 如果有个需求&#xff0c;让你实现一个导航栏&#xff0c;点击不同菜单&#xff0c;图表会有不同变化&#xff0c;页面刷新后&#xff0c;该菜单状态仍旧保持&#xff0c;实现方法如下&#xff1a; 例图&#xff0c;有…

机器人走迷宫问题

题目 1.房间有XY的方格组成&#xff0c;例如下图为64的大小。每一个方格以坐标(x,y) 描述。 2.机器人固定从方格(0, 0)出发&#xff0c;只能向东或者向北前进&#xff0c;出口固定为房间的最东北角&#xff0c;如下图的 方格(5,3)。用例保证机器人可以从入口走到出口。 3.房间…

若依中脱敏

SpringBoot使用自定义注解实现返回数据脱敏操作 在实际项目中&#xff0c;对于敏感数据的保护十分重要&#xff0c;数据脱敏又称数据去隐私化或数据变形&#xff0c;是在给定的规则、策略下对敏感数据进行变换、修改的技术机制&#xff0c;能够在很大程度上解决敏感数据在非可…

【Linux】进程间是这样通信的--管道篇

TOC 目录 进程间通信的介绍 进程间通信的概念 进程间通信的目的 进程间通信的本质 进程间通信的分类 管道 什么是管道 匿名管道 pipe函数 匿名管道使用步骤 管道读写规则 管道的特点 1、管道内部自带同步与互斥机制 2、管道的生命周期随进程 3、管道提供的是流式…

【MATLAB源码-第82期】基于matlab的OFDM系统载波频移偏差(CFO)估计,对比三种不同的方法。

操作环境&#xff1a; MATLAB 2013b 1、算法描述 正交频分复用&#xff08;OFDM&#xff09;系统中的载波频率偏移&#xff08;CFO&#xff09;估计是一项关键技术&#xff0c;用于确保数据传输的准确性和效率。CFO通常由于振荡器频率不匹配和多普勒频移引起。不同的CFO估计…

分布式服务与分布式框架

分布式副武其实就是根据某个粒度&#xff0c;将服务拆分&#xff0c;而分布式框架就是将这些服务协调&#xff0c;管理起来。分布式框架&#xff0c;我认为服务调用是他的基础能力&#xff0c;该能力是所有分布式框架的基础能力&#xff0c;其次是服务注册与发现。 在这个维度…

springboot项目yml文件中使用${}配置

1、传统写法 &#xff08;1&#xff09;配置服务启动端口 # 服务端口 server:port: 9898 &#xff08;2&#xff09;使用idea启动 &#xff08;3&#xff09;使用jar包启动 2、使用${}写法 格式&#xff1a;${自定义参数名:默认值} 作用&#xff1a; 项目启动时动态配置变量…

【计算机基础】优雅的PPT就应该这样设计

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

DevSeo Studio设置中文界面

安装好DevSeo Studio后默认打开是欢迎页。 左下角Configure点击展开&#xff0c;选择plugins 弹出页面选择“installed”,然后输入chinese,默认是关闭的&#xff0c;点击enable将它启用&#xff0c;然后点击OK。 弹出页面点击“restart”重启即可。