航空管理系统运行得起的.doc

上传人:啊飒飒 文档编号:11485388 上传时间:2021-08-08 格式:DOC 页数:8 大小:61.50KB
返回 下载 相关 举报
航空管理系统运行得起的.doc_第1页
第1页 / 共8页
航空管理系统运行得起的.doc_第2页
第2页 / 共8页
航空管理系统运行得起的.doc_第3页
第3页 / 共8页
航空管理系统运行得起的.doc_第4页
第4页 / 共8页
航空管理系统运行得起的.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《航空管理系统运行得起的.doc》由会员分享,可在线阅读,更多相关《航空管理系统运行得起的.doc(8页珍藏版)》请在三一文库上搜索。

1、#include #include #include #include#define FLIGHT_NUMBER 7 /*给定5条航线*/#define MAX 200 /*给定座位号最大为200*/int seatMAX=0,0;/*初始化每条航线200个座位号为0,即未被预定*/int seat_numMAX; /*暂时存放已发给客户的座位号,为存放到客户名单域的媒介*/typedef struct QNode char name10;/*等候替补客户姓名*/ int Wnumber;/*订票量*/ struct QNode *next;QNode,*Queueptr;typedef st

2、ruct WaitQueue Queueptr front; /*等候替补客户名单域的头指针*/ Queueptr rear; /*等候替补客户名单域的属指针*/LinkQueue; /*等候替补客户用链队列存储*/typedef struct LNode /*定义已定票客户的线性链表结构*/ char name10;/*客户姓名*/ int Book_num;/*订票量*/ int grade;/*舱位等级*/ int numMAX;/*订票客户的座位号*/ struct LNode *next;LinkList;typedef struct airline /*定义航线的结构*/ char

3、 terminus10;/*终点站名 */ char flight_num10;/*航班号*/ char plane_num10;/*飞机号*/ char day7;/*飞行周日(星期几)*/ int total_num;/*乘员定额数量*/ int remain_num;/*余票量*/ int seatMAX; /*每条航线的座位数额为MAX设定大于乘员定额数量*/ LinkList *order;/*乘员名单域,指向乘员名单链表的头指针*/ LinkQueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/SqList;struct airline *first

4、; /*定义指向航线结构的指针*/void display(struct airline *info) /*输出每条航线的基本信息*/printf(%8st%3st%4st%5stt%5dt%12dn,info-terminus,info-flight_num,info-plane_num,info-day,info-total_num,info-remain_num);void airlinelist()/*显示全部航线信息*/ struct airline *info; /*定义指向航线结构的指针*/ int i=0; info=first; /*将指向第一条航线的指针赋给info*/ p

5、rintf(终点站名t航班号t飞机号t飞行周日t乘员定额t余票量n); while(iFLIGHT_NUMBER) display(info); info+; /*指向下一条航线的指针,即查找下一条航线*/ i+; /while printf(nn);/airlinelistvoid search() /*搜索客户提出的终点站名,若存在,则输出该航线基本信息*/ struct airline *info; char name10; int i=0; int j=0; /*j用来记录与客户提出的终点站名相同的航线条数*/ info=first; /*将指向第一条航线的指针赋给info*/ pri

6、ntf(请输入终点站名:); scanf(%s,name); while(iterminus) if(j=0) printf(终点站名t航班号t飞机号t飞行周日t乘员定额t余票量n); display(info); j+; info+; i+; /if elseinfo+; i+; /while if(j=0) printf(Sorry,没有该终点站!n);/searchstruct airline *find() /*根据客户提出的航班号查询并以指针形式返回*/ struct airline *info; char number10; int i=0; info=first; printf(

7、请输入航班号:); scanf(%s,number); while(iflight_num) return info; info+; i+; /while return NULL;/find void Viewlink() /*显示订票乘员名单域的客户名单信息*/ LinkList *p; struct airline *info; info=find(); /*将find()函数返回的指针赋给info*/ if(info=NULL) printf(对不起,没有该航班号!n); else p=info-order; if(p!=NULL) printf(客户姓名 订票数额 舱位等级n); wh

