數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告教材_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告教材_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告教材_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告教材_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告教材_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)構(gòu)造試驗(yàn)報(bào)告教材數(shù)據(jù)構(gòu)造試驗(yàn)報(bào)告教材29/29數(shù)據(jù)構(gòu)造試驗(yàn)報(bào)告教材3.航空訂票系統(tǒng):1.需求解析:1)、能夠?qū)崿F(xiàn)航班信息的管理,包括查察航班信息,更正航班信息,刪除航班信息;2)、能夠盤(pán)問(wèn)盤(pán)問(wèn)航班信息,實(shí)現(xiàn)按起點(diǎn)站盤(pán)問(wèn),按終點(diǎn)站盤(pán)問(wèn),按日期盤(pán)問(wèn)功能;3)、實(shí)現(xiàn)訂票業(yè)務(wù),若有余票,則訂購(gòu)余票,若余票不夠,問(wèn)可否加入排隊(duì)等待候列;4)、實(shí)現(xiàn)退票業(yè)務(wù),退票后,要盤(pán)問(wèn)在排隊(duì)等待的人,看退票和原來(lái)余票量可否滿足客戶的要求。2.設(shè)計(jì):設(shè)計(jì)思想(1)、數(shù)據(jù)構(gòu)造設(shè)計(jì)a、由于每趟航班的信息量比較大,則需要定義一個(gè)構(gòu)造體表示航班的基本信息,航班的基本信息采用鏈表儲(chǔ)藏,以便于盤(pán)問(wèn)和更正航班信息;b、至于座位等級(jí),用一個(gè)二維數(shù)組保存座位號(hào),第一維表示座位等級(jí),第二維表示座位號(hào);每當(dāng)座位被準(zhǔn)時(shí),把這個(gè)等級(jí)的座位號(hào)標(biāo)志為1,表示座位狀態(tài)為已定。當(dāng)有客戶退票時(shí),座位號(hào)的標(biāo)志又變?yōu)?,表示狀態(tài)為不決;c、用一個(gè)鏈表來(lái)儲(chǔ)藏已經(jīng)訂票的客戶的信息,必要的時(shí)候能夠查察已定客戶的信息;d、再用一個(gè)隊(duì)列來(lái)保存等待的客戶的信息,當(dāng)有人退票時(shí),需要查察在等待的用戶可否能夠訂票。(2)、算法設(shè)計(jì)這個(gè)程序中沒(méi)適用到特其余什么算法,主若是對(duì)鏈表和隊(duì)列操作。、設(shè)計(jì)表示(1)、函數(shù)調(diào)用關(guān)系main()————>Menuselect()(輸出菜單的函數(shù))選擇1:————>manage()(管理航班信息)選擇1:——————>store()(儲(chǔ)藏航班信息)選擇2:——————>Delete()(刪除航班信息)選擇3:——————>revise()(更正航班信息)選擇4:——————>check()(查察當(dāng)前航班信息)————>display()(輸出航班信息)選擇2:—————>find()(查找航班信息)選擇1:——————>FindInPlaneNumber()(按航班號(hào)盤(pán)問(wèn))選擇2:——————>FindInStartPoint()(按起點(diǎn)盤(pán)問(wèn))選擇3:——————>FindInEndPoint()(按終點(diǎn)站盤(pán)問(wèn))選擇4:——————>FindInDate()(按日期盤(pán)問(wèn))選擇3:——————>Ordertickets()(訂票函數(shù))———————>WaitForMore()(排隊(duì)等待)選擇4:———————>Returntickets()(退票函數(shù))選擇1:——————>WaitedReturn()(加入過(guò)等待用戶的退票)選擇2:——————>UnwaitedReturn()(沒(méi)有加入過(guò)頂戴用戶的訂票)(2)、函數(shù)接口規(guī)格說(shuō)明voidListInitiate()//初始化各個(gè)指針voiddisplay(airline*find)//輸出航班信息函數(shù)voidstore()//存取航班信息voidDelete()//刪除航班信息voidrivise()//更正航班信息voidcheck()//盤(pán)問(wèn)航班信息voidManage()//管理航班系統(tǒng)的函數(shù)structairline*FindInPlaneNumber()//按航班號(hào)盤(pán)問(wèn)voidFindInStartPoint()//按起點(diǎn)站盤(pán)問(wèn)voidFindInEndPoint()//按終點(diǎn)站盤(pán)問(wèn)voidFindInDate()//按日期盤(pán)問(wèn)voidfind()//盤(pán)問(wèn)函數(shù)voidWaitForMore(charnumber[],intamount,intgrade,charname[],airline*p)//等待更多票的用戶voidOrdertickets()//訂票函數(shù)voidWaitedReturn(charname[])//等待過(guò)的用戶退票voidUnwaitedReturn(charname[])//沒(méi)有等待過(guò)的用戶退票voidReturntickets()//退票函數(shù)intMenuselect()//顯示菜單界面的函數(shù)voidmain()//主函數(shù)3.調(diào)試解析1、關(guān)于參數(shù)傳達(dá)的問(wèn)題:由于從前學(xué)習(xí)的c語(yǔ)言中關(guān)于參數(shù)傳達(dá)的部分沒(méi)有學(xué)扎實(shí),在傳達(dá)數(shù)組的時(shí)候,出現(xiàn)了錯(cuò)誤,此后在同學(xué)的幫助下,學(xué)會(huì)了正確的傳達(dá)參數(shù)的方法。2、關(guān)于座位號(hào)有沒(méi)有被定得問(wèn)題:開(kāi)始的時(shí)候,直接用加減法來(lái)計(jì)算座位訂購(gòu)情況,發(fā)現(xiàn)在當(dāng)前邊的作為被退的時(shí)候,不能夠正確的輸出座位號(hào),此后絞盡腦汁,想出了用標(biāo)志的方法來(lái)區(qū)分座位可否被訂購(gòu)。3.關(guān)于判斷等待的人可否能夠訂票的問(wèn)題:開(kāi)始的時(shí)候,沒(méi)有加循環(huán),以致若是第一個(gè)等待的人不能夠訂票,后邊的人都不能夠訂票,此后在老師的提示下,加入了一個(gè)循環(huán),解決了這個(gè)問(wèn)題。4、改進(jìn)思想:能夠再增加部分退票的功能,其實(shí)也不難,就是讓顧客輸入要退票的座位號(hào),爾后,把這些作為好的標(biāo)志更正一下。5、經(jīng)驗(yàn)領(lǐng)悟:經(jīng)過(guò)這個(gè)程序的實(shí)習(xí),完好掌握了對(duì)鏈表和隊(duì)列的的應(yīng)運(yùn),同時(shí)又加深了程序模塊化的思想。6、時(shí)間復(fù)雜度和空間復(fù)雜度:本程序的時(shí)間復(fù)雜度和空間復(fù)雜度都為O(n)。4、用戶手冊(cè)1、程序運(yùn)行后,第一顯示的是主菜單界面;2、用戶可進(jìn)行選擇操作;3、存取航班是需要按提示的序次輸入航班的信息;刪除航班時(shí)要輸入航班號(hào);更正航班時(shí)也是要重新輸入航班信息;4、盤(pán)問(wèn)航班時(shí):按每種方式盤(pán)問(wèn),都需要依照提示輸入對(duì)應(yīng)的信息;5、訂票時(shí)需要依照提示輸入航班號(hào),訂票量,艙位等級(jí)和姓名6、退票時(shí)也需要輸入姓名和有沒(méi)有加入過(guò)排隊(duì)等待的隊(duì)列。5、測(cè)試數(shù)據(jù)及測(cè)試結(jié)果6、源程序清單#include<iostream>#include<string.h>#include<conio.h>usingnamespacestd;#defineMAXSIZE20typedefstructwait{charPlaneNumber[10];//航班號(hào)charname[10];//姓名intNeedNumber;//總訂票量intWaitNumber;//等待訂票量intgrade;//艙位等級(jí)charOrderedNumber[3][50];//保存已經(jīng)訂票的座位號(hào)intOrderNumber;//已經(jīng)訂票量structwait*next;}qnode,*qptr;structwait*begin;typedefstructpqueue{qptrfront;//等待替補(bǔ)客戶名單域的頭指針qptrrear;//等待替補(bǔ)客戶名單域的屬指針}linkqueue;typedefstructorder{charPlaneNumber[10];//已定票的航班號(hào)charname[10];//客戶姓名intOrdernumber;//訂票量intgrade;//艙位等級(jí)intsitsnumber[3][50];//保存已定座位號(hào)order*next;}linklist;structorder*start;typedefstructairline{charPlaneNumber[10];charPlaneType[10];charStartPoint[10];charEndPoint[10];charDate[10];charStartTime[10];charEndTime[10];intFlyTime;intGradePrice[3];intSitsNumber[3];intLeftNumber[3];inttarget[3][100];//標(biāo)志已經(jīng)訂過(guò)的座位號(hào)為1structairline*next;linklist*order;//指向乘員名單鏈表的頭指針linkqueuewait;//指向等待域的頭指針}SLNode;structairline*head;voidListInitiate(){head=(SLNode*)malloc(sizeof(SLNode));start=(linklist*)malloc(sizeof(linklist));begin=(qnode*)malloc(sizeof(qnode));head->next=NULL;start->next=NULL;begin->next=NULL;}voiddisplay(airline*find)//{

