航空售票系统代码.docx
- 文档编号:10538189
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:18
- 大小:31.30KB
航空售票系统代码.docx
《航空售票系统代码.docx》由会员分享,可在线阅读,更多相关《航空售票系统代码.docx(18页珍藏版)》请在冰豆网上搜索。
航空售票系统代码
本科生毕业论文(设计)
题目:
专业代码:
作者姓名:
学号:
单位:
指导教师:
2008年5月1日
目录
摘要3
ABSTRACT4
第一章绪论5
1.1研究背景与意义5
1.2主要工作5
第二章售票系统代码实现6
第三章结论16
参考文献17
附录18
摘要
Abstract
售票管理系统
作者:
丁宇专业:
信息与计算科学指导教师:
周书峰
第一章绪论
1.1研究背景与意义
1.2主要工作
第二章售票系统代码实现
售票系统代码
#include"stdio.h"
#include"stdlib.h"
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineMAXSIZE2
#defineMAXCHAR20
typedefintStatus;
typedefstructClientNode{//已订票客户结点
charname[20];
charID[20];//客户的身份证号
intbooknum;
intgrade;
ClientNode*next;
}ClientNode;
typedefstruct{//已订票客户单链表(按ID有序)
ClientNode*client;
intlength;
}ClientLink;
typedefstructWClientNode{//侍订票客户结点
charname[20];
charID[20];
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;
intlength;
}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));
if(!
CL.client)exit(ERROR);
CL.length=0;
CL.client->next=NULL;
return(OK);
}//InitList_CL
StatusInitList_WCQ(WClientQueue&WCQ){//为待票客户建一个空的队列
WCQ.front=WCQ.rear=(WClientNode*)malloc(sizeof(WClientNode));
if(!
WCQ.front)exit(ERROR);
WCQ.front->next=NULL;
return(OK);
}//InitList_WCQ
StatusInitFlightNode(SqFlight&LF){//对航线结点赋值并接到航班顺序表
flightnode*p,*q;
ClientLinkCL1;
InitList_CL(CL1);
WClientQueueWCQ1;
InitList_WCQ(WCQ1);
if(!
LF.flight){printf("无法找到指向航线结点的指针\n");exit(ERROR);}
LF.flight->airline="fuzhou--beijing";//头结点赋值
LF.flight->client=CL1;
LF.flight->flight_no="FU127";
LF.flight->nclient=WCQ1;
LF.flight->number=8427;
LF.flight->remain=200;
LF.flight->total=200;
LF.flight->weekday=1;
p=(flightnode*)malloc(sizeof(flightnode));
if(!
p){printf("申请不到航线结点\n");exit(ERROR);}
LF.flight->next=p;
ClientLinkCL2;
InitList_CL(CL2);
WClientQueueWCQ2;
InitList_WCQ(WCQ2);
p->airline="fuzhou--beijing";//结点1赋值
p->client=CL2;
p->flight_no="BU127";
p->nclient=WCQ2;
p->number=8757;
p->remain=180;
p->total=180;
p->weekday=5;
q=p;
p=NULL;
p=(flightnode*)malloc(sizeof(flightnode));
if(!
p){printf("申请不到航线结点\n");exit(ERROR);}
q->next=p;
ClientLinkCL3;
InitList_CL(CL3);
WClientQueueWCQ3;
InitList_WCQ(WCQ3);
p->airline="fuzhou--shanghai";//结点2赋值
p->client=CL3;
p->flight_no="FU786";
p->nclient=WCQ3;
p->number=3216;
p->remain=200;
p->total=200;
p->weekday=2;
q=p;
p=NULL;
p=(flightnode*)malloc(sizeof(flightnode));
if(!
p){printf("申请不到航线结点\n");exit(ERROR);}
q->next=p;
ClientLinkCL4;
InitList_CL(CL4);
WClientQueueWCQ4;
InitList_WCQ(WCQ4);
p->airline="fuzhou--shanghai";//结点3赋值,有四个航班,共4个结点
p->client=CL4;
p->flight_no="FU236";
p->nclient=WCQ4;
p->number=5712;
p->remain=230;
p->total=230;
p->weekday=6;
p->next=NULL;
return(OK);
}
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=='\0')
break;
airline++,h++;
}
if(*airline=='\0'&&*h=='\0')//若有该航线输出航线信息
{
i++;
printf("%s%s%d%d%d%d\n",
p->airline,p->flight_no,p->number,p->remain,p->total,p->weekday);
}
airline=q;
p=p->next;//航班结点指针后移
}
printf("有此航班%d条\n",i);
return(OK);
}
flightnode*search(intnumber,SqFlightLF){
//形参number查看时输入的航班号
//引用航班顺序线性表LF
flightnode*p=LF.flight;
while(p){
if(number==p->number)break;//查看的航班号是否在LF的航班号里有
p=p->next;
}
return(p);//返回指向该航班结点的指针
}
ClientNode*searchID(flightnode*p,char*ID){
//p是指向某个航班结点的指针
//ID是要查询的ID
ClientNode*h=p->client.client->next;
ClientNode*prior_h=NULL;//指向这个ID客户的前驱的指针
prior_h=p->client.client;
inti=0;
char*p_ID=ID;
char*h_ID=NULL;
while(h){
ID=p_ID;h_ID=h->ID;
while(*ID==*h_ID){//查询的ID在已订客户链表中是否有
if(*ID=='\0'||*h_ID=='\0')break;
ID++,h_ID++;
}
if(*ID=='\0'&&*h_ID=='\0')break;//若有结束循环
prior_h=prior_h->next;
h=h->next;
}
if(!
h)prior_h=NULL;
return(prior_h);//返回前驱指针
}
Statuswbook(SqFlightLF,flightnode*p){//待票客户队列
//引用航班顺序线性表LF
//p是指向某个航班结点的指针
WClientNode*h=NULL;
loop:
h=(WClientNode*)malloc(sizeof(WClientNode));
if(!
h)
gotoloop;
printf("请输入客户的名字:
\n");
scanf("%s",h->name);
printf("请输入客户的ID:
\n");
scanf("%s",h->ID);
printf("请输入客户的电话号码:
\n");
scanf("%s",h->phoneno);
printf("请输入客户需要的票数:
\n");
scanf("%d",&h->neednum);
h->next=NULL;
p->nclient.rear->next=h;
p->nclient.rear=h;
return(OK);
}
Statusbook(intnumber,SqFlightLF){
//形参number查看时输入的航班号
//引用航班顺序线性表LF
flightnode*p=NULL;
ClientNode*h=NULL;
p=search(number,LF);//调用search(),返回指向这个航班号的航班结点的指针
if(!
p){printf("无此航班号\n");return(ERROR);}
if(p->remain>=0){//余票量大于0
loop:
h=(ClientNode*)malloc(sizeof(ClientNode));
if(!
h)
gotoloop;
printf("请输入客户的定票数:
\n");
scanf("%d",&h->booknum);
if((h->booknum)<=(p->remain))
p->remain=p->remain-h->booknum;//余票量减去客户的订票量
else{//若余票量不足,询问客户是否要候补
inti=0;
printf("余票数:
%d\n",p->remain);
printf("\n");
printf("已无足够的票,您是否要候补?
\n");
printf("\n");
printf("1.要2.不要3.按余票定票\n");
scanf("%d",&i);
switch(i)
{
case1:
wbook(LF,p);//调用候补函数,实现候补
free(h);h=NULL;
break;
case2:
free(h);h=NULL;
break;
case3:
if(p->remain!
=0)
{
h->booknum=p->remain;
p->remain=0;
}
else{
printf("无法按余票购票,余票已为零\n");
return(ERROR);
}
break;
default:
printf("选择有误\n");
}
if(i==1){printf("候票成功\n");return(OK);}
elseif(i==2){printf("祝您下次购票成功\n");return(OK);}
}
printf("请输客户的姓名:
\n");
scanf("%s",h->name);
printf("请输入客户的ID:
\n");
scanf("%s",h->ID);
loop1:
{
printf("请输入客户的舱位等级1或2或3:
\n");
scanf("%d",&h->grade);
}
if(h->grade!
=3&&h->grade!
=2&&h->grade!
=1)
{
printf("无此等级舱位\n");
gotoloop1;
}
printf("购票成功\n");
h->next=p->client.client->next;
p->client.client->next=h;
}
return(OK);
}
Statusask_clien(flightnode*p,SqFlightLF){
//p是指向某个航班结点的指针
////引用航班顺序线性表LF
inti,j;
WClientNode*h=p->nclient.front->next;
WClientNode*prior_h=p->nclient.front;
if(!
h)printf("无人候票\n");
while(h){
i=0;j=0;
printf("余票数:
%d\n",p->remain);
printf("\n");
if(p->remain>=h->neednum)
printf("%s要不要购票?
\n",h->name);
else
printf("余票数不够%s的需要,您要不要购票?
\n",h->name);
loop:
{i=2;
printf("\n");
printf("1.要2.不要\n");
scanf("%d",&i);
}
switch(i)
{
case1:
printf("客户的名字:
%s\n",h->name);
printf("客户的ID:
%s\n",h->ID);
printf("客户需要的票数:
%d\n",h->neednum);
printf("\n");
book(p->number,LF);
if(!
prior_h->next->next)p->nclient.rear=prior_h;
prior_h->next=prior_h->next->next;
j=1;//j=1,表示prior_h将跳过一个队列结点
break;
case2:
printf("谢谢您对本航班的关注\n");
break;
default:
printf("选择有误\n");
gotoloop;
}
if(j==0)prior_h=prior_h->next;
h=h->next;
if(p->remain<=0)
printf("余票已被购尽!
!
\n");
}
return(OK);
}
Statusback_ticket(intnumber,SqFlightLF){
charID[20];
ClientNode*prior_h=NULL;
flightnode*p=NULL;
ClientNode*h=NULL;
p=search(number,LF);
if(!
p){printf("无此航班号\n");return(ERROR);}
printf("请输入退票客户的ID:
\n");
scanf("%s",ID);
prior_h=searchID(p,ID);
if(!
prior_h){printf("无此客户的ID~~~~\n");return(ERROR);}
else{
p->remain=p->remain+prior_h->next->booknum;
prior_h->next=prior_h->next->next;
}
printf("退票成功\n");
printf("\n");
printf("询问待票客户:
\n");
ask_clien(p,LF);
return(OK);
}
voidmenu()
{
printf(" 选择菜单\n");
printf("\n");
printf("1.查询航线2.客票预定3.办理退票4.查看客户资料5.退出\n");
}
StatusGetElem(SqFlightLF,intnumber)
{
//用e返回L中第i个数据的值,1<=i<=Listlength(L).
flightnode*p=NULL;
p=search(number,LF);
ClientNode*h=p->client.client->next;
if(!
h)printf("尚未有客户\n");
while(h){
printf("客户的名字:
%s\n",h->name);
printf("客户的ID:
%s\n",h->ID);
printf("客户票数:
%d\n",h->booknum);
h=h->next;
}
returnOK;
}//GetList;
voidmain(){
charairline[20];
intnumber=0;
intdrop_out=0;
inti;
SqFlightLF;
InitList_Sq(LF);
InitFlightNode(LF);
printf("航线有两条,输入格式:
\n");
printf("fuzhou--beijing\n");
printf("fuzhou--shanghai\n");
printf("航班号可以通过查看航线得知;\n");
printf("\n");
while(drop_out!
=-1)
{
menu();
printf("请选择菜单:
\n");
i=5;
scanf("%d",&i);
switch(i)
{
case1:
printf("请输入要查询的航线:
\n");
scanf("%s",airline);
printf("航线\n");
printf("起点--终点飞机号航班号总票数余票数飞行周日\n");
lookup(airline,LF);
break;
case2:
printf("请输入要预定的航班号:
\n");
scanf("%d",&number);
book(number,LF);
break;
case3:
printf("请输入要退票的航班号:
\n");
scanf("%d",&number);
back_ticket(number,LF);
break;
case4:
printf("查看客户资料,输入客户的航班号\n");
scanf("%d",&number);
GetElem(LF,number);
break;
case5:
drop_out=-1;
break;
default:
printf("选择有误\n");
}}}
第三章结论
参考文献
附录
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 售票 系统 代码