航空订票系统
任务:通过此系统可以实现如下功能:
1)、录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
2)、查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
3)、订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4)、退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号(不能重复)。
5)、修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计。请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
本系统的主要的功能包括:
1、航班信息录入功能(航班信息用文件保存)
包括航班号、起始站、终点站、机票数等;
2、航班信息浏览功能;
3、按航班号排序;
4、查询航线:按航班号查询;
5、订票和退票业务 。
功能模块图如下图2-1所示:
航空订票系统 |
录入航班信息 |
以链表形式存储航班信息 |
修改航班信息 |
查询航班信息 |
办理定票业务 |
办理退票业务 |
#TODO
图2-1 功能模块图
航班的基本信息,对它们输入后,要存进原文件再用户输入完成后,程序会询问是否继续输入,这个功能更具人性化,可以省去返回到主函数在进入这个函数的麻烦。
单用户输入航班信息后该功能自动存储航班信息,以备用户查询调用。
当用户需要修改航班信息时,可以选择需要修改的航班号,然后再重新输入航班的详细信息。
基本信息的查询按查询可供选择的方式比较丰富,可按航班号查询,也可以按出发地降落地查询。
在该功能模块中输入需要订票的航班。然后在输入乘客的各种信息,比如:姓名,证件号,订票数,航班号等。并且该功能可以自动给定好的票标识订单号。
在该功能中,程序代码原理和订票系统相类似,退票时要求客户输入姓名,证件号以及航班号。当客户信息的票存在时则显示退票成功,否则则显示“该顾客信息不存在,单击任意键退出”。
当用户希望结束程序时,只需要返回操作界面选择该功能即可退出程序。
要求系统界面美观﹑易于操作和升级,能够承受大规模的数据库操作,执行效率高,尽可能降低内存消耗。
C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
系统流程图(System Flowchart)是描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等),表达信息在各个部件之间流动的情况。
输入航班信息,程序自动存储信息,并且会弹出是否需要继续输入航班,是按Y继续输入,否则按任意键返回主菜单。如图4-1所示。
主菜单 |
是否为Y |
输入航班信息 |
存储航班信息 |
输入选择 |
#TODO
图 4-1
在主页面选择修改航班信息,选择航班号,错误时显示航班不存在,正确则输入新的航班信息,并且系统提示修改成功。如图4-2所示。
主菜单 |
输入航班信息 |
存储航班信息 |
是否有该航班 |
没有该航班 |
修改成功 |
输入航班号 |
#TODO
图 4-2
从主界面选择进入该模块,会有俩种查询方式,分别为航班号查询方式及起始地查询方式,选择一种查询,若无相应的航班信息则弹出无该航班,否则弹出该航班详细信息。如图4-3所示。
主菜单 |
请输入选择 |
输入数是? |
按地址查询 |
输入航班号 |
输入起始地 |
输出航班信息 |
按航班号查询 |
#TODO
图 4-3
从主界面进入订票模块,输入客户信息姓名,证件号,订票数然后再输入航班号,如果该航班不存在则会显示是否继续订票,输入Y则可继续订票,并输入客户信息;输入其他字符则返回主菜单界面。如图4-4所示。
主菜单 |
输入客户信息及航班号 |
航班存在? |
成功订票 |
航班不存在 |
是否继续 |
输入选择 |
是否为Y? |
输入客户信息及航班号 |
#TODO
图 4 -4
进入该退票模块,输入客户信息,系统分析有无该信息,若有,则弹出退票成功;如果无该信息怎显示“该客户信息不存在”,回到主菜单。如图4-5所示。
主菜单 |
姓名 |
存在该信息? |
证件号 |
订单号 |
不存在 |
退票成功 |
#TODO
图4-5
void dingpiao() //订票
{
long length=0;
p_inf * head_p=NULL;
c_inf *p, *p1, *head_c;
char choice;
FILE * fp; // fp是顾客信息文件指针
head_p=read_p(); //读取航班信息文件并初始化链表
if(head_p==NULL)
{
return;
}
head_c=read_c(); //读取顾客信息文件并初始化链表
p1=head_c;
if((fp=fopen("d:\\customer.dat","ab"))==NULL) /*打开顾客信息文件*/
{
fp=fopen("d:\\customer.dat","wb");
}
else
{
if(p1!=NULL)
{
while(p1!=NULL) //找出最后一个结点
{
p1=p1->next;
length++;
}
}
}
do
{
printf("请输入订票者信息,各项内容之间以空格键分开\n\n");
printf("姓名,证件号,数量,航班号\n");
p=(c_inf *)malloc(sizeof(c_inf));
fflush(stdin); //清除系统缓冲区
scanf("%s%d%d%d",CS);
p->numb_ord=length+1;
if(xg_hb(p->numb_p,p->amount_t,head_p))//实现对航班信息链表的修改
{
length++;
printf("**************************************************************");
printf("提示:您已成功订票\n订单号是:%d",p->numb_ord);
printf("\n************************************************************");
fwrite(p,sizeof(c_inf),1,fp);
}
else
{
free(p);
}
printf("\n继续订票请输入Y,否则返回上一级菜单\n");
fflush(stdin);
choice=getch();
}while(choice=='Y');
fclose(fp);
write_p(head_p); //将修改后的航班信息链表写入到航班信息文件中
free_p(head_p);
free_c(head_c);
}
void tuipiao() //退票
{
char name[20];
int numb_ord, numb_id;
p_inf *head_p, *p_p;
c_inf *head_c, *p_c, *p1_c=NULL;
head_p=read_p();
head_c=read_c();
p_p=head_p;
p_c=head_c;
if(p_c==NULL)
{
printf("单击任意键退出");
getch();
return;
}
printf("请输入客户姓名:\n");
scanf("%s",name);
printf("请输入证件号:\n");
scanf("%d",&numb_id);
printf("请输入订单号:\n");
scanf("%d",&numb_ord);
while(p_c!=NULL)
{
if(strcmp(name, p_c->name)==0&&numb_ord==p_c->numb_ord&&p_c->numb_id
==numb_id)
{
break;
}
p1_c=p_c;
p_c=p_c->next;
}
if(p_c==NULL)
{
printf("该顾客信息不存在,单击任意键退出");
getch();
}
else // 将链表信息重新写到文件中
{
while(p_p!=NULL)
{
if(p_p->number==p_c->numb_p)
{
break;
}
p_p=p_p->next;
}
write_p(head_p);
write_c(head_c);
printf("退票成功,单击任意键退出");
getch();
}
free_p(head_p);
free_c(head_c);
//system("cls");
}
#TODO
#TODO
在该实验中输入的航班信息为:
航班号 起飞时间 抵达时间 始发地 目的地 票价 折扣 座位总数 剩余票数
1234 12:30 14:25 枫林 广兰 1200 3 120 34
修改后的航班信息如下:
航班号 起飞时间 抵达时间 始发地 目的地 票价 折扣 座位总数 剩余票数
1234 09:20 12:20 枫林 广兰 1200 3 120 34
在本实验中选择的是航班号查询航班信息,查询的航班号是:1234
#TODO
#TODO
在试验中输入的客户信息是:
姓名 证件号 票数 航班号
cga 342427199811132354 1 1234
#TODO
在实验中输入的信息为:
姓名 证件号 订单号
cga 342427199811132354 3
在近半个月的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题。经过这次实习,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。