航空订票系统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為所要錄入航班的數量: {//建立一個帶頭結點的單鏈表LL=(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、訂票、退票
總結
以上是生活随笔為你收集整理的航空订票系统C++课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery链式操作简单的菜单列表
- 下一篇: 计算机论文搜索技巧【一】