航空客运订票系统.docx
《航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统.docx(13页珍藏版)》请在冰点文库上搜索。
航空客运订票系统
课程设计报告
课程名称数据结构
课题名称航空客运订票系统
专业通信工程
班级
学号
姓名
指导教师
2013年6月29日
湖南工程学院
课程设计任务书
课程名称数据结构
课题航空客运订票系统
专业班级
学生姓名
学号
指导老师张鏖烽田娟秀李杰君
审批
任务书下达日期2013年6月23日
任务完成日期2013年6月29日
1.需求分析................................................................1
2.概要设计................................................................1
定义“航线”类型...................................................2
主函数.............................................................2
调用关系...........................................................3
3.详细设计................................................................3
航线与客户的存储结构...............................................3
各个系统模块.......................................................3
算法设计...........................................................4
主函数功能.........................................................6
整个系统的流程图...................................................7
存储结构设计.......................................................7
4.调试分析................................................................7
5.用户使用说明............................................................8
6.测试结果...............................................................10
7.心得体会...............................................................12
8.附录...................................................................13
课题名称航空客运订票系统
1.需求分析
航空客运订票的业务活动包括:
查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【基本要求】
(1)每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);
(2)系统能实现的操作和功能如下:
①录入:
可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中;
②查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
③承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;
④承办退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
初始化航班信息如下:
通过输入0~5这六个数字选择相应的操作,如:
查询航班,订票,退票等操作;
2.概要设计
两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。
由于预约人数无法预计,队列也应以链表作存储结构。
整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。
注:
由于“航线”可只用一条单链表记录,故采用全局变量,减少参数的传递。
定义“航线”类型
ADTLairline{
数据对象:
D={ai|ai∈航线链表集,i=1,2,3……,n,n>=0}
数据关系:
R1={|ai-1,ai∈D,i=1,2,3……,n}
基本操作:
Lairlinesearch_line()照航班查找
Lairlinesearch_line()
{
chara[10];airline*p;p=L->next;
P("Pleaseinputthenumberofline:
");S("%s",a);
for(;p;p=p->next)
if(!
strcmp(a,p->line_num))break;
returnp;
}
注:
通过建立节点p实现链表的遍历,利用for循环挨个查找,直到找到为止,再返回找到的这个节点,实现传递。
2.订票系统
voidbook()
{inti;intflag=0;airline*p;customer*cst,*c;
P("Pleasechoosethewayofviewing:
\n");始化航线
voidInitLine()班查询
voidsearch()
{inti;intflag=0;airline*p;
P("Pleaseinputthewayofviewingtheflight:
\n");
P("Thenumberoftheflight------------>1\n");
照飞机型号查找
{
chara[10];airline*p;p=L->next;
P("Pleaseinputthenumberofplane:
");
S("%s",a);
for(;p;p=p->next)
if(!
strcmp(a,p->plane_num))break;
returnp;
}
Lairlinesearch_date()照日期查询航班
{
inta;airline*p;p=L->next;P("Pleaseinputthedateofplane:
");
S("%d",&a);航班终点查找航班
{chara[20];airline*p;p=L->next;
P("Pleaseinputthefinaladdressoftheplane:
");S("%s",a);
for(;p;p=p->next)
if(!
strcmp(a,p->ter_address))break;
returnp;
}
/******************主界面******************/
voidboundary()
{
P("***********欢迎您进入航空订票客服系统***********\n");
P("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
P("O(∩_∩)O请选择您要进行的业务:
\n");
P("\t\t显示所有航线==>请输入1\n");
P("\t\t查询航线信息==>请输入2\n");
P("\t\t进入订票系统==>请输入3\n");
P("\t\t进入退票系统==>请输入4\n");
P("\t\t退出客服系统==>请输入0\n");
P("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
P("\t\t清除屏幕信息==>请输入5\n");
P("请按照以上的信息提示进行操作:
\t");
}
/*********显示乘客信息*****************/
voidprint_customer(airline*p)
{
customer*c;
if(p->booked)
{c=p->booked;
P("已经购票的乘客的信息\n\t票数\t姓名\t\n");
for(;c;c=c->next)
P("%5d\t\t%s\n",c->num,c->name);P("\n\n");
}
elseP("╮(╯_╰)╭暂时没有客户订票!
\n\n");
if(p->wait)
{
c=p->wait;
P("排队购票的乘客的信息\n\t票数\t姓名\t\n\n");
for(;c;c=c->next)
P("%5d\t\t%s\n",c->num,c->name);
P("\n\n");
}
else
P("暂时没有客户排队订票\n\n");
}
/*********插入新航班(创建链表)*****************/
voidinsert_line()
{airline*p,*q;intflag=1;
for(;flag;)
{
q=(Lairline)malloc(sizeof(airline));
P("Pleaseinputthenumberoftheplane:
");
S("%s",q->line_num);
for(p=L;p->next;p=p->next)
if(strcmp(p->next->line_num,q->line_num)>=0)break;
if(p->next&&strcmp(p->next->line_num,q->line_num)==0)
{
P("航班已存在,请重新输入\n");
continue;,q->next->name,q->next->num);
P("Doyouwanttobookthetickets?
YES
(1)NO(0)");S("%d",&flag);
if(flag)//如果选择订票
{q0=q->next;q->next=q->next->next;//插入q0节点
q0->next=p->booked;p->booked=q0;
p->remain=p->remain-q0->num;//q0定完票后,余票进行修改
P("SUCCESS!
!
!
O(∩_∩)O\n\n\n");
}
elseq=q->next;//没有选择订票}
elseq=q->next;//余票不足时
}p->wait=h->next;
}
/***********************退票系统*****************************/
voidRefund()
{
intflag;
chara[20];
airline*p;
customer*c,*c1;
p=search_line();//查找到对应的航班
c=p->booked;//已经订票的客户为c
if(!
p)
{
P("Theairlineisnotexist!
!
!
\n\n");
boundary();//返回主界面
return;
}
P("Pleaseinputyourname:
");
S("%s",a);
if(!
p->booked->name)//如果未找到这个人的信息
{
P("Sorry!
Yourinformationisn'tfound!
╮(╯_╰)╭\n");
boundary();//返回主界面
return;
}
if(!
strcmp(a,p->booked->name))//
{
P("Theinformationofreturningtickets:
\n");//退票信息
P("Name:
%s\tFinalAddress:
%s\tTickets:
%d\t\n",p->booked->name,p->ter_address,p->booked->num);
P("Doyouwanttoreturnthetickets?
YES
(1)NO(0)\n");//是否退票
S("%d",&flag);
if(flag)//如果退票
{
p->booked=p->booked->next;//删除节点操作
p->remain=p->remain+c->num;//余票数目增加
free(c);
P("SUCCESS!
O(∩_∩)O\n\n\n\n\n");//退票成功
waited(p);//再次询问是否排队订票
boundary();//返回主菜单
}}
else
{for(;c->next;c=c->next)
if(!
strcmp(a,c->next->name))//查找这个订票人的信息
break;
if(!
c->next)//没有找到这个人的信息
{P("Sorry!
Can'tfindyourinformation!
\n\n");
boundary();return;
}
else//找到了此人的订票信息
{P("Theinformationofreturningtickets:
\n");
P("Name:
%s\tFinalAddress:
%s\tTickets:
%d\t\n",p->booked->name,p->ter_address,p->booked->num);
P("Doyouwanttoreturnthetickets?
YES
(1)NO(0)\n");//是否退票
S("%d",&flag);
if(flag)//确定退票
{c1=c->next;
c->next=c->next->next;//删除节点
p->remain=p->remain+c1->num;//余票数目增加
free(c1);
P("Theoperationissuccessful!
!
!
O(∩_∩)O\n\n");
waited(p);
boundary();
}}}}
/***************航班查询系统*****************************/
voidsearch()
{inti;intflag=0;airline*p;
P("Pleaseinputthewayofviewingtheflight:
\n");//请输入查询航班的方式
P("Thenumberoftheflight------------>1\n");//航班号
P("Thenumberoftheplane------------->2\n");//飞机号码
P("Thedateoftheflight-------------->3\n");//航班日期
P("Thefinaladdressoftheflight----->4\n");//航班终点
S("%d",&i);for(;!
flag;)
switch(i)//按照选择项进行操作
{case1:
p=search_line();flag=1;break;
case2:
p=search_plane();flag=1;break;
case3:
p=search_date();flag=1;break;
case4:
p=search_address();flag-=1;break;
default:
P("Wrong,inputagain!
\n");break;}
if(p)
{P("终点站航班号飞机号飞行周日余票量\n");
P("%-9s%9s%13s%10d%15d\n",p->ter_address,p->line_num,p->plane_num,p->date,p->remain);
P("Bookingthetickets?
(Sure,pleaseinput1;Elseinputanynumber!
)");
S("%d",&i);
if(i==1)book();
ElseP("\n\n\n\n");boundary();}
ElseP("Theflightisnotexist!
!
!
╮(╯_╰)╭\n\n\n");}
/********************显示所有航班信息***************************/
voidprintline()
{intflag;airline*p;p=L->next;
P("终点站航班号飞机号飞行周日余票量\n");
for(;p;p=p->next)
{P("%-15s%7s%15s%8d%12d\n",p->ter_address,p->line_num,p->plane_num,p->date,p->remain);}P("\n\n\n\n\n");boundary();}
/*********************初始化航线信息****************************/
voidInitLine()
{airline*p,*q;
L=(airline*)malloc(sizeof(airline));L->booked=NULL;//初始化航线信息
L->wait=NULL;L->next=NULL;strcpy(L->ter_address,"00000000");
strcpy(L->line_num,"000");strcpy(L->plane_num,"0000000");
L->date=L->remain=L->total=0;q=L;
p=(airline*)malloc(sizeof(airline));//航线一
p->booked=NULL;p->wait=NULL;
strcpy(p->ter_address,"jiangsu");strcpy(p->line_num,"003");strcpy(p->plane_num,"3333333");
p->date=1;p->remain=120;p->total=120;p->next=q->next;q->next=p;
p=(airline*)malloc(sizeof(airline));//航线二
p->booked=NULL;p->wait=NULL;strcpy(p->ter_address,"shanghai");
strcpy(p->line_num,"002");strcpy(p->plane_num,"2222222");
p->date=2;p->remain=120;p->total=120;p->next=q->next;q->next=p;
p=(airline*)malloc(sizeof(airline));//航线三
p->booked=NULL;p->wait=NULL;strcpy(p->ter_address,"hunan");
strcpy(p->line_num,"001");strcpy(p->plane_num,"1111111");
p->date=3;p->remain=120;p->total=120;p->next=q->next;q->next=p;}
voidmain()
{intflag=1;boundary();InitLine();
do{switch(getchar())
{case'1':
printline();break;
case'2':
search();break;
case'3':
book();break;
case'4':
Refund();break;
case'5':
system("cls");boundary();break;
case'0':
flag=0;break;
}}while(flag);}
课程设计评分表
课程名称:
数据结构
项目
评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期: