C++实现机票预订系统
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++实现机票预订系统 的全部内容, 来源链接: utcz.com/z/353884.html