软件工程专业课实验报告

news2024/11/17 23:28:46

一、结构化分析方法

1.1需求描述

教务管理子系统的需求描述:

教务管理是一项需求周密计划、严谨安排的工作,要依据教师、学生信息进行合理安排。

开学阶段,需要教师提交开课申请进行开课,学生根据老师的开课信息,选择课程,教务处生成学生课表、教师课表。

期末阶段,需要根据开课情况对学生进行考试安排,对教师进行监考安排,以及学生考试成绩管理。

学期结束,需要对学生成绩进行统计,计算绩点,排名,评定奖学金。

图书馆管理子系统的需求描述:

借书过程,学生到图书馆查询图书信息,出示借书证,办理借书。

还书过程,判断是否超期、图书是否破损,办理还书。

1.2可行性分析

1.2.1技术可行性

开发教务管理系统和图书管理系统,市场上已经有了众多先例,所以我们可以得知技术的成熟度和现实性能够得到很好的保障,我们实现软件开发所需要的技术应当与时俱进,应当属于当下技术行业的流行水平。尽可能采用成熟技术,满足系统开发需要、能够适应系统发展、保证开发成本。

该系统可采用Windows10作为操作平台,数据库采用MySQL server 8.0。该系统在Windows8上也可运行,同时提供数据库之间的数据复制功能,可替代现有的人工传递工作,降低了出错率。

1.2.2经济可行性

研发管理系统的平台可以使多种多样:我们可以将系统安装到学校自身的软件当中,或者使用微信公众号或者其他第三方平台的帮助来降低开发成本。硬件维护和软件支持可以由学校负责提供。因为此次软件开发追求实用性,因此可以直接由校内教师或者学生团队负责开发或者辅助发开。工作量无需过于繁重,可以作为实验室项目安培进来,利用学生的课余时间自行完成即可。

教务管理系统总体流程清晰,完成难度小,所需要的成本较少。采用教务管理子系统可取代传统的手工传递工作,有效的减少人工开支,节省资金,并且可以大大提高信息量的提取,缩短信息处理周期,规划教学资源,提高学生信息,及时反馈教学信息的利用率。总体来看其效益巨大,成本较小,有经济可行性。项目早期阶段对系统开发成本进行精确估算是相当困难的,所以我们也可以组织老师和学生参观国内一些知名大厂,学习算法成本,计算项目工作量。

1.2.3社会效益可行性

此系统开发主要目的就是服务于学生、服务于学校。能够方便学生平时对学习有更深层次规划,具有长远的效益。另外此系统开发更新性强,因此无需担心存在落后淘汰的情况,开发人员可以与时俱进地去更新他们的系统。

1.2.4管理可行性可行性

本系统只需简单的数据采集,人员在经过培训后即可上手,操作简便,具有良好的管理可行性。

1.3需求分析

1.3.1数据流图创建

通过寻找两个子系统中的实体类构建教务管理系统数据流图,考虑数据的源点和终点,从上面对系统的描述可以知道教务管理系统中课程是数据终点,而教师、学生、教务管理系统是数据源点。而图书管理系统中学生既是数据起点;也是数据终点。

接下来考虑处理。再一次阅读问题描述必须有一个用于对结果的处理。对事务进行的加工是另一个处理。注意,在问题描述中并没有明显地提到需要对事务进行处理,但是通过分析可以看出这种需要。

最后考虑数据流和数据存储。本题中需要储存的有开课信息、选课内容、成绩、书籍信息等内容。完整的构建出数据流图。

教务管理子系统

第一层:

第二层:

第三层:

图书馆管理子系统

第一层:

第二层:

第三层:

1.3.2数据字典分析

通过上述数据流图中的数据流、数据存储、处理逻辑、数据项、数据结构、外部实体来编制数据字典。找出文中的实体类,描述主要名称、数据流的去向、组成等。

数据项

一、教务管理

数据项编号:I1

