




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計課程設(shè)計【設(shè)計題目】航空公司訂票系統(tǒng)【問題描述】編寫一個咸陽航空公司訂票大廳的一個訂票系統(tǒng),可以在系統(tǒng)中錄入并修改各個航班的具體情況,幫助乘客準確的查詢各航班的最新信息(包括航班號、航班的起始時間和地點、票價)和各項業(yè)務(wù)的及時辦理(包括訂票、退票等)。該系統(tǒng)用可以用C+的類編寫?!拒浖δ堋?.輸入航班信息并保存到磁盤 2.瀏覽航班信息 3.修改航班信息并保存到磁盤 4.查找航班 5.刪除航班信息 6.訂票 7.退票 【算法思想】1 先定義一個乘客基本信息的類包含乘客的姓名、證件號、訂票數(shù)量及所乘的航班號(注:每個航班有固定的人數(shù)限制,若滿額則提示其他可供選擇的航班。 2 建
2、立一個功能類,包括對航班信息和乘客訂票信息的錄入及修改的函數(shù),其中訂票信息采用單鏈表的順序存儲方式存儲。另外還包括對信息的查詢和修改的功能函數(shù),乘客退票的函數(shù)。并將最終的改動結(jié)果通過i/O流寫入磁盤文件保存。 3 編寫主函數(shù),對編寫的航班系統(tǒng)進行全面測試,對用戶界面采用人性化的菜單方式。【類的設(shè)計】定義一個航班的類class plane friend class customer;/友元類public: void input(); /插入航班信息 void print(); /打印航班信息void save(); /保存航班信息 void read(); /讀取航班信息 void search
3、(); /查找航班信息 void Delete(); /刪除航班信息 void book(); /訂票 void back(); /退票 void xiugai(); /修改航班信息private:int num;/航班號char start_place20;/起點站char arrive_place20;/終點站char time10;/起降時間int count;/機票數(shù)量;定義一個顧客信息的類class customerfriend class plane;/友元類protected:Int id;/身份證號char name10;/姓名int customer_num;/訂票數(shù)量pub
4、lic:void read1();/讀取數(shù)據(jù)void save1();/保存數(shù)據(jù);【存儲結(jié)構(gòu)設(shè)計】采用順序存儲結(jié)構(gòu),利用動態(tài)申請空間實現(xiàn)信息的存儲?!灸K劃分及調(diào)用關(guān)系】定義了兩個類class plane和class customer,分別實現(xiàn)顧客及航班的信息操作。在兩個類的后面分別定義了類中的各個函數(shù)。另外在主函數(shù)中分別調(diào)用函數(shù),實現(xiàn)各個功能。【模塊流程圖】1.主函數(shù)main()主函數(shù)選擇主要功能輸入航班信息瀏覽航班信息修改航班信息查找航班刪除航班訂票退票2. void search()/查詢函數(shù)進入查詢航班信息函數(shù)按航班查找按終點站查找按航線查找是否繼續(xù), 若是3void book()/訂
5、票函數(shù)進入訂票系統(tǒng) 航班不存在 無效 航班號存在 請輸入您要訂的票數(shù) 有效若票數(shù)有效,顯示訂票成功輸入姓名、ID及要訂航班的航班號4. void back()/退票函數(shù)輸入您的姓名、ID、要退票數(shù) 不存在 該用戶存在提示:退票成功 進入退票系統(tǒng)【界面設(shè)計】采用人性化的菜單提示語,讓用戶很容易的操作;【用戶手冊】用戶只需要在vc環(huán)境下就可以操作,具體步驟可見菜單提示就可以順利操作。另外,再加入、刪除、修改航班信息時必須以管理員的身份進去,所以必須要有密碼,在這里初始密碼事:xinxi0701.謝謝您的使用!1、 程序上機調(diào)試報告【語法錯誤及其排除】兩個類的公有函數(shù)中,在循環(huán)嵌套調(diào)用時總是受阻,不
6、能執(zhí)行。所以我把兩個類都定義為相互的有元類。這樣問題就解決了?!舅惴ㄥe誤及其排除】在訂票與退票函數(shù)中,要核對用戶信息如姓名、ID等,開始是自己定義一個函數(shù)進行字符間的比較,在調(diào)用時總是出現(xiàn)語法錯誤,最后想到可以用一個函數(shù)庫中的函數(shù)strcmp(char,char).把問題簡單化,而且語法錯誤也解決了。2、 程序測試結(jié)果【測試數(shù)據(jù)】說明:測試數(shù)據(jù)都是輸入數(shù)據(jù),見輸出結(jié)果?!据敵鼋Y(jié)果】【程序性能評價】該程序可以查詢航班的信息、修改信息,查詢顧客的信息,訂票、退票等,界面采用人性化的提示,可以讓用戶很容易的操作。另外在修改信息、添加航班信息時必須要以管理員的身份進入即必須要有密碼才能進入。保證了系統(tǒng)
7、的安全?!拘阅芨倪M方向】該系統(tǒng)在操作中要是不按照菜單的有關(guān)提示操作,而進行非法操作,可能會導致系統(tǒng)的死循環(huán)。在這點該系統(tǒng)還有待改進?!臼斋@及體會】事實總比想象的難,剛開始編寫這個程序的時候思路比較清晰??墒蔷帉懙臅r候遇到了很多難題,譬如將顧客的信息及航班的信息保存到文件中,不知道用那種方式更簡便,最后仔細思考,閱讀課本資料,選擇了用流的形式輸出到文件中,感覺用起來特別方便簡潔。完成了程序的編寫后又對該程序進行了大量的修改,調(diào)試,使程序更加簡明,并添加了不少提示用戶操作的語句,使用戶使用該系統(tǒng)時更加方便。對自己的這個程序還是比較滿意的,可以說已經(jīng)超出了自己當初的設(shè)想。從編寫這個程序的過程中不但發(fā)
8、現(xiàn)了許多自己沒學明白的地方,而且鍛煉了自己的耐心。剛調(diào)試時有很多錯誤,我逐個仔細的修改、排除,最終成功的完成了調(diào)試。進過這次實習,我更加深刻的體會到,作任何事情要仔細,要靜下心來認真思考,只要努力了,必定會有回報。3、 源程序代碼#include<iostream.h>#include<string.h>#include<stdio.h> #include<iomanip.h>#include<stdlib.h> #define N 1000 /宏定義class customer;/申明顧客信息類/-定義航班信息類-class pla
9、ne friend class customer;/有元類public: void insert(); /加入航班信息 void print(); /輸出航班信息 void save(); /保存航班信息 void read(); /讀取航班信息 void search(); /查找航班信息 void Delete(); /刪除航班信息 void book(); /訂票 void back(); /退票 void xiugai(); /修改航班信息private:int num;/航班號char start10;/起點站char arrive10;/終點站char time20;/起降時間in
10、t plane_num;/機票數(shù)量sN;/-定義顧客信息類-class customerfriend class plane;/有元類protected:int id;/身份證號char name20;/姓名int pshu;/用戶訂票數(shù)量public:void read1();/讀取數(shù)據(jù)void save1();/保存數(shù)據(jù)yhN;int i,j;/全局變量int m=0,y=0;/宏定義一個輸出#define PRINT si.num<<setw(13)<<si.start<<setw(13)<<si.arrive<<setw(13
11、)<<si.time<<setw(13)<<si.plane_num<<endl /定義輸出格式/-主函數(shù)-void main()plane abc;/定義一個航班類的對象int j; docout<<" 管理員密碼:xinxi0701 "<<endl;cout<<" "<<endl;cout<<" -歡迎進入航空訂票菜單-"<<endl; /主界面cout<<"|=|"<<
12、;endl; cout<<" | 1.新增航班 |"<<endl;cout<<" | 2.瀏覽航班信息 |"<<endl; cout<<" | 3.修改航班信息 |"<<endl; cout<<" | 4.查找航班信息 |"<<endl; cout<<" | 5.刪除航班 |"<<endl; cout<<" | 6.訂票 |"<<en
13、dl; cout<<" | 7.退票 |"<<endl; cout<<" | 0.退出 |"<<endl; cout<<" |=|"<<endl; cout<<"請選擇(07):" cin>>j; switch(j) case 1:abc. insert();/調(diào)用插入函數(shù) break; case 2:abc.print();/調(diào)用打印函數(shù) break; case 3:abc.xiugai();/調(diào)用修改函數(shù) break
14、; case 4:abc.search();/調(diào)用查找函數(shù) break; case 5:abc.Delete(); /調(diào)用刪除函數(shù) break; case 6:abc.book();/調(diào)用訂票函數(shù) break; case 7:abc.back();/調(diào)用退票函數(shù) break; case 0:; break; while(j!=0); /判斷結(jié)束 cout<<"謝謝使用,再見!n"/-主函數(shù)結(jié)束-/定義類中各個函數(shù)void plane:insert()/打印函數(shù) char f="xinxi701" /設(shè)置密碼char y;cout<<
15、;"請輸入密碼:"cin>>f; /讀取密碼 if(strcmp(f,"xinxi0701")=0)cout<<"-n"for(i=0;i<N;i+)cout<<"航班號 出發(fā)地點 到達地點 起降時間 滿載人數(shù)"<<endl;cout<<"|-|"<<endl;cin>>si.num>>si.start>>si.arrive>>si.time>>si.plan
16、e_num;cout<<"|-|"<<endl;m+;cout<<"第"<<m<<"個信息已經(jīng)輸入,是否繼續(xù)(y/n)?"cin>>y;cout<<endl;if(y='y')continue;elsesave();/將結(jié)構(gòu)體信息存盤cout<<"剛剛存盤的信息是:"<<endl;print();/輸出輸入的航班信息break; elsecout<<"密碼錯誤,您不能使用
17、此項功能,強制推出!"<<endl;void plane:save()/保存函數(shù) FILE *fp,*fp1;/定義文件指針 if(fp=fopen("chen.txt","wb")=NULL)/打開文件并判斷是否出錯 cout<<"創(chuàng)建文件失敗!"<<endl;/出錯提示 getchar(); return; if(fp1=fopen("hao.txt","wb")=NULL)/打開文件并判斷是否出錯 cout<<"創(chuàng)建文件失
18、敗!"<<endl;/出錯提示 getchar(); return; for(i=0;i<m;i+) if(fwrite(&si,sizeof(class plane),1,fp)=0)/向文件寫入數(shù)據(jù),并判斷是否出錯cout<<"向文件輸入數(shù)據(jù)失敗!"<<endl; fprintf(fp1,"%d",m); fclose(fp);/關(guān)閉文件 fclose(fp1);/關(guān)閉文件/-void plane:read()/從文件讀取信息 FILE *fp,*fp1;/定義文件指針 if(fp=fope
19、n("chen.txt","rb")=NULL)/打開文件,并判斷是否出錯 cout<<"出現(xiàn)錯誤,請檢查文件是否存在!"/出錯提示 getchar(); if(fp1=fopen("hao.txt","rb")=NULL)/打開文件并判斷是否出錯 cout<<"創(chuàng)建文件失敗!nn"/出錯提示 getchar(); return; fscanf(fp1,"%d",&m); fclose(fp1);/關(guān)閉文件 for(i=0;
20、i<m;i+) fread(&si,sizeof(plane),1,fp);/從文件中讀取信息 fclose(fp);/關(guān)閉文件/-void plane:print()/輸出函數(shù) char w10; read();/調(diào)用讀取文件函數(shù) cout<<"航班號 起始站 終點站 時間 機票數(shù)n" for(i=0;i<m;i+) cout<<PRINT;/打印信息 cout<<"* "<<endl; cout<<"/請按任意鍵返回主菜單/"<<endl;
21、 cin>>w;/控制返回主菜單/- void plane:search()/查詢函數(shù) char name110; char name212; char ii10; int n,no;do cout<<" 歡迎進入查詢菜單"<<endl;/查詢方式菜單 cout<<" "<<endl; cout<<" 1.按航班號查找nn" " 2.按終點站查找nn" " 3.按航線查找nn" " 0.返回"<&l
22、t;endl; cout<<"請選擇(03):" cin>>n; if(n=0) break; switch(n) case 1:cout<<"請輸入航班號:"cin>>no;/航班號break;case 2:cout<<"請輸入終點站名稱:"cin>>name2;/讀取終點站break;case 3:cout<<"請輸入起始站名稱:n"cin>>name1;/讀取起始站cout<<"請輸入終點站名
23、稱:n"cin>>name2;/終點站break; read();/調(diào)用讀取函數(shù) for(i=0;i<m;i+) if(strcmp(si.arrive,name1)=0|strcmp(si.arrive,name2)=0)/按終點站起始站判斷輸出條件 cout<<"n查找航班信息成功!"<<endl;cout<<"航班號 起始站 終點站 時間 機票數(shù)"<<endl;cout<<PRINT;/打印信息break; if(si.num=no)/按航班號判斷輸出條件 co
24、ut<<"n查找航班信息成功!n" cout<<"航班號 起始站 終點站 時間 機票數(shù)"<<endl; cout<<PRINT;/打印信息 break; no=0;/將航班號賦值為0 if(i>m)cout<<"該航班不存在,是否繼續(xù)查找(y/n)?" cin>>ii;while(strcmp(ii,"y")=0);/判斷結(jié)束/-void plane:Delete()/刪除函數(shù) char name110; char name212; ch
25、ar ii12; char f="xinxi701"/設(shè)置密碼 int no,n; cout<<"請輸入密碼:" cin>>f;/讀取密碼 if(strcmp(f,"xinxi0701")=0) /判斷密碼是否正確 do cout<<" 歡迎進入刪除菜單"<<endl;/刪除方式菜單cout<<" "<<endl;cout<<" *1.按航班號刪除nn" " *2.按航線刪除nn&q
26、uot; " *0.返回"<<endl; cout<<"請選擇(02)" cin>>n;/讀取刪除方式 if(n=0) break; /跳出循環(huán) switch(n) case 1:cout<<"請輸入航班號:"cin>>no;/讀取航班號read();/調(diào)用讀取函數(shù)break;/跳出循環(huán)case 2:cout<<"請輸入起始站名稱:"cin>>name1;/讀取起始站cout<<"請輸入終點站名稱:"
27、cin>>name2;/讀取終點站read();/調(diào)用讀取函數(shù)break;/跳出循環(huán) for(i=0;i<m;i+) if(si.num=no|strcmp(si.start,name1)=0&&strcmp(si.arrive,name2)=0)/判斷輸入信息是否存在 si=sm-1;m-; cout<<"沒有該信息,是否繼續(xù)刪除(y/n):" cin>>ii; /讀取是否繼續(xù)信息 save(); /調(diào)用讀取函數(shù) if(!strcmp(ii,"y") /判斷是否繼續(xù)刪除 cout<<
28、"請按任意鍵返回刪除菜單!" break; while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0); /判斷結(jié)束 else cout<<"密碼錯誤,不能使用此項功能,強行退出!nn"/- void plane:book()/訂票函數(shù) customer abc; int n; char a12; do cout<<"各位用戶你好!請你先選擇您要乘的航班"<<endl; search(); abc.save1(); abc.
29、read1(); y=y+1; cout<<" 歡迎進入訂票系統(tǒng)!"<<endl; cout<<"請輸入你的ID號:" cin>>yhy.id; cout<<"請輸入你的姓名:" cin>> ; cout<<"請輸入您要訂的機票數(shù):" fai: cin>>n;/讀取所訂機票數(shù) if(n<=0)goto fai; yhy.pshu=n; si.plane_num=si.plane_num-n; abc
30、.save1(); save();/調(diào)用保存函數(shù) cout<<"訂票成功!nn" break; cout<<"是否繼續(xù)(y/n)?"/判斷是否繼續(xù)訂票 cin>>a; while(!strcmp(a,"y");/判斷結(jié)束/-void plane:back()/退票函數(shù) customer abc; int n; char a12; do cout<<"各位用戶你好!請你先選擇您要退的航班"<<endl; search(); cout<<"
31、;請輸入你的ID號碼:"<<endl; cin>>abc.id; cout<<"請輸入你的姓名:"<<endl; cin>> ; cout<<"請輸入您要退的機票數(shù)目:"<<endl; cin>>n;/輸入所退票數(shù) if(n<0) /判斷票數(shù)是否有效 cout<<"請輸入有效的機票數(shù)!"<<endl; cin>>n; abc.read1();for(i=0;i<y;i
32、+) if(yhi.id=abc.id)=0&&strcmp(,)=0)/按終點站起始站判斷輸出條件 cout<<"該顧客存在!"<<endl; cout<<"身份證號 姓名 訂票數(shù)"<<endl; cout<<yhi.id<<setw(8)<<<<setw(8)<<yhi.pshu<<endl;/打印信息 break;for(;i<y;i+)yhi.id=yhi+1
33、.id;strcpy(,yhi+1.name);yhi.pshu=yhi+1.pshu; abc.save1(); si.plane_num=si.plane_num+n; save(); /調(diào)用保存 cout<<"退票成功!nn" cout<<"是否繼續(xù)(y/n)?"/判斷是否繼續(xù)退票 cin>>a; while(!strcmp(a,"y");/判斷并跳出循環(huán) getchar();/-void plane:xiugai() /修改信息函數(shù) class xiu /定義一個類 publ
34、ic: int no; char name112; char name212; char time12; int plane_num; x1; char j10; char f="xinxi701"/設(shè)置密碼 int n; cout<<"請輸入密碼:" cin>>f;/讀取密碼 if(strcmp(f,"xinxi0701")=0)/判斷是否出錯 read();/調(diào)用讀取 do cout<< " 歡迎進入修改系統(tǒng) "<<endl; cout<< "
35、; *1,按航班號修改"<<endl; cout<< " *2,按航線修改"<<endl; cout<<"請選擇(12)" cin>>n;/讀取修改方式 switch(n) case 1: cout<<"請輸入航班號:" cin>>x0.no;/讀取航班號 break; case 2:cout<<"請輸入起始站:" cin>>1;/讀取起始站 cout<<"請輸入
36、終點站:" cin>>2;/讀取終點站 break; for(i=0;i<m;i+) if(strcmp(si.arrive,1)=0&&strcmp(si.arrive,2)=0)/判斷輸出條件 cout<<"航班號 起始站 終點站 時間 機票數(shù)n" cout<<PRINT; break; if(si.num=x0.no)/判斷輸出條件 cout<<"航班號 起始站 終點站 時間 機票數(shù)n"cout<<PRINT;break; x0.no=0; /將結(jié)構(gòu)體中的號為零cout<<"請輸入新航班號 起始站 終點站 時間 機票數(shù)"<<endl;cin>>x0.no>>1>>2>>x0.time>>x0.plane_num; si.num=x0.no;/替換航班號strcpy(si.start,
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育技術(shù)的前沿虛擬現(xiàn)實在自適應(yīng)教育中的應(yīng)用
- 教育技術(shù)與學習成效的商業(yè)價值探討
- 水利水電安全生產(chǎn)標準化管理
- 電力勘測設(shè)計企業(yè)安全生產(chǎn)標準化實施規(guī)范
- 天津市安全生產(chǎn)培訓考核管理系統(tǒng)
- 教育公平性視角下的科技發(fā)展路徑
- 發(fā)生生產(chǎn)安全事故罰款標準
- 教育技術(shù)創(chuàng)新與商業(yè)培訓模式的融合探索
- 學習方法優(yōu)化的教育心理學研究
- 城市達標規(guī)劃管理辦法
- 無人機應(yīng)用技術(shù) 1.32.穿越機的三種飛行形式
- 凹凸棒石(千土之王、萬用之土)
- 大氣污染控制工程課程設(shè)計_某工廠布袋除塵器的設(shè)計
- 三基-學校兒童少年衛(wèi)生學(200題)練習
- 張家界船舶工業(yè)項目建議書【模板范本】
- 國家種畜禽生產(chǎn)經(jīng)營許可證管理系統(tǒng)操作指南
- 石油化工管道施工方案
- 四川SG-008技術(shù)、經(jīng)濟簽證核定單(共2頁)
- 來料檢驗報告模板
- 腳手架搭設(shè)施工安全技術(shù)交底(共2頁)
- 水利工程旁站監(jiān)理方案【精選文檔】
評論
0/150
提交評論