數(shù)據(jù)結(jié)構(gòu).航空客運(yùn)訂票系統(tǒng)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu).航空客運(yùn)訂票系統(tǒng)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu).航空客運(yùn)訂票系統(tǒng)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu).航空客運(yùn)訂票系統(tǒng)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu).航空客運(yùn)訂票系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

1、.數(shù)據(jù)結(jié)構(gòu) 課 程 設(shè) 計(jì) 報(bào) 告 書(shū) 題 目: 航空客運(yùn)訂票系統(tǒng) 專 業(yè): 班 級(jí): 學(xué) 號(hào): 姓 名: 完成時(shí)間: 一、需求分析1.1問(wèn)題描述 設(shè)計(jì)一個(gè)航空客運(yùn)訂票系統(tǒng),為乘客提供各種航空客運(yùn)信息服務(wù)。1.2 基本要求每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛機(jī)號(hào)、星期幾飛行、乘員定額、余票量、訂票的客戶名單(包括姓名、訂票量、艙位等級(jí)1,2或3)以及等候替補(bǔ)的客戶名單(包括姓名、所需數(shù)量)。已訂票客戶和預(yù)訂票客戶名單可分別由線性表linklist和隊(duì)列l(wèi)inkqueue來(lái)實(shí)現(xiàn)。為了插入和刪除方便,兩者皆采用鏈表作為存儲(chǔ)結(jié)構(gòu)。系統(tǒng)需實(shí)現(xiàn)的操作和功能如下。(1)查詢航線:根據(jù)客戶提出的終點(diǎn)

2、站名輸出如下信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行,最近一天航班的日期和余票量。(2)承辦訂票業(yè)務(wù):根據(jù)客戶提出的要求(航班號(hào)、訂票數(shù)額)查詢?cè)摵桨嗥鳖~情況,若有余票,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票少于訂票額,則需重新詢問(wèn)客戶要求。若需要,可登記排隊(duì)候補(bǔ)。(3)承辦退票業(yè)務(wù):根據(jù)客戶提出的情況(日期、航班號(hào)),為客戶辦理退票手續(xù),然后查詢?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢問(wèn)排在第一的客戶,若退票能滿足他人要求,則為他辦理訂票手續(xù),否則依次詢問(wèn)其他排隊(duì)候補(bǔ)的客戶。二、概要設(shè)計(jì)11 鏈表的抽象數(shù)據(jù)類型定義 ADT List Data:D=ai|aiElemtSet,i=1,2,n,n0 R

3、elation:R=|ai-1,aiD,i=2,n Operation: airline *find_fin()/根據(jù)客戶提出的終點(diǎn)站名輸出航線信息 airline *find_air()/根據(jù)客戶提出的航班號(hào)查詢航班信息 airline *find_plane()/根據(jù)客戶提出的飛機(jī)號(hào)查詢航班信息 airline *find_date()/根據(jù)客戶提出的飛行日期查詢航班信息 void search()/根據(jù)客戶提出的要求輸出航線信息 void list()/全部航線的信息 void booklist()/訂票客戶名單 linklist *addlink(linklist*,int,char,

4、int)/增加訂票的客戶信息 void sort_ticket()/按剩余票數(shù)排序endADT1.2 隊(duì)列的抽象數(shù)據(jù)類型定義 ADT Queue Data:D=ai|aiElemtSet,i=1,2,n,n0 Relation:R=|ai-1,aiD,i=2,n Operation: linkqueue plusqueue(linkqueue,char,int)/增加排隊(duì)等候的客戶名單 endADT2、本程序包含三個(gè)模塊 (1)主程序模塊: void main() 初始化; Do 輸入指令; 處理指令; while (指令!=”退出”); (2)已買票的乘客的鏈表模塊實(shí)行對(duì)買票乘客信息的管理