数据项名称:课程信息编号

别名:课程信息编号

简述:教师创立的课程的信息

类型及宽度:字符型,6位

取值范围“000001”~”999999”

数据项编号:I2

数据项名称:课程日期

别名:课程时间

简述:课程的起止日期

类型及宽度:Date,8位

取值范围2022-9-1~2023-01-19

二、图书管理

数据项编号:I1

数据项名称:书籍编号

别名:书籍编码

简述:标识哪本书的代码

类型及宽度:字符型,6位

取值范围“000001”~”999999”

数据项编号:I2

数据项名称:书籍名

别名:书籍名

简述:书籍的名字

类型及宽度:字符型

取值范围“u4e00~u9fa5 (中文)

数据结构

一、教务管理

数据结构编号:KC-001

数据结构名称:课程学生名单

简述:某一门课选课的学生信息

数据结构组成:I1+I2(学生选课数据项)

二、图书管理

数据结构编号:DS01-01

数据结构名称:书籍信息

简述:某一本书籍的信息

数据结构组成:I1+I2

数据流

一、教务管理

数据流编号:CJ-001

数据流名称:成绩单

简述:某一课学生的成绩单

数据流来源:教务处

数据流去向:学生、教师

数据流组成:课程信息+学生成绩

数据流量:

高峰流量:

数据流编号:XK-001

数据流名称:选课信息表

简述:学生选课信息

数据流来源:学生

数据流去向:教务处

数据流组成:课程信息+学生信息+选课信息

数据流量:

高峰流量:

二、图书管理

数据流编号:F01-01

数据流名称:书籍信息表

简述:书籍信息

数据流来源:图书馆

数据流去向:管理员

数据流组成:书籍编号+书籍名

数据流量:4本/分

高峰流量:5本/分

数据流编号:F02-01

数据流名称:借阅信息表

简述:书籍借阅信息

数据流来源:管理员

数据流去向:学生

数据流组成:学号+学生姓名+书籍编号+书籍名

数据流量:4本/分

高峰流量:5本/分

处理逻辑

一、教务管理

处理逻辑编号:P2.2

处理逻辑名称:学生期末考试成绩排序

简述:学生期末考试成绩排序

输入的数据流:学生考试信息

处理:根据分数、学号数排序

输出的数据流:学生成绩S1、班级排名S2

处理频率:一学期一次

处理逻辑编号:P1.2

处理逻辑名称:生成学生课表

简述:生成学生课表

输入的数据流:学生选课信息

处理:根据学生的选课信息,产生一个完整的课表

输出的数据流:课表K1,课程信息K2

处理频率:

二、图书管理

处理逻辑编号:P1.1

处理逻辑名称:查询图书信息

简述:查询图书的信息

输入的数据流:借书的申请

处理:根据学生借书申请来查询相关图书信息

输出的数据流:书籍的信息

处理频率:一分钟一次

处理逻辑编号:P1.2

处理逻辑名称:借书办理

简述:借书办理

输入的数据流:书籍信息

处理:根据书籍信息找到相应的书籍给学生

输出的数据流:借阅信息

处理频率:一分钟一次

数据存储

一、教务管理

数据存储编号:C1

数据存储名称:成绩存档

简述:某一课程期末考试学生的成绩以及排名

数据存储组成:考试时间+学生姓名+学生成绩

关键字:学号

相关联的处理:p2.3

二、图书管理

数据存储编号:D1

数据存储名称:书籍信息

简述:书籍的信息

数据存储组成:书籍的编号+书籍名

关键字:书籍编号

相关联的处理:p1.1

数据存储编号:D2

数据存储名称:借阅信息

简述:借书人的信息和书籍信息

数据存储组成:学号+姓名+书籍信息

关键字:学号

相关联的处理:p1.2

外部实体

一、教务管理

外部实体编号:S01

外部实体名称:教务处

简述:存储和生成信息的地方

