【软件工程】详细设计(一)

news2024/11/28 4:41:37

1. 引言

1.1 编写目的

该文档的目的是描述《学生成绩管理系统》项目的详细设计,其主要内容包括:

  • 系统功能简介

  • 系统详细设计简述

  • 各个模块的实现逻辑

  • 最小模块组件的伪代码

本文档的预期的读者是:

  • 开发人员

  • 项目管理人员

  • 测试人员

1.2 背景

  1. 待开发系统的名称:学生成绩管理系统

  2. 本项目的任务提出者:xx老师

  3. 本项目的开发者:第x小组

  4. 用户:教师、学生和管理员

1.3 定义

t_admin:管理员信息表

t_user:教师信息表

t_student:学生信息表

t_score:学生成绩表

2. 体系结构

本系统采用B/S体系结构。

2.1 B/S体系结构

现在的信息系统平台的体系结构主要有客户机/服务器(C/S)体系和浏览器 /服务器(B/S)体系。下面简单介绍一下B/S体系结构。

B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。

在我们的系统中,我们就采用的是B/S体系结构。采用这种结构具有成本低、维护方便、 分布性强、开发简单的优势。

2.2 系统体系结构

B/S体系架构图如图3.1所示。

img

图3.1 B/S系统架构

通过上文对B/S体系架构的分析,以及对本系统需要完成的功能的分析。本系统的可分为以下三层结构:

  • 用户层:在这里就是浏览器端。是直接与用户交互的部分。具体来说,用户的所有操作都是在这层进行的,用户的所有对数据的修改都会传到逻辑层进行处理。作为直接展示给用户的部分,需要具有美观和易用的特点。

  • 逻辑层:在这里就是网络服务器端。接受用户输入的信息,对其进行功能要求的逻辑处理,并将处理后的数据传递给数据访问层;对于数据访问层传送的数据也进行相应的处理。作为表示层与数据层之间的信息处理接口,是前后端数据交互的桥梁。

  • 数据层:在这里就是数据库服务器端。主要包含两种功能。一是完成对数据的存储,即完成数据库表的建立等功能;二是完成对数据的各种操作,具体进行何种操作取决于逻辑层的逻辑处理。

本系统的结构拓扑图如图3.2所示:

img

图3.2 系统结构拓扑图

用户层本系统主要用HTML+CSS+JavaScript 进行完成,完成与用户正常友好交互的任务。

逻辑层由Java代码及其相应框架编写,完成所需的逻辑处理操作。并把正常处理后的数据传递给用户层或数据层。

数据层主要是数据库系统,这里所用的数据库系统为关系数据库 MySQL, 并且使用DataGrip或idea内置的数据库工具构建需要的库和表,进行相应SQL脚本的编写。

3.教师端详细设计

教师端模块主要分为登录注册模块、数据查询模块、搜索模块和成绩添加或修改模块构成。

下图为教师端模块流程图。

img

图3.1 教师端模块流程图

3.1登录模块

3.1.1类描述

定义了教师的登录功能架构。

3.1.2功能

按给定的账号和密码进入系统。

3.1.3 代码实现

if ("1" == param.type) {
  $.ajax({
    //几个参数需要注意一下
    type: "POST",//方法类型
    dataType: "json",//预期服务器返回的数据类型
    url: "/user/login",//url
    data: param,
    success: function (result) {
      if (result.code == "0") {
        location.href = "/index.html";
      } else {
        layer.msg('教师密码错误', {
          icon: 5
        });
      }
    },
    error: function () {
      layer.msg('服务器错误', {
        icon: 5
      });
    }
  });
}

3.1.4 性能分析

在执行相关操作时,均可以正常实现登录功能。

3.2数据查询模块

3.2.1类描述

定义了数据查询的功能结构。

3.2.2功能

查看学生基本信息和成绩信息。

3.2.3代码实现

查看学生基本信息:

JavaScript代码:

var data = obj.data;
if (obj.event === 'detail') {
  var detailFrom = layui.layer.open({
    title : "查看学生信息",
    type : 2,
    content : "/studentDetail.html",//弹出层页面
    area: ['500px', '200px'],
    success : function(layero, index){
      var body = layui.layer.getChildFrame('body', index);
      body.find("#studentNo").text(data.studentNo);
      body.find("#studentName").text(data.studentName);
      body.find("#studentSex").text(data.studentSex);
    }});
} 

Java代码:

@RequestMapping("/student")
@RestController //标识为返回类型为Json的控制
public class StudentController {
  @Autowired
  private TStudentService studentService;
   //标识请求地址
  @RequestMapping("/getAllStudent")
  public ResultObject<List<TStudent>> getUsers(TStudent student,@RequestParam("limit") int limit,@RequestParam("page") int page) {
   System.out.println(student);
    PageInfo<TStudent> pageInfo=studentService.getAll(student, page, limit);
    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;
  }

查看学生成绩信息:

Java代码:

@RequestMapping("/getAllScore")
public ResultObject<List<TScore>> getAllScore(TScore score,@RequestParam("limit") int limit,@RequestParam("page") int page) {
  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;
}

3.2.4性能

在执行相关操作时,均可以正常实现登录功能。

3.2.5设计方法(算法)

运用了面向对象的思想,按Java面向对象编程设计。

3.3搜索模块

3.3.1类描述

定义了教师的检索信息功能结构。

3.3.2功能

按名字来检索学生:

3.3.3 代码实现

Java代码:

@RequestMapping("/studentSelect")
public ResultObject<List<TStudent>> studentSelect() {
  ResultObject<List<TStudent>> rs=new ResultObject<List<TStudent>>();
  List<TStudent> list=studentService.selectAllStudent();
  rs.setCode(Constant.SUCCESS_RETUEN_CODE);
  rs.setMsg("查询成功");
  rs.setData(list);
  int total=list.size();
  Long a=Long.parseLong(String.valueOf(total));
  rs.setCount(a);
  return rs;
}

HTML代码:

<button class="layui-btn layui-btn-normal site-demo-active"
   data-type="search" id="searchStudent">搜索</button>

3.3.4性能

在执行相关操作时,均可以正常实现检索功能,暂时还没有出过错。

3.3.5设计方法

运用了面向对象的思想,按Java面向对象编程设计。

3.4 成绩修改模块

3.4.1类描述

定义了成绩修改的功能结构。

3.4.2功能

教师根据实际情况修改学生成绩信息。

3.4.3 代码实现

修改成绩代码:

Java代码:

//标识请求地址
@RequestMapping("/updateScore")
public ResultObject<Object> updateScore(TScore score) {
  Integer total=scoreService.updateScore(score);
  //统一返回
  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;
}

JavaScript代码:

if (obj.event === 'edit') {
  var editFrom = layui.layer.open({
    title : "编辑学生信息",
    type : 2,
    content : "/studentEdit.html",//弹出层页面
    area: ['800px', '400px'],
    success : function(layero, index){
      var body = layui.layer.getChildFrame('body', index);
      //获取窗口对象
      var iframeWindow = layero.find('iframe')[0].contentWindow;
      body.find("#studentNo").val(data.studentNo);
      body.find("#studentName").val(data.studentName);
      body.find(".studentSex option[value="+data.studentSex+"]").attr("selected","selected");
      iframeWindow.layui.form.render();
      iframeWindow.layui.form.render('select');
    }});
}

删除成绩代码:

Java代码:

//标识请求地址
@RequestMapping("/deleteScore")
public ResultObject<Object> deleteScore(TScore score) {
  Integer total=scoreService.deleteScore(score.getScoreId());
  //统一返回
  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;
}

JavaScript代码:

if (obj.event === 'del') {
  layer.confirm('真的删除该学生吗?', function(index) {
   var data = obj.data;
    $.ajax({
       //几个参数需要注意一下
         type: "POST",//方法类型
         dataType: "json",//预期服务器返回的数据类型
         url: "/student/deleteStudent",//url
         data: data,
         success: function (result) {
          if (result.code == "0") {
           layer.close(index);
           layer.msg('删除学生成功');
           layui.table.reload('idTest',{page:{curr:1}});
            }else{
             layer.msg('删除学生失败', {
                icon: 5
              });
            }
         },
         error : function() {
          layer.msg('服务器错误', {
             icon: 5
           });
         }
       });
  });
} 

3.4.4性能

在执行相关操作时,均可以正常实现修改成绩或删除成绩功能,未发现错误。

3.4.5 设计方法

运用了面向对象的思想,按Java面向对象编程设计。

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

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

相关文章

Spring(详细介绍)

目录 一、简介 1、什么是Spring&#xff1f; 2、Spring框架的核心特性 3、优点 二、IOC容器 介绍 1、获取资源的传统方式 2、控制反转方式获取资源 3、DI 4、IOC容器在Spring中的实现 入门案例 1、创建Maven Module 2、引入依赖 3、创建HelloWorld类 4、在Spring的配…

Linux------一篇博客了解Linux最常用的指令【后续将持续更新完成】

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;Linux &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#…

HarmonyOS 应用开发之多端协同

多端协同流程 多端协同流程如下图所示。 图1 多端协同流程图 约束限制 由于“多端协同任务管理”能力尚未具备&#xff0c;开发者当前只能通过开发系统应用获取设备列表&#xff0c;不支持三方应用接入。 多端协同需遵循 分布式跨设备组件启动规则。 为了获得最佳体验&…

春招冲刺百题计划--矩阵篇

289. 生命游戏 题目&#xff1a; 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态&#xff1a; 1 即为 活细胞 &#xff08;live&#xff09;&#xff0c;或 0 即为 死细胞 &#xff08;dead&#xff09;。每个细胞与…

mysql执行脚本导入表和数据后中文注释乱码解决

本人在使用不同版本下进行操作时&#xff0c;就会出现中文乱码的问题。例如我本地安装mysql8&#xff0c;服务器安装的是mysql5&#xff0c;然后本地连接服务器的mysql后&#xff0c;执行SQL脚本之后发现中文全部乱码 使用工具查看&#xff0c;注释也都是乱码 解决方案 本地…

PyLMKit(9):ChatTable与你的表格聊天,表格问答

功能介绍 与你的结构化数据聊天&#xff1a;支持主流数据库、表格型excel等数据&#xff01; ChatDB&#xff1a;支持数据库问答ChatTable&#xff1a;支持txt,excel,csv等pandas dataframe表格的问答 1.下载安装 pip install pylmkit -U pip install pandasql2.ChatTable实…

百度“超模”、三大开发神器组团出道?李彦宏2024年度演讲提前剧透!

未来程序员会消失吗&#xff1f;一个大模型能适配一切吗&#xff1f;大模型太贵用不起怎么办&#xff1f;AI时代最好用的工具长什么样&#xff1f;——这些行业热议问题&#xff0c;将在两周后得到答案。 4月16日&#xff0c;百度创始人、董事长兼首席执行官李彦宏将在2024百度…

构建安全高效的用户登录系统:登录流程设计与Token验证详解

在当今数字化时代&#xff0c;用户登录系统是几乎所有在线服务的基础。然而&#xff0c;随着网络安全威胁的不断增加&#xff0c;设计一个安全可靠的登录系统变得至关重要。本文将深入探讨用户登录流程的设计原则以及Token验证的实现方式&#xff0c;带您了解如何构建安全高效的…

题目:小蓝的零花钱(蓝桥OJ 3236)

问题描述&#xff1a; 解题思路&#xff1a; 计算每个可以切割的位置的费用(cnt)&#xff0c;从小到大枚举每个切割费用&#xff0c;当切割总费用大于手里的钱时停止&#xff0c;最后枚举的已切割位置总数就是答案。 #include<bits/stdc.h> using namespace std; const …

科学高效备考2024年汉字小达人:历年真题详细解析-古诗文专题

距离2024年第11届汉字小达人比赛还有七个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#xff0c…

物料主数据管理难在哪?基于AI算法的数据清洗工具了解一下

引言 数据清洗在处理大量的、不一致的、错误的或者不完整的数据时扮演着至关重要的角色。随着数据量的不断膨胀&#xff0c;有效的数据清洗工具和方法变得尤为重要。 数据清洗作为数据管理和治理的重要组成部分&#xff0c;近年来受到了国家层面的高度重视&#xff0c;并出台了…

Python保留字与obspy安装

保留字&#xff1a; 被编程语言内部定义并保留使用的标识符。Python有33个保留字 andelifimportraiseglobalaselseinreturnnonlocalassertexceptistryTrue breakfinallylambdawhileFalseclassfornotwithNonecontinuefromoryielddefifpassdel 最近在安装obspy时经常&am…

[SpringCloud] Feign Client 的创建 (二) (五)

文章目录 1.自动配置FeignAutoConfiguration2.生成 Feign Client2.1 从Feign Client子容器获取组件2.2 Feign Client子容器的创建2.3 构建Feign Client实例 1.自动配置FeignAutoConfiguration spring-cloud-starter-openfeign 包含了 spring-cloud-openfeign-core FeignAutoCo…

解决echarts xAxis设置type:‘value‘后 x轴有负值的时候 Y轴在0点显示

前提&#xff1a;xAxis设置type:‘value’ 数据&#xff1a;data里面含有负数值&#xff0c;导致Y坐标轴一直在 X&#xff08;0&#xff09;上面显示 解决方案&#xff1a; yAxis里面设置 axisLine: { onZero:false } yAxis:{type: value,name:测试,axisLine: { onZero:false …

Rust 机器学习图形库 petgraph

一、介绍 Petgraph 是一个开源的图数据结构库&#xff0c;提供了非常丰富的图形类型和算法&#xff0c;并且支持将图形以 Graphviz 格式输出&#xff0c;还允许你为图的节点和边赋予任意类型的数据&#xff0c;从而能够灵活地处理和表示复杂的数据关系。 Petgraph 支持边的方…

【Linux多线程】生产者消费者模型

【Linux多线程】生产者消费者模型 目录 【Linux多线程】生产者消费者模型生产者消费者模型为何要使用生产者消费者模型生产者消费者的三种关系生产者消费者模型优点基于BlockingQueue的生产者消费者模型C queue模拟阻塞队列的生产消费模型 伪唤醒情况&#xff08;多生产多消费的…

MySQL数据库----------探索高级SQL查询语句 (二)

目录 一、子查询 1.1多表查询 1.2多层嵌套 1.3 insert语句子查询 1.4update语句子查询 1.5delete语句子查询 1.6EXISTS 1.7子查询&#xff0c;别名as 二、mysql视图 2.1mysql视图介绍 2.2mysql作用场景[图]: 2.3视图功能&#xff1a; 2.4视图和表的区别和联系 区别…

Linux 个人笔记之三剑客 grep sed awk

文章目录 零、预一、grep 文本过滤工具基础篇实战篇 二、sed 字符流编辑器基础篇实战篇 三、awk 文本处理工具基础篇实战篇 四、附xargsuniq & sort基础篇实战篇 cut 零、预 bash 的命令行展开 {} $ echo file_{1..4} file_1 file_2 file_3 file_4$ echo file_{a..d} file_…

【攻防世界】unseping (反序列化与Linux bash shell)

打开题目环境&#xff1a; 1、进行PHP代码审计&#xff0c;通过审计得知需要用到PHP反序列化。找到输出flag的位置为 ping()函数。通过使用 exec() 函数来执行 $ip 并将结果保存在 $result 中&#xff0c;最终输出 $result。 2、接着寻找给 $ip 传参的位置&#xff0c;发现通过…

FastEI论文阅读

前言 研究FastEI有很长时间了&#xff0c;现在来总结一下&#xff0c;梳理一下认知。论文地址&#xff1a;https://www.nature.com/articles/s41467-023-39279-7&#xff0c;Github项目地址&#xff1a;https://github.com/Qiong-Yang/FastEI。 概要 这篇文章做的工作是小分子…