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

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面向对象编程设计。

ps:第二部分点这里

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

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

相关文章

插入排序---算法

1、算法概念 插入排序&#xff1a;它的工作原理是通过构建有序排序&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置插入。 2、算法步骤 将第一待排序序列第一个元素看作一个有序序列&#xff0c;把第二个元素到最后一个元素当成是…

Exchanger 怎么用J.U.C

Exchanger简介 Exchanger通常用来解决以下类似场景的问题&#xff0c;如下&#xff1a;两个线程间需要交换数据的问题&#xff0c;在多线程编程中&#xff0c;经常会有这样的场景&#xff1a;两个线程各自持有一些数据&#xff0c;并且需要在某个点上交换这些数据&#xff0c;…

【项目实战】【Docker】【Git】【Linux】部署V2rayA项目

今天着手了一个全新领域的项目&#xff0c;从完全没有头绪到成功运行&#xff0c;记录一下具体的部署流程 github项目链接V2rayA 一开始拿到以后完全没有抓手&#xff0c;去阅读了一下他的帮助文档 写着能用docker运行&#xff0c;就去下载了一个Docker配置了一下 拉取代码到…

输入url到页面显示过程的优化

浏览器架构 线程&#xff1a;操作系统能够进行运算调度的最小单位。 进程&#xff1a;操作系统最核心的就是进程&#xff0c;他是操作系统进行资源分配和调度的基本单位。 一个进程就是一个程序的运行实例。启动一个程序的时候&#xff0c;操作系统会为该程序创建一块内存&a…

基于java+SpringBoot+Vue的学生心理咨询评估系统设计与实现

基于javaSpringBootVue的学生心理咨询评估系统设计与实现 开发语言: Java 数据库: MySQL技术: Spring Boot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 后台展示 用户管理模块&#xff1a;管理员可以查看、添加、编辑和删除用户信息。 试题管理模块&#xff1a…

光伏智慧管理技术创新,提高能源利用率!

光伏电站的建设规模正在不断扩大&#xff0c;运维与管理成为了一个重要的问题。随着科技的迅速发展&#xff0c;智慧光伏将成为光伏发电系统的发展趋势。智慧光伏主要是通过传感器、通信设备和数据处理技术&#xff0c;实现对光伏电站的检测、控制和优化管理&#xff0c;从而提…

Head First Design Patterns -代理模式

什么是代理模式 代理模式为另一个对象提供替身或者占位符&#xff0c;以便控制客户对对象的访问&#xff0c;管理访问的方式有很多种。例如远程代理、虚拟代理、保护代理等。 远程代理&#xff1a;管理客户和远程对象之间的交互。 虚拟代理&#xff1a;控制访问实例化开销大的对…

利用Lora调整和部署 LLM

使用 NVIDIA TensorRT-LLM 调整和部署 LoRA LLM 大型语言模型 (LLM) 能够从大量文本中学习并为各种任务和领域生成流畅且连贯的文本&#xff0c;从而彻底改变了自然语言处理 (NLP)。 然而&#xff0c;定制LLM是一项具有挑战性的任务&#xff0c;通常需要完整的培训过程&#xf…

论文阅读:Walk These Ways: 通过行为多样性调整机器人控制以实现泛化

Walk These Ways: 通过行为多样性调整机器人控制以实现泛化 摘要&#xff1a; 通过学习得到的运动策略可以迅速适应与训练期间经历的类似环境&#xff0c;但在面对分布外测试环境失败时缺乏快速调整的机制。这就需要一个缓慢且迭代的奖励和环境重新设计周期来在新任务上达成良…

企业家见识、智慧与胸怀:超越知识、聪明与财富的核心价值​

一、引言 在商界的风云变幻中&#xff0c;企业家们不仅需要拥有丰富的知识和聪明才智&#xff0c;更需要具备远见卓识、深刻智慧和博大胸怀。正如某知名企业家所言&#xff1a;“企业家见识比知识重要&#xff0c;智慧比聪明重要&#xff0c;胸怀比财富重要。”&#xff0c;这…

OSCP靶场--Snookums

OSCP靶场–Snookums 考点(RFI信息收集数据库发现凭据bas64解码su切换用户/etc/passwd覆盖提权) 1.nmap扫描 ##┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.58 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-30 03:39 E…

误删C盘文件导致wps不可用如何解决(window 11)

一开始是为了清理C盘&#xff0c;然后第二天就发现wps不能用了&#xff0c;刚开始的时候Word&#xff0c;Excel&#xff0c;PowerPoint&#xff0c;OneNote都是空白的&#xff0c;连图标都没有了。 点击电脑固定栏左下角的开始 点击设置 点击安装的应用 找到你下载的后点击修改…

连入门都不算的Kylin相关概念畅谈!

本文图片来自于尚硅谷。 即席查询&#xff1f;即时查询&#xff1f; 作者学习过程中已经连续看到过两次即席查询了&#xff0c;不禁冒出个想法&#xff1a;是不是真的有“即席查询”的概念&#xff1f;我还以为是即时查询&#xff0c;打错了呢…… 即席查询概念 确实存在“即…

基于java的电影院售票网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

基于springboot的粮仓管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

vue快速入门(一)vue的导入方法

注释很详细&#xff0c;直接上代码 新增内容 下载js代码导入实例数据绑定显示 源码 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

《C++程序设计》阅读笔记【2-程序结构】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学&#xff0c;回复C程序设计获取下载链接。 1 程序结构1.1 外部存储类型1.2 静态存储类型1.2.1 静态全局变量1.2.…

设计模式之外观(门面)模式

概念&#xff1a;要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口&#xff0c;使得子系统更易使用。 外观模式注重“统一的对象”&#xff0c;即提供一个访问子系统的接口&#xff0c;只有通过该接口&#xff08;Facade&#xf…

TCP的十个重要的机制

注&#xff1a;TCP不是只有十个机制 TCP 可靠传输是tcp最为重要的核心&#xff08;初心&#xff09; 可靠传输&#xff0c;并不是发送方把数据能够100%的传输给接收方 而是退而求其次 让发送方发送出去数据之后&#xff0c;能够知道接收方是否收到数据。 一但发现对方没有…