输入的数据流:课程信息,选课信息,学生信息,教师信息,考试信息,成绩信息

输出的数据流:课表,考试表,成绩排名

二、图书管理

外部实体编号:S02

外部实体名称:图书馆

简述:借书还书的地方

输入的数据流:借书信息

输出的数据流:书单

1.4总体设计

1.4.1软件结构分析

教务管理系统主要物理输出层为学生、教师和教务处,教师查询开课信息;学生查询选课信息;教务处接受教师和学生的事务,并反馈给教师和学生答案。

图书管理系统主要物理输出层也为学生,通过学生与系统的互动,并借助借书证、书本等实体类办理借书流程。

1.4.2软件结构图

教务流程软件结构图

图书馆流程软件结构图。

1.5.详细设计

期末考试安排程序环形复杂度:

1.进行考试编制

2.生成考试人数

3.教室排课信息

4.生成考试编号

5.生成考试科目

6.教师排课信息

7.筛选考试时间

8.考试时间是否匹配

9. 安排考试教室

10.考试教室是否匹配

11.安排考试教师

12.考试教师是否匹配

13.生产考试编制信息

根据图可以得出复杂度为:V(G)=E-N+2 ,其中E是流图中边的条数,N是节点数。所以可以得出V(G)=9-7+2=4。

二、面向对象分析方法

2.1需求描述

医院预约挂号系统是医院利用网络平台方便患者预约挂号看病的系统。

患者通过平台实名填写患者信息、身份证号码、联系方式等信息进行用户注册。注册完成后可以选择医生、看病日期,实现网上预约挂号,并可通过社保卡、医院门诊卡、银行卡、微信、支付宝等多种方式预约支付门诊挂号费。支付完成后,患者获得挂号信息,预约挂号成功。

患者凭挂号信息的预约码和身份证可在预约日期前往医院挂号处换取号牌。如果在预约日期前有其他特殊情况不能按时去医院就诊,可以登录系统提前取消。取消预约只能在预约日期之前进行。

当号牌顺序号到时,护士叫号并带领患者进入诊室就诊。医生登记患者的挂号信息,询问病情,根据患者病情开出医嘱、药品,就诊结束。

2.2可行性分析

2.2.1技术可行性

医院预约挂号系统是基于一种普通的取号功能系统提升而来的系统,需要优秀的技术成熟度和现实性能,保证系统零失误,要使用国内最先进技术,满足系统开发需要、能够适应系统使用和发展。

2.2.2经济可行性

在可行性分析阶段,因为开发的是隶属于医院的挂号管理系统,因此可以通过向国家申请开发请求,提供研发必要的启动资金和维护资金,以及支付给软件工程师和管理人员的费用。人才可以从广大市场寻找。

对于绝大多数部分,主要的成本是工作量成本,系统管理员工可以由医院负责从医院内部调用计算机人才或者在市场招聘其他人才来管理。

2.3用对象模型辅助分析

2.3.1罗列类与对象

  1. 罗列上述需求陈述中的名词作为类与对象的候选者:医生、患者、护士、系统平台、用户注册、患者信息、身份证号码、联系方式、选择医生、看病日期、医院挂号处、挂号、社保卡、医院门诊卡、银行卡、微信、支付宝、门诊挂号费、号牌、特殊情况、取消预约、挂号信息、叫号、就诊、病情、医嘱药品。

  1. 罗列出删除的不正确或不必要的类与对象:挂号、社保卡、医院门诊卡、银行卡、微信、支付宝、患者信息、身份证号码、联系方式、病情、用户注册、特殊情况、叫号、就诊、病情。

2.3.2罗列关联关系

  1. 罗列出需求陈述中使用的描述性动词或动词词组,这些通常表示关联关系。

·医生、护士、患者、系统平台组成网络

·患者通过平台填写信息

·系统平台提供患者信息

·系统平台有选择医生功能

·系统平台有看病日期功能

·系统平台有提供挂号信息功能

·患者通过社保卡支付门诊挂号费

·患者通过医院门诊卡支付门诊挂号费

·患者通过银行卡支付门诊挂号费

·患者通过微信支付门诊挂号费

·患者通过支付宝支付门诊挂号费

·系统平台为患者提供挂号信息

·医院挂号处为患者挂号

·医院挂号处提供患者的挂号信息

·患者可以在系统平台取消预约

·护士通过挂号顺序叫号

·医生询问患者病情

·医生开出医嘱

·医生开出药品

  1. 罗列出删除的不正确的或不必要的关联:

·系统平台有提供挂号信息功能

·患者通过社保卡支付门诊挂号费

·患者通过医院门诊卡支付门诊挂号费

·患者通过银行卡支付门诊挂号费

·患者通过微信支付门诊挂号费

·患者通过支付宝支付门诊挂号费

·医院挂号处提供患者的挂号信息

2.3.3绘制初始类图

2.3.4完善类图

1、罗列在需求陈述中用名词词组,用于表示属性

患者信息、身份证号码、联系方式、病情、用户注册、用户信息、取消预约、叫号、就诊、病情、特殊情况、登记患者、询问病情、叫号、带领患者、号牌顺序。

2、罗列出删除的不正确或不必要的属性

病情、用户注册、叫号、就诊、特殊情况

3、罗列出继承关系

·医生和护士泛华出父类“诊室”

·号牌、号牌顺序、预约取消是医院挂号处上的限定词

·用户信息是系统平台上的限定词

·门诊挂号费和选择医生是网上预约上的限定词

·挂号信息是患者上的限定词

·医嘱药品是诊室上的限定词

4、绘制如下的完善后的类图

2.4、估算项目的规模

软件的规模和其外延成正比

外延包括: 挂号功能, 患者数据, 患者、公厝恩怨操作界面数, 显示界面数等等。

不同的功能点实现的困难度不同, 但从整个项目来说, 平均的困难度差不多。规模估算的目标决定工作量的大小在半年左右。

对于成本模型,规模是计算软件项目的工作量、成本和进度的主要输入。在规模估算之前,软件功能需求必须被定义。在项目早期定义需求可能是非常困难任务。如果知道部分需求,那么估算基于已知的需求并且相信每一个人都相信估算仅仅是基于那些已知的需求,如果使用了增量或演进的开发策略,那么估算基于增加的已定义需求。

2.5、项目进度计划、成本估算

2.5.1进度计划

软件体系结构决定进度计划。

• 子系统如用户注册、挂号、排序等分解应该是高层的,专注于功能,并且要保持稳定。

• 每一个子系统可以被分配给一个团队或一个人,由他负责其定义和实现。

项目工作可以将项目整体分解成较小的、易于管理和控制的若干子项目或工作单元,直到可交付成果定义的足够详细,足以支持项目将来的活动。

在项目工作分解的基础上,进一步估算活动所需的时间和资源,并按照一定的顺序将这些活动进行组织和调度,从而创建项目的进度计划表。

2.5.2成本估算

项目估算是对完成项目交付物的时间和成本进行预算和估计的过程。

• 该系统软件规模较大,复杂性较高,不确定性成本就越多,

• 需求的不确定性会对项目估算产生很大影响,因此开发前期要优先将主要功能模块的成本预估算出来。

• 通过以往可靠历史数据使项目估算来参考成本中缺少的部分。

三、课程总结

一个学期对于软件工程的学习,主要就需求分析进行总结。软件的生存周期可分为八个阶段:①问题定义;②可行性研究;③需求分析;④总体(概要)设计;⑤详细设计;⑥编码与单元测试;⑦综合测试;⑧软件维护;

