11.学生成绩管理系统(Java项目基于SpringBoot + Vue)

news2024/11/28 2:32:05

目录

1.系统的受众说明        

2 总体设计

2.1 需求概述

2.2 软件结构

3 模块设计

3.1 模块基本信息

3.2 功能概述

3.3 算法

3.4 模块处理逻辑

4 数据库设计

4.1 E-R图

4.2 表设计

4.2.1 管理员信息表

4.2.2 课程基本信息表

4.2.3 课程扩展信息表

4.2.4 专业信息表

4.2.5 页面主题表

4.2.6 学生信息表

4.2.7 学生-课程关联表

4.2.8 教师信息表

4.2.9 教师-课程关联表

4.2.10 排课时间表

4.2.11 文件信息表

4.2.12 周课程表信息表

5 接口设计

5.1 外部接口

5.1.1 登录界面

5.1.5 课程表

5.1.6 成绩查询界面

5.1.7 成绩统计界面

5.1.8 课程管理

5.1.9 成绩管理

5.1.10 用户管理

5.2 内部接口

5.2.1 登录接口

5.2.2 课程管理接口

5.2.3 成绩管理接口

5.2.4 用户管理接口

5.2.5 文件管理接口

6 性能

6.1 精度

6.2 时间特性

6.3 灵活性

7 测试


 

1.系统的受众说明
     
   

     1 在校学习的学生,可用于日常学习使用或是毕业设计使用

     2 毕业一到两年的开发人员,用于锻炼自己的独立功能模块设计能力,增强代码编写能力。

     3 亦可以部署为商化项目使用。

     4 需要完整资料及源码,请在文末获取联系方式领取。

2 总体设计

2.1 需求概述

(1) 课程信息的管理,包括课程信息的条件查询、录入、修改和删除。

(2) 课程表的管理,包括排课、录入课程表、修改课程表。

(3) 用户信息管理。包括对系统管理员、教师和学生的信息进行维护管理,可以新增、修改、删除和条件分页查询用户信息。

(4) 成绩信息管理,可以查询对应成绩信息,教师和管理员可以录入和修改成绩。

(5) 用户登录,读者可以通过登录页面注册新账号,管理员、教师、学生可以使用用户名和密码登录系统。

2.2 软件结构

                                        

学生成绩管理系统的软件结构图

描述:学生成绩管理系统向下划分为课程管理、课程表管理、成绩管理、用户管理四个模块。课程管理主要负责对课程的信息进行管理,以及管理员和教师进行课程的查询;课程表管理主要关联教师排课、任课信息、学生获取上课信息;成绩管理中,管理员和教师可以录入或修改对应权限的成绩信息,学生可以查询对应的成绩信息;用户信息管理可以针对管理员、教师和学生的信息进行管理。

3 模块设计

3.1 模块基本信息

名称

编号

设计者

所在文件

课程管理

001

无名

com/rabbiter/sms/controller/Course/CourseController.java

课程表管理

002

无名

com/rabbiter/sms/controller/Timetable/TimetableController.java

成绩管理

003

无名

com/rabbiter/sms/controller/Score/ScoreController.java

用户管理

004

无名

