本系统可实现航空客运订票的主要业务活动。例如,浏览和查询航线、客票预订和办理 退等

要求:

(1)航线管理,每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行 周日(星 期几)、乘员定额、余票量
(2)客户管理。有关订票的客户信息(包括姓名、订票量、舱位等级(1,2 和 3) 及等候替补的客户名单(包括姓名、所需票量)
(3)系统实现的主要操作和功能。系统实现的主要操作和功能如下
①查询航线。根据旅客提出的终点站名输出下列信息:航班号、飞机号、飞行日期 、余票额,测试航线至少 5 个;
②承办订票业务。根据客户提出的要求(航班号、订票数额)查询该航班票额情况 ,若有余票,则为客户办理订票手续,输出座位号:若已满或者余票少于订票额,则需要重新 询问客户要求:若需要,可等待排队候补,测试订票订单准备 10 个
③承办退票业务。根据客户提供的情况(日期、航班),为客户办理退票手续,然后查 询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足该客户的要求 则为其办理订票手续,否则依次询问其他排队候补的客户。

1、主界面设计

为了实现“航空订票系统”的各项功能,首先设计一个含有多个菜单项的主控菜单子程序,以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图:

2、数据结构设计

本系统采用链表存储航班信息以及各航班乘客的信息。

3、功能设计

根据需求分析,设计以下 6 个功能模均:

(1)查询总航班。乘客可以查看所有航班信息,方便乘客订票或者退票。

(2)查询航线。顾客可以根据起点和终点查看是否有飞往这两地的航班

(3)订票。输入航班编号,需要定的票数,你想要定的舱位等级,姓名身份证号,星期几这些信息,如果该飞机该舱位还有空余,则订票成功,并输出乘客所有的机位。如果位置不够,则询问乘客意愿,是否愿意候补机票。

(4)退票。由乘客输入的姓名,身份证号,以及飞行的日期,若输入的信息完全对应,则退票成功。否则输出信息不正确。当乘客退票成功之后系统就会更新数据匹配当前候补队伍里面是否有符合条件的乘客。

(5)录入与删除。可以根据情况进行管理员操作,对航班进行录入与删除的操作

(6)退出。退出整个航班订票系统

4、概要设计

1、 根据功能需求设计,设计 14 函数),各函数功能及函数头设计如下:

void printfall(Phangban allflight);//输出所有航班信息
void initflight();//初始化航班
void initHList(HList &waitrank);//初始化候补链表
void initCList(CList &cusLinkList);//初始化乘客链表
int panduan(Phangban allflight,char id[]);//判断是否重复录入
Phangban find();//根据航班号查找航班
void chaxun();//根据起始地查询航班
void dingpiao();//订票系统
void tuipiao();//退票系统
void insanddel();//录入与删除
void addCList(CList &head,int need,char name[],char id[],char day[],int grade);
//增加乘客信息
void houbu(HList &head,char name[],char id[],int need);
//乘客进入候补队伍里
void Houbu(Phangban &info,HList &waitrank,int les,int grade)
//乘客退票之后对候补队伍进行匹配

2、程序结构调用关系(示例)如下:

三、详细设计

1、数据结构的定义

 (1)乘客链表typedef struct CNode{char name[50];//乘客姓名char id[30];//乘客身份证char day[20];//出行日期int num;//订票数int rank;//客舱等级CNode *next;
}CNode,*CList;//乘客节点
(2)乘客候补队列
typedef struct HNode{char name[50];//候补乘客姓名char id[30];//候补乘客身份证int num;//候补票数HNode *next;
}HNode,*HList;//候补乘客节点typedef struct Queue{HList front;HList rear;
}LinkQueue;
(3)航班链表节点
typedef struct hangban{char begin[20];//起点char end[20];//终点char hbid[20];//航班编号char planeid[20];//飞机编号char day[20];//飞行日期int maxnum;//成员定额int less;//总余票int lessrank1;//一等余票int lessrank2;//二等余票int lessrank3;//三等余票hangban *next;//下一个节点CList cusLinkList;//乘客名单域,指向乘客名单链表的头指针LinkQueue waitrank1;//候补一等队列LinkQueue waitrank2;//候补二等队列LinkQueue waitrank3;//候补三等队列
}hangban,hangbanNode,*Phangban;
(4)全局变量定义
Phangban allflight;//全局航班节点变量

