C语言程序设计课程设计飞机订票系统的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计内容与设计要求
一、设计内容:
飞机订票系统
1.1问题描述:
假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。
通过该系统来实现机票的订购问题。
1.2功能要求:
1)、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当
包括:起飞地、目的地航班号、座次号码、座次订出与否标记、订座者
的姓名和订座者的身份证号码。
2)、本系统显示这样的菜单:
(1)输入航班信息
(2)输出航班信息
(3)查找航班信息
a.显示空座的数量
b.显示空座的信息
c.显示已订座的信息
d.起飞时间
(4)订票预约
(5)删除定票预约
(6)退出系统
1、本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,
并且它们都允许用户收回其输入。
2、查找航班信息既可按线路查,也可按目的地查。
4、在两次运行之间,数据被保存于一个文件里,当本程序重新开
始的时候,它首先从该文件读入数据
1.3 算法提示:
1、数据结构:结构体类型数组
2、数据库结构:下表构成该系统的基本数据库。
1.4测试数据:
每架飞机的座位N=12,M=5
1.5 其它:
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。
二、设计要求
1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
5).上机演示。
二、进度安排
第 18 周星期一上午课题讲解查阅资料
星期一下午系统需求分析模块设计
星期二上午算法、数据结构设计主程序设计
星期二下午各功能模块程序设计修改完善程序
星期五下午各功能模块程序设计修改完善程序第 19 周时间待定
星期五下午答辩
目录
一、需求分析 (4)
1、程序的功能 (4)
2、输入输出的要求 (6)
二、概要设计 (9)
三、详细设计 (11)
1、数据类型 (11)
2、模块分析 (12)
3、函数的调用关系 (12)
四、调试分析以及设计体会 (13)
1、测试数据 (13)
2、调试分析 (13)
3、心得体会 (14)
五、使用说明 (15)
六、附录 (17)
1、参考书目 (17)
2、源程序清单(带注释) (17)
七、计算机科学与技术系课程设计评分表 (40)
一、需求分析
1.1 系统功能需求
1.1.1程序的功能
1.系统管理员功能:
1)录入和修改航班和机票的信息:输入航班号,输入起飞港,途径港,到达港,录入起飞时间,到达时间,飞行总共用时,可随时修改航班信息2)输出航班的信息:输入航班号便可输出之前输入的航班信息
2.客户需要的功能:
1)查找航班信息:
a.显示空座的数量
b.显示空座的信息
c.显示已订座的信息
d.起飞时间
2)订票预约:查询航班信息后,提前订票预约需要的飞机票,
3)删除定票预约
4)退出系统
1.1.2 主要模块流程图
1.1.3 功能描述
1.1.4各功能模块的功能描述
(1)显示菜单函数:
FLIGHT fltlist[5]; PASSENGER psglist[5][12]; ReadFlight(fltlist);
PASSENGER* k;k=(PASSENGER*) psglist; ReadPassenger(k);
用户可以根据菜单提示,选择相关菜单。
(2)查找函数:
查询航班号函数chaxunhangban(FLIGHT fltlist[]),查询已定座信息函数chaxunyidingxinxi(PASSENGER* psglist),查空位信息函数
chakongweixinxi(FLIGHT fltlist[],PASSENGER* psglist),查空位个数函数chakongweigeshu(FLIGHT fltlist[],PASSENGER* psglist)。
本算法实现查找航班信息功能。
用户可以根据航班号或起飞抵达城市查找航班信息。
如果没有该航班信息,将提示相关信息。
(3)主控函数:
void main(void)从数据文件中读入航班信息,用户选择某菜单,实现调用该菜单功能的函数。
(4)订票函数:
void Book(FLIGHT fltlist[],PASSENGER* psglist)
本算法实现订票功能。
用户输入订票信息后,该算法就会根据用户输入信息查找航班信息,找到就显示订票成功相关信息,且该航班票量减去用户订的票数。
如没找到,则提供相关的其他航班信息。
该算法功能可以循环执行。
(5)退票函数:
void tuipiao(FLIGHT fltlist[],PASSENGER* psglist)
本算法实现退票功能。
用户可以根据自己的航班型号退票。
当用户输入航班型号退票,该算法会根据用户的航班型号查找储存在以
head为头节点链表中的客户信息,找到删除该客户信息节点,并输出退
票成功相关信息。
否则提示没有该客户信息。
1.2 输入输出的要求
1.2.1输入的要求
输入必须按以下五个步骤进行:
1)输入航班号,航班号为0到4的数;
2) 输入起飞港,比如beijing;
3) 输入途径港,比如tianjing;
4) 输入到达港,比如shanghai;
5) 输入起飞时间,比如12:00;输入到达时间,比如14:00,输入总共用时,
比如02:00
1.2.2输出的要求
1)输入航班号,航班号为0到4的数;
2)输出结果为之前输入的数据;
二、概要设计
2.1引言
2.1.1编写目的
在本机票预定系统项目的前一阶段,也就是需求分析阶段中,已经将系统用户对本系统的做了详细的阐述,这些用户需求已经在上一阶段中对航空公司、各旅行社为及机场的实地调研中获得,并在需求规格说明书中得到详尽得叙述及阐明。
本阶段已在系统的需求分析基础上,对机票预定系统做概要设计。
主要解决了实现该系统需求的程序模块设计问题。
包括如何把系统划分成若干个模块、决定各个模块之间的借口、模块之间传递的信息。
以及数据结构、模块结构设计等。
在以下的概要设计报告中将对在本阶段中对系统所做的所有概要设计进行详细的说明。
在下一阶段的详细设计中,程序设计员可参考此设计报告,在概要设计对机票预订系统所做的模块结构设计的基础上,对系统进行详细设计,在以后的软件测试以及软件维护阶段也可参考次说明书,以便于了解在概要设计过程中所完成的模块设计结构,或在修改时找出本阶段设计的不足或错误。
2.2 模块
3.2.1 模块组成
本程序由六大模块组成,分别是主函数模块,查找模块,输入信息模块,输出信息模块,订票模块,退票模块。
3.2.2 模块功能
主函数模块:本模块的主要功能是调用各子功能模块,实现系统功能。
查找模块功能:查找模块实现信息的查找,包括显示空座的数量,订座的信
息,航班起飞的时间等信息。
输入输出模块的功能:实现数据信息的录入与输出。
订票模块功能块实现用户订票的功能。
退票模块功能:实现用户的退票要求。
3.2.3模块的调用关系
(见4.3函数的调用关系)
2.3任务概述
2.3.1目标
实现飞机票的预定与退订等目标。
2.3.2 运行环境
计算机配置均在Pentium 133级别以上,客户程序应能够在Pentium
级别以上,Windows 98 以上环境下运行。
2.3.3条件与限制
由于此系统仅仅是一个小的课程设计,尚未配给漂亮的界面,技术
上也有限制。
2.4数据结构设计
typedef struct _flight {
int m_fltno;
struct DATE {
int m_year;
int m_month;
int m_day;
} m_Date;
struct TIME {
int m_hour;
int m_min;
} m_start;
char m_szTo[30];
char m_szPass[30];
int m_seatno;
bool you_wu;
char m_szName[20];
char m_szNumber[19];
} FLIGHT;
三、详细设计
3.1 数据类型
根据设计要求,我们知道设计中所以用到的数据记录有航班信息和客户信息,因此要定义相关的数据类型:
3.2 模块分析
(1)主函数模块
本模块的主要功能是调用各子功能模块,实现系统功能。
开头定义结构体,相关头文件及宏定义。
通过switch语句进入界面函数,进而调用各功能函数。
(2)查找模块
查询模块由四个函数构成,分别为:查询航班号函数
chaxunhangban(FLIGHT fltlist[]),查询已定座信息函数
chaxunyidingxinxi(PASSENGER* psglist),查空位信息函数
chakongweixinxi(FLIGHT fltlist[],PASSENGER* psglist),查空位个
数函数chakongweigeshu(FLIGHT fltlist[],PASSENGER* psglist),
查找模块各函数通过循环语句for语句while语句等主要语句和结构体
成员psg.m_fltno,定义指针p等来实现。
(3)输入输出模块
输入模块由函数shuruFlight(FLIGHT fltlist[])实现,输出模块主要由函数shuchuFlight(FLIGHT fltlist[])实现。
(4)订票模块
订票模块由函数Book(FLIGHT fltlist[],PASSENGER* psglist)实现,定义strcpy,getchar函数通过while循环语句和结构体成员
psg.m_fltno,psg.m_seatno,m_Date,psg.m_Date完成指定任务。
(5)退票模块
退票模块由函数tuipiao(FLIGHT fltlist[],PASSENGER* psglist)实现,定义指针PASSENGER *p,通过结构体,循环语句完成指定任务。
3、函数的调用关系
函数的调用关系图:
四、调试分析以及设计体会
1、测试数据
我们按要求输入整形数1,出现“请输入航班号0到5”的提示见下图:
然后按要求输入0,出现提示:请输入起飞时间,比如12:00
诸如此类按要求输入所测试的数据均正确,下面我们输入几组错误:
比如定票为0号票,在退票时输入1出现提示:座位是空的
再如输入航班信息,要求输入0到5的数,输入6结果如下:
数据测试无误。
2、调试分析
4.2.1清屏问题
如开始设计的程序每执行一个模块,输出结果都会留在界面上,为此加
入函数system("cls")后便得到了应有的清屏。
4.2.2 error C2143: syntax error : missing ';' before '}'这个错误虽然有
点低级,但却也是比较容易犯的一个错误,也不容忽视。
4.2.3error C2440: '=' : cannot convert from 'struct _iobuf *' to 'int' 4.2.4error C2065: 'fp' : undeclared identifier没有定义的使用系统不认识
那未定义的字符。
3、心得体会
之前没有做过程设计,所以在设计的过程中遇到很大的困难。
大一第二学期才开始学c语言,陈老师是位很负责的老师,教书育人很有
一套,但我的编程基础还是很薄弱,于是我查阅了一些资料。
比如在图
书馆借的王敬栋主编的《课程设计案例精编》,我获益匪浅。
此次编程
设计中,我采用自顶向下的设计方法。
即需求分析→总体设计→编码实
现→测试→维护。
首先要了解做什么,有什么想法(总体设计),怎么
做,做完后上机验证。
确定了各功能函数后,在确定所需的数据,在定
义数据类型。
分模块的设计。
与同学老师交流非常重要,可以说假如没有同学老师的帮助,我是很难完成这份课程设计任务的。
可见众人拾柴火焰高是没错的,团结
就是力量啊。
互帮互助,共同进步。
这里尤其要感谢做同一个课题的同
学何鹏,我深刻的体会到见贤思齐是多么重要的,深刻体会到基础是多
么重要。
编程时遇到错误是在所难免的,错误解决的过程是枯燥的。
必须根据系统提示的错误返回到原程序中,分析查找错误,进行订正,再运行
调试,直到解决。
问题得到解决的那一刻我是兴奋的,是自豪的,是对
c语言编程如此的感兴趣的。
嘿,C语言还是挺有趣的。
经过若干次与程序的“磨合”,我最终完成了设计。
实现了题目的相关要求,也对设计整体过程有了更深一层的认识,受益良多。
五、使用说明
1)从主菜单中选择需要的业务,如输入1出现按
要求输入0到4,如输入0,出现按要求输入便可。
出现以下界面:
最后输入y或n表明是否还要继续修改。
2)从主菜单中选择需要的业务,如输入2出现按要求输入0到4,如输入0,按要求输入,出现以下界面:
查询完毕,选择y或n表明是否还要继续查询航班信息。
3)从主菜单中选择需要的业务,如输入3出现按要求输入1或2,如输入1,出现以下界面:
选择y或n,表明是否要继续寻找航班。
4)从提示中选择需要的业务,如上步中选择了y则步骤同3),如选择n则出现以下界面:
选择n则退出以上菜单,选择y则出现选择a—b的提示,如选择a则为:
选择y将重复以上4)步骤,我们选择n,将出现4)步骤的第一个界面,选择n则退出服务菜单,我们选择y,出现以下界面:
选择y则重复以上步骤,我们选择n将退出服务菜单。
5)从主菜单中选择需要的服务,如输入4出现按要求输入0到4,如输入0,出现以下界面:
选择n则将退出此服务,我们选择y,出现
输入如:2010,07,02,出现
选择y则订票成功,选择n则不订票。
6)从主菜单中选择需要的业务,如选择5,按要求输入出现以下界面:
选择y则退票成功,选择n则不退票。
7)从主菜单中选择6则退出此系统。
六、附录
1、参考书目
1.谭浩强《C程序设计》(第三版).清华大学出版社,2009。
2.王敬栋《课程设计案例精编》中国水利水电出版社,2006 2、源程序清单(带注释)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 5
#define N 12
//////////////以上是乘客数据结构。
typedef struct _flight { /* 航班数据 */
int m_fltno; /* 航班号 o*/
struct DATE { /* 订票日期 */
int m_year;
int m_month;
int m_day;
} m_Date;
struct TIME {
int m_hour;
int m_min;
} m_start;/* 起飞时间 o*/
char m_szTo[30]; /* 到达港 o*/
char m_szPass[30]; /* 途经港 o*/
int m_seatno; /* 座位号 o*/
bool you_wu;/*座次订出与否的标记o*/
char m_szName[20]; /* 姓名 */
char m_szNumber[19]; /* 身份证号,考虑到字母的情况,故使用字符串 */ } FLIGHT;
///////////以上是结构体。
void ReadFlight(FLIGHT * fltlist)
{
FILE *fp;
if ((fp = fopen("fltlist.dat", "rb")) != NULL)
fread(fltlist, sizeof(FLIGHT), M*N, fp);
else
{
FLIGHT* p;
p=fltlist;
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
p->m_fltno=i;
p->m_seatno=j;
p->you_wu=0;
p++;
}
}
fp = fopen("fltlist.dat", "wb+");
fwrite(fltlist, sizeof(FLIGHT), M*N, fp);
}
fclose(fp);
}
void shuruFlight(FLIGHT * fltlist )
{getchar();
FLIGHT * p;
FLIGHT fltlist1;
FILE *fp;
int j;
char c='y';
while (c == 'y' || c == 'Y')
{printf("请输入航班号(0<=航班号<%d):",M);
int i;
scanf("%d",&i);
while (i>= M ||i < 0)
{ printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &i);
}
printf("请输入起飞时间,比如(12:00):");
scanf("%d:%d",&(fltlist1.m_start.m_hour),&(fltlist1.m_start.m_min ));
printf("请输入途经港,比如(tianjing):");
scanf("%s",fltlist1.m_szPass);
printf("请输入到达港,比如(shanghai):");
scanf("%s",fltlist1.m_szTo);
p=fltlist;
for(j=0;j<N;j++)
{
(p+i*N+j)->m_start.m_hour=fltlist1.m_start.m_hour;
(p+i*N+j)->m_start.m_min=fltlist1.m_start.m_min;
strcpy((p+i*N+j)->m_szPass,fltlist1.m_szPass);
strcpy((p+i*N+j)->m_szTo,fltlist1.m_szTo);
}
if(( fp=fopen("fltlist.dat", "wb"))==NULL)exit(0);
fwrite(fltlist, sizeof(FLIGHT), M*N, fp);
fclose(fp);
printf("修改成功,还要修改吗?(y/n)");
getchar();
scanf("%c",&c);
}
}
///////////////////////以上是输入航班函数。
void shuchuFlight(FLIGHT * fltlist )
{
getchar();
FLIGHT * p;
p=fltlist;
char c='y';
while (c == 'y' || c == 'Y')
{printf("请输入航班号(0<=航班号<%d):",M);
int i;
scanf("%d",&i);
while (i>= M ||i < 0)
{ printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &i);
}
printf("起飞时间:");
printf("%d:%d\n",(p+i*N)->m_start.m_hour,(p+i*N)->m_start.m_min);
printf("途经港:");
printf("%s\n",(p+i*N)->m_szPass);
printf("到达港:");
printf("%s\n",(p+i*N)->m_szTo);
printf("查询完毕,还要继续查询吗?(y/n)");
getchar();
scanf("%c",&c);
}
}
///////////////////////以上是输入航班函数。
void AddPassenger(FLIGHT * fltlist )
{FILE *fp;
if ((fp = fopen("fltlist.dat", "wb")) != NULL)
{ fwrite(fltlist, sizeof(FLIGHT), M*N, fp);
fclose(fp);
}
else
{ printf("打开文件失败!按任意键退出。
");
getchar();
exit(0);
}
}
void Book(FLIGHT * fltlist)
{char c='y';
FLIGHT * p;
p=fltlist;
while (c == 'y' || c == 'Y')
{ int i;
FLIGHT fltlist1;
printf("请输入航班号:(0<=航班号<%d)",M);
loop: scanf("%d", &fltlist1.m_fltno);
while (fltlist1.m_fltno >= M|| fltlist1.m_fltno < 0)
{printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &fltlist1.m_fltno);
}
for(i = 0; i <M; i++)
{
if((p+i*N)->m_fltno== fltlist1.m_fltno)
{printf("检测未订的座位...\n请稍等...\n");
int j;
i=(p+i*N)->m_fltno;
p=fltlist;
int w=0;
for(j=0;j<N;j++)
{
if((p+i*N+j)->you_wu==0)
{
printf("%d\t",j);
w++;
}
}
if(w==0)
{printf("座位已满!请重新输入航班号:");
goto loop;
}
printf("\n以上是座位号,要订票吗?(y/n)");
getchar();
scanf("%c",&c);
while (c == 'y' || c == 'Y')
{printf("\n请输入订票日期:(yyyy,mm,dd)");
scanf("%d,%d,%d",&fltlist1.m_Date.m_year,& fltlist1.m_Date.m_month,&fltlist1.m_Date.m_day);
printf("请输入乘客姓名:") ;
scanf("%s", fltlist1.m_szName);
printf("请输入身份证号:");
scanf("%s", fltlist1.m_szNumber);
printf("\n请输入订票座位号:(0<=座位号<%d)",N);
scanf("%d", &fltlist1.m_seatno);
for(;;)
{if(fltlist1.m_seatno<0||fltlist1.m_seatno>=N)
{printf("没有这个座位号!请重新输入:");
scanf("%d", &fltlist1.m_seatno);
}
else
if((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->you_wu==1)
{printf("这个座位有人了!请重新输入:");
scanf("%d", &fltlist1.m_seatno);
}
else break;
}
printf("确认订票吗?(y/n)");
getchar();
scanf("%c",&c);
while (c == 'y' || c == 'Y')
{
strcpy((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_szName,fltli st1.m_szName);
strcpy((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_szNumber,flt list1.m_szNumber);
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_Date.m_day=fltlist1 .m_Date.m_day;
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_Date.m_month=fltlis t1.m_Date.m_month;
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_Date.m_year=fltlist 1.m_Date.m_year;
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->you_wu=1;
p=fltlist;
AddPassenger(p);
printf("您的订票已成功。
\n");
c='n';
}
c='n';
}}}
printf("你还要继续订其它航班的票吗?(y/n)\n");
getchar();
scanf("%c",&c);
}
}
void chakongweigeshu(FLIGHT * fltlist)
{ char c='y';
FLIGHT * p;
p=fltlist;
while (c == 'y' || c == 'Y')
{
int i;
FLIGHT fltlist1;
printf("请输入航班号:(0<=航班号<%d)",M);
scanf("%d", &fltlist1.m_fltno);
while (fltlist1.m_fltno >= M|| fltlist1.m_fltno < 0)
{printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &fltlist1.m_fltno);
}
for(i = 0; i <M; i++)
{if((p+i*N)->m_fltno== fltlist1.m_fltno)
{printf("检测未订的座位...\n请稍等...\n");
int j;
i=(p+i*N)->m_fltno;
p=fltlist;
int w=0;
for(j=0;j<N;j++)
{
if((p+i*N+j)->you_wu==0)
{
w++;}
}
printf("还有%d个空位!",w);
if(w==0)
{
printf("座位已满!");
}
}
}
printf("你还要继续查询其它航班是否有空位呢?(y/n)\n");
getchar();
scanf("%c",&c);
}
}
void tuipiao(FLIGHT * fltlist)
{
char c='y';
char z;
FLIGHT * p;
p=fltlist;
FLIGHT fltlist1;
while (c == 'y' || c == 'Y')
{
int i;
printf("请输入航班号:(0<=航班号<%d)",M);
scanf("%d", &fltlist1.m_fltno);
while (fltlist1.m_fltno >= M|| fltlist1.m_fltno < 0)
{
printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &fltlist1.m_fltno);
}
for(i = 0; i <M; i++)
{
if((p+i*N)->m_fltno==fltlist1.m_fltno)
{
printf("\n请输入退票座位号:(0<=座位号<%d)",N);
scanf("%d", &fltlist1.m_seatno);
for(;;)
{
if(fltlist1.m_seatno<0||fltlist1.m_seatno>=N)
{
printf("没有这个座位号!");
printf("你还要继续查询吗?(y/n)");
getchar();
scanf("%c",&z);
if(z == 'y' || z == 'Y')
{
printf("请输入座位号:");
scanf("%d", &fltlist1.m_seatno);
}
else goto loop1;
}
else
if((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->you_wu==0)
{
printf("这个座位是空位!");
printf("你还要继续查询吗?(y/n)");
getchar();
scanf("%c",&z);
if(z == 'y' || z == 'Y')
{
printf("请输入座位号:");
scanf("%d", &fltlist1.m_seatno);
}
else goto loop1;
}
else break;
}
printf("以下是该乘客的信息:\n");
printf("航班号:%d",fltlist1.m_fltno);
printf("订票日期:");
printf("%d,%d,%d\n",
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_Date.m_year,
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_Date.m_month,(p+N*(fltl ist1.m_fltno)+fltlist1.m_seatno)->m_Date.m_day);
printf("起飞时间:%d:%d\n",(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_start.m_hou r,(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_start.m_min);
printf(“到达港:%s\n",(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_szTo);
printf("途径港:%s\n",(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_szPass);
printf("座位号:%d\n",(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_seatno);
printf("乘客姓名:") ;
printf("%s\n",
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_szName);
printf("身份证号:");
printf("%s\n",
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->m_szNumber);
printf("确认退票吗?(y/n)");
getchar();
scanf("%c",&c);
while (c == 'y' || c == 'Y')
{
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->you_wu=0;
p=fltlist;
AddPassenger(p);
printf("您的退票已成功。
\n");
c='n';
}
}
}
loop1:printf("你还要继续退票吗?(y/n)\n");
getchar();
scanf("%c",&c);
}
}char chaxunhangban(FLIGHT * fltlist)
{
char mn_szPass[30]; /* 途经港 */
char mn_szTo[30]; /* 到达港 */
FLIGHT * p;
p=fltlist;
int i;
int j=0;
int k;
char c='y';
while(c == 'y' || c == 'Y')
{
printf("请输入你的查询方式:\n1.按途经港.\n2.按目的地.\n3.直接按航班号查询.");
scanf("%d",&k);
switch(k)
{
case 1:
{
printf("请输入途经港:");
scanf("%s",mn_szPass);
for(i=0;i<M;i++)
{
if(strcmp((p+i*N)->m_szPass,mn_szPass)==0)
{
j++;
printf("查询的航班号为:%d!\n",i);
}
}
if(j==0)
{
printf("没有这趟航班!");
}
}
break;
case 2:
{
printf("请输入目的地:");
scanf("%s",mn_szTo);
for(i=0;i<M;i++)
{
if(strcmp((p+i*N)->m_szTo,mn_szTo)==0)
{
j++;
printf("查询的航班号为:%d!\n",i);
}
}
if(j==0)
{
printf("没有这趟航班!");
}
}
break;
case 3:
{
printf("你要查询本航班的以下信息吗?(y/n)\n");
goto loop;
}
default:
{
printf("没有这个选项!按回车键退出查询航班...");
getchar();
}
break;
}
printf("\n你是还要继续寻找航班吗?(y/n)");
getchar();
scanf("%c",&c);
}
printf("你还要寻找本航班更详细的信息吗?(具体如下:)\n");
loop: printf("\t\t\t\t a.显示空座的数量\n");
printf("\t\t\t\t b.显示空座的信息\n");
printf("\t\t\t\t c.显示已订座的信息\n");
printf("\t\t\t\t d.起飞时间\n");
printf("请选择(y/n):");
getchar();
scanf("%c",&c);
getchar();
return(c);
}
//////////////////////////以上是查询航班号函数.
void chakongweixinxi(FLIGHT * fltlist)
{
char c='y';
while (c == 'y' || c == 'Y')
{
int i;
FLIGHT fltlist1;
FLIGHT * p;
p=fltlist;
printf("请输入航班号:(0<=航班号<%d)",M);
loop: scanf("%d", &fltlist1.m_fltno);
while (fltlist1.m_fltno >= M || fltlist1.m_fltno < 0) {
printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &fltlist1.m_fltno);
}
for(i = 0; i <M; i++)
{
if((p+i*N)->m_fltno== fltlist1.m_fltno)
{
printf("检测未订的座位。
\n请稍等。
\n");
int j;
i=(p+i*N)->m_fltno;
int w=0;
for(j=0;j<N;j++)
{
if((p+i*N+j)->you_wu==0)
{
printf("%d号座位是空的!\t\t",j);
w++;
}
}
if(w==0)
{
printf("座位已满!请重新输入航班号:");
goto loop;
}
}
}
printf("\n你还要继续查询其它航班空位信息吗?(y/n)\n");
getchar();
scanf("%c",&c);
}
}
/////////////////////////////////////////////以上是查空位信息函数。
void chaxunyidingxinxi(FLIGHT * fltlist)
{
char c='y';
while (c == 'y' || c == 'Y')
{
int i,j;
FLIGHT * p;
p=fltlist;
printf("请输入航班号:(0<=航班号<%d)",M);
scanf("%d", &i);
while (i>= M || i < 0)
{
printf("航班不存在,");
goto loop;
}
printf("请输入座位号:");
getchar();
scanf("%d",&j);
while (j>= N || j< 0)
{
printf("座位不存在,");
goto loop;
}
if((p+i*N+j)->you_wu==0)
{
printf("%d号座位是空的!\n",j);
}
else
{
printf("\n以下是该乘客的信息:\n");
printf("航班号:%d\n",(p+i*N+j)->m_fltno);
printf("起飞时间:%d:%d\n",(p+i*N+j)->m_start.m_hour,(p+i*N+j)->m_start.m_min);
printf("到达港:%s\n",(p+i*N+j)->m_szTo);
printf("途径港:%s\n",(p+i*N+j)->m_szPass);
printf("座位号:%d\n",(p+i*N+j)->m_seatno);
printf("订票日期:");
printf("%d,%d,%d\n", ((p+i*N+j)->m_Date).m_year, ((p+i*N+j)->m_Date).m_month,((p+i*N+j)->m_Date).m_day);
printf("乘客姓名:") ;
printf("%s\n", (p+i*N+j)->m_szName);
printf("身份证号:");
printf("%s\n", (p+i*N+j)->m_szNumber);}
loop:printf("\n你还要继续查询吗?(y/n)");
getchar();
scanf("%c",&c);
}
}
///////////////////////以上是查询已定座信息函数。
void qifeishijian(FLIGHT * fltlist)
{getchar();
FLIGHT * p;
p=fltlist;
char c='y';
while (c == 'y' || c == 'Y')
{printf("请输入航班号:(0<=航班号<%d)",M);
int i;
scanf("%d",&i);
while (i>= M ||i < 0)
{ printf("航班不存在,");
printf("请重新输入:");
scanf("%d", &i);
}
printf("起飞时间:");
printf("%d:%d\n",((p+i*N)->m_start.m_hour),((p+i*N)->m_start.m_min)); printf("查询完毕,你还要查询起飞时间吗?(y/n)");
getchar();
scanf("%c",&c);
}
}
////////////////////////以上是查起飞时间函数。
void main(void)
{
FLIGHT fltlist[M][N];
FLIGHT* k;
k=(FLIGHT*) fltlist;
ReadFlight(k);
for (;;)
{
char c;
printf("\t\t\t\t飞机订票系统\n");
printf("-----------------------------------主菜单--------------------------------------\n");
printf("\t\t\t\t1.输入航班信息\n");
printf("\t\t\t\t2.输出航班信息\n");
printf("\t\t\t\t3.查找航班信息\n");
printf("\t\t\t\t a.显示空座的数量\n");
printf("\t\t\t\t b.显示空座的信息\n");
printf("\t\t\t\t c.显示已订座的信息\n");
printf("\t\t\t\t d.起飞时间\n");
printf("\t\t\t\t4.订票预约\n");
printf("\t\t\t\t5.删除定票预约\n");
printf("\t\t\t\t6.退出系统\n");
printf("-------------------------------------------------------------------------------\n");
printf("请选择1-6:");
char m;
c = getchar();
switch (c)
{
case '1':
{
shuruFlight(k);
system("cls");
getchar();
}
break;
case '2':
{
shuchuFlight(k);
system("cls");
getchar();
}
break;
case '3':
{ if(chaxunhangban(k)== 'y')
{printf("\n请选择a-d:");
scanf("%c",&m);
c='y';
while(c == 'y' || c == 'Y')
{
switch(m)
{case 'a':
{ chakongweigeshu(k);
}
break;
case 'b':
{
chakongweixinxi(k);
}
break;
case 'c':
{
chaxunyidingxinxi(k);
}
break;
case 'd':
{
qifeishijian(k);
}
break;
default:
printf("没有这个选项!\n按回车键继续其它操作...");
getchar();
getchar();
break;
}
printf("你还要查询本航班其他信息吗?(具体如下:)\n"); printf("\t\t\t\t a.显示空座的数量\n");
printf("\t\t\t\t b.显示空座的信息\n");
printf("\t\t\t\t c.显示已订座的信息\n");
printf("\t\t\t\t d.起飞时间\n");
printf("请选择(y/n):");
getchar();
scanf("%c",&c);
if(c == 'y' || c == 'Y')
{
printf("\n请选择a-d:");
getchar();
scanf("%c",&m);
}
else
{
system("cls");
getchar();
break;
}}}
else system("cls");
}
break;
case '4':
{k=(FLIGHT*) fltlist;
Book(k);
system("cls");
getchar();
}
break;
case '5':
{
k=(FLIGHT*) fltlist;
tuipiao(k);
system("cls");
getchar();
}
break;
case '6':
break;
default:
printf("没有这个选项!\n按回车键回主菜单...");
getchar();
system("cls");
continue;
}
if (c == '6')
break;} }
六、计算机科学与技术系课程设计评分表
课题名称:飞机票订购系统
教师签名:
日期:
(注:1.此页附在课程设计报告最后一页;2.综合成绩按优、良、中、及格和不及格五级评定。
)。