5、(3)排隊(duì)買票乘客的隊(duì)列??鞂?shí)行對(duì)排隊(duì)買票乘客信息的管理 3、各模塊之間的調(diào)用關(guān)系 Insertline()more()main()guide()list()search()booklist()return_ticket()order()wait( )addlinkr()+plusqueue()find_air()find_fin()find_date()find_plane()三、詳細(xì)設(shè)計(jì)1、為簡(jiǎn)化問(wèn)題,本系統(tǒng)假設(shè)只有五條航線 #define MAX 5/定義航線量的最大值2、客戶的存儲(chǔ)信息:結(jié)點(diǎn)中保存的信息包括姓名,訂票量,艙位等級(jí) typedef struct bookchar name

6、10;/客戶姓名 int amount;/訂票量 int level;/艙位等級(jí) book *next;linklist;3、航班的存儲(chǔ)信息:結(jié)點(diǎn)中保存的信息包括終點(diǎn)站名,航班號(hào),飛機(jī)號(hào),飛行日期,乘員定額,余票量。 struct airlinechar fin_name10;/終點(diǎn)站名 char air_name10;/航班號(hào) char plane_name10;/飛機(jī)號(hào) char date10;/飛行日期 int ticket_amount;/乘員定額 int ticket_left;/余票量 linklist*book; linkqueue wait;linkinfo; 為了方便調(diào)用乘員

7、的信息和排隊(duì)等候的客戶信息,設(shè)置指針?lè)謩e指向乘員名單和等候替補(bǔ)的客戶名單。4、根據(jù)客戶提出的要求查詢航班信息 struct airline *find_fin()/根據(jù)客戶提出的終點(diǎn)站名輸出航線信息struct airline *info; char name10; int i=0; info=start; coutname; while(ifin_name) info+;i+; else break; if(iMAX) cout對(duì)不起,該航線未找到!n; else cout終點(diǎn)站名t航班號(hào)t飛機(jī)號(hào)t飛行日期t乘員定額tfin_name),若有相同的則輸出該條航線的信息,若沒(méi)有則返回。stru

8、ct airline *find_air()/根據(jù)客戶提出的航班號(hào)查詢航班信息struct airline *info; char number10; int i=0; info=start; coutnumber; while(iair_name) info+;i+; else return info; cout對(duì)不起,該航線未找到n; return 0;struct airline *find_plane()/根據(jù)客戶提出的飛機(jī)號(hào)查詢航班信息 struct airline *info; char a10; int i=0; info=start; cout請(qǐng)輸入飛機(jī)號(hào):; cin.getl

9、ine(a,10); while(iplane_name) info+;i+; else return info; cout對(duì)不起,該航線未找到n; return 0;struct airline *find_date()/根據(jù)客戶提出的飛行日期查詢航班信息 struct airline *info; char a10; int i; info=start; coutdate) info+;i+; else return info; cout對(duì)不起,該航線未找到n; return 0;5、辦理訂票業(yè)務(wù) void order()/辦理訂票業(yè)務(wù)struct airline *info; char

