软件工程实验-实验2 结构化分析与设计-总体设计和数据库设计

news2025/1/7 7:25:20

一、实验内容

1. 绘制工资支付系统的功能结构图和数据库

在系统设计阶段,要设计软件体系结构,即是确定软件系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。同时把模块组织成良好的层次系统:顶层模块通过调用它的下层模块来实现程序的完整功能,顶层模块下面的每个模块再调用更下层的模块从而完成程序的一个子功能,最下层的模块完成最具体的功能。通过对数据流图边界的划分,变换成软件结构,得到功能结构图。试根据实验指导书绘制工资支付系统的功能结构图。并完成如下任务:

任务1:总务办公管理系统总务办公管理系系统简介:某单位准备开发一个购买办公用品和设备的总务办公管理系统。办公用品的购买申请由各科室提出,由负责总务工作的办公室统一收集。其中,

购买申请的金额低于500 元(含500 元)可以由总务办公室直接审批,而高于500 元的购买申请由机构主管领导审批,批准的购买申请形成采购清单由采购员负责购买,同时应记录每次实际购买清单,进行入账。在提出购买申请时要包括下述数据:申请单位、物品名称、物品数量、预计价格、物品用途等。每次购买完成后应记录以下数据:物品名称、物品数量、价格、总金额、购买日期、经办人等。请对该系统进行设计,绘制出该系统的功能模块结构图和数据库模型图。

任务2:火车票预订系统系统简介:某高校后勤集团为了学生寒暑假返乡,办理代学生预订返乡火车票事务,订票必须提前三天办理,后勤订票处提前三天向火车站办理购票事务。订票处使用一台微机处理订票后购票事务,学生订票一次称为一个事务,由订票员将其输入在微机中,系统核实订单后,将订票信息记录放在订票库中。系统每天打印预订三天的购票单,并更新订票库。请对该系统进行设计,绘制出该系统的功能模块结构图和数据库模型图。

二、源代码及运行结果(或截图)

相关知识点

在系统设计阶段,要设计软件体系结构,即是确定软件系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。同时把模块组织成良好的层次系统:顶层模块通过调用它的下层模块来实现程序的完整功能,顶层模块下面的每个模块再调用更下层的模块从而完成程序的一个子功能,最下层的模块完成最具体的功能。通过对数据流图边界的划分,变换成软件结构,得到功能结构图。

1. 功能结构图

功能结构图(或模块结构图)是展示系统内部各个功能模块以及它们之间关系的图形化表示。它的作用是帮助开发人员理解系统的功能需求和模块间的交互,帮助系统分层,确保开发中的各个部分是清晰分工的。

模块化设计:模块化是软件设计中的核心思想,它将复杂的系统拆分成多个独立且自包含的模块,每个模块都有其明确的功能和职责。模块之间通过接口进行通信,降低模块之间的耦合度,提高系统的可维护性。模块化设计在后期的开发和维护过程中具有非常重要的意义,它让开发人员可以在不影响其他模块的情况下,对某一模块进行修改、优化或重构。

分层设计:分层设计将系统按功能复杂度和重要性分成多个层级,从而实现顶层模块控制整个系统的运作,下层模块实现更具体的功能。这种层次化的设计方式通常能够有效避免系统的功能冗余,同时提高代码复用性。例如,顶层的用户接口模块负责与用户交互,数据存储模块负责数据的持久化存储,业务逻辑模块负责数据的处理和业务规则的执行。通过分层设计,系统的各个模块之间可以通过接口和协议进行清晰的交互。

2. 数据库模型图

数据库模型图(E-R图,实体-关系图)是展示系统中各个数据实体之间关系的图形化工具。实体通常代表数据库中的表,而关系则代表表之间的关联。通过数据库模型图,可以清晰地了解数据的存储结构,并帮助开发者根据功能需求设计合理的数据表和关系,从而保证系统数据的完整性和一致性。

