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

1层数据流图

学校教材订购系统数据流图

销售子系统数据流图

采购子系统数据流图

功能结构图:


采购管理和订购管理

数据字典





相关代码:
菜单,根据角色选择进入的系统,选择1进入学生或老师的界面,选择2进入管理人员的界面

注册账号,输入学号即为账号

登录账号

根据角色进入不同的界面
这里是学生或老师的界面

进入界面,输入购书单,领取领书单

include <stdio.h>
include <string.h>
include <stdlib.h>
include <windows.h>
define NUM 1001
void Logout(); //登录/
void setting();///注册账号/
void enter();//进入界面/
void enter2();//进入界面2/
void exit();//退出/
void input();//录入信息/
void load();
int j=0,k;
struct users
{
char ID[20];//账号/
char key[20];//密码/
int num;//账户/
}user[NUM];
void main()
{
enter();//进入界面
}
//主函数结束
void enter()//一级菜单函数
{
int a;
load();
system("cls");
printf(" \t\t\t 教材订购系统\n");
printf(" \t\t\t *******************\n");
printf(" \t\t\t ********************\n");
printf("\n\n");
printf("\t\t\t 您将有以下选择\n");
printf("\n\n");
printf(" \t\t\t ++++++++++++++++++++\n");
printf(" \t\t\t + 1.注册账号 +\n");
printf(" \t\t\t + 2.登录(学生或老师) +\n");
printf(" \t\t\t + 3.退出 +\n");
printf(" \t\t\t ++++++++++++++++++++\n");
printf("\n\n");
printf(" \t\t\t |请输入您的操作号| \n\n\t\t\t\t ");
scanf("%d",&a);
switch(a)
{
case 1:system("cls");//清屏
setting();
break;
case 2:system("cls");
Logout();
break;
case 3:system("cls");
exit();
break;
default:printf("\t\t\t\t无此操作项\n请重新选择\n");
system("pause");
system("cls");
enter();
}
}
void load()
{
FILE fp;
int i;
if((fp=fopen("data.txt","r"))NULL)
{
printf("不能打开文件\n");
return;
}
for(i=0;!feof(fp);i++)
{
fread(&user[i],sizeof(struct users),1,fp);
}
fclose(fp);
system("cls");
printf("文件读取成功\n");
}
void save()
{
FILE *fp;
if((fp=fopen("data.txt","w"))NULL)
{
printf("无法打开文件\n");
exit(0);
}
fwrite(user,sizeof(struct users),NUM,fp);
printf("文件写入完成\n");
fclose(fp);
}
void setting()//注册账号/
{
char ch;
if(user[1000].account!=0)
{
j=user[1000].account;
}
printf("\n\n\t\t\t\t请输入你的账号(学号):\n\t\t\t\t ");
scanf("%s",user[j].ID);
printf("\n\t\t\t\t请设置您的密码:\n\t\t\t\t ");
scanf("%s",user[j].key);
printf("账号:%s \n",user[j].ID);
save();
printf("\n\n\t\t\t\t恭喜您注册成功!");
printf("\n\n\n");
system("pause");
printf("\t\t\t\t按回车键返回上一级\n");
printf("\n\n\n");
system("cls");
ch=getchar();//用来接收最后的回车符
if(ch'\n')
{
enter();
}
}
void exit()//执行退出功能/
{
printf("\t\t\t谢谢\n");
printf("\t\t\t感谢您的使用\n");
printf("\t\t\t欢迎下次光临\n");
printf("\t\t\t再见\n");
exit(0);
}
void Logout()//登录个人账号*/
{
int i,n,m;
char id[20],kw[20];
printf("\t\t 连续输错账号或密码三次,将返回主菜单\n");
for(i=0;i<3;i++)
{
printf("请输入登录账号\n");
scanf("%s",id);
for(k=0;k<NUM-1;k++)
{
if(strcmp(id,user[k].ID)0)
{
m=1;
break;
}
else
m=0;
}
if(m0)
{
printf("该账号不存在,剩余输入次数%d\n",2-i);
if((2-i)0)
{
printf("账号输入错误3次,即将返回菜单......\n");
system("pause");
enter();
}
}
if(m1)
{
printf("请输入登录密码\n");
for(n=0;n<3;n++)
{
scanf("%s",kw);
if(strcmp(kw,user[k].key)0)
{
system("cls");
enter2();
}
else
{
printf("密码输入错误,剩余输入次数%d\n",2-n);
if((2-n)0)
{
printf("密码输入错误3次,即将返回菜单......\n");
system("pause");
enter();
}
}
}
}
}
}
void enter2()//进入个人界面/
{
int n;
do
{
printf("\n\n\n");
printf(" \t\t\t+++++++++++++++++++++++++++++\n");
printf(" \t\t\t+ 教材订购系统学生或老师界面 +\n");
printf(" \t\t\t+ 您 有 以 下 选 择 +\n");
printf(" \t\t\t+++++++++++++++++++++++++++++\n");
printf(" \t\t\t ++++++++++++++++++++\n");
printf(" \t\t\t # 1. 提交购书单 #\n");
printf(" \t\t\t # 2.返回目录 #\n");
printf(" \t\t\t ++++++++++++++++++++\n\n\t\t\t\t ");
scanf("%d",&n);
switch(n)
{
case 1:system("cls");
submit();
break;
case 2:system("cls");
enter();
break;
default:printf("\t\t\t\t无此操作项\n\n");
system("pause");
system("cls");
}
}while(n>4&&n<0);
}
void submit()//输入购书单号/
{
char ch;
int a,n;
printf("请输入购书单号");
scanf("%d",&n);
for(n=0;n<3;n++)
{
scanf("%d",&a);
if(strcmp(a,user[k].num)==0)
{
printf("购书单号存在!");
enter2();
}
printf("\n\n\n");
ch=getchar();//用来接收最后的回车符
if(ch'\n')
{
enter2();
}
}
四.思考题
(1)简述需求说明书,概要设计,详细设计说明书的主要内容。
1.需求分析--产生软件功能规格说明书,需要确定用户对软件的需求,要作到明确、无歧义。不涉及具体实现方法。用户能看得明白,开发人员也可据此进行下面的工作(概要设计)。
2.概要设计--产生软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。
3.详细设计--产生软件详细设计说明书,对概要设计的进一步细化,一般由各部分的担当人员依据概要设计分别完成,然后在集成,是具体的实现细节。理论上要求可以照此编码。
(2)结构化分析方法与面向对象分析方法有无本质上的不同?
答:结构化系统分析方法是采用“自顶向下,由外到内,逐层分解”的思想对复杂的系统进行分解化简,从而有效地控制了系统分析每一步的难度, 并运用数据流图、加工说明和数据字典作为表达工具的一-种系统分析技术。
而面向对象的分析方法则是通过将数据和逻辑结构抽象成为对象,运用对象属性和方法等来操作和处理业务数据和逻辑的系统分析方法。
两者的区别在于:当软件项目较小系统.分析员能力足够高的时候,结构化方法能快速的找到最简洁、高效率的逻辑模型,结构化方法对复杂问题的帮助有限,而面向对象的分析方法提供了-种方便的、可持续观测和扩展系统的机制,通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,对于需求变化频繁的系统,可以用面向对象软件系统的方法。
(3)对数据流图进行审查有何意义?
1、便于用户表达功能需求和数据需求及其联系;
2、便于两类人员共同理解现行系统和规划系统的框架;
3、清晰表达数据流的情况;
4、有利于系统建模.
浙公网安备 33010602011771号