期末课程设计
来源:互联网 发布:take it or leave it 编辑:程序博客网 时间:2024/04/27 20:33
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<iostream>#define MAXSIZE 5/*定义航线数量,可修改*/typedef struct wat_ros /*单链队列存储等候替补的客户信息*/{a char name[10];/*姓名*/ int req_amt;/*订票量*/ struct wat_ros*next;}qnode,*qptr;typedef struct pqueue /*等候替补的客户名单*/{qptr front;/*等候替补客户名单域的队头指针*/qptr rear;/*等候替补客户名单域的队尾指针*/}linkqueue;typedef struct ord_ros /*乘员名单*/{ char name[10];/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next;}linklist;struct airline{ char ter_name[10]; /*抵达城市*/ char air_num[10];/*航班号*/ char time[10];/*飞机时间*/ char pri[7];/*票价*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;struct airline *start;void display(struct airline *info)/*打印每条航线的基本信息*/{ printf("%8s\t%3s\t%s\t\t%4s\t%3d\t%10d\n",info->ter_name,info->air_num,info->time,info->pri,info->tkt_amt,info->tkt_sur);}void list()/*打印全部航线信息*/{ struct airline *info; int i=0; info=start; printf("终点站名\t航班号\t飞行时间\t票价\t乘员定额\t余票量\n"); while(i<MAXSIZE) { display(info);/*调用display函数来输出*/ info++; i++; }printf("\n\n");}void search()/*根据客户提出的终点站名输出航线信息*/{ struct airline *info,*find(); char name[10];/*要抵达的城市名称*/ int i=0; info=start; printf("请输入要抵达城市的名称:"); scanf("%s",name); while(i<MAXSIZE) { if(!strcmp(name,info->ter_name))/*有该站名strcmp则返回,if(!0)即break*/ { break; }info++;i++; } if(i>=MAXSIZE)/*没有匹配的航线*/ { printf("对不起,没有这条航线!\n"); }else{ printf("终点站名\t航班号\t飞行时间\t票价\t乘员定额\t余票量\n"); display(info);/*调用display函数输出航线信息*/}}struct airline *find()/*根据系统提出的航班号查询并以指针形式返回*/{ struct airline *info; char number[10]; /*查询的航班号*/ int i=0; info=start; printf("请输入航班号:"); scanf("%s",number); while(i<MAXSIZE) { if(!strcmp(number,info->air_num))/*有匹配航班*/ { return info; } info++; i++; }/*无匹配航班*/printf("对不起,没有这条航线!\n");return NULL;}void prtlink() /*打印订票乘员名单域的客户名单信息*/{ linklist *p; struct airline *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; }} else/*没有人订这个航班*/ printf("该航线没有客户信息!\n");}linklist *insertlink(linklist *head,int amount,char name[],int grade) /*增加订票乘员名单域的客户信息*/{ linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); if(!new1)/*存储空间不足*/ { printf("\nOut of memory!!\n"); return NULL; } strcpy(new1->name,name); new1->ord_amt=amount; new1->grade=grade; new1->next=NULL; if(head==NULL)/*若原订票客户信息为空*/{ head=new1; new1->next=NULL; } else { head=new1; } new1->next=p1; return head; }linkqueue appendqueue(linkqueue q,char name[],int amount) /*增加排队等候的客户名单域*/{ qptr new1; new1=(qptr)malloc(sizeof(qnode)); strcpy(new1->name,name); new1->req_amt=amount; new1->next=NULL; if(q.front==NULL)/*若原排队等候客户名单域为空*/ { q.front=new1; } else { q.rear->next=new1; } q.rear=new1; return q;}void order()/*办理订票业务*/{ struct airline *info; int amount,grade; /*订票数量,舱位等级*/ char name[10]; /*要订的航班号*/ info=start; if(!(info=find())) /*根据客户提供的航班号进行查询,如为空,退出该模块*/{ return;} printf("请输入您需要的票数:"); scanf("%d",&amount); if(amount>info->tkt_amt) /*若客户订票额超过乘员定票总额,退出*/{ printf("\n对不起,您输入票数已经超过乘员定额!"); return;} if(amount<=info->tkt_sur) /*若客户订票额末超过余票量,订票成功并等记信息*/{ int i; printf("请输入您的姓名:"); scanf("%s",name); printf("请输入您需要的舱位等级(1,2或):"); 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 /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ { char r; 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"); } else { printf("\n欢迎您再次订购!\n"); } } }void return_tkt() /*退票模块*/{ struct airline *info; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname[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; } else { p2->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)/*若满足条件者为头结点*/ { int i; info->wait.front=t->next; printf("%s订票成功!\n",t->name); for(i=0;i<t->req_amt;i++)/*输出座位号*/ { printf("%s的座位号是:%d\n",t->name,(info->tkt_sur)-i); } info->tkt_sur-=t->req_amt; info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/ free(t); break;} back=t; t=t->next;if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若满足条件者不为头结点*/{ int i; back->next=t->next; printf("%s订票成功!\n",t->name); for(i=0;i<t->req_amt;i++)/*输出座位号*/ { printf("<%s>'s seat?number is:%d\n",t->name,(info->tkt_sur)-i); } info->tkt_sur-=t->req_amt; info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/ free(t);break;/*重新将航线名单域指向订票单链表的头指针*/} if(f==r) { break; }}}int menu_select() /*菜单界面*/{ int c;char s[20]; printf("\ 航空订票系统 \n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 程梦莹\n"); printf(" 1.查看航线信息\n"); printf(" 2.查看已订票客户信息\n"); printf(" 3.查询航线\n"); printf(" 4.办理订票业务\n"); printf(" 5.办理退票业务\n"); printf(" 6.退出系统\n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); do { printf("请选择(1-6):"); scanf("%s",s); c=atoi(s); } while(c<1||c>6); return c;} void main(){ struct airline air[MAXSIZE]=/*初始化航线信息*/ { {"beijing","1","1200","860",30,30}, {"shanghai","2","1000","770",20,20}, {"linyi","3","1330","960",10,10}, {"guangzhou","4","1700","760",50,50}, {"dalian","5","1400","550",40,40},}; start=air; for(;;)/*无限循环(除非用户选择.退出)*/ { system("cls");/*清空屏幕*/ switch(menu_select()) { case 1:list(); /*打印全部航线信息*/ break; case 2:prtlink();/*浏览已订票客户信息*/ break; case 3:search();/*查询航线*/ break; case 4:order();/*订票*/ break; case 5:return_tkt();/*退票*/ break; case 6:printf("\n感谢您的使用,再见!\n"); /*退出系统*/ exit(0); /*正常退出程序*/} printf("\n任意键继续...\n"); getch();/*任意键继续*/ }}
0 0
- 期末课程设计
- 期末课程设计知识点
- 数据结构期末课程设计
- 期末课程设计 题型一
- 数据结构--期末课程设计
- 数据结构--期末课程设计
- 数据结构期末课程设计
- 【期末课程设计----通讯录系统】
- 期末课程设计||通讯录系统
- 期末课程设计-交通咨询系统
- 期末课程设计-家谱管理系统
- 期末课程设计--银行储蓄系统
- 大一期末课程设计 宿舍管理系统
- 期末课程设计--学生成绩管理系统及开发
- C语言期末课程设计3.电子词典
- 期末课程设计—学生成绩查询系统
- 大一下学期 C语言课程设计 期末考核
- C语言期末课程设计 1.小学生考试系统
- Hdu 2047之解题报告
- 带参数的宏定义 #define
- Redis配置文件各项参数说明及性能调优
- php 赋值原理详解
- 线路/信道编码技术(2)——64B/66B编码
- 期末课程设计
- SDN 网络中的路由规则 (一)
- 初学C基础编写猜拳游戏程序
- JavaWeb自学之JavaScript学习笔记 Day-2
- java中回调的概念
- @1225工作日志
- LeetCode 22 - Generate Parentheses
- KMP
- 适配器模式