数据结构课程设计航空客运订票系统可编辑修改word版.docx
- 文档编号:23763525
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:31
- 大小:115.53KB
数据结构课程设计航空客运订票系统可编辑修改word版.docx
《数据结构课程设计航空客运订票系统可编辑修改word版.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航空客运订票系统可编辑修改word版.docx(31页珍藏版)》请在冰豆网上搜索。
数据结构课程设计航空客运订票系统可编辑修改word版
成绩评定
教师签名
嘉应学院计算机学院
实验报告
课程名称:
数据结构课程设计
开课学期:
2017-2018学年第2学期
班级:
1503
指导老师:
钟治初
实验题目:
航空客运订票系统
学号:
姓名:
上机时间:
1.需求分析
(1)航空管理。
每条航班所涉及的信息有:
终点站名、航班号、飞机型号、飞行周日(星期几)
、乘员定额、余票量。
(2)客户管理。
有关订票的客户信息(包括姓名、订票量、航位等级(1,2和3))以及等候替补的客户名单(包括姓名、所需票量)。
(3)系统实现的主要操作和功能。
系统实现的主要操作和功能如下:
①查询航班。
根据旅客提出的终点站名输入下列信息:
航班号、飞机型号、飞机日期、余票额。
②承办订票业务。
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队后补。
③承办退票业务。
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先查询排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则询问其他排队候补的客户。
2.概要设计
1)本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面
2)存储结构设计
本系统主要采用链表结构类型存储航班信息和订票的乘客信息。
航班信息链表结点由10
个分量构成,乘客信息链表由5个分量构成。
3)系统功能设计
本系统分为以下5个功能模块。
(1)航班管理。
航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航班。
(2)订票办理。
在添加了航班的基础上可办理订票业务。
乘客根据所需航班输入终点站名和订票量订票。
如果订票量超过余票量,则会提示是否成为候补乘客;如果订票成功,则会要求输入订票乘客的姓名及所订票的舱位等级。
(3)退票办理。
已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。
、(4)乘客管理。
可以查看已经订票的乘客信息和候补乘客的信息。
(5)退出系统。
退出整个航空客运订票系统。
3.模块设计
1)模块设计
本程序包括主程序模块、菜单选择模块和队列操作模块。
主程序模块->菜单选择模块->队列操作模块
2)系统子程序及功能设计
本系统共设置14个函数,其中包括主函数。
个函数名及功能说明如下。
(1)charContinue()//询问是否继续的函数
(2)voidErrorMess()//操作出错函数
(3-1)intFind_Line1()//航班核对函数
(3-2)intFind_Line2()//按航班号查询函数
(4)voidLine_search()//按目录地查询航班函数
(5)voidLine_Add()//航班添加函数
(6)intEmpty_Flight()//航班是否为空函数
(7)intLine_See()//航班查看函数
(8)voidLinemanageMenu()//航班管理菜单
(9)voidbookingMenu()//订票办理函数
(10)voidDisplay_Reserve()//订票乘客信息
(11)voidDisplay_Replace()//候补乘客信息
(12)voidRefundticketMenu()//退票办理函数
(13)voidCustomermagMenu()//乘客管理子菜单函数
(14)voidmain()//主程序画面函数
4.详细设计
1)数据类型定义
(1)乘客信息的结构体定义
(2)航班信息的结构体定义
(3)全局变量定义
2)系统主要子程序详细设计
(1)主程序模块设计
主函数。
设定用户操作界面以及界面的颜色和大小,调用菜单子模块函数。
(2)航班管理模块子菜单界面函数
(3)航班管理的主要工作函数
(4)订票办理函数,用于办理订票业务
5.测试分析
1)航班管理菜单
在主菜单下,用户输入1并按下回车键,运行。
该子模块可以实现添加新航班,按终点站名查找航班的信息,浏览查看所有航班信息这三项航班管理操作。
2)订票业务办理
在进行了航班添加之后,即航班不为空时,在主菜单下输入2并回车办理订票业务,在界面提示下输入订票的相关航班信息和订票客户信息。
运行。
如果需要订票数超过余票量,则可选择等待成为候补乘客或选择放弃订票。
3)退票业务办理
办理订票业务之后,可以办理对应的退票业务。
在主菜单下输入3并按下回车键办理订票业务,在界面提示下输入匹配的退票航班信息和订票客户姓名即可退票成功,运行。
4)乘客管理子菜单
办理了订票业务之后,系统可以管理办理了订票业务的乘客信息。
在主菜单下输入4并按下回车键进入乘客管理菜单界面,运行。
在此子功能模块下可以进行查看订票和候补乘客的信息。
6.退出
在主菜单下输入5并按下回车键,即退出“航空客运订票系统”。
完整代码如下:
#include
/*runthisprogramusingtheconsolepauseroraddyourowngetch,system("pause")orinputloop*/
typedefstructCustomer
{
charName[8];
intAmount;
charRank;
intIDinfor;
structCustomer*Next;
}Customer;
typedefstructFlight
{
charDes_Name[10];
charFlight_No[6];
charPlane_No[6];
intWeek_Day;
intCustomer_Amount;
intFree_Amount;
intPrice[3];
Customer*CustName;
Customer*ReplName;
structFlight*Next;
}Flight,*PFlight;
//全局变量
intCustomer_Count=0;Flight*Head=NULL;Flight*p2;
Customer*Custp1[MAX];Customer*Replp1[MAX];intIsEmpty=1;
intIsReplace=1;Customer*prior;intshouldsave=0;
//1.询问是否继续的函数
//3-2.按航班号查询函数
intFind_Line2(PFlightL,char*key,PFlight*pp,int*Flight_No)
{
intflag=0;
Flight*p1;
p1=L;
while(p1!
=NULL)
{
if(strcmp(p1->Flight_No,key)==0)
{
flag=1;
*pp=p1;
break;
}
p1=p1->Next;
if(p1!
=NULL)Flight_No++;
}
returnflag;
}
//4.按目录地查询航班函数
voidLine_search()
{
charDesname[50];
Flight*p1=Head;
if(Head==NULL)
{
printf("\n\t没有到达您想要的终点站的航班!
");getch();
return;
}
printf("\n\t请输入终点站名:
");
scanf("%s",Desname);
printf("\n\t您所查询的航班的信息:
\n");
printf("\n\n");
while(p1!
=NULL)
{
if(strcmp(p1->Des_Name,Desname)==0)
{
printf("目的地航班号飞机型号星期座位号头等舱价格普通舱价格经
济舱价格\n");
printf("\n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d",p1->Des_Name,
p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,
p1->Price[0],p1->Price[1],p1->Price[2]);
}
p1=p1->Next;
//5.航班添加函数
voidLine_Add()
{
PFlightp,*p1;
p1=&Head;
while
(1)
{
if(Head==NULL)
{
*p1=(PFlight)malloc(sizeof(Flight));
(*p1)->Next=NULL;
p2=Head;
}
else
{
p1=&p;
*p1=(PFlight)malloc(sizeof(Flight));
p2->Next=*p1;
p2=*p1;
}
printf("\n\t添加新的航班!
\n");
printf("\n\t请输入终点站名:
");
scanf("%s",&p2->Des_Name);
while
(1)
{
printf("\n\t请输入唯一的航班号:
");
scanf("%s",&p2->Flight_No);
if(Find_Line1(Head,p2->Flight_No))
printf("\n\t航班号已经存在!
\n");
elsebreak;
}
printf("\n\t请输入航班号:
");
scanf("%s",&p2->Plane_No);
while
(1)
{
printf("\n\t请输入航班日期(请输入1-7):
");
scanf("%d",&p2->Week_Day);
if(p2->Week_Day<1||p2->Week_Day>7)
printf("\n\t输入日期有误,请重新输入!
\n");
elsebreak;
}
printf("\n\t请输入座位数量:
");
scanf("%d",&p2->Customer_Amount);
printf("\n\t请输入头等舱的价钱:
");
scanf("%d",&p2->Price[0]);
printf("\n\t请输入二等舱的价钱:
");
scanf("%d",&p2->Price[1]);
printf("\n\t请输入三等舱的价钱:
");
scanf("%d",&p2->Price[2]);
p2->Free_Amount=p2->Customer_Amount;
p2->CustName=NULL;
p2->ReplName=NULL;
shouldsave=1;
if(Continue()=='n')
{
p2->Next=NULL;
return;
}
}
}
//6.判断航班是否为空函数
intEmpty_Flight()
{
if(Head==NULL)
{
system("cls");
printf("\n\t对不起,航班不存在,按任意键返回!
");getch();
return1;
}
elsereturn0;
}
//7.航班查看函数
intLine_See()
{
Flight*p1;
system("cls");
p1=Head;
if(Empty_Flight())return0;
printf("\n\n\t航班信息:
\n");
printf("\n\n");
printf("目的地航班号飞机型号星期座位数头等舱价格普通舱价格经济舱价格
\n");
while(p1!
=NULL)
{
printf("\n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d",p1->Des_Name,
p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,
p1->Price[0],p1->Price[1],p1->Price[2]);p1=p1->Next;
printf("\n\n");
}
printf("\n\t按任意键返回!
\n");getch();
}
//8.航班管理菜单
voidLinemanageMenu()
{
charc;
system("cls");
while
(1)
{
printf("\n\t\t航班管理菜单:
\n");
printf("\n\n");
printf("\t1.添加新的航班\n");
printf("\t2.查询航班\n");
printf("\t3.查看航班\n");
printf("\t4.返回主菜单\n");
printf("\n\n\
n");
printf("\t请选择您想要的服务:
");
scanf("%s",&c);
switch(c)
{
case'1':
Line_Add();break;
case'2':
Line_search();break;
case'3':
Line_See();break;
case'4':
return;
default:
ErrorMess();
}
}
}
//9.订票办理函数
voidbookingMenu()
{
intTicket_Count,IDinfor,i,flag=0;
intFlight_No=0;
Flight*p1;
Customer*c1;
Customer*c2;
charanswer[7];
chartemp,c;
inttag=0;
intIsRepl=0;
if(Empty_Flight())return;
while
(1)
{
printf("\n\t现在您可以订票!
");
flag=0;
tag=0;
printf("\n\t请输入航班号:
");
scanf("%s",&answer);
if(Find_Line2(Head,answer,&p1,&Flight_No))
{
while
(1)
{
printf("\n\t请输入您想要订购的数量:
");
scanf("%d",&Ticket_Count);
if(Ticket_Count==0)
{
printf("\n\t请再次输入飞机型号:
\n");
getch();
}
elsebreak;
}
if(p1->Free_Amount>=Ticket_Count)
{
Customer_Count++;
flag=1;
IsRepl=1;
if(p1->CustName==NULL)
{
Custp1[Flight_No]=c1=(Customer*)malloc(sizeof(Customer));
p1->CustName=Custp1[Flight_No];
}
else
{
c1=(Customer*)malloc(sizeof(Customer));Custp1[Flight_No]->Next=c1;Custp1[Flight_No]=c1;
}
IsEmpty=0;
Custp1[Flight_No]->Amount=Ticket_Count;
IDinfor=p1->Customer_Amount-p1->Free_Amount+1;Custp1[Flight_No]->IDinfor=IDinfor;
p1->Free_Amount-=Ticket_Count;printf("\n\t请输入您的姓名:
");
scanf("%s",&Custp1[Flight_No]->Name);while
(1)
{
>Rank<='3'))
printf("\n\t请输入舱位等级:
");scanf("%s",&Custp1[Flight_No]->Rank);
if(!
(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]-
{
printf("\n\t输入有误,请重新输入!
");getch();
}
else
break;
}
printf("\n\t请输入您的ID信息:
");scanf("%d",&Custp1[Flight_No]->IDinfor);
if(Ticket_Count<10)
printf("\n\t");else
printf("\n\t");
printf("\n\t恭喜您订票成功!
\n");for(i=1;i<=Ticket_Count;i++)
{
printf("\n\t您所预定的座位号是%d",IDinfor++);if(i%10==0)
printf("\n\t");
}
printf("\n");
}
elseif(p1->Free_Amount==0)
{
printf("\n\t对不起,票已售完!
\n");
IsRepl=0;
}
else
{
printf("\n\t对不起,当前没有多余的票!
\n");
IsRepl=0;
}
if(!
IsRepl)
{
printf("\n\t您是否想成为候补乘客(Y/N)?
:
");
scanf("%s",&temp);
if(temp=='y'||temp=='Y')
{
if(p1->ReplName==NULL)
{
c2=(Customer*)malloc(sizeof(Customer));
Replp1[Flight_No]=c2;
p1->ReplName=Replp1[Flight_No];
}
else
{
c2=(Customer*)malloc(sizeof(Customer));
Replp1[Flight_No]->Next=c2;
Replp1[Flight_No]=c2;
}
IsReplace=0;
tag=1;
Replp1[Flight_No]->Amount=Ticket_Count;
printf("\n\t请输入您的姓名:
");
scanf("%s",&Replp1[Flight_No]->Name);
Replp1[Flight_No]->IDinfor=IDinfor;
Replp1[Flight_No]->Amount=Ticket_Count;
while
(1)
{
printf("\n\t请输入舱位等级:
");
scanf("%s",&Replp1[Flight_No]->Rank);
printf("\n\t请输入您的ID信息:
");
scanf("%d",Replp1[Flight_No]->IDinfor);
if(!
(Replp1[Flight_No]->Rank>='1'&&
Replp1[Flight_No]->Rank<='3'))
{
printf("\n\t输入有误,请重新输入.");
//10.订票乘客信息
voidDisplay_Reserver()
{
Flight*p1;
Customer*c1;
system("cls");
p1=Head;
if(Empty_Flight())return;
printf("\n\t订票乘客信息");
if(IsEmpty)
{
printf("\n\t对不起,没有订票乘客信息!
\n");getch();
return;
}
printf("\n\n");
printf("NameFlight_NoPlane_NoTic_AmountDes_NameRank_NoID\n");
while(p1!
=NULL)
{
if(p1->CustName!
=NULL)
{
c1=p1->CustName;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 航空 客运 订票 系统 编辑 修改 word