| 实验名称 | 结构化分析与设计 |
| ---- | ---- | ---- |
| 姓名 | 袁健 |
|班级|计算机183|
|学号|3180701334|
一、实验目的
(1)掌握结构化的需求分析方法;
(2)掌握分层数据流图的绘制、数据字典和加工说明的编制;
(3)掌握数据流图映射为软件结构图的方法;
(4)掌握需求说明书和设计说明。书的主要内容,学习软件需求说明书和设计说明书的编写;
(5)掌握测试的基本方法。
二.实验内容
(1)参考一个熟悉的系统,如,机票预订系统/教材订购系统/ATM自动取款机,讨论其用户需求、系统需求和业务需求;
(2)绘制系统的分层数据流图,并给出数据字典;
(3)将系统的分层数据流图映射为软件结构图,绘制软件结构图;
(4)为关键模块进行详细设计,如绘制关键模块的流程图;
(5)实现系统部分功能并测试。
【实例1】机票预订系统
参考:
(1)携程网:https://flights.ctrip.com/international/search/domestic
(2)去哪儿:https://www.qunar.com/?ex_track=auto_4e0d874a
为了方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行
时间、旅行目的地等)输入该系统,系统为旅客安排航班,旅客在飞机起飞前一天凭取票通知和账单交款取票,系统核对无误即印出
机票给顾客
【实例2】教材订购系统
销售系统的工作过程为:首先由教师或学生提交购书单,经教材发行人员审核是有效购书单后,开发票、登记并返给教师或学生领
书单,教师或学生即可去书库领书。
采购系统的主要工作过程为:若是脱销教材,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书单通知给教材发
行人员。
【实例3】图书管理系统
三.实验步骤
(1)复习结构化的分析与设计方法的主要过程;
(2)讨论系统存在的用户角色、工作流等;
(3)对关键功能绘制数据流图,给出数据字典,并反复讨论数据流的合理性;
(4)对应数据流图,设计系统的功能结构图,关键模块的流程图;
(5)选择对应的结构化程序设计语言,实现并测试部分功能模块
四、实验结果
图书管理系统
该系统主要采用链表的形式来对书籍进行添加、修改、删除等等一系列操作,系统内含有用户以及管理员两种形式的访问人员,通过用户以及管理员的形式去对于书籍的一些借阅、归还、添加、删除、修改的操作。
对于这些书籍以及用户和管理员的属性的修改都会实时的保存到文本文件中,以方便下一次的读取。
一、需求分析
1.用户需求:在使用上方便用户,能够达到高效快速的查找到需要的书籍。
2.系统需求:注册读者查询、添加、删除。
图书的查询、删除、添加。
借阅情况的查询。
二、数据流图、数据字典
总体构思
第0层
第1层
数据字典:
数据字典
数据项条目表
|编号|名称|数据类型|长度|说明|
|----|----|----|----|----|----|
|S001|学生编号|Int|20|学生在系统中的代码标识|
|S002|学生姓名|Varchar|10|学生姓名的说明|
|S003|学生类型|Int|4|学生的分类说明|
|S004|学生性别|Varchar|2|学生的性别说明|
|S005|学生出生日期|Datetime|8|学生出生日期说明|
|S006|学生联系方式|Varchar|100|学生联系的说明|
|S007|图书ID|Int|4|图书的标识|
|S008|图书书名|Varchar|100|图书书名说明|
|S009|图书类别|Varchar|50|关于图书类别说明|
|S010|作者|Varchar|200|图书作者说明|
|S011|ISBN|Varchar|20|图书编号标识|
|S012|出版社|Varchar|50|图书出版说明|
|S013|图书价格|Money||图书单价说明|
|S014|库存量|Int|6|图书在库数量说明|
|S015|超期罚款|Money||图书超期而罚款说明|
|S016|简介|Varchar|200|图书介绍说明|
|S017|借出次数|Int|6|图书被解约的次数说明|
|S018|入库日期|Datetime|8|图书采购日期|
|S019|借阅时间|Datetime|8|图书被借阅的日期|
|S020|应还时间|Datetime|8|图书应被归还的日期|
|S021|可借天数|Int|4|图书可以被借阅的时间|
数据存储条目表
编号 | 名称 | 来源 | 去向 | 组成 | 简述 |
---|---|---|---|---|---|
D1 | 学生库 | P6 | P7 | 学生编号、姓名、类别、联系方式 | 对学生信息的记录 |
D2 | 图书库 | P1 | P3 | 图书编号、名称、库存数量、出版社、简介 | 对图书信息的记录 |
D3 | 借阅库 | P2 | P2 | 借阅数量、日期、操作员借阅人、图书编号 | 对借阅图书的信息的记录 |
数据流条目表 | |||||
编号 | 名称 | 来源 | 去处 | 组成 | 说明 |
---- | ---- | ---- | ---- | ---- | ---- |
F1 | 编号及姓名查询 | 学生 | 学生查询处理 | 学生编号,学生姓名 | 查询学生信息的条件 |
F2 | 编号及书名查询 | 读者 | 图书查询处理 | 图书编号、图书名称 | 查询图书信息的条件 |
F3 | 图书预定 | 学生 | 图书预定处理 | 图书编号、图书名称、预订时间、学生姓名、读者编号 | 预订图书的信息 |
F4 | 图书续借 | 学生 | 图书借阅处理 | 图书编号、图书名称、学生姓名、学生编号 | 续借图书的信息 |
F5 | 图书预订信息 | 图书管理员 | 图书预定处理 | 图书编号、图书名称、预订时间、学生姓名、学生编号、操作员 | 图书管理员对预定信息进行处理 |
F6 | 图书续借信息 | 图书管理员 | 图书续借处理 | 图书编号、图书名称、学生姓名、学生编号、操作员 | |
F7 | 学生信息 | 图书管理员 | 学生信息处理 学生编号、姓名、性别、类型、出生日期 | 图书管理员对学生信息进行处理 | |
F8 | 图书信息 | 图书管理员 | 图书信息处理 | 图书编号、书名、库存数量、单价、简介 | 图书管理员对图书信息进行处理 |
数据处理条目表 | |||||
编号 | 名称 | 输入 | 输出 | 处理过程 | |
---- | ---- | ---- | ---- | ---- | |
P1 | 图书信息处理 | 图书信息 | 图书库 | 根据图书信息修改图书库 | |
P2.1 | 图书归还处理 | 还书信息 | 图书库、借阅库 | 根据还书信 | |
P2.2 | 检查读者编号 | 学生库 | 有效 | 根据学生库的信息检查读者是否已存在 | |
P2.3 | 检查图书是否有现存 | 图书库 | 有现存 | 根据图书信息检查图书是否有现存 | |
P2.4 | 填写借阅信息和修改图书信息 | 有现存 | 借阅库、图书库 | 有现存则借阅图书,修改图书库存量 | |
P3.1 | 图书查询处理 | 图书查询条件 | 图书库、查询结果 | 根据查询条件,查看相关图书 | |
P4.1 | 预定信息输入 | 预定信息 | 读者身份检查 | 根据图书库信息,选择预约的图书 |
|P4.2 |学生身份检查| 学生库 |有效 |根据学生库信息检查学生是否已存在 |
|P4.3 |图书预定处理| 图书库 |预定信息| 填写预订信息,申请预订|
|P5| 图书续借处理| 图书续借 |借阅库| 根据续借信息修改借阅库|
|P6| 学生信息处理| 学生信息 |学生库 |根据学生信息修改学生库|
|P7|学生查询处理 |学查询 |学生库| 根据学生库信息查询学生情况 |
三、软件结构图
四、代码部分
安全验证
void check()
{
char userName[5];/*用户名*/
char userPWD[5];/*密码*/
int i,sum;
system("color 0B");
for(i = 1; i < 4; i++)
{
printf("(用户名和密码均为abcde)
");
printf("
请输入您的用户名:");
gets(userName);
printf("
请输入您的密码:");
gets(userPWD);
if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))
{
printf("
*用户名和密码正确,显示主菜单*");
return;
}
else
{
if (i < 3)
{
printf("用户名或密码错误,提示用户重新输入");
printf("用户名或密码错误,请重新输入!");
}
else
{
printf("连续3次输错用户名或密码,退出系统。");
printf("您已连续3次将用户名或密码输错,系统将退出!");
exit(1);
}
}
}
}
查询图书信息
void inquire(STUDENTS stu[])
{ int i;
char name[20];
system("cls");
printf("
请输入您要查找的图书的书名:");
scanf("%s",&name);
for(i=0;i<k;i++)
if(strcmp(name,stu[i].name)==0)
printf("
编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d
",stu[i].num,stu[i].name,
stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);
printf("按任意键加回车返回主菜单!");
scanf("%d",&i);
getchar();
}
修改图书信息
void change(STUDENTS stu[])
{ int num,i,choice;
system("cls");
printf("
请输入您要修改的图书的编号");
scanf("%d",&num);
for(i=0;i<k;i++)
{ if(num==stu[i].num)
printf("
编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d
",stu[i].num,stu[i].name,
stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);
printf("
********请输入您想要修改的数据********
");
printf(" 1. 编号
");
printf(" 2. 书名
");
printf(" 3. 作者
");
printf(" 4. 出版社
");
printf(" 5. 价格
");
printf(" 6. 数量
");
printf(" 请选择(1-6):");
scanf("%d",&choice);
switch(choice)
{case 1:{
printf("
请输入你改的新编号");
scanf("%d",&stu[i].num);
break;
}
case 2:{
printf("
请输入你改的新书名");
scanf("%s",stu[i].name);
break;
}
case 3:{
printf("
请输入你改的新作者");
scanf("%s",stu[i].author);
break;
}
case 4:{
printf("
请输入你改的新出版社");
scanf("%s",stu[i].press);
break;
}
case 5:{
printf("
请输入你改的新价格");
scanf("%f",&stu[i].price);
break;
case 6:{
printf("
请输入你改的新数量");
scanf("%d",&stu[i].quantity);
break;
}
}
}
}
五、实验思考题
(1)简述需求说明书,概要设计,详细设计说明书的主要内容。
需求说明书是指在研究用户要求的基础上,完成可行性分析和投资效益分析以后,由软件工程师或分析员编写的说明书。它详细定义了信息流和界面,功能需求,设计要求和限制,测试准则和质量保证要求。它的作用是作为用户和软件开发人员达成的技术协议书,作为着手进行设计工作的基础和依据,系统开发完成以后,为产品的验收提供了依据。
概要设计说明书又可称系统设计说明书,这里所说的系统是指程序系统。编制的目的是说明对程序 系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织结构、模块划分、功能分配、接口设计、运行设计、安全设计、数据结构设计和出错处理设计等,为程序的详细设计提供基础。
详细设计说明书又可称程序设计说明书。编制目的是说明一个软件系统各个层次中的每一个程序 (每个模块或子程序)的设计考虑,如果一个软件系统比较简单,层次很少,本文件可以不单独编写,有关 内容合并入概要设计说明书。
(2)结构化分析方法与面向对象分析方法有无本质上的不同?
结构化系统分析方法是采用自顶向下,由外到内,逐层分解的思想对复杂的系统进行分解化简,从而有效地控制了系统分析每步的难度, 并运用数据流图、加工说明和数据字典作为表达工具的一种系统分析技术。
而面向对象的分析方法则是通过将数据和逻辑结构抽象成为对象,运用对象属性和方法等来操作和处理业务数据和逻辑的系统分析方法。
两者的区别在于:当软件项目较小、系统分析员能力足够高的时候,结构化方法能快速的找到最简洁、高效率的逻辑模型,结构化方法对复杂问题的帮助有限,而面向对象的分析方法提供了一种方便的、 可持续观测和扩展系统的机制,通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,对于需求变化频繁的系统,可以用面向对象软件系统的方法。
(3)对数据流图进行审查有何意义?
检查图中是否存在错误或不合理(不理想)的部分确保两大特性
一致性:分层DFD中不存在矛盾和冲突。
完整性:是否有遗漏的数据流、加工等
(4)给出一次完整的会议讨论纪要,包括议题,最终结果。
关于图书管理系统的设计讨论
结果:三个人意见统一
六、个人小结
通过这次实验,让我系统的学习了一下软件开发的全过程,包括需求阶段,开发阶段,测试阶段,发布阶段,可谓是受益良浅。特别是在需求分析阶段时,每个人的意见不统一,所得出最后的想法也不相同。到最后的软件测试,也是花费了很多的气力。