2.设计思路

源代码:

#include<bits/stdc++.h>
using namespace std;
typedef struct CNode{char name[50];//乘客姓名char id[30];//乘客身份证char day[20];//出行日期int num;//订票数int rank;//客舱等级CNode *next;
}CNode,*CList;//乘客节点typedef struct HNode{char name[50];//候补乘客姓名char id[30];//候补乘客身份证int num;//候补票数HNode *next;
}HNode,*HList;//候补乘客节点typedef struct Queue{HList front;HList rear;
}LinkQueue;typedef struct hangban{char begin[20];//起点char end[20];//终点char hbid[20];//航班编号char planeid[20];//飞机编号char day[20];//飞行日期int maxnum;//成员定额int less;//总余票int lessrank1;//一等余票int lessrank2;//二等余票int lessrank3;//三等余票hangban *next;//下一个节点CList cusLinkList;//乘客名单域,指向乘客名单链表的头指针LinkQueue waitrank1;//候补一等队列LinkQueue waitrank2;//候补二等队列LinkQueue waitrank3;//候补三等队列
}hangban,hangbanNode,*Phangban;Phangban allflight;//全局节点变量void printfall(Phangban allflight);
void inithangban();//初始化航班
Phangban find();
void chaxun();
void dingpiao();
void tuipiao();
void insanddel();
void addCList(CList &head,int need,char name[],char id[],char day[],int grade);
void houbu(HList &head,char name[],char id[],int need);hangban flight1[100]={{"上海","北京","1","A1111","星期一",5,5,2,2,1},{"北京","武汉","2","B8942","星期三",200,200,50,100,50},{"武汉","广州","3","C5465","星期无",200,200,50,100,50},{"广州","福州","4","D5645","星期六",200,200,50,100,50},{"福州","长沙","5","E4986","星期二",200,200,50,100,50},{"长沙","武汉","6","F6564","星期四",200,200,50,100,50},{"杭州","武汉","7","G1575","星期五",200,200,50,100,50},{"郑州","武汉","8","H6533","星期三",200,200,50,100,50},{"南京","武汉","9","I4587","星期二",200,200,50,100,50},{"西安","武汉","10","J8526","星期一",200,200,50,100,50},{"重庆","武汉","11","K2486","星期四",200,200,50,100,50},{"成都","武汉","12","L4875","星期日",200,200,50,100,50},{"昆明","武汉","13","M9812","星期六",200,200,50,100,50},{"贵阳","武汉","14","N1683","星期二",200,200,50,100,50},};void initCList(CList &cusLinkList)
{CList q=cusLinkList;cusLinkList=(CNode*)malloc(sizeof(CNode));cusLinkList->next=NULL;
}void initQueue(LinkQueue &waitrank)
{HList p = (HList)malloc(sizeof(HNode));if(p==NULL){cout<<"内存不足"<<endl;return;}p->next=NULL;waitrank.front=waitrank.rear=p;
}void initHList(HList &waitrank)
{HList p=waitrank;waitrank=(HNode*)malloc(sizeof(HNode));if(waitrank==NULL){cout<<"内存不足"<<endl;return;}waitrank->next=NULL;
}void initflight()
{allflight = (hangban*)malloc (sizeof(hangban));if(allflight==NULL)exit(0);allflight->next=NULL;Phangban p=allflight,q;for(int i=0;i<14;i++){q=(hangban*)malloc(sizeof(hangban));if(q==NULL)return;strcpy(q->begin,flight1[i].begin);strcpy(q->end,flight1[i].end);strcpy(q->hbid,flight1[i].hbid);strcpy(q->planeid,flight1[i].planeid);strcpy(q->day,flight1[i].day);q->maxnum=flight1[i].maxnum;q->less=flight1[i].less;q->lessrank1=flight1[i].lessrank1;q->lessrank2=flight1[i].lessrank2;q->lessrank3=flight1[i].lessrank3;initCList(q->cusLinkList);initQueue(q->waitrank1);initQueue(q->waitrank2);initQueue(q->waitrank3);q->next=p->next;p->next=q;}
}void printfall(Phangban allflight)
{Phangban p;p = allflight->next;printf("起点   终点   航班号   飞机号   飞行日期   乘员定额   总余票 一等余 二等余 三等余\n");while(p){printf("%4s   %4s   %2s   %5s   %8s   %8d   %8d%8d%8d%5d\n",p->begin,p->end,p->hbid,p->planeid,p->day,p->maxnum,p->less,p->lessrank1,p->lessrank2,p->lessrank3);p=p->next;}printf("\n\n");
}void chaxun()
{char begin[20];char end[20];int flag=0;printf("请输入起点站名:");cin>>begin;cout<<endl;printf("请输入终点站名:");cin>>end;cout<<endl;Phangban p;p = allflight->next;printf("起点   终点   航班号   飞机号   飞行日期   乘员定额   总余票 一等余 二等余 三等余\n");while(p){if((strcmp(begin,p->begin)==0)&&(strcmp(end,p->end)==0)){flag=1;printf("%4s   %4s   %2s   %5s   %8s   %5d   %5d   %5d   %5d\n",p->begin,p->end,p->hbid,p->planeid,p->day,p->maxnum,p->less,p->lessrank1,p->lessrank2,p->lessrank3);}p=p->next;}if(flag==0)cout<<"该航班不存在!";cout<<endl<<endl;
}void houbu(HList &head,char name[],char id[],int need)
{HList q = (HNode*)malloc(sizeof(HNode));strcpy(q->name,name);strcpy(q->id,id);q->num=need;q->next=head->next;head->next=q;
}LinkQueue enqueue(LinkQueue &q,char name[],char id[],int need)
{HList new1=(HNode*)malloc(sizeof(HNode));strcpy(new1->name,name);strcpy(new1->id,id);new1->num=need;new1->next=NULL;q.rear->next=new1;q.rear = new1;return q;
}void dingpiao()
{char name[30];char id[30];char day[30];int need,grade;int num;Phangban info;info = find();if(info==NULL){cout<<"不存在该航班!"<<endl;return;}cout<<"请输入您想要订的舱位等级(1/2/3):";while(true){cin>>grade;if(grade<1||grade>3)cout<<"输入有误,请重新输入:";else{if(grade = 1)num=info->lessrank1;else if(grade = 2)num=info->lessrank2;else num=info->lessrank3;break;}}cout<<"请输入您需要订的票数:";while(true){cin>>need;if(need<1||need>info->less)cout<<"输入有误,请重新输入:";else break;}if(need<=num)//余票够{for(int i=1;i<=need;i++){cout<<"请输入您的姓名:";cin>>name;cout<<endl<<"请输入您的身份证号:";cin>>id;cout<<endl<<"请输入您的飞行日期:";cin>>day;CList head = info->cusLinkList;addCList(head,1,name,id,day,grade);printf("%s 的座位号是:%d\n",name,info->maxnum-info->less+i);}info->less -= need;if(grade == 1)info->lessrank1 -= need;else if(grade == 2)info->lessrank2 -= need;else info->lessrank3 -= need;cout<<"订票成功"<<endl;}else{char vis;cout<<"该舱位的余票不足,请问您是否需要候补(Y/N)"<<endl;while(true){cin>>vis;if(vis!='Y'&&vis!='N')cout<<"输入错误,请重新输入:";else{if(vis=='Y'){for(int i=1;i<=need;i++){cout<<"请输入您的姓名:";cin>>name;cout<<endl<<"请输入您的身份证号:";cin>>id;if(grade==1){info->waitrank1= enqueue(info->waitrank1,name,id,1);}else if(grade == 2){info->waitrank2= enqueue(info->waitrank2,name,id,1);}else  info->waitrank3=enqueue(info->waitrank3,name,id,1);cout<<"排队成功!"<<endl;}}break;}}}
}void addCList(CList &head,int need,char name[],char id[],char day[],int grade)
{CList new1 = (CNode*)malloc(sizeof(CNode));if(new1==NULL){cout<<"内存不足"<<endl;return;}strcpy(new1->name,name);strcpy(new1->id,id);strcpy(new1->day,day);new1->num = need;new1->rank = grade;new1->next = head->next;head->next=new1;
}Phangban find()
{char number[20];cout<<"请输入航班编号: ";cin>>number;Phangban p = allflight->next;while(p){if(!strcmp(number,p->hbid))return p;p=p->next;}return NULL;
}void Houbu(Phangban &info,LinkQueue &waitrank,int les,int grade)
{HList p=waitrank.front;while(p){if(p->num<=les){printf("%s候补成功",p->name);CList head = info->cusLinkList;addCList(head,p->num,p->name,p->id,info->day,grade);printf("您的座位号是:%d\n",info->maxnum-info->less+1);les-=p->num;info->less-=p->num;}p=p->next;}if(grade==1)info->lessrank1=les;else if(grade==2)info->lessrank2=les;else info->lessrank3=les;
}void tuipiao()
{Phangban info;int grade;CList p1,p2,head;char name[20];char id[20];char day[20];info=find();if(info==NULL){cout<<"退票失败,该航班不存在!"<<endl;}head=info->cusLinkList;p1=head->next;cout<<"请输入姓名:";cin>>name;cout<<endl<<"请输入身份证号:";cin>>id;cout<<endl<<"请输入飞行日期:";cin>>day;p2=head;while(p1){if(strcmp(name,p1->name)==0&&(strcmp(id,p1->id)==0&&(strcmp(day,p1->day)==0)))break;p2=p1;p1=p1->next;}if(p1==NULL){cout<<"对不起,您没有订过票,或者输入信息有误!"<<endl;return;}else{grade = p1->rank;p2->next=p1->next;info->less+=p1->num;printf("%s   退票成功!\n",p1->name);if(grade == 1){info->lessrank1+=p1->num;Houbu(info,info->waitrank1,info->lessrank1,grade);}else if(grade == 2){info->lessrank2+=p1->num;Houbu(info,info->waitrank2,info->lessrank1,grade);}else{info->lessrank3+=p1->num;Houbu(info,info->waitrank3,info->lessrank1,grade);}free(p1);}
}int panduan(Phangban allflight,char id[])
{Phangban p = allflight;while(p){if(!strcmp(id,p->hbid)){return 0;}p=p->next;}return 1;
}void insanddel()
{int vis;cout<<"请选择录入(1)或者删除(0):";cin>>vis;if(vis==1){Phangban q;Phangban p = allflight;int y=1;while(y){q=(hangbanNode*)malloc(sizeof(hangban));if(q==NULL)return;cout<<"请输入航班编号"<<endl;cin>>q->hbid;int t=panduan(allflight,q->hbid);if(t==0){printf("该航班编号已存在,请重新输入航班编号\n");continue;}cout<<"请输入起点站名:";cin>>q->begin;cout<<endl<<"请输入终点站名:";cin>>q->end;cout<<endl<<"请输入航班编号:";cin>>q->hbid;cout<<endl<<"请输入飞机编号:";cin>>q->planeid;cout<<endl<<"请输入飞行日期:";cin>>q->day;cout<<endl<<"请输入乘客定额:";cin>>q->maxnum;q->less = q->maxnum;cout<<endl<<"请输入一等余票:";cin>>q->lessrank1;cout<<endl<<"请输入二等余票:";cin>>q->lessrank2;q->lessrank3=q->less-q->lessrank1-q->lessrank2;initCList(q->cusLinkList);initQueue(q->waitrank1);initQueue(q->waitrank2);initQueue(q->waitrank3);q->next=p->next;p->next=q;cout<<endl<<"是否继续录入航班信息(1/0)";cin>>y;}}else{char id[20];cout<<"请输入航班id:";cin>>id;Phangban pre=allflight;Phangban p=pre->next;while(p){if(!strcmp(id,p->hbid)){pre->next=p->next;free(p);}pre=p;p=p->next;}}
}void menu()
{int res;printf("\n\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");printf("                           输入需要办理的业务:");scanf("%d",&res);switch (res){case 1:printfall(allflight);//打印全部航班信息menu();break;case 2:chaxun();//查询航班menu();break;case 3:dingpiao();//订票menu();break;case 4:tuipiao();//退票menu();break;case 5:insanddel();//管理员操作menu();break;default:exit(0);}
}int main()
{initflight();//初始化航班链表menu();return 0;
}

数据结构课设——航空订票相关推荐

  1. 数据结构课设航班订票系统(C语言版)

    数据结构课设航班订票系统(C语言版) 课设要求 (1) 航班管理.每条航线设计出合理的信息,包括:起点和终点站名,航班号,成员额定,飞行周期.飞机型号.余票量.航班票价等 (2) 客户管理.订票的客户 ...

  2. 东北大学20级计算机C语言课设-航空订票系统

    航空订票系统 开发人员:东北大学20级计算机系学生 开发团队:三人小组 开发语言:C语言 开发工具:vs2015 有疑问欢迎进行讨论 总代码数量大概在三千五百行左右 耗时近一个月的时间完成了该次课设, ...

  3. C语言课设 航空订票系统

    大一写的时候没有写注释,后来也懒得加了.在这里说一下读写文件的思路吧. 就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体 ...

  4. java课设 火车订票_JAVA课程设计火车票管理系统

    JAVA课程设计火车票管理系统 *******************实践教学*******************兰州理工大学计算机与通信学院2013 年秋季学期Java 课程设计题 目: 火车票管 ...

  5. 飞机订票系统 python实现(大二上数据结构课设)

    说明: 本博客是从课设报告中截取的重要部分.这个飞机订票系统是本人大二上的数据结构课设,功能相对完善,界面相对美观.图形界面,本来想用Qt5(python中一个图形界面的类库,风格偏向于win10)去 ...

  6. 数据结构课程设计【航空订票系统】

    /* * Copyright (c) 2017,烟台大学计算机学院 * All right reserved. * 文件名称:main.cpp * 作者:于嵩 * 完成日期:2017年12月22日 * ...

  7. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

  8. C语言实现简单的航空订票、退票系统

    代码可以直接复制粘贴即可使用,本文借鉴于这篇文章航空客运订票系统(数据结构课设)_Czc超的博客-CSDN博客_航空客运订票系统数据结构 做了一些改动,将这个项目的实现变得更简单了一点 #includ ...

  9. 基于JAVA航空订票管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA航空订票管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA航空订票管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目架构 ...

最新文章

  1. 【Flask】CORS同源问题解决
  2. Pro LINQ 之三:LINQ to DataSet
  3. 数据持久化 技术比较
  4. 云漫圈 | 什么是微服务?
  5. 全数字实时仿真平台SkyEye的同步数据流语言可信编译器的构造
  6. 多媒体微型计算机必不可少的硬件,第1章计算机基础知识习题材料.doc
  7. Mac终端设置,zsh和bash环境变量配置
  8. python爬取京东手机数据_实例解析Python如何实现爬取京东手机图片
  9. Java Log4j日志简单配置
  10. socket,ioctl获取ip
  11. qi无线充电协议_无线充电Qi专利池正式上线!
  12. UltraISO 软碟通注册码
  13. 简单游戏(easygame)
  14. 一位共阴数码管0至F数码显示
  15. mbedtls学习4.mbedtls_RAM/ROM优化指南
  16. 榆熙电商:拼多多商家怎样开通电子面单服务?有何优势?
  17. ABAddressBook个人使用总结,联系人中、英文排序及中、英文及号码搜索
  18. 卷闸门433遥控钥匙对拷方法
  19. python WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))————
  20. LCPCI 系列通用型 PCI 接口 CAN 卡、PCICAN、PCI CAN

热门文章

  1. Unity3D学习 愤怒的小鸟之Logo界面(一)
  2. win定时关机_今天才知道电脑还可以这样设置定时关机,太方便了。电脑技巧
  3. 计数排序 详解 C代码
  4. iOS9 HTTPS
  5. 流媒体专家(8)h264测试文件百度网盘分享
  6. 理学计算机科学与技术如何调剂,计算机 07理学可以调剂到08工学吗? 比如(077500计算机科学与技术)调剂到(081200计算机科学与技术)...
  7. 【论文笔记】HSIC WIth Small Training Sample Size Using Superpixel-Guided Training Sample Enlargement
  8. LeetCode Database知识点总结 - 1587
  9. 手机拨号键输入*#06# 查到的是什么信息
  10. 任正非:对成功视而不见 成功才能始终伴随华为