printf("%d",a[i]);
printf("\n");
}
6、测试数据及运行结果
图4改错题运行图
三、综合题
1、题目
飞机订票系统:
一、问题描述:
假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。
通过该系统来实现机票的订购问题。
二、功能要求:
1.本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:
起飞地、目的地航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。
2.本系统显示这样的菜单:
(1)输入航班信息
(2)输出航班信息
(3)查找航班信息
a.显示空座的数量
b.显示空座的信息
c.显示已订座的信息
d.起飞时间
(4)订票预约
(5)删除定票预约
(6)退出系统
3.本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。
4.查找航班信息既可按线路查,也可按目的地查。
5.在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从该文件读入数据。
三、算法提示:
1.数据结构:
结构体类型数组
2.数据库结构:
下表构成该系统的基本数据库。
航班号
起飞时间
目的地
座次号
座次订出与否的标记
订票者姓名
订票者身份证号码
int
char
char
int
char
char
char
四、测试数据:
每架飞机的座位N=12,M=5
五、其它:
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。
2、解题分析
利用工程化思想解决,将程序功能模块化,每个模块完成一项功能,每人完成一部分,主函数做成菜单,各种功能调用子函数完成,有利于系统的运行和维护,且便于拓展功能。
飞机订票系统,有M架飞机,每架飞机有N个座位,将数据类型做成结构体数组的嵌套,方便管理,且将M,N作为宏定义,这样后续就可以通过改宏定义的值就可以扩大系统的适用范围。
在这个程序中,特别的加入一个自建的头文件,里面包含了输入输出等头文件,结构体数组等,使得每个小组成员更方便的使用调用全局变量和一些参数。
3、流程图
图5综合题main函数流程图
图6综合题func1函数流程图图7综合题func2函数流程图
图8综合题func3函数流程图
图9综合题func31函数流程图
图10综合题func311函数流程图图11综合题func312函数流程图
图12综合题func313函数流程图图13综合题func314函数流程图
图14综合题func4函数流程图图15综合题func5函数流程图
图16综合题func6函数流程图图17综合题func7函数流程图
4、源程序
头文件:
bag.h:
#include//自定义头文件包含各个函数常用和必要部分
#include
#include
#include
#defineM5//飞机数宏定义
#defineN12//座位数宏定义
structInfor//自定义Infor信息结构体
{
intsnum;//seatnumber座位号(数字表示)
charsign;//标记(用Y和N表示)
charname[20];//姓名(汉字英文均可)
charid[20];//身份证号(由于有人身份证号末尾为X所以类型采用cahr)
}infor[N];
structFlight//自定义Flight航班信息结构体
{
intfnum;//flightnumber航班号(数字表示)
chartime[12];//例如2015/07/20,20150720,2015-07-20或20150720均可
charoffg[20];//offground起飞地(汉字英文均可)
chardes[20];//destination目的地(汉字英文均可)
structInforinfor[N];//Infor信息结构体数组从属于Flight航班信息结构体数组,结构体数组的嵌套
}flight[M];
FILE*fp;//文件指针
源文件:
main.c:
#include"bag.h"//主函数
voidmain()
{
intfunc1();
intfunc2();
intfunc3();
voidfunc4();
voidfunc5();
voidfunc6();
intfunc7();
inti,x;
if((fp=fopen("D:
\\Flight.txt","a+"))==NULL)//a+方式打开文件,存在则读写指向文件末尾,不存在新建
{
printf("打开文件失败!
\n");
}
fseek(fp,0,SEEK_SET);//使文件内部指针指向文件开头,以便读取记录
for(i=0;i{
fread(&flight[i],sizeof(structFlight),1,fp);//sizeof()运算要读入数据的大小
}
fclose(fp);
printf("\t************************************************\n\n\t\t欢迎使用航空订票系统!
\n\tWelcometoAirlineReservationSystem!
\n\tOficialVersionPowefrbySuperGroup.\n\t\t\t\tBuild1.2.150716\n\n\t************************************************\n");
printf("注意:
首次运行本系统请先选择初始化系统,以防发生未知错误!
\n");
printf("提示:
\n1.航班号用数字表示\n2.起飞时间输入例如2015/07/20,20150720,2015-07-20或20150720均可\n3.订座标记为英文大写字母Y(已定出)和N(空座)\n\n");
for(;;)//for循环使程序只有一个出口,即退出系统
{
printf("菜单:
\n1.输入航班信息\n2.输出航班信息\n3.查找航班信息\n4.订票预约\n5.删除订票预约\n6.退出系统\n7.初始化系统\n请输入相应操作选项数字:
\n");
scanf("%d",&x);
getchar();//接收回车,以防对后续输入造成干扰
switch(x)
{
case1:
system("cls");func1();system("cls");break;
case2:
system("cls");func2();system("cls");break;
case3:
system("cls");func3();system("cls");break;
case4:
system("cls");func4();system("cls");break;
case5:
system("cls");func5();system("cls");break;
case6:
system("cls");func6();
case7:
system("cls");func7();system("cls");break;
default:
system("cls");printf("输入错误,请重新输入!
\n");system("pause");
}
}
}
func1.c:
#include"bag.h"//输入航班信息一级子函数
intfunc1()
{
inti;
printf("您已选择1.输入航班信息。
\n");
printf("共有%d架飞机,请选择要输入飞机的序号1—%d(输入0返回上一菜单)。
\n",M,M);
for(;;)//for循环使程序只有一个出口,即输入0返回上一菜单
{
scanf("%d",&i);
getchar();
if(i==0)
return0;
if(i<=M)
{
system("cls");
printf("请输入%d号飞机的航班号:
\n",i);
scanf("%d",&flight[i-1].fnum);
getchar();
printf("请输入%d号飞机的起飞时间:
\n",i);
scanf("%s",flight[i-1].time);
getchar();
printf("请输入%d号飞机的起飞地:
\n",i);
scanf("%s",flight[i-1].offg);
getchar();
printf("请输入%d号飞机的目的地:
\n",i);
scanf("%s",flight[i-1].des);
getchar();
printf("%d号飞机航班信息输入完毕,请选择其他1—%d飞机或0返回上一菜单!
\n",i,M);
}
else
printf("输入错误,请重新输入!
\n");
}
}
func2.c:
#include"bag.h"//输出航班信息一级子函数
intfunc2()
{
inti;
structFlight*p;//结构体指针
system("cls");
printf("您已选择2.输出航班信息。
\n\n");
p=flight;//结构体指针赋初值
for(i=0;i{
printf("%d号飞机的航班号:
%d\n",i+1,(*(p+i-1)).fnum);
printf("%d号飞机的起飞时间:
%s\n",i+1,(*(p+i-1)).time);
printf("%d号飞机的起飞地:
%s\n",i+1,(*(p+i-1)).offg);
printf("%d号飞机的目的地:
%s\n\n",i+1,(*(p+i-1)).des);
}
printf("按0返回上一菜单!
\n");
scanf("%d",&i);
getchar();
if(i==0)
return0;
}
func3.c:
#include"bag.h"//查找航班信息一级子函数
intfunc3()
{
intfunc31(intx);
inti,j,fnum;
chara[20],b[20];
printf("您已选择3.查找航班信息。
\n");
for(;;)
{
fnum=1;
printf("请选择查找航班信息方式(0返回菜单):
\n1.按航班号查找\n2.按线路查找\n3.按目的地查找\n");
scanf("%d",&i);
getchar();
system("cls");
if(i==0)
return0;
elseif(i==1)
{
for(;;)
{
if(fnum==0)
break;
printf("您已选择1.按航班号查找。
\n");
printf("请输入航班号:
\n");
scanf("%d",&fnum);
getchar();
for(j=0;jif(fnum==flight[j].fnum)
{
func31(j);
break;
}
else
{
if(j==M-1)
{
printf("查找失败,请核对航班号后按任意数字继续查找或按0用其他方式查找!
\n");
scanf("%d",&fnum);
getchar();
system("cls");
break;
}
}
}
}
elseif(i==2)
{
for(;;)
{
if(fnum==0)
break;
printf("您已选择2.按线路查找。
\n");
printf("请输入查询线路的起点和目的地:
\n");
printf("请输入起点:
\n");
scanf("%s",a);
getchar();
printf("请输入目的地:
\n");
scanf("%s",b);
getchar();
for(j=0;jif((strcmp(a,flight[j].offg)==(strcmp(b,flight[j].des)))==0)
{
func31(j);
break;
}
else
{
if(j==M-1)
{
printf("查找失败,请核对线路后按任意数字继续查找或按0用其他方式查找!
\n");
scanf("%d",&fnum);
getchar();
system("cls");
if(fnum==0)
break;
}
}
}
}
elseif(i==3)
{
for(;;)
{
if(fnum==0)
break;
printf("您已选择3.按目的地查找。
\n");
printf("请输入目的地:
\n");
scanf("%s",a);
getchar();
for(j=0;j{
if(strcmp(a,flight[j].des)==0)
{
func31(j);
break;
}
else
{
if(j==M-1)
{
printf("查找失败,请核对目的地后按任意数字继续查找或按0用其他方式查找!
\n");
scanf("%d",&fnum);
getchar();
system("cls");
if(fnum==0)
break;
}
}
}
}
}
else
{
printf("输入错误,请重新输入!
\n");
system("pause");
system("cls");
}
}
return0;
}
func31.c:
#include"bag.h"//查找航班信息二级子函数
intfunc31(intx)
{
intfunc311(intx);
intfunc312(intx);
intfunc313(intx);
intfunc314(intx);
inti;
system("cls");
printf("成功匹配到%d航班。
\n",flight[x].fnum);
for(;;)
{
printf("请选择查询选项(0返回菜单):
\n1.显示空座的数量\n2.显示空座的信息\n3.显示已订座的信息\n4.显示起飞时间\n");
scanf("%d",&i);
getchar();
switch(i)
{
case0:
return0;
case1:
system("cls");func311(x);system("cls");break;
case2:
system("