航空訂票系統(tǒng)實(shí)習(xí)報(bào)告_第1頁
航空訂票系統(tǒng)實(shí)習(xí)報(bào)告_第2頁
航空訂票系統(tǒng)實(shí)習(xí)報(bào)告_第3頁
航空訂票系統(tǒng)實(shí)習(xí)報(bào)告_第4頁
航空訂票系統(tǒng)實(shí)習(xí)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)習(xí)報(bào)告 航空訂票系統(tǒng)題目:航空客運(yùn)定票的業(yè)務(wù)活動(dòng)包括:查詢航線、客票預(yù)定和辦理退票等。試設(shè)計(jì)一個(gè)航空客運(yùn)定票系統(tǒng),以使上述業(yè)務(wù)可以借助計(jì)算機(jī)來完成。需求分析在測(cè)試程序中要求可以在用戶端錄入航班情況,包括:終點(diǎn)站點(diǎn)、航班號(hào)、飛機(jī)日期、航班票價(jià)、票價(jià)折扣、成員定額、余票量。要求程序能執(zhí)行的命令:查詢:可以查詢某個(gè)航線的情況(如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉);可以輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況;訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票;退票:可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料:有姓名,證件號(hào),航班情況,訂單要有編號(hào);修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件。作為示意系統(tǒng),全部數(shù)據(jù)只放在內(nèi)存中,不存入硬盤。測(cè)試數(shù)據(jù):、概要設(shè)計(jì)為實(shí)現(xiàn)上述程序功能,需要定義以下抽象數(shù)據(jù)類型。航班鏈表的抽象數(shù)據(jù)類型定義為ADTFlight{ 數(shù)據(jù)對(duì)象:D={to,FlightNumber,FlightDay,leave,arrive,prize,discount,capacity,booknum,*next|*next∈Flight}數(shù)據(jù)關(guān)系:R1={<fi-1,fi>|fi-1,fi?D,i=2,3,...,N} 基本操作:InitList(&f) 操作結(jié)果:構(gòu)造一個(gè)帶頭結(jié)點(diǎn)的空鏈表。AddToList(&f) 初始條件:鏈表f已存在。操作結(jié)果:構(gòu)造一個(gè)空的單元加到鏈表中。LocateFlight(&f,a[])初始條件:鏈表f已存在,a[]為要尋找的航班的航班號(hào)。操作結(jié)果:返回找到航班的位序。若所尋航班不存在,則返回值為0。DestroyFlight(&f,&f0)初始條件:航班結(jié)點(diǎn)f已存在,f0為航班鏈表的頭結(jié)點(diǎn)。操作結(jié)果:銷毀航班結(jié)點(diǎn)f。}ADTFlight顧客鏈表的抽象數(shù)據(jù)類型定義為ADTCustomer{數(shù)據(jù)對(duì)象:D={name,ID,BookNumber,*fi,*next|*fi∈Flight,*next∈Customer}數(shù)據(jù)關(guān)系:R1={<ci-1,ci>|ci-1,ci?D,i=2,3,...,N} 基本操作:InitCList(&c)操作結(jié)果:構(gòu)造一個(gè)帶頭結(jié)點(diǎn)的空鏈表。AddCToList(&c1)操作結(jié)果:構(gòu)造一個(gè)空的單元加到鏈表中。LocateCustomer(&c,a[]) 初始條件:鏈表f已存在,a[]為要尋找的訂單號(hào)。 操作結(jié)果:返回找到訂單的位序。 若所尋訂單不存在,則返回值為0。DestroyCustomer(&c,&c0){ //初始條件:顧客結(jié)點(diǎn)c已存在,c0為顧客鏈表的頭結(jié)點(diǎn)。 //操作結(jié)果:銷毀顧客結(jié)點(diǎn)c。本程序包含三個(gè)模塊:主程序模塊:voidmain(){航班鏈表初始化;顧客鏈表初始化;進(jìn)入mainmenu;}mainmenu模塊——進(jìn)入主頁面進(jìn)行選擇;子程序模塊——包括InputFlight模塊、ModifyFlight模塊、look模塊、book模塊、cancel模塊各模塊之間的調(diào)用關(guān)系如下:主程序模塊mainmenu模塊子程序模塊(InputFlight模塊、ModifyFlight模塊、look模塊、book模塊、cancel模塊)三.詳細(xì)設(shè)計(jì)航班鏈表structFlight //航班鏈表(帶頭結(jié)點(diǎn)){ charto[N];//目的地 charFlightNumber[N];//航班號(hào) DateFlightDay;//飛行日期 Timeleave;//起飛時(shí)間 Timearrive;//降落時(shí)間 intprize;//票價(jià) intdiscount;//票價(jià)折扣 intcapacity;//成員定額 intbooknum;//訂票數(shù) Flight*next;};typedefFlight*flight;StatusInitList(flight&f){//操作結(jié)果:構(gòu)造一個(gè)帶頭結(jié)點(diǎn)的空鏈表 f=(flight)malloc(sizeof(Flight)); f->booknum=0;f->next=NULL;}StatusAddToList(flight&f1){ //初始條件:鏈表f1已存在 //操作結(jié)果:構(gòu)造一個(gè)空的單元加到鏈表中 flightf2;InitList(f2);f1->next=f2;f1=f2;}intLocateFlight(flight&f,chara[]){ //初始條件:鏈表f已存在,a[]為要尋找的航班的航班號(hào) //操作結(jié)果:返回找到航班的位序 //若所尋航班不存在,則返回值為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){ //初始條件:航班結(jié)點(diǎn)f已存在,f0為航班鏈表的頭結(jié)點(diǎn) //操作結(jié)果:銷毀航班結(jié)點(diǎn)f flightq=f0;while(q->next!=f) q=q->next;q->next=f->next;f=q;}顧客鏈表structCustomer//客戶資料{ charname[N];//姓名 charID[20];//證件號(hào) charBookNumber[20];//訂單號(hào) Flight*fi;//航班信息 Customer*next;};typedefCustomer*customer;StatusInitCList(customer&c){//操作結(jié)果:構(gòu)造一個(gè)帶頭結(jié)點(diǎn)的空鏈表 c=(customer)malloc(sizeof(Customer));c->next=NULL;}StatusAddCToList(customer&c1){//操作結(jié)果:構(gòu)造一個(gè)空的單元加到鏈表中 customerc2;InitCList(c2); c1->next=c2;c1=c2;}intLocateCustomer(customer&c,chara[]){ //初始條件:鏈表f已存在,a[]為要尋找的訂單號(hào) //操作結(jié)果:返回找到訂單的位序 //若所尋訂單不存在,則返回值為0 i=0;customerp=c->next; while(p){ i++; if(strcmp(p->BookNumber,a)==0) returni; p=p->next;}}StatusDestroyCustomer(customer&c,customer&c0){ //初始條件:顧客結(jié)點(diǎn)c已存在,c0為顧客鏈表的頭結(jié)點(diǎn) //操作結(jié)果:銷毀顧客結(jié)點(diǎn)c customerq=c0;while(q->next!=c) q=q->next; q->next=c->next;c=q;}主函數(shù)與其它函數(shù)的偽碼算法voidmain(){ //主函數(shù) flightff,f0;InitList(ff);f0=ff;//為航班鏈表初始化,f0為航班鏈表的頭結(jié)點(diǎn)customercc,c0;InitCList(cc);c0=cc;//為顧客鏈表初始化,c0為顧客鏈表的頭結(jié)點(diǎn) head();mainmenu(ff,f0,cc,c0);}voidhead(){ //打印標(biāo)題}voidmainmenu(flight&f,flight&f0,customer&c,customer&c0){ //打印主菜單}Statusmainchoice(flight&f,flight&f0,customer&c,customer&c0){ //主菜單選擇項(xiàng) scanf(a); //輸入選擇 switch(a) //進(jìn)入子模塊 { 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; //退出系統(tǒng) default:mainchoice(f,f0,c,c0); //輸入有誤,重新輸入 }}StatusInputFlight(flight&f,flight&f0,customer&c,customer&c0){ //錄入航班函數(shù) 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.修改起飛時(shí)間4.修改降落時(shí)間5.修改航班票價(jià)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; //訂票數(shù)增1 printf(付費(fèi)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)--; //訂票數(shù)減1 DestroyCustomer(p,c0); }}函數(shù)的調(diào)用關(guān)系圖反映了演示程序的層次結(jié)構(gòu):四.調(diào)試分析由于航班數(shù)未定,所以更適合用鏈表處理此問題。在Customer結(jié)構(gòu)體中設(shè)置的航班信息,開始沒有用指針處理,導(dǎo)致程序運(yùn)行出錯(cuò),總結(jié)可得,用指針處理,可使程序更為簡(jiǎn)便,運(yùn)行順暢。算法的時(shí)空分析對(duì)于航班鏈表的操作函數(shù)InitList與AddToList的時(shí)間復(fù)雜度分別為O(1),LocateFight與DestroyFlight函數(shù)的時(shí)間復(fù)雜度均為鏈表長(zhǎng)度;對(duì)于顧客鏈表的操作函數(shù)與航班鏈表類似。錄入函數(shù)InputFlight的時(shí)間復(fù)雜度為O(1),函數(shù)ModifyFlight與look的時(shí)間復(fù)雜度為航班鏈表長(zhǎng)度,函數(shù)book與cancel的時(shí)間復(fù)雜度為顧客鏈表長(zhǎng)度。五.用戶手冊(cè)本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為main

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論