当前位置: 首页 > article >正文

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

目录

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.kler.cn/news/362149.html

相关文章:

  • Golang 并发编程:Context 包的使用与并发控制
  • 理解JVM
  • wait和sleep的区别
  • 矩阵的可解性:关于Ax=b的研究
  • 宇音天下最新力作 | VTX356语音识别合成芯片问世
  • 若依框架定制
  • rk3568 , rk3588, rtl8211F , 时钟的问题
  • MySQL--mysql的安装
  • 什么是CI/CD
  • 主机本地IP与公网IP以及虚拟机的适配器和WSL发行版的IP
  • 分布式异步任务框架Celery,如何实现代码实时监控
  • 聊聊黑龙江等保测评
  • 人大金仓链接
  • rancher安装并快速部署k8s 管理集群工具
  • C/S 软件架构
  • D39【python 接口自动化学习】- python基础之函数
  • 线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)
  • JVM、字节码文件介绍
  • [ComfyUI]Flux:太酷啦!超震撼电影视觉盛宴!2025生肖灵蛇守护
  • 记一次Video-LLaMa部署过程
  • 【计算机网络 - 基础问题】每日 3 题(五十二)
  • node.js使用Sequelize ORM操作数据库
  • 同一个交换机不同vlan的设备为什么不能通信
  • Linux系统层面问题总结
  • 我与Linux的爱恋:自主Shell
  • 【Linux系列】查询nginx相关的进程