![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(航空客運訂票系統(tǒng))_第1頁](http://file4.renrendoc.com/view11/M01/3E/12/wKhkGWV1vIuAO2pzAACr10T_HvE234.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(航空客運訂票系統(tǒng))_第2頁](http://file4.renrendoc.com/view11/M01/3E/12/wKhkGWV1vIuAO2pzAACr10T_HvE2342.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(航空客運訂票系統(tǒng))_第3頁](http://file4.renrendoc.com/view11/M01/3E/12/wKhkGWV1vIuAO2pzAACr10T_HvE2343.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(航空客運訂票系統(tǒng))_第4頁](http://file4.renrendoc.com/view11/M01/3E/12/wKhkGWV1vIuAO2pzAACr10T_HvE2344.jpg)
![數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(航空客運訂票系統(tǒng))_第5頁](http://file4.renrendoc.com/view11/M01/3E/12/wKhkGWV1vIuAO2pzAACr10T_HvE2345.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
(貴州大學計算機科學與信息學院貢獻)#include<iostream.h>#include<process.h>#include<string.h>#include<conio.h>#include<stdio.h>#include<iomanip.h>#defineMAX60#defineNULL0typedefstructCustomer/*乘客信息*/{charName[8];/*姓名*/intAmount;/*定票數(shù)*/charRank;/*艙位等級*/intIDinfor;/*個人信息*/structCustomer*Next;/*指向下一乘客結(jié)點*/}Customer;typedefstructFlight/*航線信息*/{charDes_Name[10];/*終點站名*/charFlight_No[6];/*航班號*/charPlane_No[6];/*飛機號*/intWeek_Day;/*飛行周日*/intCustomer_Amount;/*乘員定額*/intFree_Amount;/*剩余票數(shù)*/intPrice[3];/*艙位等級的價格*/Customer*CustName;/*該航班的已定票乘客名單*/Customer*ReplName;/*該航班的候補乘客名單*/structFlight*Next;/*指示下一航線結(jié)點*/}Flight,*PFlight;intCustomer_Count=0;/*所有航線的定票乘客總數(shù)*/Flight*Head;/*航線頭指針*/Flight*p2;/*航線結(jié)點指針*/Customer*Custp1[MAX];/*各條航線乘客結(jié)點指針*/Customer*Replp1[MAX];/*各條航線候補結(jié)點指針*/intIsEmpty=1;/*是否有定票乘客*/intIsReplace=1;/*是否有候補乘客*/Customer*prior;/*滿足要求的定票乘客的前結(jié)點,以作刪除操作*/intshouldsave=0;/*-------------詢問是否繼續(xù)的函數(shù)-------------*/charContinue(){charanswer;while(1){printf("\n\t您是否想繼續(xù)(Y/N)?");scanf("%s",&answer);system("cls");if(answer=='y'||answer=='Y')return'y';elseif(answer=='n'||answer=='N')return'n';elseprintf("\n\t輸入有誤,請重新輸入!");}}/*---------------操作出錯函數(shù)---------------*/voidErrorMess(){printf("\n\t對不起,您的操作有誤!");getch();}/*--------------系統(tǒng)退出函數(shù)---------------*/intExitSystem(){charanswer;printf("\n\t您是否想要退出系統(tǒng)(Y/N)?");scanf("%s",&answer);if(answer=='y'||answer=='Y')return1;elsereturn0;}/*--------------航線查找函數(shù)-------------*//*Find_Line()為重載函數(shù)*/intFind_Line(PFlightL,char*key)/*核對航線是否唯一*/{intflag=0;/*該標志位0表示未找到相關(guān)信息,反之即找到,以下標志位同理*/Flight*p1;p1=L;/*賦航線首地址*/if(p1==p2)/*首航線不作比較*/returnflag;while(p1!=p2&&p1!=NULL)/*本航班號不納入比較范圍,否則會一直提示航線不唯一*/{if(strcmp(p1->Flight_No,key)==0){flag=1;break;}p1=p1->Next;/*指向下一航班結(jié)點*/}returnflag;}intFind_Line(PFlightL,char*key,PFlight&p2,int&Flight_No)/*航線查找函數(shù)*/{intflag=0;/*該標志位0表示未找到相關(guān)信息,反之即找到*/Flight*p1;p1=L;/*賦航線首結(jié)點*/while(p1!=NULL){if(strcmp(p1->Flight_No,key)==0)/*不包括當前航線*/{flag=1;p2=p1;break;}p1=p1->Next;/*指向下一航班結(jié)點*/if(p1!=NULL)/*遇結(jié)束符不作統(tǒng)計范圍*/Flight_No++;}returnflag;}/*---------------航班查找函數(shù)---------------*/voidLine_search(){Flight*p1;p1=Head; charDesname[50];//查詢終點站航班關(guān)鍵字if(Head==NULL){ printf("\n\t沒有到達您想要的終點站的航班!"); getch();return;}printf("\n\t請輸入終點站名:");scanf("%s",Desname);printf("\n\t您所查詢的航班的信息:\n");printf("\n_____________________________________________________________________________\n");while(p1!=NULL){ if(strcmp(p1->Des_Name,Desname)==0) {printf("Des_NameFlight_NoPlane_NoWeek_DayCust_NumFree_Num1_Price2_Price3_Price\n");printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day, p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2]); }p1=p1->Next; } printf("\n______________________________________________________________________________\n");Continue();} /*-----------------航線添加函數(shù)-------------*/voidLine_Add(){Flight*p1;/*建立臨時航線結(jié)點*/while(1){if(Head==NULL)/*航線為空*/{p1=p2=newFlight;/*建立首個航線*/Head=p2;}else{p1=newFlight;/*建立航線結(jié)點*/p2->Next=p1;/*前一航線結(jié)點指向當前航班結(jié)點*/p2=p1;/*保留當前航班結(jié)點地址*/} printf("\n\t添加新的航線!\n");printf("\n\t請輸入終點站名:");scanf("%s",&p2->Des_Name);while(1)/*數(shù)據(jù)合法性檢驗*/{printf("\n\t請輸入唯一的航班號:");scanf("%s",&p2->Flight_No);if(Find_Line(Head,p2->Flight_No))/*存在航班號*/printf("\n\t航班號已經(jīng)存在!\n");elsebreak;}printf("\n\t請輸入飛機號:");scanf("%s",&p2->Plane_No);while(1){printf("\n\t請輸入航班日期(請輸入1—7):");scanf("%d",&p2->Week_Day);if(p2->Week_Day<1||p2->Week_Day>7)printf("\n\t輸入日期有誤,請重新輸入!\n");elsebreak;}printf("\n\t請輸入座位數(shù)量:");scanf("%d",&p2->Customer_Amount);printf("\n\t請輸入頭等艙的價錢:");scanf("%d",&p2->Price[0]);printf("\n\t請輸入二等艙的價錢:");scanf("%d",&p2->Price[1]);printf("\n\t請輸入三等艙的價錢:");scanf("%d",&p2->Price[2]);p2->Free_Amount=p2->Customer_Amount;/*剩余票數(shù)與乘員定額相同*/p2->CustName=NULL;/*該航線定票乘客頭指針為空*/p2->ReplName=NULL; /*初始候補名單為空*/ shouldsave=1;if(Continue()=='n'){p2->Next=NULL;/*航線的下一結(jié)點為空*/return;}}}/*------------航線是否為空函數(shù)-------------*/intEmpty_Flight(){if(Head==NULL){system("cls");printf("\n\t對不起,航線不存在,按任意鍵返回!");getch();return1;}elsereturn0;}/*------------航線查看函數(shù)-----------------*/voidLine_See(){system("cls");Flight*p1;p1=Head;if(Empty_Flight())/*航班線為空*/ return;printf("\n\n\t航班信息:\n");printf("\n____________________________________________________________________________\n");printf("Des_NameFlight_NoPlane_NoWeek_DayCust_NumFree_Num1_Price2_Price3_Price\n");while(p1!=NULL){ printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day, p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);p1=p1->Next;}printf("\n_____________________________________________________________________________\n");printf("\n\t按任意鍵返回!\n");getch();}/*-------------航線管理菜單------------*/voidLinemanageMenu(){charc;system("cls"); while(1) { printf("\n\t\t航線管理菜單:"); printf("\n_____________________________________________________________________________\n\n"); printf("\t1.添加新的航線\n"); printf("\t2.查詢航線\n"); printf("\t3.查看航線\n"); printf("\t4.返回主菜單\n"); printf("\n______________________________________________________________________________\n"); printf("\t請選擇您想要的服務(wù):");scanf("%s",&c); switch(c) {case'1':Line_Add();break; case'2':Line_search();break;case'3':Line_See();break;case'4':return; } }}/*---------------訂票辦理函數(shù)---------------*/voidbookingMenu(){intTicket_Count,IDinfor,i,flag=0;intFlight_No=0;/*記錄滿足條件的航線的定票結(jié)點*/Flight*p1;/*記下滿足條件的航線結(jié)點地址*/Customer*p2;/*臨時性定票乘員結(jié)點*/Customer*p3;/*臨時性候補乘員結(jié)點*/charanswer[7];/*用戶輸入的航班數(shù)據(jù)*/chartemp;charc;inttag=0;/*候補乘客標志位*/intIsRepl=0;/*是否執(zhí)行候補操作標志位*/if(Empty_Flight())/*航班線為空*/return;while(1){printf("\n\t現(xiàn)在您可以訂票!");flag=0;/*標志位清零以重新作出判斷*/Flight_No=0;tag=0;printf("\n\t請輸入航線號:");scanf("%s",&answer);if(Find_Line(Head,answer,p1,Flight_No))/*調(diào)用航線查找函數(shù),若存在則進行以下操作*/{while(1)/*數(shù)據(jù)合法性檢驗*/{printf("\n\t請輸入您想要訂購的票的數(shù)量:");scanf("%d",&Ticket_Count);if(Ticket_Count==0){printf("\n\t請再次輸入飛機號:\n");getch();}elsebreak;}if(p1->Free_Amount>=Ticket_Count){Customer_Count++;/*定票乘客總數(shù)增1*/flag=1;/*表明進入了訂票實際操作*/IsRepl=1;/*定票量滿足,無需進入候補操作*/if(p1->CustName==NULL)/*首個定票乘客,并記錄相關(guān)屬性*/{Custp1[Flight_No]=p2=newCustomer;/*建立該航線的首位乘客結(jié)點*/p1->CustName=Custp1[Flight_No];}else/*建立該航線的后續(xù)乘客結(jié)點*/{p2=newCustomer;Custp1[Flight_No]->Next=p2;Custp1[Flight_No]=p2;}IsEmpty=0;/*定票乘員不為空*/Custp1[Flight_No]->Amount=Ticket_Count;/*訂票數(shù)*/IDinfor=p1->Customer_Amount-p1->Free_Amount+1;/*算出座位號*/Custp1[Flight_No]->IDinfor=IDinfor;/*賦座位號*/p1->Free_Amount-=Ticket_Count;/*減去定票數(shù)*/printf("\n\t請輸入您的姓名:");scanf("%s",&Custp1[Flight_No]->Name);while(1)/*數(shù)據(jù)合法性檢驗*/{printf("\n\t請輸入艙位等級:");scanf("%s",&Custp1[Flight_No]->Rank);if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3')){printf("\n\t輸入有誤,請重新輸入!");getch();}elsebreak;}printf("\n\t請輸入您的ID信息:"); scanf("%d",&Custp1[Flight_No]->IDinfor);if(Ticket_Count<10)/*為顯示規(guī)整,作相應(yīng)處理*/printf("\n\t");elseprintf("\n\t");printf("\n\t恭喜您訂票成功!\n");for(i=1;i<=Ticket_Count;i++)/*打印座位號*/{ printf("\n\t您所預(yù)定的座位號是%d",IDinfor++);if(i%10==0)printf("\n\t");}printf("\n");}/*滿足定票數(shù)*/elseif(p1->Free_Amount==0){printf("\n\t對不起,票已售完!\n");IsRepl=0;}else{printf("\n\t對不起,當前沒有多余的票!\n");IsRepl=0;}if(!IsRepl){printf("\n\t您是否想成為候補乘客(Y/N)?");scanf("%s",&temp);if(temp=='y'||temp=='Y')/*以下為候補操作*/{if(p1->ReplName==NULL){Replp1[Flight_No]=p3=newCustomer;/*建立該航線的首位候補乘客結(jié)點*/p1->ReplName=Replp1[Flight_No];}else{p3=newCustomer;Replp1[Flight_No]->Next=p3;Replp1[Flight_No]=p3;}IsReplace=0;/*候補乘客不為空*/tag=1;/*已選擇列入候補乘客名單*/Replp1[Flight_No]->Amount=Ticket_Count;printf("\n\t請輸入您的姓名:");scanf("%s",&Replp1[Flight_No]->Name);Replp1[Flight_No]->IDinfor=IDinfor;/*候補乘客的座位*/Replp1[Flight_No]->Amount=Ticket_Count;/*候補乘客的訂票數(shù)*/while(1)/*數(shù)據(jù)合法性檢驗*/{printf("\n\t請輸入艙位等級:");scanf("%s",&Replp1[Flight_No]->Rank);printf("\n\t請輸入您的ID信息:");scanf("%d",&Replp1[Flight_No]->IDinfor);if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3')){printf("\n\t輸入有誤,請重新輸入.");getch();}elsebreak;}printf("\n\t沒有剩余座位!\n");/*候補乘客無座提示*/ shouldsave=1;}/*進入候補名單*/ }/*票數(shù)滿足*/}/*航線存在*/elseprintf("\n\t對不起,航線不存在!\n");/*航線不存在*/if(flag)/*此處不作處理,則會地址溢出*/Custp1[Flight_No]->Next=NULL;/*末位定票乘客的指針置空*/if(tag){Replp1[Flight_No]->Next=NULL;/*末位候補乘客的指針置空*/printf("\n\t您已經(jīng)成功排入候補訂票隊列中!\n");}printf("\n\t是否退出菜單?:(y/n)");scanf("%s",&c);if(c=='y')return;}/*while*/}/*-----------------訂票乘客信息-----------------*/voidDisplay_Reserve(){system("cls");Flight*p1;Customer*p2;p1=Head;if(Empty_Flight())return;printf("\n\t訂票乘客信息");if(IsEmpty){printf("\n\t對不起,沒有訂票乘客信息!\n");getch();return;}printf("\n_____________________________________________________________________________\n");printf("NameFlight_NoPlane_NoTic_AmountDes_NameRank_NoID\n");while(p1!=NULL){if(p1->CustName!=NULL){p2=p1->CustName;while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->Amount,p1->Des_Name,p2->Rank,p2->IDinfor);if(p1->Free_Amount>=1)printf("\n\n\t還有多余的票!\n");elseprintf("\n\n\t票已售完!\n");p2=p2->Next;}}p1=p1->Next;printf("\n\n_____________________________________________________________________________\n");}printf("\n\t按任意鍵返回!");getch();return;}/*-----------------候補乘客信息-----------------*/voidDisplay_Replace(){system("cls");Flight*p1;Customer*p2;p1=Head;if(Empty_Flight())return;printf("\n\t候補乘客信息!");if(IsReplace){printf("\n\t對不起,沒有候補乘客!\n");getch();return;}printf("\n_____________________________________________________________________________\n");printf("NameFlight_NoPlane_NoTic_AmountDes_NameRank_NoID\n");while(p1!=NULL){if(p1->ReplName!=NULL){p2=p1->ReplName;while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->Amount,p1->Des_Name,p2->Rank,p2->IDinfor);if(p1->Free_Amount>=1)printf("\n\t還有多余的票!\n");elseprintf("\n\t票已售完!\n");p2=p2->Next;}}p1=p1->Next;}printf("\n\n_____________________________________________________________________________\n");printf("\n\t按任意鍵返回!");getch();return;}/*-----------------退票辦理函數(shù)-----------------*/voidRefundticketMenu(){intFlight_No=0,flag=0;/*記錄滿足條件的航線的定票結(jié)點*/Flight*p1;/*記下滿足條件的航線結(jié)點地址*/Customer*p2,*p4;/*臨時性定票乘員結(jié)點*/Customer*p3,*p5;/*臨時性候補乘員結(jié)點*/charanswer[7],name[7];/*用戶輸入的航班數(shù)據(jù)*/inttag=0;/*若第二乘客滿足條件,則它的首地址會發(fā)生沖突,注意此處*/intIDinfor;/*記錄座位號*/if(Empty_Flight())/*航班線為空*/return;printf("\n\t現(xiàn)在開始進行退票手續(xù)");if(IsEmpty){printf("\n\t對不起,乘客不存在!");getch();return;}while(1){flag=0;tag=0;Flight_No=0;printf("\n\t請輸入航線:");scanf("%s",&answer);if(Find_Line(Head,answer,p1,Flight_No))/*航線存在*/{p2=p1->CustName;/*指向該航線的乘客名單的首地址*/printf("\n\t請輸入您的姓名:");scanf("%s",&name);if(p2==NULL)/*該航線無定票乘客*/{printf("\n\t對不起,乘客不存在!.");if(Continue()=='n')/*是否繼續(xù)操作*/return;}elsewhile(p2!=NULL)/*查找有無此乘客名*/{if(strcmp(p2->Name,name)==0)/*此外括號不能省略,否則功能會轉(zhuǎn)變*/{if(p2==p1->CustName)/*若為首位乘客滿足*/{prior=p1->CustName;/*記錄指針*/IDinfor=p2->IDinfor;flag=1;break;}}elseif(p2->Next!=NULL)/*記錄滿足航線的的前結(jié)點地址*/{if(strcmp(p2->Next->Name,name)==0){tag=1;/*特別注意此處*/prior=p2;/*記錄滿足定乘客的前一地址,以作刪除操作*/IDinfor=p2->Next->IDinfor;flag=1;break;}}p2=p2->Next;/*指向下一乘客結(jié)點*/ shouldsave=1;}/*while*/if(!flag)printf("\n\t對不起,乘客不存在!\n");}/*存在該航線*/elseprintf("\n\t對不起,航線不存在!\n");if(flag){if(prior==p1->CustName&&!tag)/*首結(jié)點滿足條件且一個乘客,則該航線定票乘客置空*/{if(prior->Next==NULL)/*僅一乘客,頭指針置空*/{p1->Free_Amount+=prior->Amount;p1->CustName=NULL;}else{p1->Free_Amount+=prior->Next->Amount;p1->CustName=prior->Next;/*指向下一乘客結(jié)點*/}}else{p1->Free_Amount+=prior->Next->Amount;prior->Next=prior->Next->Next;/*刪除操作*/}Customer_Count--;if(Customer_Count==0)IsEmpty=1; shouldsave=1;}if(flag)/*存在退票操作*/{p3=p1->ReplName;while(p3!=NULL){if(p3->Amount<=p1->Free_Amount)/*候補乘客的定票數(shù)小于或等于剩余票數(shù)*/{printf("\n\t候補乘客已經(jīng)存在!\n");p4=Custp1[Flight_No]->Next=newCustomer;p4->Next=NULL;IsEmpty=0;if(p1->CustName==NULL)p1->CustName=p4;strcpy(p4->Name,p3->Name);p4->Rank=p3->Rank;p4->Amount=p3->Amount;p4->IDinfor=IDinfor;p1->Free_Amount-=p3->Amount;/*減去相應(yīng)的票數(shù)*/Customer_Count++;if(p3->Next==NULL)/*無候補乘客*/IsReplace=1;if(p1->ReplName==p3){if(p1->ReplName->Next==NULL)p1->ReplName=NULL;/*刪除*/elsep1->ReplName=p3->Next;}elsep5->Next=p3->Next->Next;break;}if(p3->Next!=NULL)if(p3->Next->Am
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國感應(yīng)電爐行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報告
- 中小學遠程教育行業(yè)市場全景分析及投資前景展望報告
- 環(huán)境和職業(yè)健康安全管理體系管理評審報告
- 2025年中國紅酸湯市場供需現(xiàn)狀及投資戰(zhàn)略研究報告
- 電梯廣告行業(yè)市場深度分析及投資規(guī)劃研究報告
- 2025-2030年中國印刷和零部件行業(yè)深度研究分析報告
- 2025年橡膠圈橡膠墊行業(yè)深度研究分析報告
- 中國藻油DHA軟糖行業(yè)市場深度研究及投資戰(zhàn)略規(guī)劃建議報告
- 2025年中國壽險電話營銷行業(yè)發(fā)展?jié)摿︻A(yù)測及投資戰(zhàn)略研究報告
- 2025年無油活塞式真空泵浦行業(yè)深度研究分析報告
- 北師大版四年級下冊數(shù)學第一單元測試卷帶答案
- 2024年山東省德州市中考道德與法治試題卷(含答案解析)
- 潮流嘻哈文化時尚活動策劃演示模板
- 廣東省2024年中考化學試卷【附參考答案】
- 水利水電工程單元工程施工質(zhì)量驗收評定表及填表說明
- 2024年全國高考真題新課標理綜生物試卷(山西、河南、云南、新疆)(解析版)
- 客服專員+云客服安全知識雙11阿里淘寶云客服在線+語音+專項云客服考試試題及答案
- 中石化高級職稱英語考試
- 成人重癥患者人工氣道濕化護理專家共識 解讀
- 2-3-分子生物學與基因工程
- 焦煤集團5MW10MWh儲能技術(shù)方案
評論
0/150
提交評論