需求分析:系统开发前期需求分析很重要,它是为了有效解决用户问题的需要进行的一项工程活动,所需要考虑的需求问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。其步骤有三个:1、获取客户需求2、建立需求模型,常用的模型有:业务树图、用例图、活动图。3、需求建模。结构化分析建模:它是建立在需求规约基础上的;功能建模,是对系统数据加工的图解,数据流程图是常用的建模工具,涉及数据接口、数据处理、数据流、数据存储等图形元素,用于描述系统数据加工细节;数据字典,是用于定义软件的元素,使软件元素获得严肃的、详密的、精确的规格说明。

软件工程,给我提供一个系统化的软件设计流程思路,对今后专业发展能起到很大的帮助。

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

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

相关文章

uview 使用遇到的问题。

uviewuniappvue,uView是uni-app生态专用的UI框架。 1. 注意uview版本,uview 2.0与uview1.0 官方提示:uView2.0是继1.0以来的一次重大更新,2.0已全面兼容nvue。 因此在接手项目的时候首先得看清楚,之前开发的是uview…

【自学Python】Python获取字符串长度

Python获取字符串长度 Python获取字符串长度教程 在 Python 中要想获取 字符串 长度可以使用 len() 函数。 Python len()函数详解 定义 我们将要获取的字符串的长度,传进 len() 函数,即可实现获取字符串的长度。 语法 len(string)参数 参数描述s…

【7】K8s_Ingress | Service的统一网关入口

目录 1、Ingress简介 2、安装ingress 【1】制作ingress.yaml文件并执行 【2】测试,创建一个test.yaml文件并执行 【3】设置域名访问,用yaml文件 【4】路径重写 【5】流量限制 1、Ingress简介 Ingress: Service的统一网关入口是k8s中的一个api对象&…

时序数据库TDengine基本概念和建模思路

目录 一 、 时序数据库基本概念 采集量 标签 数据采集点 表 超级表 子表 库 二、 TDengine数据库建模策略 建表模式建表情形 行列数据库存储的区别: 接触的传统业务的数据模式都是行存储,我们会把不同类型的对象创建不同的表进行存储他们各自的属…

机器学习公式推导与代码实现-无监督学习模型

聚类分析与k均值聚类算法 督学习算法。在给定样本的情况下,聚类分析通过度量特征相似度或者距离,将样本自动划分为若干类别。 距离度量和相似度度量方式 距离度量和相似度度量是聚类分析的核心概念,大多数聚类算法建立在距离度量之上。常用的距离度量方式包括闵氏距离和马…

linux系统中使用QT来实现数据库的调用方法

大家好,今天主要和大家分享一下,如何使用QT中数据库的使用方法。 目录 第一:数据库基本简介 第二:数据库表格基本操作 第三:数据库最终效果 第一:数据库基本简介 数据库是按照数据结构来组织,…

视频目标检测与轨迹跟踪代码案例

前言通过阅读相关文献及测试,找到了一种基于多模板匹配的改进方法,可以对遥感视频卫星中的移动目标进行探测,并绘制其轨迹。根据实验结果发现,可以比较有效的对运动目标进行跟踪。一、原理核心思想比较简单。即通过不同旋转角度的…

AQS之ReentrantLock详解