实体与关系:在数据库设计中,实体代表系统中的主要对象(例如:学生、订单、产品等)。每个实体包含若干个属性,通常是表中的字段。例如,学生实体包含学号、姓名、性别、班级等属性。而实体之间的关系,表示了不同实体之间的联系。关系的类型有“一对多”、“多对一”和“多对多”,例如一个学生可以有多个订单,但每个订单只能对应一个学生,表示学生和订单之间是“一对多”的关系。

规范化设计:在进行数据库设计时,我们会遵循规范化原则,以减少数据冗余和数据不一致问题。规范化是将数据分解成多个小的表格,并通过主键和外键建立表之间的关系,以保证数据的完整性。规范化通常分为不同的层级,如第一范式(1NF)、第二范式(2NF)、第三范式(3NF),每个范式都在上一范式的基础上解决了数据冗余和不一致问题。

数据完整性与一致性:数据完整性是指数据在数据库中的准确性、唯一性和完整性。为此,数据库设计时需要使用主键、外键等约束来保证数据的完整性。例如,订单表中的订单ID应该是唯一的,这样可以确保每个订单都能被唯一标识。外键约束则保证了表与表之间的关系准确无误,避免了因删除或修改一个实体导致其他表中数据丢失的风险。

任务1:总务办公管理系统

实验分析

系统需求分析

总务办公管理系统的主要目标是管理单位的办公用品采购流程。系统需要记录每个采购申请,包括物品信息、申请单位、金额等。根据金额大小,审批流程不同,系统应根据审批结果生成采购清单并进行物品购买,最后记录入账信息。

  1. 申请管理:各科室提出采购申请,申请内容包括物品名称、数量、预计价格、用途等。如果金额小于或等于500元,由总务办公室直接审批;如果金额大于500元,则需要主管领导审批。
  2. 采购管理:申请经过审批后,生成采购清单,采购员根据清单执行采购。
  3. 入账管理:采购完成后,系统需要记录每个采购的物品、数量、价格、经办人等详细信息。

操作步骤

功能模块划分

根据系统需求,功能可以分为以下几个模块:

  1. 申请管理模块
    • 功能:处理各科室提交的采购申请。包括收集申请单、验证信息、保存申请记录等。申请内容包括申请单位、物品名称、数量、预计价格、用途等。
    • 数据操作:将申请数据插入到数据库中的申请表。
  2. 审批管理模块
    • 功能:根据申请金额的不同,审批流程分为两类:金额小于或等于500元的直接由总务办公室审批;金额大于500元的需要主管领导审批。审批通过后生成采购清单。
    • 数据操作:保存审批记录,包括审批人、审批状态、审批日期等信息。
  3. 采购管理模块
    • 功能:根据批准的采购清单进行实际采购,记录每次采购的详细信息。
    • 数据操作:在采购表中插入采购记录,包括物品名称、数量、总金额等。
  4. 入账管理模块
    • 功能:记录每次采购的实际清单,包括物品名称、数量、价格、总金额等。
    • 数据操作:将采购完成后的入账信息插入到入账表。

数据库设计

  1. 申请表:存储采购申请的信息。字段包括申请ID、申请单位、物品名称、物品数量、预计价格、用途等。
  2. 审批表:记录审批过程的详细信息,字段包括审批ID、申请ID(外键)、审批人、审批状态、审批日期等。
  3. 采购表:存储采购清单信息,字段包括采购ID、申请ID(外键)、采购员、采购日期、物品清单、总金额等。
  4. 入账表:存储实际采购的入账信息,字段包括入账ID、采购ID(外键)、物品名称、数量、价格、经办人、入账日期等。

实验总结

总务办公管理系统涉及采购申请的提交、审批流程、采购与入账管理等功能,系统设计的关键在于确保不同角色(如各科室、总务办公室、主管领导等)之间的协作。系统中的每个模块(申请、审批、采购、入账)都与数据库中的不同表进行交互,确保数据能够在不同阶段之间正确传递。数据库设计时,我们特别注意了数据的规范化,避免冗余数据,并确保了采购流程的完整性。

通过模块化设计,系统的扩展性和维护性得到了很好的保证。系统的成功实现离不开对功能的精确划分和数据库设计的合理性。在实际开发中,这种模块化的设计方式能够帮助开发人员清晰理解每个模块的职责,并有效地管理系统复杂度。