輸出航班信息函數(shù)inti;cout<<"航航起降"<<endl;cout<<"班班飛落"<<endl;cout<<"機(jī)機(jī)機(jī)"<<endl;cout<<"號(hào)型場(chǎng)場(chǎng)"<<endl;cout<<find->PlaneNumber<<""<<find->EndPoint<<""<<

日起降飛飛落行不時(shí)時(shí)時(shí)期間長(zhǎng)"<<find->PlaneType<<"

三個(gè)等三個(gè)等級(jí)艙位級(jí)的乘的價(jià)格員定額分別為分別為"<<find->StartPoint<<"find->Date<<""<<find->StartTime<<""<<find->FlyTime<<""<<find->GradePrice[0]<<","<<find->GradePrice[1]<<","<<find->GradePrice[2]<<""<<find->SitsNumber[0]<<","<<find->SitsNumber[1]<<","<<find->SitsNumber[2]<<""<<endl;

"<<find->EndTime<<"cout<<"優(yōu)等艙的座位號(hào)是:1--"<<find->SitsNumber[0]<<endl;cout<<"優(yōu)等艙節(jié)余票座位號(hào)是:"<<endl;for(i=0;i<find->SitsNumber[0];i++){if(find->target[0][i]==0)cout<<i+1<<"

";}cout<<endl;cout<<"公事艙的座位號(hào)

:"<<find->SitsNumber[0]<<"--"<<find->SitsNumber[0]+find->SitsNumber[1]<<endl;cout<<"公事艙節(jié)余票座位號(hào)是:"<<endl;for(i=find->SitsNumber[0];i<(find->SitsNumber[0]+find->SitsNumber[1]);i++){if(find->target[1][i]==0)cout<<i+1<<"";}cout<<endl;cout<<"經(jīng)濟(jì)艙的座位號(hào)是:"<<find->SitsNumber[0]+find->SitsNumber[1]<<"--"<<find->SitsNumber[0]+find->SitsNumber[1]+find->SitsNumber[2]<<endl;cout<<"經(jīng)濟(jì)艙節(jié)余票座位號(hào)是:"<<endl;for(i=find->SitsNumber[0]+find->SitsNumber[1];i<find->SitsNumber[0]+find->SitsNumber[1]+find->SitsNumber[2];i++){if(find->target[2][i]==0)cout<<i+1<<"";}cout<<endl<<endl;;}voidmanageselect(){cout<<""<<endl;cout<<"1.存取航班"<<endl<<"2.刪除航班航班信息"<<endl<<"5.返回主菜單"<<endl;

"<<endl<<"3.

更正航班信息

"<<endl<<"4.

查察cout<<""<<endl;cout<<"請(qǐng)按以上方式選擇

:"<<endl;}voidstore()//存取航班信息{inti;structairline*p,*q;p=(SLNode*)malloc(sizeof(SLNode));cout<<"請(qǐng)輸入要存取的航班信息:"<<endl;cout<<"航班號(hào)為:"<<endl;cin>>p->PlaneNumber;cout<<"航班種類為:"<<endl;cin>>p->PlaneType;cout<<"騰躍機(jī)場(chǎng)為:"<<endl;cin>>p->StartPoint;cout<<"降落機(jī)場(chǎng)為:"<<endl;cin>>p->EndPoint;cout<<"日期為:"<<endl;cin>>p->Date;cout<<"騰躍時(shí)間為:"<<endl;cin>>p->StartTime;cout<<"降落時(shí)間為:"<<endl;cin>>p->EndTime;cout<<"翱翔時(shí)長(zhǎng)為:"<<endl;cin>>p->FlyTime;cout<<"優(yōu)等艙的價(jià)格是:"<<endl;cin>>p->GradePrice[0];cout<<"公事艙的價(jià)格是:"<<endl;cin>>p->GradePrice[1];cout<<"經(jīng)濟(jì)艙的價(jià)格是:"<<endl;cin>>p->GradePrice[2];cout<<"優(yōu)等艙的座位數(shù)是

:"<<endl;cin>>p->SitsNumber[0];cout<<"公事艙的座位數(shù)是

:"<<endl;cin>>p->SitsNumber[1];cout<<"經(jīng)濟(jì)艙的座位數(shù)是

:"<<endl;cin>>p->SitsNumber[2];for(i=0;i<p->SitsNumber[0];i++)p->target[0][i]=0;for(i=p->SitsNumber[0];i<p->SitsNumber[0]+p->SitsNumber[1];i++)p->target[1][i]=0;for(i=p->SitsNumber[0]+p->SitsNumber[1];i<p->SitsNumber[0]+p->SitsNumber[1]+p->SitsNumber[2];i++)p->target[2][i]=0;p->next=head->next;head->next=p;q=head->next;cout<<"現(xiàn)有的航班是:"<<endl;while(q){display(q);q=q->next;}}voidDelete(){structairline*p,*s;charnumber[10];p=head->next;s=head;cout<<"請(qǐng)輸入要?jiǎng)h除的的航班號(hào):"<<endl;cin>>number;while(p){if((!strcmp(number,p->PlaneNumber))&&s->next==p)s->next=p->next;s=s->next;p=p->next;}}voidrivise(){charnumber[10];structairline*p;p=head->next;cout<<"請(qǐng)選綱要更正的航班號(hào)"<<endl;cin>>number;while(p){if(!strcmp(number,p->PlaneNumber)){cout<<"請(qǐng)輸入要更正的航班信息:"<<endl;cout<<"航班號(hào)為:"<<endl;cin>>p->PlaneNumber;cout<<"航班種類為:"<<endl;cin>>p->PlaneType;cout<<"騰躍機(jī)場(chǎng)為:"<<endl;cin>>p->StartPoint;cout<<"降落機(jī)場(chǎng)為:"<<endl;cin>>p->EndPoint;cout<<"日期為:"<<endl;cin>>p->Date;cout<<"騰躍時(shí)間為:"<<endl;cin>>p->StartTime;cout<<"降落時(shí)間為:"<<endl;cin>>p->EndTime;cout<<"翱翔時(shí)長(zhǎng)為:"<<endl;cin>>p->FlyTime;cout<<"優(yōu)等艙的價(jià)格是:"<<endl;cin>>p->GradePrice[0];cout<<"公事艙的價(jià)格是:"<<endl;cin>>p->GradePrice[1];cout<<"經(jīng)濟(jì)艙的價(jià)格是:"<<endl;cin>>p->GradePrice[2];cout<<"優(yōu)等艙的座位數(shù)是:"<<endl;cin>>p->SitsNumber[0];cout<<"公事艙的座位數(shù)是:"<<endl;cin>>p->SitsNumber[1];cout<<"經(jīng)濟(jì)艙的座位數(shù)是:"<<endl;cin>>p->SitsNumber[2];}p=p->next;}}voidcheck(){structairline*q;q=head->next;cout<<"現(xiàn)在的航班信息為:"<<endl;while(q!=NULL){display(q);q=q->next;}}voidManage()//管理航班系統(tǒng)的函數(shù){inti=0,flag=0;manageselect();while(!flag){cin>>i;if(i!=1&&i!=2&&i!=3&&i!=4&&i!=5){cout<<"選擇錯(cuò)誤,請(qǐng)重新輸入"<<endl;cin>>i;}elseswitch(i){case1:store();manageselect();break;case2:Delete();manageselect();break;case3:rivise();manageselect();break;case4:check();manageselect();break;case5:flag=1;}}}structairline*FindInPlaneNumber()//按航班號(hào)盤(pán)問(wèn){airline*find,*p;charnumber[10];find=head->next;p=head;cout<<"請(qǐng)輸入飛機(jī)號(hào):"<<endl;cin>>number;while(find){if(!strcmp(number,find->PlaneNumber)){display(find);returnfind;}}}voidFindInStartPoint()//按初步地址盤(pán)問(wèn){airline*find,*p;charpoint[10];find=head->next;p=head;cout<<"請(qǐng)輸入起點(diǎn)站名字:"<<endl;cin>>point;while(find){if(!strcmp(point,find->StartPoint)){display(find);}if(find->next==NULL&&(strcmp(point,p->StartPoint))){cout<<"對(duì)不起,沒(méi)有找到你所需要的航班"<<endl;}find=find->next;p=p->next;}}voidFindInEndPoint()//按終點(diǎn)站盤(pán)問(wèn){airline*find,*p;charpoint[10];find=head->next;p=head;cout<<"請(qǐng)輸入終點(diǎn)站名:"<<endl;cin>>point;while(find){if(!strcmp(point,find->EndPoint)){display(find);}if(find->next==NULL&&(strcmp(point,p->StartPoint)))cout<<"對(duì)不起,沒(méi)有找到你所需要的航班"<<endl;find=find->next;p=p->next;}}voidFindInDate()//按日期盤(pán)問(wèn){airline*find,*p;charDate[10];find=head->next;p=head;cout<<"請(qǐng)輸入航班日期:"<<endl;cin>>Date;while(find){if(!strcmp(Date,find->Date)){display(find);}if(find->next==NULL&&(strcmp(Date,find->Date)))cout<<"對(duì)不起,沒(méi)有找到你所需要的航班"<<endl;find=find->next;p=p->next;}}voidfind()//盤(pán)問(wèn)函數(shù){inti;cout<<""<<endl;cout<<"1.按航班號(hào)盤(pán)問(wèn)"<<endl<<"2.按起點(diǎn)站盤(pán)問(wèn)"<<endl<<"3.按終點(diǎn)站盤(pán)問(wèn)"<<endl<<"4.按日期盤(pán)問(wèn)"<<endl;cout<<""<<endl;cout<<"請(qǐng)按以上方式選擇:"<<endl;cin>>i;if(i!=1&&i!=2&&i!=3&&i!=4){cout<<"選擇錯(cuò)誤,請(qǐng)重新輸入"<<endl;cin>>i;}else{switch(i){case(1):FindInPlaneNumber();break;case(2):FindInStartPoint();break;case(3):FindInEndPoint();break;case(4):FindInDate();break;}}}voidWaitForMore(charnumber[],intamount,intgrade,charname[],airline*p)//{

