实验二 结构化分析与设计

实验二 结构化分析与设计
一.实验目的
(1)掌握结构化的需求分析方法;

(2)掌握分层数据流图的绘制、数据字典和加工说明的编制;

(3)掌握数据流图映射为软件结构图的方法;

(4)掌握需求说明书和设计说明。书的主要内容,学习软件需求说明书和设计说明书的编写;

(5)掌握测试的基本方法。

二.实验内容

(1)参考一个熟悉的系统,如,机票预订系统/教材订购系统/ATM自动取款机,讨论其用户需求、系统需求和业务需求;

(2)绘制系统的分层数据流图,并给出数据字典;
实验二 结构化分析与设计
实验二 结构化分析与设计
实验二 结构化分析与设计

(3)将系统的分层数据流图映射为软件结构图,绘制软件结构图;
实验二 结构化分析与设计

(4)为关键模块进行详细设计,如绘制关键模块的流程图;
实验二 结构化分析与设计
实验二 结构化分析与设计

7.代码部分

#include <stdio.h>      
#include <stdlib.h>     
#include <string.h>     
#include <malloc.h>         
#include <math.h>

//机票预订系统
struct FLIGHT
{
	char fli[4];    //航班号 
	int num;
}flights[20];
 
struct node
{ 
	char name[40];   //姓名 
	char sex[1];     //性别 
	char tele[20];   //手机号
	char D[18];      //身份证号码 
	char fli[4];    //航班号 
	struct node *users;//指向下一结点的指针
};
int total;//需要录入的旅客数
int sum=0,flag=0;//记录系统中旅客信息的数量
struct node *users=NULL;//这个要放在外面声明,放在个函数内部,无法共享
清除录入失败的用户信息
void clear(int sum)
{
	if(users==NULL)
  		users=(struct node *)malloc(total*sizeof(struct node));
	strcpy(users[sum].name,users[sum+1].name);
	strcpy(users[sum].sex,users[sum+1].sex);
	strcpy(users[sum].tele,users[sum+1].tele);
	strcpy(users[sum].D,users[sum+1].D);
	strcpy(users[sum].fli,users[sum+1].fli);
}  
录入旅客信息
void enter()   //录入旅客信息............................................................................
{
   int i;
   if(flag==0)
   {
   		flag=1;
		system("cls");
   		printf("请输入录入旅客的数量:");
   		scanf("%d",&total);
   		system("cls");
   }
   if(users==NULL)
   users=(struct node *)malloc(total*sizeof(struct node));
   if(sum<total)
   {
    printf("请输入姓名: ");
    scanf("%s",users[sum].name);
    printf("请输入性别: ");
    scanf("%s",users[sum].sex);
    printf("请输入手机号: ");
    scanf("%s",users[sum].tele);
    printf("请输入身份证号码: ");
    scanf("%s",users[sum].D);	
    for(i=0;i<sum;i++)
    {
    	if(strcmp(users[sum].name,users[i].name)==0)
    	{
    		printf("\n\n操作失败!\n姓名重复!\n");
    		printf("可录入人数为%d个,当前人数为%d个",total,sum);
    		printf("\n\n按回车返回上一界面......");
    		clear(sum);
   			getchar();
  			getchar();
  			system("cls");
			break; 
		}
		if(strcmp(users[sum].tele,users[i].tele)==0)
    	{
    		printf("\n\n操作失败!\n电话重复!\n");
    		printf("可录入人数为%d个,当前人数为%d个",total,sum);
    		printf("\n\n按回车返回上一界面......");
    		clear(sum);
   			getchar();
  			getchar();
  			system("cls");
			break; 
		}
		if(strcmp(users[sum].D,users[i].D)==0)
    	{
    		printf("\n\n操作失败!\n身份证号重复!\n");
    		printf("可录入人数为%d个,当前人数为%d个",total,sum);
    		printf("\n\n按回车返回上一界面......");
    		clear(sum);
   			getchar();
  			getchar();
  			system("cls");
			break; 
		}
	}
	if(i>=sum||sum==0)
	{
		sum++;
   		printf("\n\n操作成功!\n");
   		printf("可录入人数为%d个,当前人数为%d个",total,sum);
   		printf("\n\n按回车返回上一界面......");
   		getchar();
  		getchar();
  		system("cls");
  	}
    return;
   }
   else
   {
	    printf("人数超标\n ");   
		printf("\n\n按回车返回上一界面......");
        getchar();
        getchar();
        system("cls");
   }
}
机票预订
void book(struct FLIGHT flights[20])           //机票预订 
 {
 	int i,j;
	char fli[4],name[40],D[18];
 	system("cls");
 	printf("航班号        出发地        目的地        出发时间        预计到达时间        剩余座位\n");
	printf(" %s           广州          上海           12:30            19:30               %d   \n",flights[0].fli,flights[0].num);
	printf(" %s           广州          北京           13:30            21:30               %d   \n",flights[1].fli,flights[1].num);
	printf("\n\n请输入乘客姓名:");
	scanf("%s",name);
	printf("请输入乘客身份证号:");
    scanf("%s",D);
    for(i=0;i<sum;i++)
         if(strcmp(users[i].name,name)==0 && strcmp(users[i].D,D)==0)
		 {
            flag=1;
            printf("乘客绑定成功!\n");
            break;
		 }
	if(i>=sum)
	{
		printf("\n未查找到该乘客\n");
		printf("\n\n按回车返回上一界面......");
        getchar();
        getchar();
        system("cls");
        return;	
	}	 
	printf("请选择航班:");
	scanf("%s",fli);
	for(j=0;j<20;j++)
	{
		if(strcmp(flights[j].fli,fli)==0)
		{
			flights[j].num-=1;
			strcpy(users[i].fli,fli);
			printf("\n订票成功\n");
			break;
	    }
	    else
	    {
	    	printf("\n未查找到该航班\n");
	    	printf("\n\n按回车返回上一界面......");
    	    getchar();
    	    getchar();
    	    system("cls");
    	    return;	
		}
	}
 	printf("\n\n按回车返回上一界面......");
 	getchar();
    getchar();
    system("cls");
 }
