C++实现机票预订系统
更新时间:2020年4月25日 17:26 点击:1798
C++编写一个简单的机票预订系统。该程序显示一个带有下列选项的菜单:预订机票、取消预订、查看某人是否预定了机票,以及显示预订乘客。这些信息保存在一个按照字母排列的名字链表中。在程序的简化版中,假设只为一趟航班预订机票。在完全版中不再限制航班的数目。创建一个航班链表,其中每个节点都指向乘客链表的指针。
/*******************list.h**********************/ #include <iostream> #include <malloc.h> #include <string.h> using namespace std; typedef struct TK{ char Name[20]; int SeatId; struct TK *next; }Ticket; typedef struct FLY { char FlightId[10]; int Seat[50]; Ticket *PersonHead; struct FLY *next; }Flight; class Person{ public: void ListInitiate(Flight **head); bool Check(int *Seat,int Ch); void Insert(Flight *head); int Delete(Flight *head); void show(Flight *head); void Search(Flight *head); void AddFlght(Flight *head); void DeleteFlght(Flight *head); }; /*******************************main.cpp**********************/ #include "list.h" int menu() { int option; cout<<endl<<endl; cout<<"主菜单"<<endl; cout<<" 1.Booking the ticket of flighting"<<endl; cout<<" 2.Cancel the flighting"<<endl; cout<<" 3.Display the information "<<endl; cout<<" 4.Search"<<endl; cout<<" 5.Add a Flight"<<endl; cout<<" 6.Delete a Flight"<<endl; cout<<" 0.Exit"<<endl<<endl; cout<<"Please input your option:"; cin>>option; getchar(); cout<<endl; if(option>=0&&option<=6) return option; else return -1; } int main() { cout<<"------------------------->航班管理系统<<<<-----------------------------"<<endl; cout<<" 欢迎你使用该航班系统"<<endl; Flight *head; Person P; P.ListInitiate(&head); while(true) { switch(menu( )) { case 1:P.Insert(head);break; //预订 case 2:P.Delete(head);break; //取消 case 3:P.show(head);break; //显示 case 4:P.Search(head);break; //查询 case 5:P.AddFlght(head);break; //添加航班 case 6:P.DeleteFlght(head);break; //删除航班 case 0:exit(0); default:cout<<"Choice error!\n"; } } return 0; } /*****************************************passenger.cpp*************************/ #include "List.h" void Person::ListInitiate(Flight **head) { int count=0; *head = (Flight *)malloc(sizeof(Flight)); (*head)->PersonHead=(Ticket *)malloc(sizeof(Ticket)); (*head)->PersonHead->next=NULL; (*head)->next=NULL; for(int i=0;i<50;i++) { (*head)->Seat[i]=0; } } bool Person::Check(int *Seat,int Ch) { int i; for(int i=0;i<50;i++) { if(Ch==i&&Seat[i]!=1)return 1; } return 0; } Flight* Index(Flight *head,char *Id) { Flight *p=head->next; while(p) { if(strcmp(p->FlightId,Id)==0) { return p; } p=p->next; } return NULL; } /*******************************预定******************************/ void Person::Insert(Flight *head) { int count=0; int Ch; Flight *s=head; if(s->next==NULL) { cout<<"暂无航班!"<<endl; return ; } cout<<"航班列表:"<<endl; s=s->next; while(s!=NULL) { puts(s->FlightId); count++; if(count%5==0) cout<<"\n"; s=s->next; } count=0; char FID[10]; cout<<"输入航班ID:"; gets(FID); s=Index(head,FID); if(s==NULL) { cout<<"输入ID有误"<<endl; return; } cout<<endl; cout<<"有以下座位可供选择:"<<endl; for(int i=0;i<50;i++) { if(s->Seat[i]!=1) { cout<<i<<"号"<<"\t"; count++; if(count%5==0) cout<<"\n"; } } cout<<endl; cout<<"输入座位号:\n"; cin>>Ch; getchar(); if(!Check(head->Seat,Ch)) { cout<<"This Seat have been booked or it is non-existent"; return ; } s->Seat[Ch]=1; char name[20]; cout<<endl; cout<<"Input your Name:"; gets(name); Ticket *p=s->PersonHead,*q; while(p->next!=NULL) { if(strcmp(p->next->Name,name)>0) break; p=p->next; } q=(Ticket *)malloc(sizeof(Ticket)); q->next=p->next; p->next=q; strcpy(q->Name,name); q->SeatId=Ch; } /*******************************取消预定******************************/ int Person::Delete(Flight *head) { char name[20],FID[10]; cout<<"Input your Name:"; gets(name); getchar(); Flight *s; cout<<"Input the Flight ID:"; gets(FID); s=Index(head,FID); if(s==NULL) { cout<<"输入ID有误"<<endl; return 0; } Ticket *p=s->PersonHead->next,*pre=s->PersonHead; int flag=0; while(p!=NULL) { if(strcmp(p->Name,name)==0){ flag=1; break; } pre=p; p=p->next; } if(flag==1){ pre->next=p->next; s->Seat[p->SeatId]=0; free(p); cout<<"你的机票已经取消成功"; } else { cout<<"您还没订票\n"; return 0; } return 1; } /*******************************显示信息******************************/ void Person::show(Flight *head) { Flight *s; char FID[10]; cout<<"Input The Flight ID:"; gets(FID); s=Index(head,FID); if(s==NULL) { cout<<"输入ID有误"<<endl; return; } Ticket *p=s->PersonHead->next; if(p==NULL) { cout<<"还没乘客订票"<<endl; return; } while(p!=NULL) { cout<<"乘客: "<<p->Name<<" 座位号:" <<p->SeatId; p=p->next; } } /*******************************查询相关信息******************************/ void Person::Search(Flight *head) { char name[20]; cout<<"Input Your Name:"; gets(name); Flight *s; char FID[10]; cout<<"Input The Flight ID:"; gets(FID); s=Index(head,FID); if(s==NULL) { cout<<"输入ID有误"<<endl; return; } Ticket *p=s->PersonHead->next; int flag=0; while(p!=NULL) { if(strcmp(p->Name,name)==0){ flag=1; break; } p=p->next; } if(flag==1){ cout<<name<<" 已订机票"<<endl; } else { cout<<name<<" 未订机票"<<endl; } } /*******************************增加航班**********************************/ void Person::AddFlght(Flight *head) { char FlightID[10]; Flight *p=head,*q; cout<<" 输入航班ID:"; gets(FlightID); while(p->next) { p=p->next; } ListInitiate(&q); p->next=q; strcpy(q->FlightId,FlightID); cout<<"——航班已添加成功!"; } /**********************************删除航班*******************************************/ void Person::DeleteFlght(Flight *head) { char FlightID[10]; int flag=0; Flight *p=head->next,*q=head; int count=0; Flight *s=head; if(s->next==NULL) { cout<<" 暂无航班!"<<endl; return ; } cout<<" 航班列表:"<<endl; s=s->next; while(s!=NULL) { cout<<s->FlightId<<endl; count++; if(count%5==0) cout<<"\n"; s=s->next; } cout<<" 输入航班ID:"; gets(FlightID); while(p) { if(strcmp(p->FlightId,FlightID)==0) { flag=1;break; } q=p; p=p->next; } if(flag==0) { cout<<" 该航班ID不存在!"; return ; } q->next=q->next->next; free(p); cout<<" 航班已删除!\n"; }
效果如下:
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
上一篇: C++为什么要用指针而不直接使用对象?
下一篇: C语言解数独程序的源码
相关文章
- vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
- 这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
- 整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
- 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。下面通过实例代码给大家介绍c++中的循环引用,一起看看吧...2020-04-25
- 这篇文章主要给大家介绍了关于C++随机点名生成器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 这篇文章主要介绍了C++ 约瑟夫环问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-15
- 这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章是对C++中的常见编译错误进行了详细的分析介绍,需要的朋友参考下...2020-04-25
- 这篇文章主要介绍了c++优先队列(priority_queue)用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25