您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > c语言-航空订票系统代码
#include"malloc.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#defineMAXSIZE4/*定义航线量的最大值*/typedefstructwat_ros{charname[10];/*姓名*/intreq_amt;/*订票量*/structwat_ros*next;}qnode,*qptr;typedefstructpqueue{qptrfront;/*等候替补客户名单域的头指针*/qptrrear;/*等候替补客户名单域的属指针*/}linkqueue;typedefstructord_ros{charname[10];/*客户姓名*/intord_amt;/*订票量*/intgrade;/*舱位等级*/structord_ros*next;}linklist;structairline{charter_name[10];/*终点站名*/charair_num[10];/*航班号*/charplane_num[10];/*飞机号*/chardate[7];/*飞行日期(星期几)*/inttkt_amt;/*乘员定额*/inttkt_sur;/*余票量*/linklist*order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;structairline*start;structairlineair[MAXSIZE]={{"北京","1","001","SUN",30,15},{"上海","2","002","MON",40,10},{"武汉","3","003","FRI",50,14},{"天津","4","004","TUE",60,20}};voiddisplay(structairline*info)/*打印每条航线的基本信息*/{printf("%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n",info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_amt,info->tkt_sur);}voidlist()/*打印全部航线信息*/{structairline*info;inti=0;info=start;printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");while(i<MAXSIZE){display(info);info++;i++;}printf("\n\n");}voidsearch()/*根据客户提出的终点站名输出航线信息*/{structairline*info,*find();charname[10];inti=0;info=start;printf("请输入终点站名:");scanf("%s",name);while(i<MAXSIZE){if(!strcmp(name,info->ter_name))break;info++;i++;}if(i>=MAXSIZE)printf("对不起,该航线未找到!\n");else{printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");display(info);}}structairline*find()/*根据系统提出的航班号查询并以指针形式返回*/{structairline*info;charnumber[10];inti=0;info=start;printf("请输入航班号:");scanf("%s",number);while(i<MAXSIZE){if(!strcmp(number,info->air_num))returninfo;info++;i++;}printf("对不起,该航线末找到!\n");returnNULL;}voidprtlink()/*打印订票乘员名单域的客户名单信息*/{linklist*p;structairline*info;info=find();p=info->order;if(p!=NULL){printf("客户姓名订票数额舱位等级\n");while(p){printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);p=p->next;}}elseprintf("该航线没有客户信息!!\n");}linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加订票乘员名单域的客户信息*/{linklist*p1,*new1;p1=head;new1=(linklist*)malloc(sizeof(linklist));if(!new1){printf("\nOutofmemory!!\n");returnNULL;}strcpy(new1->name,name);new1->ord_amt=amount;new1->grade=grade;new1->next=NULL;if(head==NULL)/*若原无订票客户信息*/{head=new1;new1->next=NULL;}elsehead=new1;new1->next=p1;returnhead;}linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排队等候的客户名单域*/{qptrnew1;new1=(qptr)malloc(sizeof(qnode));strcpy(new1->name,name);new1->req_amt=amount;new1->next=NULL;if(q.front==NULL)/*若原排队等候客户名单域为空*/q.front=new1;elseq.rear->next=new1;q.rear=new1;returnq;}voidorder()/*办理订票业务*/{structairline*info;intamount,grade;charname[10];info=start;if(!(info=find()))return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/printf("请输入你订票所需要的数量:");scanf("%d",&amount);if(amount>info->tkt_amt)/*若客户订票额超过乘员定票总额,退出*/{printf("\n对不起,您输入的票的数量已经超过乘员定额!");return;}if(amount<=info->tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/{inti;printf("请输入您的姓名(订票客户):");scanf("%s",name);printf("请输入%s票的舱位等级:",name);scanf("%d",&grade);info->order=insertlink(info->order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/for(i=0;i<amount;i++)/*依次输出该订票客户的座位号*/printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1);info->tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/printf("\n祝您乘坐愉快!\n");}else/*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/{charr;printf("\n已经没有更多的票,您需要排队等候吗?(Y/N)");r=getch();printf("%c",r);if(r=='Y'||r=='y'){printf("\n请输入您的姓名(排队订票客户):");scanf("%s",name);info->wait=appendqueue(info->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/printf("\n注册成功!\n");}elseprintf("\n欢迎您下次再次订购!\n");}}voidreturn_tkt()/*退票模块*/{structairline*info;qnode*t,*back,*f,*r;intgrade;linklist*p1,*p2,*head;charcusname[10];if(!(info=find()))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{/*若信息查询成功,删除订票客户名单域中的信息*/if(p1==head)head=p1->next;elsep2->next=p1->next;info->tkt_sur+=p1->ord_amt;grade=p1->grade;printf("%s成功退票!\n",p1->name);free(p1);}info->order=head;/*重新将航线名单域指向订票单链表的头指针*/f=(info->wait).front;/*f指向排队等候名单队列的头结点*/r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/t=f;/*t为当前满点条件的排队候补名单域*/while(t){if(info->tkt_sur=info->wait.front->req_amt){/*若满足条件者为头结点*/inti;info->wait.front=t->next;printf("
本文标题:c语言-航空订票系统代码
链接地址:https://www.777doc.com/doc-4900095 .html