等待定更多的票intk,m=0,i,j=0;wait*q;q=(qnode*)malloc(sizeof(qnode));for(i=0;i<p->SitsNumber[0]+p->SitsNumber[1]+p->SitsNumber[2];i++){if(p->target[grade-1][i]==0)j++;}if(j==0){cout<<"已經(jīng)沒(méi)有節(jié)余的票,加入排隊(duì)等待業(yè)務(wù)成功!q->grade=grade;strcpy(q->PlaneNumber,number);strcpy(q->name,name);q->NeedNumber=amount;q->OrderNumber=0;q->WaitNumber=amount;for(k=0;k<p->SitsNumber[grade-1];k++){

"<<endl;q->OrderedNumber[grade-1][k]=0;//

}q->OrderedNumber[grade-1][];cout<<q->Waitnumber<<endl;q->next=begin->next;begin->next=q;}else{cout<<"已經(jīng)訂票的座位號(hào)為:"<<endl;for(k=0;k<p->SitsNumber[grade-1];k++){if(p->target[grade-1][k]==0){cout<<k+1<<"";p->target[grade-1][k]=1;q->OrderedNumber[grade-1][m]=k+1;m++;}}q->grade=grade;strcpy(q->PlaneNumber,number);strcpy(q->name,name);q->WaitNumber=amount-m;q->OrderNumber=m;q->NeedNumber=amount;q->next=begin->next;begin->next=q;}/*cout<<endl;q->grade=grade;strcpy(q->PlaneNumber,number);strcpy(q->name,name);q->WaitNumber=amount-m;q->OrderNumber=m;q->NeedNumber=amount;cout<<q->Waitnumber<<endl;q->next=begin->next;begin->next=q;*/}voidOrdertickets()//訂票函數(shù){airline*p;order*q;intamount,grade,i,j=0,k,m=0;charnumber[10];charname[10];p=head;q=(linklist*)malloc(sizeof(linklist));cout<<"所有的航班信息為:

"<<endl;check();cout<<"請(qǐng)輸入訂票的航班號(hào):

"<<endl;cin>>number;cout<<"請(qǐng)輸入訂票的數(shù)量"<<endl;cin>>amount;cout<<"請(qǐng)輸入艙位等級(jí)(優(yōu)等艙為1、公事艙為2、經(jīng)濟(jì)艙為3)"<<endl;cin>>grade;cout<<"請(qǐng)輸入你的姓名"<<endl;cin>>name;while((strcmp(number,p->PlaneNumber))){p=p->next;}for(i=0;i<p->SitsNumber[0]+p->SitsNumber[1]+p->SitsNumber[2];i++){if(p->target[grade-1][i]==0)j++;//計(jì)算出還剩多少票cout<<j;}if(amount<=j){cout<<"訂票成功,您的座位號(hào)是:"<<endl;for(k=0;k<p->SitsNumber[0]+p->SitsNumber[1]+p->SitsNumber[2];k++){if(p->target[grade-1][k]==0&&m<amount){cout<<k+1<<"";p->target[grade-1][k]=1;q->sitsnumber[grade-1][m]=k+1;m++;}}cout<<endl;strcpy(q->name,name);strcpy(q->PlaneNumber,number);q->Ordernumber=amount;q->grade=grade;q->next=start->next;start->next=q;}else{cout<<"你訂購(gòu)的票數(shù)已經(jīng)高出了這個(gè)等級(jí)的乘員定額!"<<endl;cout<<"您有以下選擇:"<<endl;cout<<"1.放棄訂票,返回系統(tǒng)首頁(yè)"<<endl<<"2.訂購(gòu)節(jié)余的票,不夠的排隊(duì)等待"<<endl;cout<<"請(qǐng)選擇:"<<endl;cin>>j;if(j!=1&&j!=2){cout<<"選擇錯(cuò)誤,請(qǐng)重新選擇!"<<endl;cin>>j;}else{switch(j){case1:break;case2:WaitForMore(number,amount,grade,name,p);break;}}return;}}voidWaitedReturn(charname[])//等待的人退票{inti,k=0,m=0;wait*s,*q,*a;airline*t;order*p,*r;r=(linklist*)malloc(sizeof(linklist));a=begin;q=begin->next;t=head->next;p=start->next;s=begin->next;while(s){if(!(strcmp(name,s->name))){while(strcmp(t->PlaneNumber,s->PlaneNumber)){t=t->next;}for(i=0;i<s->OrderNumber;i++)t->target[s->grade-1][s->OrderedNumber[s->grade-1][i]]=0;cout<<"您退票已經(jīng)成功!"<<endl;while(q){for(i=0;i<t->SitsNumber[p->grade-1];i++){if(t->target[p->grade-1][i]==0)k++;}if(q->WaitNumber<k){cout<<q->name<<"等待的用戶能夠訂票了!"<<endl;cout<<q->name<<"用戶訂票的座位號(hào)為:"<<endl;for(i=0;i<t->SitsNumber[p->grade-1];i++){if(t->target[p->grade-1][i]==0&&m<q->WaitNumber){cout<<i+1<<"";t->target[p->grade-1][i]=1;r->sitsnumber[p->grade-1][m]=k+1;m++;}strcpy(r->name,q->name);strcpy(r->PlaneNumber,q->PlaneNumber);r->Ordernumber=q->WaitNumber;r->grade=q->grade;r->next=start->next;start->next=r;}a->next=q->next;}a=a->next;q=q->next;}}s=s->next;}}voidUnwaitedReturn(charname[])//沒(méi)有等待過(guò)的退票{inti,k=0,m=0;order*p,*s;s=(linklist*)malloc(sizeof(linklist));wait*q,*a;a=begin;q=begin->next;airline*t;p=start->next;t=head->next;while(p){if(!strcmp(name,p->name)){while(strcmp(t->PlaneNumber,p->PlaneNumber)){t=t->next;}for(i=0;i<p->Ordernumber;i++)t->target[p->grade-1][p->sitsnumber[p->grade-1][i]-1]=0;cout<<"您退票成功!"<<endl;while(q){for(i=0;i<t->SitsNumber[p->grade-1];i++){if(t->target[p->grade-1][i]==0)k++;}if(q->WaitNumber<k){m=0;cout<<q->name<<"等待的用戶能夠訂票了!"<<endl;cout<<q->name<<"用戶訂票的座位號(hào)為:"<<endl;for(i=0;i<t->SitsNumber[p->grade-1];i++){if(t->target[p->grade-1][i]==0&&m<q->WaitNumber){cout<<i+1<<"";t->target[p->grade-1][i]=1;s->sitsnumber[p->grade-1][m]=k+1;m++;}strcpy(s->name,q->name);strcpy(s->PlaneNumber,q->PlaneNumber);s->Ordernumber=q->WaitNumber;s->grade=q->grade;s->next=start->next;start->next=s;}cout<<endl;a->next=q->next;}a=a->next;q=q->next;}}p=p->next;}return;}voidReturntickets()//退票函數(shù){inti;order*q;wait*p;q=start->next;p=begin->next;charname[10];cout<<"請(qǐng)輸入你的姓名:"<<endl;cin>>name;while(q){if(q->next==NULL&&(strcmp(name,q->name))){cout<<"對(duì)不起,你沒(méi)有定過(guò)票!"<<endl;return;}cout<<"加入過(guò)排隊(duì)區(qū)的用戶退票請(qǐng)按cout<<"請(qǐng)選擇:"<<endl;