10、name10; int amount,level; info=start; int flag=0; int i; cout請(qǐng)輸入查詢航班的方式:n; 選擇航線查找方式查找航線; coutamount; if(票數(shù)滿足) 將客戶信息添加到已定票客戶名單;else若滿員或余票額少于訂票額,詢問(wèn)客戶是否需要進(jìn)行排隊(duì)等候 根據(jù)客戶提出的要求先找到航班(search()),再根據(jù)客戶的訂票量與結(jié)點(diǎn)中所存儲(chǔ)的信息(info-ticket_amount)比較,符合要求,則進(jìn)行訂票,詢問(wèn)客戶的姓名,艙位等級(jí),在訂票乘員名單域(addlink()中添加客戶信息,得到該客戶的座位號(hào)后,該航線余票量(info-ti

11、cket_left)應(yīng)為之前的余票量減去該客戶的訂票量。6、辦理退票業(yè)務(wù) void return_ticket()/退票struct airline *info; node *t,*back,*m,*n; int level; linklist *p1,*p2,*head; char name10; int flag=0; int i; coutbook; p1=head; coutname; while(p1) if(!strcmp(name,p1-name) break; p2=p1;p1=p1-next; if(沒(méi)找到該客戶的信息L) coutbook=head;/將航線名單域指向訂票單

12、鏈表的頭指針 m=(info-wait).front;/*m指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn) n=(info-wait).rear;/*n指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn) t=m;/*t為當(dāng)前滿點(diǎn)條件的排隊(duì)候補(bǔ)名單域 while(t) if(滿足條件者為頭結(jié)點(diǎn)) 為在頭結(jié)點(diǎn)存儲(chǔ)的信息對(duì)應(yīng)的客戶訂票 back=t;t=t-next; if(滿足條件者不為頭結(jié)點(diǎn)) 為滿足條件的客戶訂票 if(排隊(duì)等候的客戶名單里沒(méi)有信息) break;根據(jù)客戶提出的要求先找到航班(search()),再根據(jù)客戶的姓名與結(jié)點(diǎn)中所存儲(chǔ)的信息(info-name)比較,符合要求,則進(jìn)行退票,在訂票乘員名單域(addlink()

13、中刪除客戶信息,該航線余票量(info-ticket_left)應(yīng)為之前的余票量加上該客戶的訂票量。再在排隊(duì)等候的客戶名單隊(duì)列(queue()里尋找符合要求的客戶(info-ticket_left=info-wait.front-amount),進(jìn)行訂票。四、運(yùn)行與測(cè)試1、運(yùn)行程序,顯示菜單,見(jiàn)圖12、選擇“1”瀏覽航線信息,見(jiàn)圖23、選擇“2”瀏覽已訂票客戶信息,見(jiàn)圖34、選擇“3”查詢航線,見(jiàn)圖45、選擇“4”辦理訂票業(yè)務(wù),見(jiàn)圖56、選擇“5”辦理退票業(yè)務(wù),見(jiàn)圖67、選擇“6” 查看剩余票數(shù)并排序。見(jiàn)圖78、選擇“0”退出程序。五、總結(jié)與體會(huì) 課程設(shè)計(jì)是教學(xué)中的一個(gè)重要環(huán)節(jié),對(duì)于我們學(xué)生來(lái)

14、說(shuō)是一次不可多得的鍛煉機(jī)會(huì)。通過(guò)這次的課程設(shè)計(jì),我們不僅可以系統(tǒng)地復(fù)習(xí)、鞏固課程的知識(shí),而且還可以學(xué)到如何把書(shū)本上的知識(shí)運(yùn)用于解決實(shí)際問(wèn)題中來(lái)。 通過(guò)這學(xué)期的學(xué)習(xí),我認(rèn)為要學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程,不僅要認(rèn)真閱讀課本知識(shí),更重要的是要通過(guò)上機(jī)實(shí)踐才能增強(qiáng)和鞏固自我的知識(shí)。通過(guò)上機(jī)實(shí)驗(yàn),我們能對(duì)數(shù)據(jù)結(jié)構(gòu)更加深入了解,并且能夠發(fā)現(xiàn)平時(shí)在書(shū)面作業(yè)中比較容易令人忽略的細(xì)節(jié)問(wèn)題。要做出一個(gè)具體問(wèn)題的解法,需要的不僅僅是老師灌輸給我們的知識(shí),在探索的過(guò)程中,我們會(huì)自覺(jué)地去尋找、關(guān)注相關(guān)方面的消息和知識(shí)。所以說(shuō),這也是我們自身不斷積累知識(shí)的過(guò)程。在這次的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)過(guò)程中,我發(fā)現(xiàn)之前學(xué)過(guò)的C+知識(shí)是學(xué)習(xí)數(shù)據(jù)

15、結(jié)構(gòu)的基礎(chǔ),之前的C+學(xué)習(xí)有些薄弱,對(duì)這門課程有了一定的影響,還是要在假期的時(shí)候再鞏固一下。未來(lái)的兩年多,還有很多的專業(yè)課要學(xué)習(xí),知識(shí)本來(lái)就是相通的,特別是計(jì)算機(jī)編程中的各種語(yǔ)言,我應(yīng)該要好好這些學(xué)過(guò)的知識(shí)真正變成自己的知識(shí),才能為以后的學(xué)習(xí)打好基礎(chǔ)。六、附源程序#include#include#include#include#include#define MAX 5/定義航線量的最大值using namespace std;typedef struct bookchar name10;/客戶姓名 int amount;/訂票量 int level;/艙位等級(jí) book *next;linkl

16、ist;typedef struct waitchar name10;/姓名 int amount;/所需票數(shù) wait *next;node,*ptr;typedef struct queueptr front;/等候替補(bǔ)的客戶名單的隊(duì)頭指針 ptr rear;/等候替補(bǔ)的客戶名單的隊(duì)尾指針linkqueue;struct airlinechar fin_name10;/終點(diǎn)站名 char air_name10;/航班號(hào) char plane_name10;/飛機(jī)號(hào) char date10;/飛行日期 int ticket_amount;/乘員定額 int ticket_left;/余票量

17、linklist*book;/乘員名單,指向乘員名單鏈表的頭指針 linkqueue wait;/等候替補(bǔ)的客戶名單,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針linkinfo;struct airline *start;struct airline airMAX=Paris,1,P001,SAT,2,3,Toronto,2,T002,SUN,1,2,New York,3,N003,MON,3,5,HongKong,4,H004,WED,1,2,Cairo,5,C005,TUE,3,4;void show(struct airline *info)/每條航線的基本信息coutfin_nametair_

18、nametplane_nametdatetticket_amounttticket_leftn;struct airline *find_fin()/根據(jù)客戶提出的終點(diǎn)站名輸出航線信息struct airline *info; char name10; int i=0; info=start; coutname; while(ifin_name) info+;i+; else break; if(iMAX) cout對(duì)不起,該航線未找到!n; else cout終點(diǎn)站名t航班號(hào)t飛機(jī)號(hào)t飛行日期t乘員定額t余票量n; show(info); return 0;struct airline *f

19、ind_air()/根據(jù)客戶提出的航班號(hào)查詢航班信息 struct airline *info; char number10; int i=0; info=start; coutnumber; while(iair_name) info+;i+; else return info; cout對(duì)不起,該航線未找到n; return 0;struct airline *find_plane()/根據(jù)客戶提出的飛機(jī)號(hào)查詢航班信息 struct airline *info;char a10;int i=0;info=start;cout請(qǐng)輸入飛機(jī)號(hào):;cin.getline(a,10);while(i

20、plane_name) info+;i+; else return info; cout對(duì)不起,該航線未找到n; return 0;struct airline *find_date()/根據(jù)客戶提出的飛行日期查詢航班信息 struct airline *info; char a10; int i; info=start; coutdate) info+;i+; else return info; cout對(duì)不起,該航線未找到n; return 0;void search()/根據(jù)客戶提出的要求輸出航線信息struct airline *info; char name10; int i=0;

21、info=start; int flag=0; cout請(qǐng)輸入查詢航班的方式:n; cout1n; cout2n; cout3n;for(;!flag;)cini;switch(i)case 1: info=find_air();flag=1;break;case 2: info=find_fin();flag=1;break;case 3: info=find_date();flag=1;break;default:printf(操作錯(cuò)誤,請(qǐng)重新輸入n);break; cout終點(diǎn)站名t航班號(hào)t飛機(jī)號(hào)t飛行日期t乘員定額t余票量n; show(info); coutn; void list(

22、)/全部航線的信息struct airline *info ; int i=0; info=start; cout終點(diǎn)站名t航班號(hào)t飛機(jī)號(hào)t飛行日期t乘員定額t余票量n; while(iMAX) show(info); info+; i+; coutn;void booklist()/訂票客戶名單struct airline *info; linklist *p; int flag=0; int i; cout請(qǐng)輸入查詢航班的方式:n; cout1n; cout2n; cout3n;for(;!flag;)cini;switch(i)case 1: info=find_air();flag=1

23、;break;case 2: info=find_fin();flag=1;break;case 3: info=find_date();flag=1;break;default:coutbook; if(p!=NULL) cout客戶姓名t訂票數(shù)量t艙位等級(jí)n; while(p) coutname,p-amount,p-level; p=p-next; else cout該航線沒(méi)有客戶信息!n; linklist *addlink(linklist*head,int amount,char name,int level)/增加訂票的客戶信息linklist *p1,*new1; p1=hea

24、d; new1=(linklist*)malloc(sizeof(linklist); if(!new1) coutname,name); new1-amount=amount; new1-level=level; new1-next=NULL; if(!head)/原無(wú)訂票客戶信息 head=new1;new1-next=NULL; else head=new1;new1-next=p1; return head;linkqueue plusqueue(linkqueue q,char name,int amount)/增加排隊(duì)等候的客戶名單ptr new2; new2=(ptr)mallo

25、c(sizeof(node); strcpy(new2-name,name); new2-amount=amount; new2-next=NULL; if(q.front=NULL)/原排隊(duì)等候客戶名單為空 q.front=new2; else q.rear=new2; return q;void order()/辦理訂票業(yè)務(wù)struct airline *info; char name10; int amount,level; info=start; int flag=0; int i; cout請(qǐng)輸入查詢航班的方式:n; cout1n; cout2n; cout3n;for(;!flag

26、;)cini;switch(i)case 1: info=find_air();flag=1;break;case 2: info=find_fin();flag=1;break;case 3: info=find_date();flag=1;break;default:cout操作錯(cuò)誤,請(qǐng)重新輸入n;break; coutamount; if(amountinfo-ticket_amount)/若客戶訂票額超過(guò)乘員定票總額,退出 coutn對(duì)不起,您輸入的票的數(shù)量已經(jīng)超過(guò)乘員定額!; return; if(amountticket_left)/若客戶訂票額末超過(guò)余票量,等記信息 int n=

27、0; coutname; coutlevel; info-book=addlink(info-book,amount,name,level);/在訂票乘員名單域中添加客戶信息 for(n=0;namount;n+)/輸出該訂票客戶的座位號(hào) cout座位號(hào)是:ticket_amount-info-ticket_left+n+1; info-ticket_left-=amount;/該航線的余票量應(yīng)減掉該客戶的訂票量 coutn祝您乘坐愉快!n; else /若滿員或余票額少于訂票額,詢問(wèn)客戶是否需要進(jìn)行排隊(duì)等候 char a; coutn請(qǐng)選擇操作:排隊(duì)等候/不排隊(duì)等候(Y/N)n; cin.g

28、et(a); if(a=Y|a=y)/客戶進(jìn)行排隊(duì)等候 coutname; info-wait=plusqueue(info-wait,name,amount);/在排隊(duì)等候乘員名單域中添加客戶信息 coutn注冊(cè)成功!n; else coutn歡迎您下次再次訂購(gòu)!n; void return_ticket()/退票struct airline *info; node *t,*back,*m,*n; int level; linklist *p1,*p2,*head; char name10; int flag=0; int i; cout請(qǐng)輸入查詢航班的方式:n; cout1n; cout2

29、n; cout3n;for(;!flag;)scanf(%d,&i);switch(i)case 1: info=find_air();flag=1;break;case 2: info=find_fin();flag=1;break;case 3: info=find_date();flag=1;break;default:coutbook; p1=head; coutname; while(p1)/根據(jù)客戶提供的姓名到訂票客戶名單進(jìn)行查詢 if(!strcmp(name,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) coutnext; else

30、 p2-next=p1-next; info-ticket_left+=p1-amount; level=p1-level; coutbook=head;/將航線名單域指向訂票單鏈表的頭指針 m=(info-wait).front;/*m指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn) n=(info-wait).rear;/*n指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn) t=m;/*t為當(dāng)前滿點(diǎn)條件的排隊(duì)候補(bǔ)名單域 while(t) if(info-ticket_left=info-wait.front-amount)/滿足條件者為頭結(jié)點(diǎn) int i; info-wait.front=t-next; cout訂票成功!n; for(i=0;iamount;i+)/輸出座位號(hào) cout座位號(hào)是:ticket_left-i; info-ticket_left=t-amount; info-book=addlink(info-book,t-amount,t-name,level);

溫馨提示

  • 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)論