C++实现航空订票系统课程设计
本文实例为大家分享了C++实现航空订票系统的具体代码,供大家参考,具体内容如下
一、题目
1.录入功能
可以录入航班信息(如航班号,起飞降落时间,城市,座位数,票价)
2.查询功能
可以查询航班的各项信息(如根据航班号,起飞降落城市查找航班并显示航班信息)
3.修改删除功能
可以修改删除航班的信息
4.追加航线
在原本的航线之后可以继续添加航线方便操作
5.订票功能
可以订票并且记录下乘客的相关信息(如姓名,身份证号码)
6.退票功能
可以退票并且记录乘客的相关信息以及退票信息
二、代码
#include<iostream> #include<fstream> #include<stdlib.h> #include<string.h> using namespace std; typedef struct Node { int hangbanhao;//航班号 char qifeichengshi[10];//起飞城市 char jiangluochengshi[10];//降落城市 char qifeishijian[10];//起飞时间 char jiangluoshijian[10];//降落时间 int zuoweishu;//座位数 int piaojia;//票价 struct Node *next;//结点的指针域 }LNode,*LinkList;//定义航班信息 LinkList为指向结构体LNode的指针类型 typedef struct CK { char name[10];//乘客姓名 char id[18];//乘客身份证号 struct CK *next;//结点的指针域 }ck,*cke;//乘客信息 void import(int n,LinkList &L)//录入航班函数: n为所要录入航班的数量: {//建立一个带头结点的单链表L L=(LinkList)malloc(sizeof(LNode));//申请表空间 L->next=NULL;//头结点的指针域置空 LNode * tail=L;//将尾赋给尾指针,等价LinkList tail=L; for(int i=0; i<n; i++)//逐个赋值 { LNode *p=(LinkList)malloc(sizeof(LNode));//创建一个p结点 cout<<"请输入第"<<i+1<<"个航班的航班号 "; cin>>p->hangbanhao; cout<<"请输入第"<<i+1<<"个航班的起飞城市 "; cin>>p->qifeichengshi; cout<<"请输入第"<<i+1<<"个航班的降落城市 "; cin>>p->jiangluochengshi; cout<<"请输入第"<<i+1<<"个航班的起飞时间 "; cin>>p->qifeishijian; cout<<"请输入第"<<i+1<<"个航班的降落时间 "; cin>>p->jiangluoshijian; cout<<"请输入第"<<i+1<<"个航班的座位数 "; cin>>p->zuoweishu; cout<<"请输入第"<<i+1<<"个航班的票价"; cin>>p->piaojia; p->next=NULL;//头结点的指针域置空 tail->next=p;//将新结点插入尾部 tail=p;//插入的结点变为尾结点,尾插法 } } //写入本地文件,并读取输出显示 void show_L(LinkList &L)//输出浏览机票信息 { ofstream out("out.txt");//实例化一个对象 if (out.is_open()) { LinkList p=L->next; while(p) { out<<"航班号:"; out<<p->hangbanhao; out<<" 起飞城市:"; out <<p->qifeichengshi; out<<" 降落城市:"; out <<p->jiangluochengshi; out<<" 起飞时间:"; out <<p->qifeishijian; out<<" 降落时间:"; out <<p->jiangluoshijian; out<<" 座位数:"; out<<p->zuoweishu; out<<" 票价:"; out<<p->piaojia; out<< "\n";//用于换行,是下面in.getline的关键 p=p->next; } } out.close(); //写完 char buffer[256]; ifstream in("out.txt"); if (! in.is_open()) { cout << "Error opening file"; exit (1); } while (!in.eof() ) { in.getline (buffer,100); cout << buffer << endl; } } //按航班号查找 LinkList GetElem_L(LinkList &L,int e) { LinkList p=L->next; while(p) { if(p->hangbanhao!=e) p=p->next; else return p; } return 0; } //按航班起降城市查找 LinkList GetElem_Lc(LinkList &L,char qi[10],char ji[10]) { LinkList p=L->next; while(p) { if(strcmp(p->qifeichengshi,qi)!=0||strcmp(p->jiangluochengshi,ji)!=0) p=p->next; else return p; } return 0; } //删除 int ListDelete_L(LinkList &L,int e){ LinkList p=L; while(p->next&&p->next->hangbanhao!=e){ p=p->next;//直到查找到要删除的结点 } if(!p->next) return 0; LinkList q=p->next; p->next=q->next;//p->next=p->next->next; free(q);//本题q是需要删除的结点 return 1; } //插入 int ListInsert_L(LinkList &L,int i){ LinkList p=L;//i为插入的位置 int j=0; while(p&&j<i-1){ p=p->next; ++j; } if(!p||j>i-1) return 0; LNode *s=(LinkList)malloc(sizeof(LNode)); cout<<"输入航班号:"; cin>>s->hangbanhao; cout<<"输入起飞城市:"; cin>>s->qifeichengshi; cout<<"输入降落城市:"; cin>>s->jiangluochengshi; cout<<"输入起飞时间:"; cin>>s->qifeishijian; cout<<"输入降落时间:"; cin>>s->jiangluoshijian; cout<<"输入座位数:"; cin>>s->zuoweishu; cout<<"输入票价:"; cin>>s->piaojia; s->next=p->next; p->next=s;//s->next=p->next;p->next=s; return 1; } //修改 LinkList xiugai(LinkList &L,int yxg) { LinkList q=L->next; while(q) { if(q->hangbanhao!=yxg) q=q->next; else return q; } return 0; } //乘客信息录入 void importren(int n,cke &C)//录入航班函数: n为所要录入航班的数量: { C=(cke)malloc(sizeof(ck)); C->next=NULL; ck*ta=C; for(int i=0; i<n; i++) { ck *p=(cke)malloc(sizeof(ck));//就是创建一个p结点,关键就是写法,LNdoe *p; cout<<"请输入第"<<i+1<<"个乘客的姓名 "; cin>>p->name; cout<<"请输入第"<<i+1<<"个航班的身份证ID "; cin>>p->id; p->next=NULL; ta->next=p; ta=p;//尾插法,根据循环画图可知,tail指针始终在最后 } } //订票乘客信息和航班信息写入本地和读取 void show_dp(cke &C,LinkList &R) { ofstream out("dinpiao.txt");//实例化一个对象 if (out.is_open()) { cke p=C->next; while(p){ out<<"姓名 "; out<<p->name; out<<" 身份证ID "; out<<p->id; out<< "\n";//用于换行,是下面in.getline的关键 p=p->next; } if(R->zuoweishu-1>=0) { out<<"航班号:"<<R->hangbanhao; out<<" 起飞城市:"<<R->qifeichengshi; out<<" 降落城市:"<<R->jiangluochengshi; out<<" 起飞时间:"<<R->qifeishijian; out<<" 降落时间:"<<R->jiangluoshijian; out<<" 座位数:"<<R->zuoweishu-1;//订票之后座位数减一 out<<" 票价:"<<R->piaojia; out<< "\n";//用于换行,是下面in.getline的关键 out<<"订票成功"; out<< "\n";//用于换行,是下面in.getline的关键 } else { out<<"航班号:"<<R->hangbanhao; out<<" 起飞城市:"<<R->qifeichengshi; out<<" 降落城市:"<<R->jiangluochengshi; out<<" 起飞时间:"<<R->qifeishijian; out<<" 降落时间:"<<R->jiangluoshijian; out<<" 座位数:"<<R->zuoweishu; out<<" 票价:"<<R->piaojia; out<< "\n";//用于换行,是下面in.getline的关键 out<<"该航班暂无票,请选择其他航班"; out<< "\n";//用于换行,是下面in.getline的关键 } } out.close(); //写完 char buffer[256]; ifstream in("dinpiao.txt"); if (! in.is_open()) { cout << "Error opening file"; exit (1); } while (!in.eof() ) { in.getline (buffer,100); cout << buffer << endl; } } //退票乘客信息和航班信息写入本地和读取 void show_tp(cke &C,LinkList &R) { ofstream out("dinpiao.txt");//实例化一个对象 if (out.is_open()) { cke p=C->next; while(p){ out<<"姓名 "; out<<p->name; out<<"身份证ID "; out<<p->id; out<< "\n";//用于换行,是下面in.getline的关键 p=p->next; } out<<"航班号 "<<R->hangbanhao; out<<" 起飞城市:"<<R->qifeichengshi; out<<" 降落城市:"<<R->jiangluochengshi; out<<" 起飞时间:"<<R->qifeishijian; out<<" 降落时间:"<<R->jiangluoshijian; out<<" 座位数:"<<R->zuoweishu;//退票之后不需要加1,用最初的座位数; out<<" 票价:"<<R->piaojia; out<< "\n";//用于换行,是下面in.getline的关键 out<<"退票成功"; out<< "\n";//用于换行,是下面in.getline的关键 } out.close(); //写完 char buffer[256]; ifstream in("dinpiao.txt"); if (! in.is_open()) { cout << "Error opening file"; exit (1); } while (!in.eof() ) { in.getline (buffer,100); cout << buffer << endl; } } void menu()//显示菜单界面 { cout<<"=================================欢迎使用航空订票系统==============================="<<endl; cout<<"* 1请先录入航班信息 *"<<endl; cout<<"* 2根据航班号查找航班 *"<<endl; cout<<"* 3根据起降城市查找航班 *"<<endl; cout<<"* 4删除航班 *"<<endl; cout<<"* 5插入航班 *"<<endl; cout<<"* 6修改航班 *"<<endl; cout<<"* 7订票录入乘客信息 *"<<endl; cout<<"* 8退票 *"<<endl; cout<<"===================================================================================="<<endl; } int main() { LinkList L;//L是指针 航班 cke C;//乘客 while(1) { menu(); int caozuo; cout<<"请选择操作"; cin>>caozuo; switch(caozuo) { case 1: //创建 int num; cout<<"请输入要录入的航班数:"; cin>>num; cout<<endl; import(num,L);//录入航班函数: n为所要录入航班的数量: cout<<endl; cout<<"航班信息录入成功"; cout<<endl<<endl; //写入本地文件,并读取输出显示 show_L(L); break; case 2: //根据航班号查找 int dchbh;//根据航班号查找 printf("请输入待查航班号:"); cin>>dchbh; LinkList p; p=GetElem_L(L,dchbh);//查找 cout<<"待查航班为:"; cout<<"航班号:"<<p->hangbanhao; cout<<" 起飞城市:"<<p->qifeichengshi; cout<<" 降落城市:"<<p->jiangluochengshi; cout<<" 起飞时间:"<<p->qifeishijian; cout<<" 降落时间:"<<p->jiangluoshijian; cout<<" 座位数:"<<p->zuoweishu; cout<<" 票价:"<<p->piaojia; cout<<endl<<endl; break; case 3: //根据起降城市查找 char qi[10]; char ji[10]; printf("请输入待查航班起降城市:"); cout<<"输入起飞城市:"; cin>>qi; cout<<"输入降落城市:"; cin>>ji; LinkList J; J=GetElem_Lc(L,qi,ji);//查找 cout<<"待查航班为:"; cout<<"航班号:"<<J->hangbanhao; cout<<" 起飞城市:"<<J->qifeichengshi; cout<<" 降落城市:"<<J->jiangluochengshi; cout<<" 起飞时间:"<<J->qifeishijian; cout<<" 降落时间:"<<J->jiangluoshijian; cout<<" 座位数:"<<J->zuoweishu; cout<<" 票价:"<<J->piaojia; cout<<endl<<endl; break; case 4: //删除 int shanchu; printf("请输入要删除的航班号:"); scanf("%d",&shanchu); ListDelete_L(L,shanchu);//删除 show_L(L); cout<<endl<<endl; break; case 5: //插入 //这里位置始终在第一行 ListInsert_L(L,1);//插入 show_L(L); cout<<endl<<endl; break; case 6: //修改 printf("请输入要修改的航班号:"); int yxg; cin>>yxg; LinkList q; q=xiugai(L,yxg);//修改 cout<<"航班号修改为:"; cin>>q->hangbanhao; cout<<"航班起飞城市修改为:"; cin>>q->qifeichengshi; cout<<"航班降落城市修改为:"; cin>>q->jiangluochengshi; cout<<"航班起飞时间修改为:"; cin>>q->qifeishijian; cout<<"航班降落时间修改为:"; cin>>q->jiangluoshijian; cout<<"航班座位数修改为:"; cin>>q->zuoweishu; cout<<"航班票价修改为:"; cin>>q->piaojia; show_L(L); cout<<endl<<endl; break; case 7: //订票 int renshu; cout<<"请选择您要订票的人数:"; cin>>renshu; cout<<endl; importren(renshu,C);//录入乘客信息 cout<<endl; cout<<"乘客信息录入成功"; cout<<endl; int m; cout<<"请输入您要订的航班号:"; cin>>m; cout<<endl<<endl; LinkList R; R=GetElem_L(L,m);//查找乘客订的航班 show_dp(C,R);//写入本地文件,并读取输出显示 cout<<endl<<endl; break; case 8: //退票 cout<<"请输入您要退票的航班号:"; int yt; cin>>yt; cout<<endl<<endl; LinkList K; K=GetElem_L(L,yt);//查找乘客订的航班 show_tp(C,K);//写入本地文件,并读取输出显示 cout<<endl<<endl; break; }//swith的大括号 }//while的大括号 return 0; }//主函数的大括号
三、运行结果
1、录入航班信息
2、查找航班(根据航班号、起降城市查找航班)
3、删除航班
4、插入航班
5、修改航班
6、订票、退票
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)