1,沒(méi)有加入過(guò)的請(qǐng)按

2"<<endl;cin>>i;switch(i){case1:WaitedReturn(name);return;case2:UnwaitedReturn(name);return;}}}intMenuselect()//菜單界面{intc;chars[20];cout<<""<<endl;cout<<"航空客運(yùn)訂票系統(tǒng)"<<endl;cout<<"1.管理系統(tǒng)"<<endl;cout<<"2.查找航班信息"<<endl;cout<<"3.辦理訂票業(yè)務(wù)"<<endl;cout<<"4.辦理退票業(yè)務(wù)"<<endl;cout<<"0.退出系統(tǒng)"<<endl;cout<<"*"<<endl;do{printf("請(qǐng)選擇:");scanf("%s",s);c=atoi(s);}while(c<0||c>7);returnc;}voidmain(){start=air;ListInitiate();while(1){switch(Menuselect()){case1:Manage();break;case2:find();break;case3:Ordertickets();break;case4:Returntickets();break;case0:cout<<"感謝使用,你將要退出本系統(tǒng)!"<<endl;exit(0);}}}7、農(nóng)民過(guò)河問(wèn)題1.需求解析:1、這個(gè)問(wèn)題中涉及到不一樣的方法來(lái)實(shí)現(xiàn)把東西安全運(yùn)送到對(duì)岸的問(wèn)題,第一需要把問(wèn)題數(shù)學(xué)化,并且程序中要考慮到每一種合理的情況;2、這個(gè)問(wèn)題中要輸出運(yùn)送過(guò)程中每一個(gè)狀態(tài),這就需要在遍歷的時(shí)候保存已經(jīng)搜尋到的路徑。2.設(shè)計(jì):設(shè)計(jì)思想(1)、數(shù)據(jù)構(gòu)造設(shè)計(jì)a、第一要用一個(gè)構(gòu)造體來(lái)表示四種生物;b、爾后就是圖的毗鄰矩陣儲(chǔ)藏構(gòu)造的構(gòu)造體;c、設(shè)一個(gè)數(shù)組初始化為0,被接見(jiàn)過(guò)的點(diǎn)要標(biāo)志為1;d、還喲啊在設(shè)一個(gè)數(shù)組,保存已經(jīng)找到的路徑。2)、算法設(shè)計(jì)1)、第一把實(shí)責(zé)問(wèn)題數(shù)學(xué)化,這個(gè)問(wèn)題中涉及到四個(gè)東西的不一樣狀態(tài),能夠把