8、ile(p) printf(%st%8dt%dn,p-name,p-Book_num,p-grade); p=p-next; /while /if else printf(该航线没有客户信息!n); /ViewlinkLinkList *InsertLink(LinkList *head,int amount,char name,int grade,int *seat_num)/*增加订票乘员名单域的客户信息*/ LinkList *q,*p;int j; q=head; p=(LinkList *)malloc(sizeof(LinkList); /*向系统要空间存放新增的乘员名单域*/ i

9、f(!p) printf(nOut of memory!n); return NULL; strcpy(p-name,name); p-Book_num=amount; p-grade=grade; p-next=NULL; for(j=0;jnumj=(*seat_num)+;/*记录该乘员座位号,若其退票则可以回收对应的座位号*/ if(head=NULL) /*若原无订票客户信息*/ head=p;p-next=NULL; else /*新增订票客户从订票乘员链表前面插入*/ head=p; p-next=q; return head; /*返回链表头指针,该头指针此时指向新增乘员名单域

10、*/LinkQueue AddQueue(LinkQueue q,char name,int amount)/*增加排队等候的客户名单域*/ Queueptr p; p=(Queueptr)malloc(sizeof(QNode);/*向系统要空间存储排队客户*/ strcpy(p-name,name); p-Wnumber=amount; p-next=NULL; if(q.front=NULL)/*若原排队等候客户名单域为空*/ q.front=p; else q.rear-next=p; q.rear=p; return q;void order() /*办理订票业务*/ struct

11、airline *info; int amount,grade; char name10; info=find(); if(info=NULL)printf(对不起,没有该航班号);return ;/*根据客户提供的航班号进行查询,如为空,退出该模块*/ printf(请输入你订票所需要的数量:); scanf(%d,&amount); if(amountinfo-total_num)/*若客户订票额超过乘员定票总额,退出*/ printf(n对不起,您输入的票的数量已经超过乘员定额!); return; if(amountremain_num)/*若客户订票额末超过余票量,订票成功并等记信息

12、*/ int i,j; j=0; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s票的舱位等级:,name); scanf(%d,&grade); for(i=1;itotal_num;i+)/*依次输出该订票客户的座位号*/ if(j=amount) break; while(info-seati=0)/*查找未被定去的座位号*/ info-seati=info-seati-1+1; printf(%s的座位号是:%dn,name,info-seati);/*将还没被订走的座位号发给订票客户*/ seat_numj=info-seati

13、;/*将刚发出的座位号存放到数组seat_num再存放到订票乘员名单域中,为其退票回收座位号做准备*/ j+; info-order=InsertLink(info-order,amount,name,grade,seat_num);/*在订票乘员名单域中添加客户信息*/ info-remain_num-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf(n订票成功,祝你乘坐愉快!n); else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r; printf(n已经没有更多的票,您需要排队等候吗?(Y/N); r=getch(); prin

14、tf(%c,r); if(r=Y|r=y) printf(n请输入您的姓名(排队订票客户):); scanf(%s,name); info-wait=AddQueue(info-wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/ printf(n注册成功!n); else printf(n欢迎您下次再次订购!n); void refund() /*退票模块*/ struct airline *info; QNode *m,*back,*n,*p; int grade; LinkList *p1,*p2,*head; char cusname10; info=find

15、(); if(info=NULL) printf(对不起,没有该航班号);return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=info-order; p1=head; printf(请输入你的姓名(退票客户):); scanf(%s,cusname); while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/ if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) printf(对不起,你没有订过票!n);return;/*若未找到,退出本模块*/ else/*若信息查询成

16、功,删除订票客户名单域中的信息*/ int j,k;for(j=0;jBook_num;j+)/*将退票座位号初始为0即未被预定*/k=p1-numj;info-seatk=0; if(p1=head) head=p1-next; else p2-next=p1-next; info-remain_num+=p1-Book_num; grade=p1-grade; printf(%s成功退票!n,p1-name); free(p1); info-order=head;/*重新将航线名单域指向订票单链表的头指针 */ n=(info-wait).front;/*n指向排队等候名单队列的头结点*/

17、 p=(info-wait).rear;/*p指向排队等候名单队列的尾结点*/ m=n;/*m为当前满点条件的排队候补名单域*/ while(m) if(m=(info-wait).front) if(info-remain_num=info-wait.front-Wnumber)/*若满足条件者为头结点*/ int i,j; info-wait.front=m-next; printf(%s订票成功!n,m-name); for(i=1,j=0;itotal_num;i+)/*依次输出该等候替补客户的座位号*/ if(j=m-Wnumber) break; while(info-seati=

18、0) info-seati=info-seati-1+1; printf(%s的座位号是:%dn,m-name,info-seati); seat_numj=info-seati; j+; /*while*/ /*for*/ info-remain_num-=m-Wnumber; info-order=InsertLink(info-order,m-Wnumber,m-name,grade,seat_num);/*插入到订票客户名单链表中*/ free(m); m=info-wait.front; /*if*/ else back=m; m=m-next; /*if*/ else if(inf

19、o-remain_num)=(m-Wnumber)/*若满足条件者不为头结点*/ int i,j; back-next=m-next; printf(%s订票成功!n,m-name); for(i=1,j=0;itotal_num;i+)/*依次输出该替补订票客户的座位号*/ if(j=m-Wnumber) break; while(info-seati=0)info-seati=info-seati-1+1; printf(%s的座位号是:%dn,m-name,info-seati); seat_numj=info-seati; j+; /*while*/ /*for*/ info-rema

20、in_num-=m-Wnumber; info-order=InsertLink(info-order,m-Wnumber,m-name,grade,seat_num);/*插入到订票客户名单链表中*/ free(m);m=back-next; /*if*/ else back=m; m=m-next; /*else*/ /*else if*/ /*while*/ /*refund*/int menu()/*菜单界面*/ int a; char b20; printf(ntt航空客运订票系统n); printf(=n); printf(1.查看航线信息: |n); printf(2.查看已订票

21、客户信息: |n); printf(3.查询航线: |n); printf(4.办理订票业务: |n); printf(5.办理退票业务: |n); printf(6.退出系统: |n); printf(=n); do printf(请选择你需要的功能(例如:你想办理订票业务就输入4):); scanf(%s,b); a=atoi(b); while(a7); return a; main()struct airline airFLIGHT_NUMBER=上海,1,S60,星期六,160,160,0, 北京,2,B61,星期一,80,80,0, 天津,3,S62,星期五,50,50,0,万州,

22、4,G63,星期三,30,30,0,南京,5,H64,星期日,10,10,0,纽约,6,F72,星期二,60,60,0,东京,7,Y84,星期日,45,45,0;/*将航线用结构体数组存放,并初始化航线信息*/system(color 8f);/*背景颜色*/system(cls); /*清屏*/first=air; /*将结构体数组首地址赋给first,即first为指向第一条航线的指针*/ for(;) switch(menu() case 1:airlinelist();break; case 2:Viewlink();break; case 3:search();break; case 4:order();break; case 5:refund();break; case 6:printf(n正在退出系统!n); exit(0); printf(nPress any key to continue!n); getch();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1