版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
(貴州大學計算機科學與信息學院貢獻)#include<iostream.h>#include<process.h>#include<string.h>#include<conio.h>#include<stdio.h>#include<iomanip.h>#defineMAX60#defineNULL0typedefstructCustomer/*乘客信息*/{charName[8];/*姓名*/intAmount;/*定票數*/charRank;/*艙位等級*/intIDinfor;/*個人信息*/structCustomer*Next;/*指向下一乘客結點*/}Customer;typedefstructFlight/*航線信息*/{charDes_Name[10];/*終點站名*/charFlight_No[6];/*航班號*/charPlane_No[6];/*飛機號*/intWeek_Day;/*飛行周日*/intCustomer_Amount;/*乘員定額*/intFree_Amount;/*剩余票數*/intPrice[3];/*艙位等級的價格*/Customer*CustName;/*該航班的已定票乘客名單*/Customer*ReplName;/*該航班的候補乘客名單*/structFlight*Next;/*指示下一航線結點*/}Flight,*PFlight;intCustomer_Count=0;/*所有航線的定票乘客總數*/Flight*Head;/*航線頭指針*/Flight*p2;/*航線結點指針*/Customer*Custp1[MAX];/*各條航線乘客結點指針*/Customer*Replp1[MAX];/*各條航線候補結點指針*/intIsEmpty=1;/*是否有定票乘客*/intIsReplace=1;/*是否有候補乘客*/Customer*prior;/*滿足要求的定票乘客的前結點,以作刪除操作*/intshouldsave=0;/*-------------詢問是否繼續(xù)的函數-------------*/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輸入有誤,請重新輸入!");}}/*---------------操作出錯函數---------------*/voidErrorMess(){printf("\n\t對不起,您的操作有誤!");getch();}/*--------------系統退出函數---------------*/intExitSystem(){charanswer;printf("\n\t您是否想要退出系統(Y/N)?");scanf("%s",&answer);if(answer=='y'||answer=='Y')return1;elsereturn0;}/*--------------航線查找函數-------------*//*Find_Line()為重載函數*/intFind_Line(PFlightL,char*key)/*核對航線是否唯一*/{intflag=0;/*該標志位0表示未找到相關信息,反之即找到,以下標志位同理*/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;/*指向下一航班結點*/}returnflag;}intFind_Line(PFlightL,char*key,PFlight&p2,int&Flight_No)/*航線查找函數*/{intflag=0;/*該標志位0表示未找到相關信息,反之即找到*/Flight*p1;p1=L;/*賦航線首結點*/while(p1!=NULL){if(strcmp(p1->Flight_No,key)==0)/*不包括當前航線*/{flag=1;p2=p1;break;}p1=p1->Next;/*指向下一航班結點*/if(p1!=NULL)/*遇結束符不作統計范圍*/Flight_No++;}returnflag;}/*---------------航班查找函數---------------*/voidLine_search(){Flight*p1;p1=Head; charDesname[50];//查詢終點站航班關鍵字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();} /*-----------------航線添加函數-------------*/voidLine_Add(){Flight*p1;/*建立臨時航線結點*/while(1){if(Head==NULL)/*航線為空*/{p1=p2=newFlight;/*建立首個航線*/Head=p2;}else{p1=newFlight;/*建立航線結點*/p2->Next=p1;/*前一航線結點指向當前航班結點*/p2=p1;/*保留當前航班結點地址*/} printf("\n\t添加新的航線!\n");printf("\n\t請輸入終點站名:");scanf("%s",&p2->Des_Name);while(1)/*數據合法性檢驗*/{printf("\n\t請輸入唯一的航班號:");scanf("%s",&p2->Flight_No);if(Find_Line(Head,p2->Flight_No))/*存在航班號*/printf("\n\t航班號已經存在!\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請輸入座位數量:");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;/*剩余票數與乘員定額相同*/p2->CustName=NULL;/*該航線定票乘客頭指針為空*/p2->ReplName=NULL; /*初始候補名單為空*/ shouldsave=1;if(Continue()=='n'){p2->Next=NULL;/*航線的下一結點為空*/return;}}}/*------------航線是否為空函數-------------*/intEmpty_Flight(){if(Head==NULL){system("cls");printf("\n\t對不起,航線不存在,按任意鍵返回!");getch();return1;}elsereturn0;}/*------------航線查看函數-----------------*/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請選擇您想要的服務:");scanf("%s",&c); switch(c) {case'1':Line_Add();break; case'2':Line_search();break;case'3':Line_See();break;case'4':return; } }}/*---------------訂票辦理函數---------------*/voidbookingMenu(){intTicket_Count,IDinfor,i,flag=0;intFlight_No=0;/*記錄滿足條件的航線的定票結點*/Flight*p1;/*記下滿足條件的航線結點地址*/Customer*p2;/*臨時性定票乘員結點*/Customer*p3;/*臨時性候補乘員結點*/charanswer[7];/*用戶輸入的航班數據*/chartemp;charc;inttag=0;/*候補乘客標志位*/intIsRepl=0;/*是否執(zhí)行候補操作標志位*/if(Empty_Flight())/*航班線為空*/return;while(1){printf("\n\t現在您可以訂票!");flag=0;/*標志位清零以重新作出判斷*/Flight_No=0;tag=0;printf("\n\t請輸入航線號:");scanf("%s",&answer);if(Find_Line(Head,answer,p1,Flight_No))/*調用航線查找函數,若存在則進行以下操作*/{while(1)/*數據合法性檢驗*/{printf("\n\t請輸入您想要訂購的票的數量:");scanf("%d",&Ticket_Count);if(Ticket_Count==0){printf("\n\t請再次輸入飛機號:\n");getch();}elsebreak;}if(p1->Free_Amount>=Ticket_Count){Customer_Count++;/*定票乘客總數增1*/flag=1;/*表明進入了訂票實際操作*/IsRepl=1;/*定票量滿足,無需進入候補操作*/if(p1->CustName==NULL)/*首個定票乘客,并記錄相關屬性*/{Custp1[Flight_No]=p2=newCustomer;/*建立該航線的首位乘客結點*/p1->CustName=Custp1[Flight_No];}else/*建立該航線的后續(xù)乘客結點*/{p2=newCustomer;Custp1[Flight_No]->Next=p2;Custp1[Flight_No]=p2;}IsEmpty=0;/*定票乘員不為空*/Custp1[Flight_No]->Amount=Ticket_Count;/*訂票數*/IDinfor=p1->Customer_Amount-p1->Free_Amount+1;/*算出座位號*/Custp1[Flight_No]->IDinfor=IDinfor;/*賦座位號*/p1->Free_Amount-=Ticket_Count;/*減去定票數*/printf("\n\t請輸入您的姓名:");scanf("%s",&Custp1[Flight_No]->Name);while(1)/*數據合法性檢驗*/{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ī)整,作相應處理*/printf("\n\t");elseprintf("\n\t");printf("\n\t恭喜您訂票成功!\n");for(i=1;i<=Ticket_Count;i++)/*打印座位號*/{ printf("\n\t您所預定的座位號是%d",IDinfor++);if(i%10==0)printf("\n\t");}printf("\n");}/*滿足定票數*/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;/*建立該航線的首位候補乘客結點*/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;/*候補乘客的訂票數*/while(1)/*數據合法性檢驗*/{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;}/*進入候補名單*/ }/*票數滿足*/}/*航線存在*/elseprintf("\n\t對不起,航線不存在!\n");/*航線不存在*/if(flag)/*此處不作處理,則會地址溢出*/Custp1[Flight_No]->Next=NULL;/*末位定票乘客的指針置空*/if(tag){Replp1[Flight_No]->Next=NULL;/*末位候補乘客的指針置空*/printf("\n\t您已經成功排入候補訂票隊列中!\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;}/*-----------------退票辦理函數-----------------*/voidRefundticketMenu(){intFlight_No=0,flag=0;/*記錄滿足條件的航線的定票結點*/Flight*p1;/*記下滿足條件的航線結點地址*/Customer*p2,*p4;/*臨時性定票乘員結點*/Customer*p3,*p5;/*臨時性候補乘員結點*/charanswer[7],name[7];/*用戶輸入的航班數據*/inttag=0;/*若第二乘客滿足條件,則它的首地址會發(fā)生沖突,注意此處*/intIDinfor;/*記錄座位號*/if(Empty_Flight())/*航班線為空*/return;printf("\n\t現在開始進行退票手續(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)/*此外括號不能省略,否則功能會轉變*/{if(p2==p1->CustName)/*若為首位乘客滿足*/{prior=p1->CustName;/*記錄指針*/IDinfor=p2->IDinfor;flag=1;break;}}elseif(p2->Next!=NULL)/*記錄滿足航線的的前結點地址*/{if(strcmp(p2->Next->Name,name)==0){tag=1;/*特別注意此處*/prior=p2;/*記錄滿足定乘客的前一地址,以作刪除操作*/IDinfor=p2->Next->IDinfor;flag=1;break;}}p2=p2->Next;/*指向下一乘客結點*/ shouldsave=1;}/*while*/if(!flag)printf("\n\t對不起,乘客不存在!\n");}/*存在該航線*/elseprintf("\n\t對不起,航線不存在!\n");if(flag){if(prior==p1->CustName&&!tag)/*首結點滿足條件且一個乘客,則該航線定票乘客置空*/{if(prior->Next==NULL)/*僅一乘客,頭指針置空*/{p1->Free_Amount+=prior->Amount;p1->CustName=NULL;}else{p1->Free_Amount+=prior->Next->Amount;p1->CustName=prior->Next;/*指向下一乘客結點*/}}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)/*候補乘客的定票數小于或等于剩余票數*/{printf("\n\t候補乘客已經存在!\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;/*減去相應的票數*/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 12710-2024焦化安全規(guī)范
- 蘇科版八年級物理上冊《第三章光的折射、透鏡》章末測試卷帶答案
- 多功能會議室系統建議方案
- 主要領導在2025新年工作部署大會上的講話
- 第十四章光的干涉作業(yè)
- 高一化學第二單元化學物質及其變化第二講離子反應練習題
- 2024屆河南省非凡吉創(chuàng)聯盟高考化學押題試卷含解析
- 2024高中地理第一章宇宙的地球中4地球的結構課時作業(yè)含解析湘教版必修1
- 2024高中語文第一單元以意逆志知人論世自主賞析書憤學案新人教版選修中國古代詩歌散文欣賞
- 2024高中語文第四單元新聞和報告文學第12課飛向太空的航程學案新人教版必修1
- 第二章 運營管理戰(zhàn)略
- 《三本白皮書》全文內容及應知應會知識點
- 專題14 思想方法專題:線段與角計算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來器械及植入物管理制度(4篇)
- 港口與港口工程概論
- 《念珠菌感染的治療》課件
- 門店裝修設計手冊
- 考研計算機學科專業(yè)基礎(408)研究生考試試卷與參考答案(2025年)
- 2024護理個人年終總結
- 海南省申論真題2020年(縣級及以上)
- 商業(yè)倫理與企業(yè)社會責任(山東財經大學)智慧樹知到期末考試答案章節(jié)答案2024年山東財經大學
評論
0/150
提交評論