對(duì)于初步岸和目的岸,能夠用0也許1來(lái)表示,以實(shí)現(xiàn)在程序設(shè)計(jì)中的簡(jiǎn)略性。2)、第一,四種事物的狀態(tài)有16種,但是有些狀態(tài)是不一樣意發(fā)生的,比方農(nóng)民和白菜在一起,狼和羊在一起是不一樣意的?,F(xiàn)在要求優(yōu)選出合法的狀態(tài),用到的思想是:農(nóng)民和羊不在一起,并且狼和羊在一起也許羊和白菜在一起是不安全的,消除掉不安全的,剩下的就是安全的;3)、其次,要確定兩個(gè)狀態(tài)之間可否能夠連接,用到的思想是,能夠相連接的兩個(gè)狀態(tài)之間農(nóng)民的數(shù)字是不一樣樣的,狼、羊、白菜的其中一個(gè)改變狀態(tài)也許都不改變狀態(tài),若是這兩個(gè)狀態(tài)之間能夠連接,創(chuàng)辦毗鄰矩陣的時(shí)候就把對(duì)應(yīng)的地址計(jì)為1。4)、在搜尋路徑的時(shí)候,需要使用循環(huán)也許遞歸算法,防備隨機(jī)盲目運(yùn)算且保證每種情況均試試到。、設(shè)計(jì)表示(1)、函數(shù)調(diào)用關(guān)系main()————>CreatGraph()————>FindStartEnd()————>DepthFirstSearch()————>printPath()————>judgement2)、函數(shù)接口規(guī)格說(shuō)明main()(主函數(shù))CreatGraph(AdjGraph*graph)//構(gòu)造圖FindStartEnd(AdjGraph*graph,intf,intw,ints,intc)//搜尋毗鄰矩陣中起點(diǎn)和終點(diǎn)的地址judgement(intstate)//判斷是在左岸還是右岸printPath(AdjGraph*graph,intstart,intend)//輸出路徑3.調(diào)試解析1、在編寫(xiě)這個(gè)城的時(shí)候,最開(kāi)始感覺(jué)無(wú)從下手,不知道怎么辦理這些關(guān)系,此后查找相關(guān)資料,發(fā)現(xiàn)用0和1來(lái)表示四種事物的不一樣狀態(tài),清楚簡(jiǎn)潔;2、第二個(gè)困難就是在判斷狀態(tài)之間可否能夠連接的時(shí)候出現(xiàn)了一些小問(wèn)題,此后經(jīng)過(guò)解析解決了這個(gè)問(wèn)題;3、變這個(gè)程序的時(shí)候最大的收獲是弄清了遞歸的的用法,

