航空售票系统代码文档格式.docx
《航空售票系统代码文档格式.docx》由会员分享,可在线阅读,更多相关《航空售票系统代码文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineMAXSIZE2
#defineMAXCHAR20
typedefintStatus;
typedefstructClientNode{//已订票客户结点
charname[20];
charID[20];
//客户的身份证号
intbooknum;
intgrade;
ClientNode*next;
}ClientNode;
typedefstruct{//已订票客户单链表(按ID有序)
ClientNode*client;
intlength;
}ClientLink;
typedefstructWClientNode{//侍订票客户结点
charphoneno[15];
intneednum;
WClientNode*next;
}WClientNode;
typedefstruct{//侍订票客户链队列
WClientNode*front;
WClientNode*rear;
}WClientQueue;
typedefstructflightnode{//航班结点
char*airline;
intnumber;
char*flight_no;
intweekday;
inttotal;
intremain;
flightnode*next;
ClientLinkclient;
WClientQueuenclient;
}flightnode;
typedefstruct{//航班顺序线性表
flightnode*flight;
}SqFlight;
StatusInitList_Sq(SqFlight&
LF){
//构造一个空的线性表LF
LF.flight=(flightnode*)malloc(sizeof(flightnode));
if(!
LF.flight)exit(ERROR);
LF.length=0;
LF.flight->
next=NULL;
return(OK);
}//InitList_Sq
StatusInitList_CL(ClientLink&
CL){//为客户链表建一个空链表
CL.client=(ClientNode*)malloc(sizeof(ClientNode));
CL.client)exit(ERROR);
CL.length=0;
CL.client->
}//InitList_CL
StatusInitList_WCQ(WClientQueue&
WCQ){//为待票客户建一个空的队列
WCQ.front=WCQ.rear=(WClientNode*)malloc(sizeof(WClientNode));
WCQ.front)exit(ERROR);
WCQ.front->
}//InitList_WCQ
StatusInitFlightNode(SqFlight&
LF){//对航线结点赋值并接到航班顺序表
flightnode*p,*q;
ClientLinkCL1;
InitList_CL(CL1);
WClientQueueWCQ1;
InitList_WCQ(WCQ1);
LF.flight){printf("
无法找到指向航线结点的指针\n"
);
exit(ERROR);
}
airline="
fuzhou--beijing"
;
//头结点赋值
client=CL1;
flight_no="
FU127"
nclient=WCQ1;
number=8427;
remain=200;
total=200;
weekday=1;
p=(flightnode*)malloc(sizeof(flightnode));
p){printf("
申请不到航线结点\n"
}
next=p;
ClientLinkCL2;
InitList_CL(CL2);
WClientQueueWCQ2;
InitList_WCQ(WCQ2);
p->
//结点1赋值
client=CL2;
BU127"
nclient=WCQ2;
number=8757;
remain=180;
total=180;
weekday=5;
q=p;
p=NULL;
q->
ClientLinkCL3;
InitList_CL(CL3);
WClientQueueWCQ3;
InitList_WCQ(WCQ3);
fuzhou--shanghai"
//结点2赋值
client=CL3;
FU786"
nclient=WCQ3;
number=3216;
weekday=2;
ClientLinkCL4;
InitList_CL(CL4);
WClientQueueWCQ4;
InitList_WCQ(WCQ4);
//结点3赋值,有四个航班,共4个结点
client=CL4;
FU236"
nclient=WCQ4;
number=5712;
remain=230;
total=230;
weekday=6;
Statuslookup(char*airline,SqFlightLF){//查询系统
//形参指针airline指向查询时输入的航线的首地址
//引用航班顺序线性表LF
flightnode*p=LF.flight;
char*h,*q=airline;
inti=0;
while(p){
h=p->
airline;
while(*airline==*h){//查询航线是否与在LF的航班航线里有
if(*airline=='
\0'
||*h=='
)
break;
airline++,h++;
}
&
*h=='
)//若有该航线输出航线信息
{
i++;
printf("
%s%s%d%d%d%d\n"
airline,p->
flight_no,p->
number,p->
remain,p->
total,p->
weekday);
airline=q;
p=p->
next;
//航班结点指针后移
有此航班%d条\n"
i);
flightnode*search(intnumber,SqFlightLF){
//形参number查看时输入的航班号
if(number==p->
number)break;
//查看的航班号是否在LF的航班号里有
return(p);
//返回指向该航班结点的指针
ClientNode*searchID(flightnode*p,char*ID){
//p是指向某个航班结点的指针
//ID是要查询的ID
ClientNode*h=p->
client.client->
ClientNode*prior_h=NULL;
//指向这个ID客户的前驱的指针
prior_h=p->
client.client;
char*p_ID=ID;
char*h_ID=NULL;
while(h){
ID=p_ID;
h_ID=h->
ID;
while(*ID==*h_ID){//查询的ID在已订客户链表中是否有
if(*ID=='
||*h_ID=='
)break;
ID++,h_ID++;
*h_ID=='
//若有结束循环
prior_h=prior_h->
h=h->
h)prior_h=NULL;
return(prior_h);
//返回前驱指针
Statuswbook(SqFlightLF,flightnode*p){//待票客户队列
WClientNode*h=NULL;
loop:
h=(WClientNode*)malloc(sizeof(WClientNode));
if(!
h)
gotoloop;
请输入客户的名字:
\n"
scanf("
%s"
h->
name);
请输入客户的ID:
ID);
请输入客户的电话号码:
phoneno);
请输入客户需要的票数:
%d"
&
h->
neednum);
h->
nclient.rear->
next=h;
nclient.rear=h;
Statusbook(intnumber,SqFlightLF){
flightnode*p=NULL;
ClientNode*h=NULL;
p=search(number,LF);
//调用search(),返回指向这个航班号的航班结点的指针
无此航班号\n"
return(ERROR);
if(p->
remain>
=0){//余票量大于0
h=(ClientNode*)malloc(sizeof(ClientNode));
请输入客户的定票数:
booknum);
if((h->
booknum)<
=(p->
remain))
remain=p->
remain-h->
booknum;
//余票量减去客户的订票量
else{//若余票量不足,询问客户是否要候补
余票数:
%d\n"
p->
remain);
已无足够的票,您是否要候补?
1.要2.不要3.按余票定票\n"
i);
switch(i)
case1:
wbook(LF,p);
//调用候补函数,实现候补
free(h);
h=NULL;
case2:
case3:
remain!
=0)
booknum=p->
remain;
remain=0;
else{
无法按余票购票,余票已为零\n"
return(ERROR);
default:
printf("
选择有误\n"
if(i==1){printf("
候票成功\n"
return(OK);
elseif(i==2){printf("
祝您下次购票成功\n"
请输客户的姓名:
loop1:
请输入客户的舱位等级1或2或3:
grade);
if(h->
grade!
=3&
=2&
=1)
无此等级舱位\n"
gotoloop1;
购票成功\n"
next=p->
Statusask_clien(flightnode*p,SqFlightLF){
////引用航班顺序线性表LF
inti,j;
WClientNode*h=p->
nclient.front->
WClientNode*prior_h=p->
nclient.front;
h)printf("
无人候票\n"
i=0;
j=0;
=h->
neednum)
%s要不要购票?
else
余票数不够%s的需要,您要不要购票?
{i=2;
1.要2.不要\n"
客户的名字:
%s\n"
客户的ID:
客户需要的票数:
book(p->
number,LF);
prior_h->
next->
next)p->
nclient.rear=prior_h;
prior_h->
next=prior_h->
j=1;
//j=1,表示prior_h将跳过一个队列结点
谢谢您对本航班的关注\n"
if(j==0)prior_h=prior_h->
remain<
余票已被购尽!
!
Statusback_ticket(intnumber,SqFlightLF){
请输入退票客户的ID:
ID);
prior_h=searchID(p,ID);
prior_h){printf("
无此客户的ID~~~~\n"
remain+prior_h->
退票成功\n"
询问待票客户:
ask_clien(p,LF);
voidmenu()
{
选择菜单\n"
\n"
1.查询航线2.客票预定3.办理退票4.查看客户资料5.退出\n"
StatusGetElem(SqFlightLF,intnumber)
//用e返回L中第i个数据的值,1<
=i<
=Listlength(L).
尚未有客户\n"
客户票数:
returnOK;
}//GetList;
voidmain(){
charairline[20];
intnumber=0;
intdrop_out=0;
inti;
SqFlightLF;
InitList_Sq(LF);
InitFlightNode(LF);
航线有两条,输入格式:
fuzhou--beijing\n"
fuzhou--shanghai\n"
航班号可以通过查看航线得知;
while(drop_out!
=-1)
menu();
请选择菜单:
i=5;
请输入要查询的航线:
airline);
航线\n"
起点--终点飞机号航班号总票数余票数飞行周日\n"
lookup(airline,LF);
请输入要预定的航班号:
number);
book(number,LF);
请输入要退票的航班号:
back_ticket(number,LF);
case4:
查看客户资料,输入客户的航班号\n"
GetElem(LF,number);
case5:
drop_out=-1;
}}}
第三章结论
参考文献
附录