实验二 结构化分析与设计
| 博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19 |
|---|---|
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11540 |
| 作业目标 | (1)掌握结构化的分析方法、分层数据流图的绘制、数据字典和加工说明的编制等... |
| 学号 | 3190704207 |
一.实验目的
(1)掌握结构化的需求分析方法;
(2)掌握分层数据流图的绘制、数据字典和加工说明的编制;
(3)掌握数据流图映射为软件结构图的方法;
(4)掌握需求说明书和设计说明。书的主要内容,学习软件需求说明书和设计说明书的编写;
(5)掌握测试的基本方法。
二.实验内容
(1)参考一个熟悉的系统,如,机票预订系统/教材订购系统/ATM自动取款机,讨论其用户需求、系统需求和业务需求;
(2)绘制系统的分层数据流图,并给出数据字典;
(3)将系统的分层数据流图映射为软件结构图,绘制软件结构图;
(4)为关键模块进行详细设计,如绘制关键模块的流程图;
(5)实现系统部分功能并测试。
三、具体内容(机票预订系统)
需求:
- 业务需求
机票预订系统
- 用户需求
用户能够预订机票,退订机票,查询航班,打印机票
航空公司要求能够自动生成乘客名单信息,安排航班飞行,处理用户需求
- 系统需求
实现预订机票,退订机票,查询航班,打印机票功能,并且实时更新航班信息和相关数据
数据字典:
用户账号信息={登录账号+登录密码}
用户基本信息={姓名+性别+身份证号码 }
预订机票记录={用户基本信息+航班信息}
机票余量信息={航班信息+各舱空位数量}
退订机票记录={用户基本信息+航班信息}
航班信息={航班号+航班时间+航班目的地}
分层数据流图:
顶层

第二层

第三层

软件结构图:

关键模块流程图:

关键模块测试:(主要参考了ATM实验)