開(kāi)始的時(shí)候這個(gè)程序只能輸出一條路徑,此后發(fā)現(xiàn)是在遞歸調(diào)用的的時(shí)候沒(méi)有注意及時(shí)輸出路徑;4、改進(jìn)思想:能夠運(yùn)用MFC動(dòng)畫(huà)加以改進(jìn),做成動(dòng)畫(huà)輸出的形式,5、由于用到了遞歸,所以時(shí)間復(fù)雜度就是O(2expn),空間復(fù)雜度是

會(huì)更清楚了然。O(n)。4、用戶手冊(cè)這個(gè)程序運(yùn)行后直接輸出運(yùn)行的過(guò)程,顯示每個(gè)步驟的四種東西的狀態(tài)。5、測(cè)試數(shù)據(jù)及測(cè)試結(jié)果6、源程序清單#include<iostream>#include<math.h>usingnamespacestd;typedefstruct{intf;intw;

//農(nóng)民//狼ints;

//羊intc;//白菜}Vertex;typedefstruct{Vertexvertex[16];//16種狀態(tài)intEdge[16][16];}AdjGraph;//圖的毗鄰矩陣儲(chǔ)藏構(gòu)造intsafevertex;intvisited[16]={0};intFindPath[16]={-1};//intr=0;voidCreatGraph(AdjGraph*graph)//構(gòu)造圖{inti=0;intj=0;if(!(f!=s&&(w=s||s=c)))//農(nóng)民和羊不在一起,并且狼和羊在一起也許羊和白菜在一起是不安全的{for(intf=0;f<=1;f++)for(intw=0;w<=1;w++)for(ints=0;s<=1;s++)for(intc=0;c<=1;c++){if(!(f!=s&&(w==s||s==c)))//農(nóng)民和羊不在一起,并且狼和羊在一起也許羊和白菜在一起是不安全的{graph->vertex[i].f=f;graph->vertex[

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論