com/rabbiter/sms/controller/User/*.java

3.2 功能概述

名称

编号

说明

课程管理

001

对课程的信息进行管理,以及管理员和教师进行课程的查询。

课程表管理

002

关联教师排课、任课信息、学生获取上课信息,管理员可以针对课程表信息进行编辑,实现排课功能。

成绩管理

003

管理员和教师可以录入或修改对应权限的成绩信息,学生可以查询对应的成绩信息

用户管理

004

针对管理员、教师和学生的信息进行管理

3.3 算法

3.4 模块处理逻辑

                                             

用户登录系统程序流程图

图为用户登录系统的程序流程图,选择登录,已经存在系统的管理员、教师或者学生可以直接进行登录,登录之后进入主页面。

                                                        

查询课程信息程序流程图

图为查询课程信息的程序流程图,该模块首先进入等待用户输入搜索信息状态。如果用户已经输入则获取用户输入并根据输入的搜索关键字在课程信息表中匹配课程信息,最后退出。如果用户未输入则模块继续处于等待用户输入搜索信息状态。

                                                 

查询用户信息程序流程图

图为查询用户信息的程序流程图,该模块首先进入等待用户输入搜索信息状态。如果用户已经输入则获取用户输入并根据输入的搜索关键字在课程信息表中匹配学生用户、教师用户、管理员用户的信息,最后退出。如果用户未输入则模块继续处于等待用户输入搜索信息状态。

                                               

录入课程表(排课)程序流程图

图为录入课程表程序流程图,管理员具有课程表编辑和排课的权限,登录系统后,选择对应的学年和学期条件,系统回显课程表信息,管理员可以选中对应的课程去排课,未选中课程则对应课程表位置留空,确认保存,则可以生成最终课程表。

4 数据库设计

4.1 E-R图

                 

4.2 表设计

4.2.1 管理员信息

数据名称

数据类型

数据描述

Id

Int

管理员id

Username

Varchar

用户名

Password

Varchar

密码

Real_name

Varchar

姓名

Level

Tinyint

级别

School

Varchar

所属学校

Email

Varchar

邮箱

Phone

Varchar

联系电话

Sex

Tinyint

性别

Create_time

timestamp

创建时间

4.2.2 课程基本信息

数据名称

数据类型

数据描述

Id

Varchar

课程基本信息id

Name

Varchar

课程名称

Credits

Decimal

学分

Score

Int

分数

Number

Int

课时

Year

Int

学年

Term

Tinyint

学期

Type

Tinyint

类型。1必修课 2选修课

Profession

Varchar

专业

Create_time

Timestamp

创建时间

4.2.3 课程扩展信息

数据名称

数据类型

数据描述

Id

Varchar

课程扩展信息id

Course_id

Varchar

课程基本信息id

Start

Int

开始时间

End

Int

结束时间

Room

Varchar

教室信息

Profession

Varchar

专业

4.2.4 专业信息

数据名称

数据类型

数据描述

Id

Varchar

专业信息id

Name

Varchar

专业名称

4.2.5 页面主题表

数据名称

数据类型

数据描述

Id

Varchar

页面主题信息id

State

Tinyint

主题标记。0正常模式 1静默模式

4.2.6 学生信息

数据名称

数据类型

数据描述

Id

Varchar

学生信息id

Username

Varchar

用户名

Password

Varchar

密码

Real_name

Varchar

姓名

Level

Tinyint

级别

School

Varchar

学校

Admission_time

Varchar

入校时间

Email

Varchar

电子邮箱

Profession

Varchar

专业

Grade

Int

年级

4.2.7 学生-课程关联表

数据名称

数据类型

数据描述

Id

int

关联id

Student_id

varchar

学生id

Course_id

Varchar

课程id

Name

Varchar

课程名称

Score

Varchar

分数

Point

Decimal

绩点

Credits

Decimal

学分

Term

Tinyint

学期

Year

Int

学年

4.2.8 教师信息

数据名称

数据类型

数据描述

Id

Varchar

教师信息id

Username

Varchar

用户名

Password

Varchar

密码

Real_name

Varchar

姓名

Level

Tinyint

级别

School

Varchar

学校名称

Email

Varchar

邮箱

Phone

Varchar

联系电话

Sex

Tinyint

性别

Create_time

Timestamp

创建时间

4.2.9 教师-课程关联表

数据名称

数据类型

数据描述

Id

int

关联id

Teacher_id

varchar

教师id

Username

Varchar

教师用户名

Name

Varchar

课程名称

Profession

Varchar

专业

Grade

Varchar

年级

Term

Tinyint

学期

Course_id

Varchar

课程id

4.2.10 排课时间表

数据名称

数据类型

数据描述

Id

Varchar

排课时间id

Week_id

Int

周课程表id

Profession

Varchar

专业

Grade

Varchar

年级

Year

Int

学年

Term

Tinyint

学期

4.2.11 文件信息

数据名称

数据类型

数据描述

Id

Int

文件信息id

User_id

Varchar

上传用户id

Level

Int

级别

url

Varchar

文件地址

4.2.12 周课程表信息

数据名称

数据类型

数据描述

Id

Varchar

周课程表信息id

Monday

Varchar

周一课程

Tuesday

Varchar

周二课程

Wednesday

Varchar

周三课程

Thurday

Varchar

周四课程

Friday

Varchar

周五课程

Saturday

Varchar

周六课程

Sunday

Varchar

周日课程

5 接口设计

5.1 外部接口

5.1.1 登录界面

             

5.1.2管理员首页

             

5.1.3 教师首页

            

5.1.4 学生首页

           

5.1.5 课程表

           

5.1.6 成绩查询界面

          

5.1.7 成绩统计界面

          

5.1.8 课程管理

          

5.1.9 成绩管理

         

5.1.10 用户管理

         

5.2 内部接口

5.2.1 登录接口

@GetMapping("/login")
@PassToken
public User getStudentInfo(@RequestParam Map<String, Object> condition) {
    Map<String, Object> map = new HashMap<>();
    map.put("username", condition.get("username").toString());
    map.put("password", condition.get("password").toString());
    map.put("level", condition.get("level"));
    User user = userService.getStudentInfo(map);
    String token = userService.getToken(user, 24 * 60 * 60 * 1000);
    String refreshToken = userService.getToken(user, 24 * 60 * 60 * 1000); // 有效期一天
    user.setToken(token);
    user.setRefreshToken(refreshToken);
    return user;
}

5.2.2 课程管理接口

@PostMapping
public void addCourse(@RequestBody Course course) {
    courseService.addCourse(course);
}

@DeleteMapping("/{ids}")
public void delete(@PathVariable("ids") Integer[] ids) {
    List<Integer> idsList = Arrays.asList(ids);
    courseService.delete(idsList);
}

@PutMapping
public void update(@RequestBody Course course) {
    courseService.update(course);
}

@GetMapping("/getCourseList")
private PagingResult<Course> getCourseList(@RequestParam Map<String, Object> condition,
                                           @RequestParam(required = false, name = "$limit", defaultValue = "10") Integer limit,
                                           @RequestParam(required = false, name = "$offset", defaultValue = "0") Integer offset) {
    RowBounds rowBounds = new RowBounds(offset, limit);
    return courseService.getCourseList(rowBounds, condition);
}

@GetMapping("/getCourseByMap")
private List<Course> getCourseByMap(@RequestParam Map<String, Object> condition) {
    return courseService.getCourseByMap(condition);
}

5.2.3 成绩管理接口

@GetMapping("/getCourseList")
public PagingResult<Course> getCourseList(@RequestParam Map<String, Object> condition,
                                          @RequestParam(required = false, name = "$limit", defaultValue = "10") Integer limit,
                                          @RequestParam(required = false, name = "$offset", defaultValue = "0") Integer offset) {
    RowBounds rowBounds = new RowBounds(offset, limit);
    return scoreService.getCourseList(rowBounds, condition);
}

@PostMapping
private void addEntry(@RequestBody JSONArray UserScore) {
    List<Score> list = JSONObject.parseArray(UserScore.toJSONString(), Score.class);
    scoreService.addEntry(list);
}

@GetMapping("/export")
public List<Course> getExportList(@RequestParam Map<String, Object> condition) {
    return scoreService.getExportList(condition);
}

@GetMapping("/getUserNum")
public List<Map<String, Object>> getUserNum(@RequestParam Map<String, Object> condition) {
    return scoreService.getUserNum(condition);
}

@GetMapping("/getUserTotal")
public Map<String, Object> getUserTotal(@RequestParam Map<String, Object> condition) {
    return scoreService.getUserTotal(condition);
}

5.2.4 用户管理接口

@GetMapping("/edit/password")
public boolean update(@RequestParam Map<String, Object> condition) {
    Map<String, Object> map = new HashMap<>();
    map.put("username", condition.get("username").toString());
    map.put("password", condition.get("password").toString());
    map.put("passwordAgain", condition.get("passwordAgain").toString());
    ;
    map.put("level", condition.get("level").toString());
    return userService.update(map);
}

@GetMapping("/getTree")
public List<Object> getTree() {
    return userService.getTree();
}

@PassToken
@GetMapping("/getSilent")
public boolean getSilent() {
    return userService.getSilent();
}

@PutMapping("/setSilent/{state}")
public boolean setSilent(@PathVariable("state") Integer state) {
    return userService.setSilent(state);
}

5.2.5 文件管理接口

@PostMapping("/headImg")
@ResponseBody
public String upload(MultipartFile file, HttpServletRequest request) throws IOException {
    if (!file.isEmpty()) {
        try {
            byte[] bytes = file.getBytes();
            // 储存位置
            String staticDir = ResourceUtil.getPath();

            // 图片名
            String ImgName = file.getOriginalFilename();

            String uid = UUID.randomUUID().toString();
            assert ImgName != null;
            // 获取后缀名
            String str = ImgName.substring(ImgName.lastIndexOf("."));
            // 重定义文件名
            String newName = uid + str;

            // 图片存储地址
            Path path = Paths.get(staticDir + newName);
            // 写入文件
            Files.write(path, bytes);
            String imgUrl = "/files/" + newName;

            String userId = request.getParameter("id");
            int level = parseInt(request.getParameter("level"));
            Upload upload = new Upload();
            upload.setUserId(userId);
            upload.setLevel(level);
            upload.setUrl(imgUrl);
            uploadService.upload(upload);

            // url去除"sms"
            return imgUrl;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return "";
}

@GetMapping("/getHeadImg")
@UserLoginToken
public String getAdminList(@RequestParam Map<String, Object> condition, HttpServletRequest httpServletRequest) {
    return uploadService.getHeader(condition);
}

6 性能

6.1 精度

要按照严格的数据格式输入,不能输入非法字符,否则系统不给予响应进行处理,查询时要保证准确率为100%,所有包含查询关键字的书籍都应能查到,不能有遗漏。

6.2 时间特性

(1)响应时间:用户任意操作后5秒内系统给予反馈信息。

(2)更新处理时间:由系统运行状态来决定。

(3)数据的转换和传送时间:能够在20秒内完成。

6.3 灵活性

当需求发生某些变化时,该软件的基本操作、数据结构、运行环境等等基本不会发生变化,只是对系统的数据库的文件和记录进行处理,就可以满足需求。

7 测试

功能点

测试用例

输出结果

管理员用户登录

选择管理员角色,输入管理员的用户名和密码,点击登录

跳转到学生成绩管理系统首页,并展示管理员相关功能菜单

教师用户登录

选择教师角色,输入管理员的用户名和密码,点击登录

跳转到学生成绩管理系统首页,并展示教师相关功能菜单

学生用户登录

选择管理员角色,输入管理员的用户名和密码,点击登录

跳转到学生成绩管理系统首页,并展示读者相关功能菜单

课程信息新增

点击新增,输入课程信息,点击确认新增

未填写完整表单,提示对应异常,填写完整表单,提示新增成功

课程信息查询

输入对应查询条件,点击查询

课程信息列表

课程信息修改

选中课程信息,弹出课程信息修改框,修改对应信息,点击修改

未填写完整表单,提示对应异常,填写完整表单,提示修改成功

课程信息删除

选中删除的数据

提示删除成功

录入课程表

选中对应学年对应学期的课程表,录入对应课程

出现下拉框录入课程信息

成绩信息查询

输入对应查询条件,点击查询

成绩信息列表

录入成绩

选中对应成绩信息

录入成绩

修改成绩

选中对应成绩信息

修改成绩

修改课程表

选中对应学年学期的课程表,修改已有的课程表信息

出现下拉框修改课程信息

用户新增

点击新增,输入用户信息,点击确认新增

未填写完整表单,提示对应异常,填写完整表单,提示新增成功

用户信息查询

输入对应查询条件,点击查询

用户信息列表

用户修改

选中用户信息,弹出用户信息修改框,修改对应信息,点击修改

未填写完整表单,提示对应异常,填写完整表单,提示修改成功

用户删除

选中删除的数据

提示删除成功

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

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

相关文章

Cuda By Example - 8 (性能测量)

时间戳记录API 使用constant内存&#xff0c;究竟带来多少性能提升&#xff0c;如何尽可能精确的测量GPU完成某项任务所花的时间&#xff1f;CUDA提供了cudaEvent_t 以及 CUDA event API来做运行时间的测量。 cudaError_t cudaEventCreate(cudaEvent_t *event); cudaError_t c…

架构设计笔记-22-论文

1.论企业应用系统的数据持久层架构设计 2.论企业信息化规划的实施与应用 3.论企业应用系统的分层架构风格 4.论分布式存储架构系统设计 5.论云原生架构及其应用 6.论企业集成架构设计及应用 7.论数据湖技术及其应用 8.论系统安全架构设计及其应用 9.论企业集成平台的理解与应用…

【双指针算法】快乐数

1.题目解析 2.算法分析 由图可知&#xff0c;不管是最后可以变成1的还是不可以变成1的都相当于形成环了&#xff0c;只是成环处值不一样 问题转变成&#xff0c;判断链表是否有环 采用双指针&#xff0c;快慢指针算法 1.定义快慢指针2.慢指针每次向后移动一步&#xff0c;快…

ES-入门-javaApi-文档-新增-删除

新增指定索引的文档数据的代码如下&#xff1a; package com.atgulgu.es.test;import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.HttpHost; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexRe…

UNI VFX Missiles Explosions for Visual Effect Graph

Unity URP和HDRP的通用视觉效果 使用在视觉效果图中制作的高性能GPU粒子系统。 无需进入视觉效果图编辑器即可轻松自定义VFX。 使用(VFX)事件——一个游戏对象可存储多个效果,这些效果可通过C#或视觉脚本触发。 总共32个事件(不包括“停止”事件)。 ❓ 什么是(VFX)事件?…

STM32Cubemx 配置ADC(HAL库)

一、ADC几种模式 1、扫描模式&#xff1a; 使用STM32CUBEMX配置了多通道后&#xff0c;这一项默认开启且无法设置成关闭。这个模式就是自动扫描你开启的所有通道进行转换&#xff0c;直至转换完。例如你开启了CH0、CH1、CH2、CH3这四个通道&#xff0c;启动转换后ADC会自动将这…

动态规划原理及算法题(1)

课程规划会分为四个阶段进行&#xff1a; 1.题目解析 2.讲解算法原理(动态规划的原理) 3.编写代码 4.空间优化 1. 第 N 个泰波那契数&#xff08;easy&#xff09; 泰波那契数相当于斐波那契数的孪生兄弟&#xff0c;是它的加强版。 1.题目解析 2.讲解算法原理 如果用动态规…

Java中的一些名词概念

**函数式接口:** 概念&#xff1a;一个接口中的抽象方法只有一个&#xff0c;那么这个接口就是一个函数式接口。形参: 形参变量是**功能函数里的变量**&#xff0c;只有<u>在被调用的时候才分配内存单元</u>&#xff0c;<u>调用结束后立即释放</u>。…

Unity使用Git及GitHub进行项目管理

git: 工作区,暂存区(存放临时要存放的内容),代码仓库区1.初始化 git init 此时展开隐藏项目,会出现.git文件夹 2.减小项目体积 touch .gitignore命令 创建.gitignore文件夹 gitignore文件夹的内容 gitignore中添加一下内容 # This .gitignore file should be place…

Java项目-基于Springboot的应急救援物资管理系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

Ubuntu20.04编译安卓aosp 15源码编译到模拟器运行

背景&#xff1a; aosp15也开始悄悄在各个手机厂商开始酝酿了&#xff0c;感叹时间很快&#xff0c;今天也准备针对aosp15进行一下源码环境的搭建&#xff0c;整体aosp15的搭建和13/14其实没啥大的差别&#xff0c;只不过在lunch目标这个地方确实很大不同&#xff0c;还有就是…

HCIP-HarmonyOS Application Developer 习题(十四)

&#xff08;多选&#xff09;1、HarmonyOs为应用提供丰富的Al(Artificial Intelligence)能力&#xff0c;支持开箱即用。下列哪些是它拥有的AI能力? A、通用文字识别 B、词性标注 C、实体识别 D、语音播报 答案&#xff1a;ABCD 分析&#xff1a; AI能力简介二维码生成根据开…

工业级三防平板在工厂极端环境下保障稳定运行

在现代工业环境中&#xff0c;尤其是在工厂车间&#xff0c;设备和技术的稳定性直接关系到生产效率与产品质量。然而&#xff0c;极端的工作条件常常给电子设备的使用带来了不小的挑战。为此&#xff0c;市场上出现了一种专为工业应用设计大尺寸手持三防平板电脑。这种设备以其…

2024年十大前沿图像分割模型汇总:工作机制、优点和缺点介绍

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

antd vue 输入框高亮设置关键字

<highlight-textareaplaceholder"请输入主诉"type"textarea"v-model"formModel.mainSuit":highlightKey"schema.componentProps.highlightKey"></highlight-textarea> 参考链接原生input&#xff0c;textarea demo地址 …

【前端】如何制作一个自己的网站(11)

接上文。 除了前面的颜色样式外&#xff0c;字体样式和文本样式也是网页设计中的重要组成部分。 合适的字体和文本排版&#xff0c;不仅可以使页面更加美观&#xff0c;也可以提升用户体验。接下来&#xff0c;我们先来看看CSS如何设置字体样式。 字体样式 同时设置了字体样…

经典算法整理(Go语言实现)

经典算法系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 第一章 回溯算法 第二章 贪心算法 第三章 动态规划 第四章 单调栈 第五章 图论 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可…

机器学习课程学习周报十七

机器学习课程学习周报十七 文章目录 机器学习课程学习周报十七摘要Abstract一、机器学习部分1. 变分推断/推理1.1 证据下界1.2 q ( z ) {q(z)} q(z)的选取 2. VAE2.1 Auto-Encoder的简单回顾2.2 为什么提出VAE2.3 VAE的数学原理 3. Diffusion Model的数学原理3.1 Training算法…

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用&#xff1a;注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…

开源的存储引擎--cantian

cantian 上次稼先社会活动之后&#xff0c;在北京签售的时候见到了三位参天的核心人物。我有感于他们的热情、务实和坦诚&#xff0c;我觉得还应该在深入的做一些事情。至少可以安装体验一下&#xff0c;做做推广。毕竟现在务实的产品不多了&#xff0c;很多都是浮躁的宣传。为…