实验截图

图 1 任务一功能结构图

图 2 任务一数据库模型图

任务2:火车票预订系统

实验分析

系统需求分析

火车票预订系统主要是为学生提供返乡购票的服务。系统需要处理学生的订票请求、核实订票信息、记录订单并生成预订记录。每个学生的订票请求会经过核实,符合要求后会被保存到数据库中,并每天打印三天后需要购票的学生名单。

  1. 订票申请:学生通过订票员提交订票请求,内容包括出发地、目的地、出发时间等信息。系统需要检查是否符合三天提前订票的规则。
  2. 订单核实与记录:核实订票信息是否有效,符合要求的订单将被记录到数据库中。
  3. 打印购票单:系统每天会打印三天后需要购票的学生清单,并更新订票库。
  4. 更新订票库:每个学生的订票状态和购票信息需要在订票库中及时更新。

操作步骤

功能模块划分

  1. 订票管理模块
    • 功能:学生提交订票申请,录入订票信息并提交。
    • 数据操作:将学生的订票请求插入到订单表。
  2. 数据处理模块
    • 功能:更新订票库中的数据,保存学生的订票状态、购票日期等信息。
    • 数据操作:定期更新订票库表的状态字段,确保系统数据的准确性。
  3. 输出数据模块
    • 功能:根据订单表的信息,打印三天后需要购票的学生清单。
    • 数据操作:查询订单表,筛选出三天后需要购票的学生信息,并生成打印列表。

数据库设计

  1. 学生表:记录学生的基本信息,如学号、姓名、订单编号等。
  2. 订单表:记录每个学生的订票请求,字段包括订单ID、学生ID、出发地、目的地、出发时间、订单状态等。
  3. 购票单表:记录每个学生的订票状态和购票信息,字段包括购票单编号、订单编号、火车票编号、购票日期等。

实验总结

火车票预订系统的设计主要围绕学生订票请求的处理展开,确保学生可以按时进行订票,并能够查询和打印购票单。系统设计时,我们注重了订单核实、订票状态管理等功能模块的构建,确保了订票过程的顺利进行。

数据库设计方面,我们建立了学生信息表、订单表和购票单s表,确保了订单和学生之间的关联性,订票状态的实时更新能够保证数据的一致性和完整性。系统的实现帮助我们理解了如何处理用户请求和如何在系统中实现状态管理。

总体来看,通过本次实验的设计与分析,我们掌握了从需求分析、数据库设计到系统开发、集成和测试的全过程。这为我们未来的系统开发打下了坚实的基础,尤其是在系统的模块化设计、数据库设计、权限管理等方面的实践经验。通过实验,我们学到了如何将理论知识与实际需求结合,形成一个完整的、可操作的系统设计。

实验截图

图 3 任务二功能结构图

图 4 任务二数据库模型图

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

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

相关文章

深度学习blog- 数学基础(全是数学)