具体代码如下:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <stdlib.h> 5 #include <windows.h> 6 using namespace std; 7 #define N 100 //该系统可输入的上限人数 8 static int x = 0; //记录已经输入的账号 9 static int now = 0; //记录当前在执行账号的下标 10 11 struct node 12 { 13 string account; //账号 14 string password; //密码 15 16 }accounts[N]; 17 18 19 void OpenAccount(); 20 void LogInCheck(); 21 void LogIn(); 22 void window(); 23 void bookTicket(); 24 void returnTicket(); 25 void checkFlight(); 26 void printTicket(); 27 28 void OpenAccount(){ 29 system("cls"); 30 string str1,str2,oaccount; 31 bool flag; 32 int i; 33 do{ 34 printf("\n\n 请输入手机号作为你的账号名:"); //扩展:一、加入检查功能,非手机号要重新输入 35 cin>>oaccount; 36 for(i=0;i<x;i++){ 37 if(accounts[i].account==oaccount){ 38 flag=true; 39 printf(" 您输入的账号已存在,请重新输入!\n\n"); 40 break; 41 } 42 } 43 if(i==x){ 44 flag=false; 45 } 46 47 } 48 while(flag); 49 50 accounts[x].account=oaccount; 51 52 printf("\n\n 请输入密码:"); //扩展:密码显示隐蔽;密码不能太简单,需要格式限制 53 cin>>str1; 54 printf("\n 请再次输入密码:"); 55 cin>>str2; 56 while(str1!=str2) 57 { 58 printf(" 两次密码不一致,请重新输入!!!\n\n"); 59 printf("\n 请输入密码:\n"); 60 cin>>str1; 61 printf("\n 请再次输入密码:\n"); 62 cin>>str2; 63 } 64 accounts[x].password=str1; 65 x++; 66 printf("\n 该账号注册成功!") ; 67 Sleep(600); 68 window(); 69 } 70 71 72 73 74 75 void LogInCheck(){ 76 system("cls"); 77 string saccount,spassword; 78 int i; 79 bool flag=false; 80 do{ 81 printf("\n\n 请输入登录账号:"); 82 cin>>saccount; 83 for(i=0;i<x;i++){ 84 if(accounts[i].account==saccount){ 85 flag=false; 86 break; 87 } 88 } 89 if(i==x){ 90 printf("\n 您输入的账号不存在,请重新输入!\n"); 91 flag=true; 92 } 93 } 94 while(flag); //goto语句和do...while语句的转换 95 96 do{ 97 printf("\n\n 请输入密码:"); 98 cin>>spassword; 99 if(accounts[i].password!=spassword){ 100 printf("\n 您输入的密码不正确,请重新输入!\n"); 101 flag=true; 102 }else{ 103 flag=false; 104 } 105 }while(flag); 106 now=i; 107 printf("\n 恭喜你成功登录!!!"); 108 Sleep(600); 109 LogIn(); 110 } 111 112 113 void bookTicket(){ 114 system("cls"); 115 printf("\n\n\n 预订机票成功!!\n"); 116 printf(" 相关文件改写成功!!"); 117 Sleep(600); 118 LogIn(); 119 } 120 121 void returnTicket(){ 122 system("cls"); 123 printf("\n\n\n 退订机票成功!!\n"); 124 printf(" 相关文件改写成功!!"); 125 Sleep(600); 126 LogIn(); 127 } 128 129 void checkFlight(){ 130 system("cls"); 131 printf("\n\n\n 查询航班成功!!\n"); 132 printf(" 相关文件改写成功!!"); 133 Sleep(600); 134 LogIn(); 135 } 136 137 void printTicket(){ 138 system("cls"); 139 printf("\n\n\n 打印机票成功!!\n"); 140 Sleep(600); 141 LogIn(); 142 } 143 144 145 void LogIn(){ 146 system("cls"); 147 int m; 148 printf("\n\n WELCOME, MY LOVELY ACCOUNT!!!"); 149 printf("\n\n choose the function:\n\n"); 150 printf(" 1.预定机票\n"); 151 printf(" 2.退订机票\n"); 152 printf(" 3.查询航班\n"); 153 printf(" 4.打印机票\n"); 154 printf(" 0.exit(退出)\n"); 155 printf("------------------------------------------\n"); 156 printf("请输入想要运行的功能:\n"); 157 scanf("%d",&m); 158 while(m) 159 { 160 switch(m) 161 { 162 case 1:bookTicket();break; 163 case 2:returnTicket();break; 164 case 3:checkFlight();break; 165 case 4:printTicket();break; 166 default:printf("\n此功能不存在,请重新输入!\n"); 167 } 168 scanf("%d",&m); 169 } 170 171 window(); 172 173 } 174 175 176 177 178 void window(){ 179 system("cls"); 180 int n; //记录需要被运行的功能 181 printf("\n\n WELCOME TO USE THIS ATM SYSTEM!!!!!\n\n"); 182 printf(" choose the function:\n\n"); 183 printf(" 1.open account(注册)\n"); 184 printf(" 2.log in(登录)\n"); 185 printf(" 0.exit(退出)\n"); 186 printf("------------------------------------------\n"); 187 printf("请输入想要运行的功能:\n"); 188 scanf("%d",&n); 189 while(n) 190 { 191 switch(n) 192 { 193 case 1:OpenAccount();break; 194 case 2:LogInCheck();break; 195 default:printf("\n此功能不存在,请重新输入!\n"); 196 } 197 scanf("%d",&n); 198 } 199 200 exit(0); 201 } 202 203 204 205 206 int main(){ 207 window(); 208 209 return 0; 210 }
四.思考题
(1)简述需求说明书,概要设计,详细设计说明书的主要内容。
《软件需求规格说明书》的一般结构
- 正文的第一章内容是1.概述,包含
- 1.1.编写目的;1.2.术语与定义;1.3.参考资料;三个部分
- 第二章要给出该项目的标准和规范,在文档的后续内容编写中以及项目开发过程中必须遵照这个标准和规范进行。
- 第三章应该说明该项目的相关假设、限制和一些依赖条件,在后续系统部署的过程中可以有参考意义。
- 第四章“功能规格”是重点,重点介绍这个系统的角色,界面设计思路,系统的功能视图和功能点清单,以及系统的需求用例。这个内容必须详细描述,这样才能对后续的开发和测试提供指导意义。
- 第五章“非功能规格”要对项目的性能、安全、数据的备份恢复等内容解释解释说明,一个项目除了功能完整之外,还要考虑性能、安全等相应的要求。
- 第六章“附录”,是对软件需求规格说明书的一些补充说明文档,其中的“软件需求跟踪矩阵”是重点,这份文档是对后续需求的完善程度进行了严格的控制。
《概要设计说明书》的一般结构:
- 总述:需求或目标(讲一下事情的起源)、环境、局限;
- 总体设计:从全局的角度说一下 组织结构、功能、处理流程、有哪些模块、模块间的关系,运行环境等。
- 外部接口:总体说明外部用户、软、硬件接口(可用资源);
- 模块设计:每个模块“做什么”、简要说明“怎么做”(输入、输出、处理逻辑、与其它模块或系统的接口),处在什么逻辑位置、物理位置。
-
模块描述:说明哪些模块实现了哪些功能;
-
模块层次结构:可以使用某个视角的软件框架图来表达;
-
模块间的关系:模块间依赖关系的描述,通信机制描述;
-
模块的核心接口:说明模块传递的信息、信息的结构
-
处理方式设计:说一些满足功能和性能的算法;
- 数据结构:逻辑结构、物理结构。
- 容灾设计:出错信息、出错处理。(可选)
- 监控设计:运行模块组合、控制、时间。(可选)
- 用户界面设计:(可选)。
- 安全设计:(可选)。
- 其它设计:(可选)。
- 制定规范(附录): 设计原则,代码规范、接口规约、命名规则。
《详细设计说明书》的一般结构:
- 引言,包含:编写目的,背景,参考资料,术语定义及说明
- 设计概述,包含:任务和目标,需求概述,运行环境概述, 条件与限制,详细设计方法和工具
- 系统详细需求分析,包含:详细需求分析,详细系统运行环境及限制条件分析接口需求分析
- 总体方案确认,包含: 系统总体结构确认, 系统详细界面划分
- 系统详细设计,包含: 系统结构设计及子系统划分,系统功能模块详细设计(采用HIPO图进行功能分解与模块描述,,用IPO或结构图描述各模块的组成结构、算法、模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系。), 系统界面详细设计
- 数据库系统设计
(2)结构化分析方法与面向对象分析方法有无本质上的不同?
- 结构化分析方法
分析问题的过程中各个环节联系紧密,环环相扣。主要用来分析系统的功能,是一种直接根据数据流划分功能层次的分析方法,该方法较为传统,主要适用于数据处理。主要帮助开发人员定义系统需要做什么,系统需要存储和使用那些数据,系统需要什么样的输入和输出,以及如何把这些功能结合在一起来完成任务。面向过程分析的主要工具是数据流图(DFD)。
- 面向对象分析方法
定义在系统中工作的所有类型的对象,且对象之间相互独立,互不影响,但通过整体性的协调和相互作用完成任务,构成完整的体系。面向对象的方法关注的是事件、重用和继承,关注的多态,它自己有一整套独特的思维方式,这和面向过程方法是根本不同的。但相对于结构化分析方法而言呢,其各个部分或者环节是可以经过修改的,而且不会对其他部分造成多余的影响。 面向对象分析方法主要分为问题分析和应用分析两个方面。面向对象分析方法则是根据获得的需求信息从中抽象出类与对象并分析他们之间的静态关系,再结合实际问题,确定对象的动态行为以及对象间的信息传递,以此建立需求模型。主要工具是统一建模语言(UML)。
(3)对数据流图进行审查有何意义?
数据流图,是描述系统数据流程的工具,它将数据独立抽象出来,通过图形方式描述信息的来龙去脉和实际流程。
所以对于数据流图进行审查是为了保证在程序设计与分析时,大方向不出现差错,避免做无用功,对于大型团队合作时有巨大的帮助。
(4)给出一次完整的会议讨论纪要,包括议题,最终结果。
我们主要讨论了关于选订哪个系统以及分工合作的问题,最后决定三个人分工三个分层流程图,其他的靠自行发挥。
这次的合作主要存在于确定系统和整体构思方面,绘图方面主要靠自己亲力亲为,所以每个人的工程量会比较大,但这样也更好地锻炼了每个人的时间管理能力和对于visio的操作水平也有了进一步的提升,同时对于分层流程图、软件结构图和数据字典也有了更深的了解。大家收获颇丰。

浙公网安备 33010602011771号