航班查询
void inquiry()//航班查询............................................................................
{
   char name[40];
   char D[18];
   int i,flag=0;
   printf("\n");
   printf("\n");
   printf("请输入姓名:");
   scanf("%s",name);
   printf("请输入身份证号:");
   scanf("%s",D);
   for(i=0;i<sum;i++)
         if(strcmp(users[i].name,name)==0 && strcmp(users[i].D,D)==0)
		 {
            flag=1;
            printf("您的航班号为:%s\n",users[i].fli);
			printf("\n\n按回车返回上一界面......");
			getchar();
		    getchar();
	    	system("cls");
            return;
		 }
    if(flag==0)
    { 
         printf("\n");
         printf("错误!");
		 printf("\n\n按回车返回上一界面......");
		 getchar();
		 getchar();
		 system("cls");
	} 
}

主函数

int main()
{
   int choice;
   struct FLIGHT flights[20] = {{"D20",18}, {"D21",16}};
   system("cls");
   while(1)
   {
   	printf("\n\n\t\t************* 欢迎进入机票预订系统 **************\n");
  	printf("\n");
    printf("\n");
    printf("\t\t1:录入旅客信息\n");
    printf("\t\t2:机票预订\n");
    printf("\t\t3:查询航班信息\n");
    printf("\t\t4:注册账户(暂未开放)\n");
    printf("\t\t5:账户充值(暂未开放)\n");
    printf("\t\t6:余额查询(暂未开放)\n");
    printf("\t\t0:退出系统\n");
	printf("\n");
    printf("\t\t*********** 请选择您需进行的选项 ****************\n\n\n");
    printf("\n\n");
    printf("请选择:");
    scanf("%d",&choice);
    printf("\n\n");
    switch(choice)
	{
    	case 1:
			system("cls");
			enter();         //录入旅客信息 
			break;
		case 2:
			system("cls");
			book(flights);   //预订机票 
			break;
		case 3:
			system("cls");
			inquiry();
			break;
		case 4:
			system("cls");
			break;
		case 5:
			system("cls");
			break;
		case 6:
			system("cls");
			break;
		case 0:
			exit(0);
			break;
	}
   }
   return 0;
}

【实例1】机票预订系统

参考:

(1)携程网:https://flights.ctrip.com/international/search/domestic

(2)去哪儿:https://www.qunar.com/?ex_track=auto_4e0d874a

为了方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行

时间、旅行目的地等)输入该系统,系统为旅客安排航班,旅客在飞机起飞前一天凭取票通知和账单交款取票,系统核对无误即印出

机票给顾客

【实例2】教材订购系统

销售系统的工作过程为:首先由教师或学生提交购书单,经教材发行人员审核是有效购书单后,开发票、登记并返给教师或学生领

书单,教师或学生即可去书库领书。

采购系统的主要工作过程为:若是脱销教材,则登记缺书,发缺书单给书库采购人员;一旦新书入库后,即发进书单通知给教材发

行人员。

【实例3】图书管理系统

参考:http://lib.ahpu.edu.cn/

三.实验步骤

(1)复习结构化的分析与设计方法的主要过程;

(2)讨论系统存在的用户角色、工作流等;

(3)对关键功能绘制数据流图,给出数据字典,并反复讨论数据流的合理性;

(4)对应数据流图,设计系统的功能结构图,关键模块的流程图;

(5)选择对应的结构化程序设计语言,实现并测试部分功能模块

四.思考题
1)结构化分析方法与面向对象分析方法有无本质上的不同?

结构化分析也是面向过程分析,与面向对象分析是两种思路完全不同的分析方法,面向过程分析方法,就是说我们先考虑问题大的方面,然后再从外面到里面去深入这个问题的细节部分,一步一步去解决问题。
就是问题大的方面,然后我们再深入深入问题的细节部分,逐步解决问题。面向对象分析方法,我们把问题看作由几个对象组成,以对象为主分析问题。
(2)对数据流图进行审查有何意义?
确保以下作用:
1、便于用户表达功能需求和数据需求及其联系;
2、便于两类人员共同理解现行系统和规划系统的框架;
3、清晰表达数据流的情况;
4、有利于系统建模.

上一篇:java通过反射获取Object的属性


下一篇:Python Selenium自动化测试框架 持续集成Jenkins