矩阵‌:矩阵是一个二维数组,通常由行和列组成,每个元素可以通过行索引和列索引进行访问。 张量‌:张量是一个多维数组的抽象概念,可以具有任意数量的维度。除了标量(0D张量)、向量(…

JMH338-剑侠情缘2【开服端】-2017版【剑荡三界】+服务端+客户端+登录器+外网

资源介绍: 激情服;剑荡三界基本上可以直接开服玩,总之每个服都有他的特色;云中,红莲山,葬雪城三大地图三种世界BOSS每个小时刷一次 云中押镖劫镖,出城就是PK模式 剑荡烟云副本分为普通和难度…

QML自定义滑动条Slider的样式

代码展示 import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.1Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Slider {id: controlvalue: 0.5background: Rectangle {x: control.leftPaddingy: control.topPadding …

什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系

我不知道有多少人和我一样,没学习过.netCore,想要学习,但是版本号太多就蒙了,不知道学什么了,这里解释下各个版本的关系 我们一般开始学习微软的时候,都是开始学习的.netframework,常用的就是4…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

matlab中高精度计算函数vpa与非厄米矩阵本征值的求解

clear;clc;close all tic %并行设置% delete(gcp(nocreate));%关闭之前的并行 cparcluster(local); c.NumWorkers50;%手动设置线程数(否则默认最大线程为12) parpool(c, c.NumWorkers); %并行设置%w1; u2.5;N30;valstozeros(2*N2,100); v10linspace(-3,3,100).;parfor jj1:leng…

Linux第101步_了解LCD屏驱动“panel-simple.c”

了解LCD屏驱动“panel-simple.c”有助于修改屏驱动。自己另外单独写屏驱动,这是不现实的,所以学会在源程序的基础上修改,才是最佳的学习方法,这就是我们学习框架的主要原因。在Limux系统中,主流的显示框架有两种:DRM(D…

TI毫米波雷达原始数据解析之Lane数据交换

TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输,使用mmWave Studio 配置过程中有一个选项是LVDS L…

2-markdown转网页页面设计 --[制作网页模板]

页面设计 将Markdown转换为网页页面设计通常涉及以下几个步骤: 编写Markdown内容: 首先,你需要创建或已有以Markdown格式编写的文档。Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然…

Linux驱动开发(18):linux驱动并发与竞态

并发是指多个执行单元同时、并行执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问 则很容易导致竞态。对于多核系统,很容易理解,由于多个CPU同时执行,多个CPU同时读、写共享资源时很容易造成竞态。…

Elasticsearch: 高级搜索

这里写目录标题 一、match_all匹配所有文档1、介绍: 二、精确匹配1、term单字段精确匹配查询2、terms多字段精确匹配3、range范围查询4、exists是否存在查询5、ids根据一组id查询6、prefix前缀匹配7、wildcard通配符匹配8、fuzzy支持编辑距离的模糊查询9、regexp正则…

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…

Spring Boot 中 RabbitMQ 的使用

目录 引入依赖 添加配置 Simple(简单模式) 生产者代码 消费者代码 ​编辑 Work Queue(工作队列) 生产者代码 消费者代码 Publish/Subscribe(发布/订阅) 生产者代码 消费者代码 Routing&#x…

【linux基础I/O(1)】文件描述符的本质重定向的本质

目录 前言1. 理解C语言的文件接口2. 操作文件的系统调用接口2.1 open函数详解2.2 close函数详解2.3 write函数详解2.4 read函数详解 3. 文件描述符fd详解4. 文件描述符的内核本质5. 怎样理解Linux下一切皆文件?6. 理解输出输入重定向7. 重定向的系统调用8. 总结 前言 “在Lin…

全面解析 Node-RED:功能、Docker 部署与实战示例

言简意赅的讲解Node-RED解决的痛点 Node-RED 是一个基于流的编程工具,专为物联网(IoT)应用而设计。它通过可视化的编程界面,使开发者能够轻松地连接各种硬件设备、API 以及在线服务,构建复杂的应用流程。本文将详细介…

2、pycharm常用快捷命令和配置【持续更新中】

1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令:pip install requests 安装好了…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器,可以轻松地在 Unity 编辑器中 编辑,搜索&#xf…

用 C++ 创建控制台计算器

本文内容 先决条件创建应用项目验证新应用是否生成并运行编辑代码 显示另外 5 个 C 程序员通常从在命令行上运行的“Hello, world!”应用程序开始。 你将以本文为起点,逐步进阶,加深学习难度:计算器应用。 先决条件 在 Visual Studio 中…

IDEA 撤销 merge 操作(详解)

作为一个开发者,我们都知道Git是一个非常重要的版本控制工具,尤其是在协作开发的过程中。然而,在使用Git的过程中难免会踩一些坑,今天我来给大家分享一个我曾经遇到的问题:在使用IDEA中进行merge操作后如何撤销错误的合…

限时特惠,香港服务器,低至53元/年

家人们谁懂啊!香港服务器这价格简直逆天了,居然比内地的还便宜!就拿阿里云来说,人家最低配置的服务器,价格都很难做到这么亲民。 最低配的就不说了,2 核 4G 的配置,应对日常业务稳稳当当&#x…