实验二 结构化分析与设计
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/?page=3 |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11540 |
| 这个作业的目标 | <结构化分析与设计> |
| 学号 | <3190704114> |
一.实验目的
(1)掌握结构化的需求分析方法;
(2)掌握分层数据流图的绘制、数据字典和加工说明的编制;
(3)掌握数据流图映射为软件结构图的方法;
(4)掌握需求说明书和设计说明。书的主要内容,学习软件需求说明书和设计说明书的编写;
(5)掌握测试的基本方法。
二.实验内容
(1)参考一个熟悉的系统,如,机票预订系统/教材订购系统/ATM自动取款机,讨论其用户需求、系统需求和业务需求;
(2)绘制系统的分层数据流图,并给出数据字典;
(3)将系统的分层数据流图映射为软件结构图,绘制软件结构图;
(4)为关键模块进行详细设计,如绘制关键模块的流程图;
(5)实现系统部分功能并测试。
这里我采用实例2 教材订购系统
销售系统的工作过程为:首先由教师或学生提交购书单,经教材发行人员审核是有效购书单后,开发票、登记并返给教师或学生领
书单,教师或学生即可去书库领书。
采购系统的主要工作过程为:若是脱销教材,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书单通知给教材发
行人员。
三.实验步骤
(1)复习结构化的分析与设计方法的主要过程;

(2)讨论系统存在的用户角色、工作流等;
学生将需要领取的教材定下来,然后将数据提交给库,在库的教材数量减去被领的教材数量;
征订员将需要征订的教材信息输入到库中,然后自动将该教材的属性
定为“征订”,等待采购。如果征订的信息需要修改,则征订员可以修改所输入的信息;
采购员可以浏览属性为“征订”教材的信息,并对它们进行操作,如果可
以采购,则将该教材的属性改为“采购中”;否则,则删除该征订信息。
用户可以对用户进行管理,如添加,删除;修改信息;
(3)对关键功能绘制数据流图,给出数据字典,并反复讨论数据流的合理性;

数据处理字典定义实例: 数据流名称:缺书单
简述:缺书时填写的缺书单
数据流来源:外部实体教师或“教材发行人员”
数据流去处:处理实体书库采购人员
数据流组成:缺书编号教材名称日期状态
后交于教务处购入,数据流大致相同
(4)对应数据流图,设计系统的功能结构图,关键模块的流程图;
(5)选择对应的结构化程序设计语言,实现并测试部分功能模块

四.思考题
(1)简述需求说明书,概要设计,详细设计说明书的主要内容。
需求分析--产生软件功能规格说明书,需要确定用户对软件的需求,要作到明确。不涉及具体实现方法。用户能看得明白,开发人员也据此进行概要设计工作。
概要设计--产生软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。
概要设计阶段通常得到软件结构图
详细设计--产生软件详细设计说明书,对概要设计的进一步细化,一般由各部分的担当人员依据概要设计分别完成,然后在集成,是具体的实现细节。
详细设计阶段常用的描述方式有:流程图、N-S图、PAD图、伪代码等
(2)结构化分析方法与面向对象分析方法有无本质上的不同?
从最终目标上来讲,两种方法是相同的,即它们都是为了设计出符合用户需求的软件。同时,它们都使用了抽象和分解的方法,即对现有的现实问题进行不断地分解
二者不同点的根源在于二者分析问题的视角不同:结构化设计以数据为最关键的实体,着眼于处理数据的整个流程,基于过程地考虑整个数据通过软件时的变化。
而面向对象方法则从现实中人的角度考虑问题,将软件功能转变为不同模块的动作和模块间的通信。
(3)对数据流图进行审查有何意义?
结构化系统分析方法从数据传递和加工角度出发,用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程。
审查能够反复检查图中是否存在错误或不合理的部分,及时改正便于详细编写。
(4)给出一次完整的会议讨论纪要,包括议题,最终结果。
本次小组开会,首先确定主题,最终选择了最熟悉的教材管理系统,在面对程序流图的数据字典等格式绘制中遇到诸多困难,我们在参考了众多主流界面,最终确定绘图形似,而在具体编写过程中,我们采用了大一暑假实践的C语言系统进行改进,最终完成这次实验。
附录 源代码:
void welcome(){ printf("欢迎进入教材征订管理系统\n\n"); printf("1.输入书号,条形码\n\n"); printf("2.统计总数,总金额\n\n"); printf("3.书本排名\n\n"); printf("4.修改数量\n\n"); printf("5.删除内容\n\n"); printf("0.退出\n"); } struct node { long ma; /*条码*/ char no[12]; /*书号*/ char name[40]; /*书名*/ char author[40]; /*作者*/ char publish[40]; /*出版社*/ int number; /*数量*/ float price; /*单价*/ float total; /*金额*/ struct node *link; /*指向下一结点的指针*/ }; void inout(struct node s[],int n){ int i=0; printf("请进行书本信息的录入。"); for (;i<n;i++){ printf("请输入条形码"); scanf("%ld",&s[i].ma); printf("请输入书号"); scanf("%s",s[i].no); printf("请输入书名"); scanf("%s",s[i].name); printf("请输入作者"); scanf("%s",s[i].author); printf("请输入出版社"); scanf("%s",s[i].publish); printf("请输入数量和单价"); scanf("%s,%f",&s[i].number,&s[i].price); s[i].total=s[i].price*s[i].number; } } void find(struct node s[],int n){ long h; int m; int i=0; printf("请输入查询的教材码"); scanf("%ld",&h); for(; i < n; i++ ) { if(s[i].ma == h ){ m = 1; } } printf("书名%s,作者%s,出版社%s,数量%d,单价%f\n",s[m].name,s[m].author,s[m].publish,s[m].number,s[m].price); } void count(struct node s[],int n){ int sum = 0; float all; int i=0; for(;i < n; i++){ sum+=s[i].number; all+=s[i].total; } printf("一共订了%d本教材,总共%f元",sum,all); } void sort(struct node s[],int n){ struct node t; int i = 0; int j = 0; for(;i < n-1; i++){ for(;j < n-1 ; j++){ if(s[j].number>s[j+1].number){ t = s[j]; s[j] = s[j+1]; s[j+1] = t; } } } printf("数量最多的是%s,最少的是%s\n",s[n-1].name,s[0].name); } void revise(struct node s[],int n){ int c,t; int i = 0; long h; printf("请输入要修改的教材码"); scanf("%ld",&h); for(;i < n; i++){ if(s[i].ma==h){ printf("请输入修改后的教材数量"); scanf("%d", &c); s[i].number = c; t = i; } } printf("修改后教材征订数为%d\n",s[t].number); } void dele(struct node s[],int n){ struct node t; int m; long h,j; int i = 0 ; printf("请输入要删除的教材码"); scanf("%ld",&h); for(; i < n ; i++){ if(s[i].ma==h){ m=i; for( j=m;j<n;j++){ s[j]=s[j+1]; } } } printf("删除后剩余%d本教材\n",n-1); }
参考资料:
《c语言程序设计》(第三版)谭浩强 清华大学出版社 2005
《C primer plus》(第六版) Stephen prata 人民邮电出版社2010
《数据结构》(C语言版) 严蔚敏 吴伟民 清华大学出版社 2003
《信息系统开发》 甘仞仞 经济科学出版社
《软件工程导论》(第四版) 张海藩 清华大学出版社 2003
《信息系统原理与工程》 张维明 电子工业出版社 2002

浙公网安备 33010602011771号