




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實習報告 航空訂票系統題目:航空客運定票的業務活動包括:查詢航線、客票預定和辦理退票等。試設計一個航空客運定票系統,以使上述業務可以借助計算機來完成。需求分析在測試程序中要求可以在用戶端錄入航班情況,包括:終點站點、航班號、飛機日期、航班票價、票價折扣、成員定額、余票量。要求程序能執行的命令:查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達城市,查詢飛機航班情況;訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票;退票:可退票,退票后修改相關數據文件;客戶資料:有姓名,證件號,航班情況,訂單要有編號;修改航班信息:當航班信息改變可以修改航班數據文件。作為示意系統,全部數據只放在內存中,不存入硬盤。測試數據:、概要設計為實現上述程序功能,需要定義以下抽象數據類型。航班鏈表的抽象數據類型定義為ADTFlight{ 數據對象:D={to,FlightNumber,FlightDay,leave,arrive,prize,discount,capacity,booknum,*next|*next∈Flight}數據關系:R1={<fi-1,fi>|fi-1,fi?D,i=2,3,...,N} 基本操作:InitList(&f) 操作結果:構造一個帶頭結點的空鏈表。AddToList(&f) 初始條件:鏈表f已存在。操作結果:構造一個空的單元加到鏈表中。LocateFlight(&f,a[])初始條件:鏈表f已存在,a[]為要尋找的航班的航班號。操作結果:返回找到航班的位序。若所尋航班不存在,則返回值為0。DestroyFlight(&f,&f0)初始條件:航班結點f已存在,f0為航班鏈表的頭結點。操作結果:銷毀航班結點f。}ADTFlight顧客鏈表的抽象數據類型定義為ADTCustomer{數據對象:D={name,ID,BookNumber,*fi,*next|*fi∈Flight,*next∈Customer}數據關系:R1={<ci-1,ci>|ci-1,ci?D,i=2,3,...,N} 基本操作:InitCList(&c)操作結果:構造一個帶頭結點的空鏈表。AddCToList(&c1)操作結果:構造一個空的單元加到鏈表中。LocateCustomer(&c,a[]) 初始條件:鏈表f已存在,a[]為要尋找的訂單號。 操作結果:返回找到訂單的位序。 若所尋訂單不存在,則返回值為0。DestroyCustomer(&c,&c0){ //初始條件:顧客結點c已存在,c0為顧客鏈表的頭結點。 //操作結果:銷毀顧客結點c。本程序包含三個模塊:主程序模塊:voidmain(){航班鏈表初始化;顧客鏈表初始化;進入mainmenu;}mainmenu模塊——進入主頁面進行選擇;子程序模塊——包括InputFlight模塊、ModifyFlight模塊、look模塊、book模塊、cancel模塊各模塊之間的調用關系如下:主程序模塊mainmenu模塊子程序模塊(InputFlight模塊、ModifyFlight模塊、look模塊、book模塊、cancel模塊)三.詳細設計航班鏈表structFlight //航班鏈表(帶頭結點){ charto[N];//目的地 charFlightNumber[N];//航班號 DateFlightDay;//飛行日期 Timeleave;//起飛時間 Timearrive;//降落時間 intprize;//票價 intdiscount;//票價折扣 intcapacity;//成員定額 intbooknum;//訂票數 Flight*next;};typedefFlight*flight;StatusInitList(flight&f){//操作結果:構造一個帶頭結點的空鏈表 f=(flight)malloc(sizeof(Flight)); f->booknum=0;f->next=NULL;}StatusAddToList(flight&f1){ //初始條件:鏈表f1已存在 //操作結果:構造一個空的單元加到鏈表中 flightf2;InitList(f2);f1->next=f2;f1=f2;}intLocateFlight(flight&f,chara[]){ //初始條件:鏈表f已存在,a[]為要尋找的航班的航班號 //操作結果:返回找到航班的位序 //若所尋航班不存在,則返回值為0 i=0;flightp=f->next; while(p){ i++;if(strcmp(p->FlightNumber,a)==0) returni; p=p->next;} return0;}StatusDestroyFlight(flight&f,flight&f0){ //初始條件:航班結點f已存在,f0為航班鏈表的頭結點 //操作結果:銷毀航班結點f flightq=f0;while(q->next!=f) q=q->next;q->next=f->next;f=q;}顧客鏈表structCustomer//客戶資料{ charname[N];//姓名 charID[20];//證件號 charBookNumber[20];//訂單號 Flight*fi;//航班信息 Customer*next;};typedefCustomer*customer;StatusInitCList(customer&c){//操作結果:構造一個帶頭結點的空鏈表 c=(customer)malloc(sizeof(Customer));c->next=NULL;}StatusAddCToList(customer&c1){//操作結果:構造一個空的單元加到鏈表中 customerc2;InitCList(c2); c1->next=c2;c1=c2;}intLocateCustomer(customer&c,chara[]){ //初始條件:鏈表f已存在,a[]為要尋找的訂單號 //操作結果:返回找到訂單的位序 //若所尋訂單不存在,則返回值為0 i=0;customerp=c->next; while(p){ i++; if(strcmp(p->BookNumber,a)==0) returni; p=p->next;}}StatusDestroyCustomer(customer&c,customer&c0){ //初始條件:顧客結點c已存在,c0為顧客鏈表的頭結點 //操作結果:銷毀顧客結點c customerq=c0;while(q->next!=c) q=q->next; q->next=c->next;c=q;}主函數與其它函數的偽碼算法voidmain(){ //主函數 flightff,f0;InitList(ff);f0=ff;//為航班鏈表初始化,f0為航班鏈表的頭結點customercc,c0;InitCList(cc);c0=cc;//為顧客鏈表初始化,c0為顧客鏈表的頭結點 head();mainmenu(ff,f0,cc,c0);}voidhead(){ //打印標題}voidmainmenu(flight&f,flight&f0,customer&c,customer&c0){ //打印主菜單}Statusmainchoice(flight&f,flight&f0,customer&c,customer&c0){ //主菜單選擇項 scanf(a); //輸入選擇 switch(a) //進入子模塊 { case1:InputFlight(f,f0,c,c0);break; case2:ModifyFlight(f,f0,c,c0);break; case3:look(f,f0,c,c0);break; case4:book(f,f0,c,c0);break; case5:cancel(f,f0,c,c0);break; case6:returnERROR; //退出系統 default:mainchoice(f,f0,c,c0); //輸入有誤,重新輸入 }}StatusInputFlight(flight&f,flight&f0,customer&c,customer&c0){ //錄入航班函數 AddToList(f); //增加一班航班 scanf(f->FlightNumber);scanf(f->to); scanf(f->FlightDay.year);scanf(f->FlightDay.month); scanf(f->FlightDay.day);scanf(f->leave.hour); scanf(f->leave.minute);scanf(f->arrive.hour); scanf(f->arrive.minute);scanf(f->prize); scanf(f->discount);scanf(f->capacity);}StatusModifyFlight(flight&f,flight&f0,customer&c,customer&c0){ chara[N];scanf(a); inti=LocateFlight(f0,a); //搜索需修改的航班在鏈表中的位序 if(i!=0) { printf("1.修改目的地2.修改飛行日期3.修改起飛時間4.修改降落時間5.修改航班票價6.修改航班折扣7.刪除此航班"); scanf(d); switch(d) { case1:{for(intj=0;j<N;j++) f->to[j]=0;scanf("%s",f->to);break;} case2:{scanf(f->FlightDay.year);scanf(f->FlightDay.month);scanf("%d",&f->FlightDay.day);break;} case3:{scanf(f->leave.hour);scanf(f->leave.minute);break;} case4:{scanf(f->arrive.hour);scanf(f->arrive.minute);break;} case5: {scanf(f->prize);break;} case6:{scanf("%d",&f->discount);break;} case7:{j=0;flightp=f0;while(j<i){j++;p=p->next;} DestroyFlight(p,f0);} } }}Statuslook(flight&f,flight&f0,customer&c,customer&c0){ chara[N];scanf(a); i=LocateFlight(f0,a); //搜索需修改的航班在鏈表中的位序 if(i!=0) { j=0;flightp=f0;while(j<i){j++;p=p->next;} //找到該航班 printf(p->FlightNumber); printf(p->to); printf(p->FlightDay.year,p->FlightDay.month,p->FlightDay.day); printf(p->leave.hour,p->leave.minute); printf(p->arrive.hour,p->arrive.minute); printf(p->prize);printf(p->discount*10); printf(p->capacity,(p->capacity-p->booknum)); }}Statusbook(flight&f,flight&f0,customer&c,customer&c0){ AddCToList(c); //增加新顧客 scanf(c->name);scanf(c->ID);scanf(c->BookNumber); chara[N];scanf(a); i=LocateFlight(f0,a); //搜索航班在鏈表中的位序 if(i==0){DestroyCustomer(c,c0);} else { j=0;flightp=f0; while(j<i){j++;p=p->next;} //找到該航班 if(((p->capacity)-(p->booknum))>=1) //若余票多于1張 {(p->booknum)++;c->fi=p; //訂票數增1 printf(付費p->prize*p->discount/10);} else{DestroyCustomer(c,c0);} }}Statuscancel(flight&f,flight&f0,customer&c,customer&c0){ chara[20];scanf(a); i=LocateCustomer(c0,a); //搜索需修改的航班在鏈表中的位序 if(i!=0) { j=0;customerp=c0; while(j<i){j++;p=p->next;} //找到該顧客 flightq=p->fi;(q->booknum)--; //訂票數減1 DestroyCustomer(p,c0); }}函數的調用關系圖反映了演示程序的層次結構:四.調試分析由于航班數未定,所以更適合用鏈表處理此問題。在Customer結構體中設置的航班信息,開始沒有用指針處理,導致程序運行出錯,總結可得,用指針處理,可使程序更為簡便,運行順暢。算法的時空分析對于航班鏈表的操作函數InitList與AddToList的時間復雜度分別為O(1),LocateFight與DestroyFlight函數的時間復雜度均為鏈表長度;對于顧客鏈表的操作函數與航班鏈表類似。錄入函數InputFlight的時間復雜度為O(1),函數ModifyFlight與look的時間復雜度為航班鏈表長度,函數book與cancel的時間復雜度為顧客鏈表長度。五.用戶手冊本程序的運行環境為DOS操作系統,執行文件為main
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養老院安全生產規章制度
- 2025屆福建省泉州市南安市第一中學高一下化學期末調研模擬試題含解析
- 消防安全重點單位管理規定
- 煤礦安全供電管理制度
- 2025工會工作總結及2025年工作計劃
- 我國的安全生產月份
- 有關安全事故案例
- 儲能鉛酸蓄電池項目可行性研究報告
- 2025年中國木質型材行業市場發展現狀及投資方向研究報告
- 中國ec診斷試劑盒行業發展運行現狀及投資潛力預測報告
- 數學四進五年級(暑假學生版)
- 無人機飛行安全與法規-深度研究
- 2025年中國鐵道出版社有限公司招聘(14人)筆試參考題庫附帶答案詳解
- 2025年蘭州石化職業技術大學單招職業技能測試題庫帶答案
- 夫妻婚內財產約定協議書范本
- 應急處置知識培訓課件
- 分診知識培訓
- 《高血壓腎損害》課件
- 常見警情處置課件
- “世界濕地日”宣傳活動方案范例(3篇)
- 2024年質量檢驗員培訓課件:全方位提升檢驗能力
評論
0/150
提交評論