【软件工程】详细设计(二)
这里是详细设计文档的第二部分。前一部分点这里
4. 学生端模块详细设计
学生端模块主要由几个组件构成:学生登录界面,成绩查询界面等界面。因为学生端的功能相对来说比较单一,因此这里只给出两个最重要的功能。

图4.1 学生端模块流程图
4.1 学生登录界面模块
4.1.1类描述
定义了对学生的登录操作功能结构。
4.1.2功能
给定账号和密码,实现登录功能。每次登录时都需要验证账号与密码是否正确(通过查询数据库与正则表达式验证),学生比较特殊,他们的学号就是他们的账号。
4.1.3代码实现
JavaScript代码(通过正则表达式实现密码验证):
else {debugger;var userName = param.userName;var reg = /^[\d]{6,10}$/;if (userName.length > 10) {layer.msg('学号长度不能大于10位', {icon: 5});}if (reg.test(userName)) {$.ajax({//几个参数需要注意一下type: "POST",//方法类型dataType: "json",//预期服务器返回的数据类型url: "/user/studentLogin",//urldata: param,success: function (result) {if (result.code == "0") {location.href = "/student-index.html";} else {layer.msg('用户名密码错误', {icon: 5});}},error: function () {layer.msg('服务器错误', {icon: 5});}});} else {layer.msg('学生角色登录请使用学号', {icon: 5});}
}
4.1.4性能
在执行相关操作时,均可以正常实现学生登录功能。
4.2成绩查询界面
4.2.1类描述
定义了对学生的成绩查询操作功能结构。
4.2.2功能
学生查询自己的相关信息与所有的成绩信息。
4.2.3代码实现
HTML代码:
<table class="layui-table" lay-data="{ url:'/score/getMyScore', page:true, id:'scoreSum'}" lay-filter="demo"> <thead> <tr> <th lay-data="{type:'checkbox', }"></th> <th lay-data="{field:'studentNo',sort: true}">学号</th> <th lay-data="{field:'studentName'}">姓名</th> <th lay-data="{field:'score1'}">习题成绩</th> <th lay-data="{field:'score2'}">测验成绩</th> <th lay-data="{field:'score3'}">考试成绩</th> <th lay-data="{field:'sumScore'}">合计成绩</th> </tr> </thead></table>
Java代码:
//获取我的成绩
@RequestMapping("/getMyScore")
public ResultObject<List<TStudent>> getAllSumScore(HttpServletRequest request,@RequestParam("limit") int limit,@RequestParam("page") int page) {TStudent student = (TStudent)request.getSession().getAttribute("student");PageInfo<TStudent> pageInfo =scoreService.getAllFinalScore(student, limit, page);ResultObject<List<TStudent>> rs=new ResultObject<List<TStudent>>();rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("查询成功");rs.setData(pageInfo.getList());rs.setCount(pageInfo.getTotal());return rs;} @RequestMapping("/getMyScoreInfo")
public ResultObject<List<TScore>> getMyScoreInfo(HttpServletRequest request,@RequestParam("limit") int limit,@RequestParam("page") int page) {TStudent student = (TStudent)request.getSession().getAttribute("student");TScore score=new TScore();score.setStudentId(student.getStudentNo());PageInfo<TScore> pageInfo=scoreService.getAllScore(score,limit, page);ResultObject<List<TScore>> rs=new ResultObject<List<TScore>>();List<TScore> list=pageInfo.getList();for(TScore temp:list) {String type=temp.getScoreType();if("1".equals(type)) {temp.setScoreTypeName("习题");}if("2".equals(type)) {temp.setScoreTypeName("测验");}if("3".equals(type)) {temp.setScoreTypeName("考试成绩");}}rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("查询成功");rs.setData(list);rs.setCount(pageInfo.getTotal());return rs;}
4.2.4性能
在执行相关操作时,均可以正常实现学生成绩查询功能,目前为止未发现错误。
4.2.5 设计方法
运用了面向对象的思想,按Java面向对象编程设计。
5. 管理员端模块详细设计
管理员端模块主要由几个组件构成:管理员登录界面,数据查询界面、搜索功能、学生信息修改界面界面,学生成绩修改界面和教师信息修改界面。管理员端模块需要实现的功能最多,其中有一部分与之前教师端的功能有重叠,本着代码复用和简洁的原则,这里就不再给出详细设计,而只给出之前没有的功能的详细设计。
管理员端模块如下图所示:

图5.1 管理员端模块流程图
5.1管理员登录界面
5.1.1类描述
定义了对管理员的登录操作功能结构。
5.1.2功能
给定账号和密码,实现登录功能。每次登录时都需要验证账号与密码是否正确(通过查询数据库与正则表达式验证)。
5.1.3代码实现
JavaScript代码(通过正则表达式实现密码验证):
else if ("3" == param.type) {$.ajax({//几个参数需要注意一下type: "POST",//方法类型dataType: "json",//预期服务器返回的数据类型url: "/user/login",//urldata: param,success: function (result) {if (result.code == "0") {location.href = "/admin-index.html";} else {layer.msg('管理员密码错误', {icon: 5});}},error: function () {layer.msg('服务器错误', {icon: 5});}});
}
5.1.4性能
在执行相关操作时,均可以正常实现管理员登录功能。
5.2学生信息修改界面
5.2.1类描述
定义了管理员的修改学生信息的操作功能结构。
5.2.2功能
管理员能自由地修改学生信息,而教师不能,教师只能查看学生信息。而修改信息又分为三种,添加学生信息、修改学生信息、删除学生信息。
5.2.3代码实现
Java代码:
1.添加学生信息
@RequestMapping("/addStudent")
public ResultObject<Object> addStudent(TStudent student) {Integer studentNo=student.getStudentNo();student.setStuPass(studentNo.toString());TStudent result=studentService.selectByNo(studentNo);//统一返回ResultObject<Object> rs=new ResultObject<Object>();if(null==result) {studentService.addStudent(student);rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("增加学生信息成功");}else {rs.setCode(Constant.HASE_RETUEN_CODE);rs.setMsg("学号已存在");}return rs;
}
2.删除学生信息
@RequestMapping("/deleteStudent")
public ResultObject<Object> deleteStudent(@RequestParam("studentNo") int studentNo) {Integer total=studentService.deleteStudent(studentNo);//统一返回ResultObject<Object> rs=new ResultObject<Object>();if(null==total||0==total) {rs.setCode(Constant.FAILURE_RETUEN_CODE);rs.setMsg("删除学生信息失败");}else {rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("删除学生信息成功");}return rs;
}
3.修改学生信息
@RequestMapping("/updateStudent")
public ResultObject<Object> updateStudent(TStudent student) {Integer total=studentService.updateStudent(student);//统一返回ResultObject<Object> rs=new ResultObject<Object>();if(null==total||0==total) {rs.setCode(Constant.FAILURE_RETUEN_CODE);rs.setMsg("修改学生信息失败");}else {rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("修改学生信息成功");}return rs;
}
5.2.4性能
在执行相关操作时,均可以正常实现管理员删除、添加和修改学生信息的功能。
5.2.5 设计方法
运用了面向对象的思想,按Java面向对象编程设计。
5.3教师信息修改界面
5.3.1类描述
定义了管理员的修改教师信息的操作功能结构。
5.3.2功能
管理员能自由地修改教师信息。修改信息又分为三种,添加教师信息、修改教师信息、删除教师信息。
5.3.3代码实现
Java代码:
1.添加教师信息
@RequestMapping("/addTeacher")
public ResultObject<Object> addTeacher(TTeacher Teacher) {Integer TeacherNo=Teacher.getTeacherNo();Teacher.setStuPass(TeacherNo.toString());TTeacher result=TeacherService.selectByNo(TeacherNo);//统一返回ResultObject<Object> rs=new ResultObject<Object>();if(null==result) {TeacherService.addTeacher(Teacher);rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("增加教师信息成功");}else {rs.setCode(Constant.HASE_RETUEN_CODE);rs.setMsg("账号已存在");}return rs;
}
2.删除教师信息
@RequestMapping("/deleteTeacher")
public ResultObject<Object> deleteTeacher(@RequestParam("TeacherNo") int TeacherNo) {Integer total=TeacherService.deleteTeacher(TeacherNo);//统一返回ResultObject<Object> rs=new ResultObject<Object>();if(null==total||0==total) {rs.setCode(Constant.FAILURE_RETUEN_CODE);rs.setMsg("删除教师信息失败");}else {rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("删除教师信息成功");}return rs;
}
3.修改教师信息
@RequestMapping("/updateTeacher")
public ResultObject<Object> updateTeacher(TTeacher Teacher) {Integer total=TeacherService.updateTeacher(student);//统一返回ResultObject<Object> rs=new ResultObject<Object>();if(null==total||0==total) {rs.setCode(Constant.FAILURE_RETUEN_CODE);rs.setMsg("修改教师信息失败");}else {rs.setCode(Constant.SUCCESS_RETUEN_CODE);rs.setMsg("修改教师信息成功");}return rs;
}
5.3.4性能
在执行相关操作时,均可以正常实现管理员删除、添加和修改教师信息的功能。
5.3.5 设计方法
运用了面向对象的思想,按Java面向对象编程设计,未发现错误。
相关文章:
【软件工程】详细设计(二)
这里是详细设计文档的第二部分。前一部分点这里 4. 学生端模块详细设计 学生端模块主要由几个组件构成:学生登录界面,成绩查询界面等界面。因为学生端的功能相对来说比较单一,因此这里只给出两个最重要的功能。 图4.1 学生端模块流程图 4.…...
数据质量决定大模型能力,景联文科技提供高质量大模型数据
随着大模型的深入发展,各类资源要素的配置状态已悄然变化。其中,数据的价值已被提升到一个新高度。 大模型往往拥有庞大的参数和复杂的网络结构,需要大量的数据来学习和优化。数据的质量和数量直接决定了模型的训练效果。若数据不足或质量不佳…...
大话设计模式之状态模式
状态模式是一种行为设计模式,它允许对象在其内部状态发生变化时改变其行为。在状态模式中,对象将其行为委托给当前状态对象,从而在不同的状态下执行不同的行为,而不必在对象自身的代码中包含大量的条件语句。 通常,状…...
【机器学习】“强化机器学习模型:Bagging与Boosting详解“
1. 引言 在当今数据驱动的世界里,机器学习技术已成为解决复杂问题和提升决策制定效率的关键工具。随着数据的增长和计算能力的提升,传统的单一模型方法已逐渐无法满足高精度和泛化能力的双重要求。集成学习,作为一种结合多个学习算法以获得比…...
《QT实用小工具·九》设备按钮控件
1、概述 源码放在文章末尾 该项目实现了设备按钮控件,主要包含如下功能: 可设置按钮样式 圆形、警察、气泡、气泡2、消息、消息2。可设置按钮颜色 布防、撤防、报警、旁路、故障。可设置报警切换及对应报警切换的颜色。可设置显示的防区号。可设置是否…...
计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程步骤
随着网络技术在企业中的不断应用,越来越多的企业离不开网络,网络为企业提供了极大便利,大大提升了生产运营效率,由此而产生的网络数据安全问题也成为了企业关心的主要话题。近期,云天数据恢复中心接到多家企业的求助&a…...
qT 地图显示飞机轨迹
为了在Qt中显示飞机轨迹,你可以使用Qt的地图模块,例如Qt Location。以下是一个简单的示例,展示如何使用Qt地图模块显示飞机的轨迹。 首先,确保你的Qt项目文件(.pro)中包含了以下行来启用Qt Location模块: !include($…...
智慧展览馆:基于AI智能识别技术的视频智慧监管解决方案
一、建设背景 随着科技的不断进步和社会安全需求的日益增长,展览馆作为展示文化、艺术和科技成果的重要场所,其安全监控系统的智能化升级已成为当务之急。为此,旭帆科技(TSINGSEE青犀)基于视频智能分析技术推出了展览馆…...
Linux实用性脚本 [bash]
Linux实用性脚本 [bash] 1. 列出排名前 5 的CPU/内存占用进程2. iptables 自动屏蔽访问网站频繁的IP3. 自动发布 Java 项目(Tomcat)4. Nginx 访问日志分析脚本5. 查看网卡实时流量脚本6. 批量检测网站是否异常并邮件通知7. 目录入侵检测与告警8. 一键查看…...
Key exchange failed.No compatible key exchange method.
使用远程工具secureCRT (版本:Version 7.0.0 (x64 build 326) ) 连接Linux(Ubuntu-22.04)系统 若20之前的ubuntu系统版本参考:: 🔗使用远程工具连接Linux系统 1、检查ssh-server版本 sudo dpk…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Asset Store Kit
1.问题描述 使用关键资产API需要配置SystemCapability.Security.Asset,但不知道syscap.json文件应该配置在哪里,文档也没找到。 解决方案 新增关键资产等API可以直接参考开发指南里的示例代码进行调用: https://developer.huawei.com/cons…...
arm架构离线部署docker
1.首先检查服务器glibc版本 rpm -q glibc 如果 glibc-2.35版本以上,则参考下面安装步骤,包下载地址 链接:https://pan.baidu.com/s/1X64XrzRva0O7ZSekLZdIcA?pwd8k4c 提取码:8k4c glibc-2.35以上Docker离线安装 如下 mkdir …...
SpringBoot(48)-使用 SkyWalking 进行分布式链路追踪
Spring Boot(48)- 使用 SkyWalking 进行分布式链路追踪 介绍 在分布式系统中,了解各个服务之间的调用关系和性能表现是非常重要的。SkyWalking 是一款开源的分布式系统监控与分析平台,能够帮助我们实现分布式系统的链路追踪、性…...
JS实现双向数据绑定的三种方式
1、第一种是通过Proxy数据代理来达到双向绑定的,这是Vue3更新的双向绑定方式。 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Proxy双向绑定</title> <<...
Bash相关
Bash shell是Linux内核与用户之间的解释器程序 变量 自定义变量,名称可以用数字、字母、下划线、不能以数字开头,不能使用特殊符号,等号两边不能有空格 格式:变量名称值 环境变量,由系统提前定义好,使用…...
Flink 流批一体在模型特征场景的使用
摘要:本文整理自B站资深开发工程师张杨老师在 Flink Forward Asia 2023 中 AI 特征工程专场的分享。内容主要为以下四部分: 模型特征场景流批一体性能优化未来展望 一、 模型特征场景 以下是一个非常简化并且典型的线上实时特征和样本的生产过程。 前面…...
06-编辑器
gedit编辑器 gedit是Ubuntu系统自带的编辑器,可以用来轻度编辑和记录一些内容。 在终端中我们通过以下命令打开: gedit 要打开或者新建的文件名虽然Ubuntu的图形界面也能通过gedit打开文件,但是用终端打开gedit可以动用更高的权限ÿ…...
5.3.2 实验2:配置交换机端口安全
1、实验目的 通过本实验可以掌握: 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 ÿ…...
【AIGC调研系列】通义千问、文心一言、抖音云雀、智谱清言、讯飞星火的特点分析
通义千问、文心一言、抖音云雀、智谱清言、讯飞星火这五款AI大模型各有特色,它们在市场上的定位和竞争策略也有所不同。 通义千问:由阿里巴巴推出,被认为是最接近ChatGPT水平的国产AI模型[7]。它不仅提供了长文档处理功能,还能够…...
【JVM】如何定位、解决内存泄漏和溢出
目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下: Java堆溢出: 错误信息: java.lang.OutOfMemoryError: Java heap space 原因:Java对象实例在运行时持…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