非公平锁加锁过程一般我们在使用ReentrantLock的时候,代码如下:Test public void test(){ReentrantLock lock new ReentrantLock();lock.lock();try{//编写业务逻辑}catch (Exception e){lock.unlock();} }当我们在用ReentrantLock独占锁的时候&#xf…

current并发包

并发包 current并发包、在JDK1.5之前Java并没有提供线程安全的一些工具类去操作多线程,需要开发人员自行编写实现线程安全,但仍然无法完全避免低性能、死锁、资源管理等问题。在JDK1.5时新增了java.util.current并发包,其中提供了许多供我们…

【自学Python】Python截取字符串

Python截取字符串 Python截取字符串教程 在 Python 中,我们需要截取 字符串,不需要使用特定的 函数,只需要使用下标索引加上切片的形式,就可以实现字符串的截取。 Python字符 Python 中没有单个字符的概念,单个字符…

uni-app 微信小程序通过Vue3 Hooks 实现动态填充页面剩余高度

应用场景 在uni-app开发微信小程序等项目时,经常会遇到这样的页面布局需求:上半部分高度固定,下半部分自动占满剩余高度,如下图所示应用场景:上半部分为固定高度或内容填充高度的内容区域下半部分为scroll-view滑动区…

河北稳控科技振弦采集模块配置工具VMTool的常见功能

河北稳控科技振弦采集模块配置工具VMTool的常见功能 一、实时数据读取 当 VMTool 与模块为连接状态时( 4.3.1 模块的连接与断开), 勾选实时数据区的【 自动读取】 复选框, VMTool 开始自动向模块发送实时数据读取指令&#xff0c…

如何用 Java 来构建一个简单的速率限制器?

速率限制 现实世界中的用户是残暴的,并且没耐心,充满着各种不确定性。在高并发系统中,可能会出现服务器被虚假请求轰炸的情况,因此您可能希望控制这种情况。 一些实际使用情形可能如下所示: API配额管理-作为提供者…

28.函数指针变量作为函数的参数,容易混淆的指针概念,特殊指针,main函数传参

1.函数指针变量作为函数的参数 #include<stdio.h> int add(int x, int y) {return x y; } int sub(int x, int y) {return x - y; } int mux(int x, int y) {return x * y; } int dive(int x, int y) {return x / y; } int process(int(*p)(int, int),int x,int y) {in…

Redis基础命令操作三之集合类型SET

SET集合 特点&#xff1a;集合中存储的元素是惟一的。 命令举例说明SADD sadd [key] [value1 value2 value3]key对应的集合中添加元素SMEMBERSsmembers [key]获取key对应的集合的所有元素SISMEMBERsismember [key] [value]判断value是否在key对应的集合中存在SCARDscard [key…

excel日期函数:EDATE与DATE到底谁更胜一筹

平时的工作中&#xff0c;经常会遇到计算职工转正日期、合同到期日、职工退休日期以及产品有效期截止日等等与日期有关系的问题。这些问题看似复杂&#xff0c;实际上只需要一个很简单的函数就能搞定&#xff0c;这个函数就是EDATE。今天分享EDATE函数的几个应用实例&#xff0…

【Linux】Linux 权限和权限管理

文章目录Linux权限的概念Linux权限管理文件访问者的分类&#xff08;人&#xff09;文件类型和访问权限&#xff08;事物属性)目录权限默认权限粘滞位关于权限的总结Linux权限的概念 权限是用来限制人的&#xff0c;权限人事物属性 权限存在的意义是便于系统安全管理的 Linux下…

Python处理第一类切比雪夫多项式

第一类切比雪夫多项式简介 Chebyshev多项式是一种非常重要的正交多项式&#xff0c;在逼近理论中有重要应用&#xff0c;第一类切比雪夫多项式的根可用于多项式插值&#xff0c;对弥补龙格现象有很大的帮助。其表达形式为 Tncos⁡(narccos⁡x)T_n\cos(n\arccos x) Tn​cos(nar…

vite+vue3+Ts搭建基础项目框架

随着前端技术的更新&#xff0c;程序员们的技术栈也要不断跟上&#xff0c;本来想躺平&#xff0c;不料却被推着走。 上个月开发团队新来一个项目需求&#xff0c;要求开发技术栈vue2更换成vue3&#xff0c;毫无准备的小编一脸懵&#xff0c;嗯&#xff1f;怎么说 换就换了&am…

读写分离有哪些坑?

在上一篇文章中,我和你介绍了一主多从的结构以及切换流程。今天我们就继续聊聊一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。 我们在上一篇文章中提到的一主多从的结构,其实就是读写分离的基本结构了。这里,我再把这张图贴过来,方便你理解…