數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語(yǔ)言版《飛機(jī)訂票系統(tǒng)》
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語(yǔ)言版《飛機(jī)訂票系統(tǒng)》》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語(yǔ)言版《飛機(jī)訂票系統(tǒng)》(41頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、軟件工程專(zhuān)業(yè)14級(jí) 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告 設(shè)計(jì)題目: 飛機(jī)訂票系統(tǒng) 班 級(jí):軟件14 姓 名: 指導(dǎo)教師: 2015 年11月20日 一、設(shè)計(jì)任務(wù)與要求 1 1.1 總體目標(biāo)與任務(wù)要求 1 1.2 題目選擇與目的意義 1 1.3 所選題目的主要工作 1 二、需求分析 2 2.1 用戶(hù)需求分析 2 2.2 功能需求分析 2 2.3 系統(tǒng)需求分析 2 三、概要設(shè)計(jì) 3 3.1 各模塊的算法設(shè)計(jì)說(shuō)明 3 3.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說(shuō)明 8 四、詳細(xì)設(shè)計(jì) 10
2、五、源代碼 11 六、運(yùn)行結(jié)果分析 21 七、收獲與體會(huì) 28 八、主要參考資料 28 、設(shè)計(jì)任務(wù)與要求 1.1 總體目標(biāo)與任務(wù)要求 制作一個(gè)訂票系統(tǒng),通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能: 1)錄入 可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù) 自定)。 2 )查詢(xún) 可以查詢(xún)某個(gè)航線的情況 (如, 輸入航班號(hào), 查詢(xún)起降時(shí)間, 起飛抵達(dá)城市, 航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng))可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航 班情況。 3 )訂票 可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇的航班(訂票情況可 以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己
3、設(shè)定 ) 。 4 )退票 可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及 航班情況,訂單要有編號(hào)。 5 )修改航班信息 當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件。 根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功 能。 6 .2 題目選擇與目的意義 選擇這個(gè)題目的原因是,訂票系統(tǒng)在現(xiàn)實(shí)生活中應(yīng)用很廣泛,通過(guò)這個(gè)系統(tǒng) 可以使訂票、退票等變得簡(jiǎn)便。與傳統(tǒng)的人工用紙、筆來(lái)記錄辦理訂票、退票等 相比, 使用這個(gè)系統(tǒng)也會(huì)增加工作效率。 這個(gè)題目做出來(lái)的系統(tǒng)還是比較實(shí)用的, 所以我選擇了訂票系統(tǒng)這個(gè)題目。 完成此系統(tǒng),需要綜合運(yùn)用數(shù)據(jù)結(jié)構(gòu)課程中學(xué)到
4、的幾種典型數(shù)據(jù)結(jié)構(gòu),以及程 序設(shè)計(jì)語(yǔ)言(C語(yǔ)言),自行實(shí)現(xiàn)一個(gè)較為完整的應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)。通過(guò)課程 設(shè)計(jì),自己通過(guò)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫(xiě)實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握 應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開(kāi)發(fā)中的應(yīng) 用。學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)際的方法,提高分析和解決問(wèn)題的能力,增加綜合能力。 7 .3 所選題目的主要工作 這個(gè)題目的主要工作是使訂票系統(tǒng)可以錄入航班情況,查詢(xún)某個(gè)航線的情 況、辦理訂票、辦理退票、修改航班信息、查詢(xún)訂票信息等。 二、需求分析 2.1 用戶(hù)需求分析 用戶(hù)使用此程序所要完成的工作主要為:查詢(xún)所有航線信息、查看已訂票
5、客 戶(hù)信息、查詢(xún)航線、辦理訂票業(yè)務(wù)、辦理退票業(yè)務(wù)。通過(guò)此系統(tǒng)可以方便的進(jìn)行 上述工作。 每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、 余票量。 已訂票的客戶(hù)名單信息包括姓名、訂票量、艙位等級(jí)(1, 2或3)。 等候替補(bǔ)的客戶(hù)名單信息包括姓名、所需票量。 查詢(xún)航線功能可以根據(jù)旅客提出的終點(diǎn)站名輸出航班號(hào)、飛行時(shí)間、票價(jià)、乘 員定額、余票量。 訂票業(yè)務(wù)功能根據(jù)客戶(hù)提出的要求 (航班號(hào)、訂票數(shù)額)查詢(xún)?cè)摵桨嗥鳖~情況, 若尚有余票,則為客戶(hù)辦理訂票手續(xù),輸出座位號(hào);若已滿(mǎn)員或余票額少于定票額, 則需重新詢(xún)問(wèn)客戶(hù)要求。若需要,可登記排隊(duì)候補(bǔ)購(gòu)票。 退票業(yè)務(wù)功能根據(jù)客戶(hù)
6、提供的情況(航班號(hào)、姓名)為客戶(hù)辦理退票手續(xù),然 后查詢(xún)?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢(xún)問(wèn)排在第一的客戶(hù),若所退票額能滿(mǎn)足他 的要求,則為他辦理訂票手續(xù),否則依次詢(xún)問(wèn)其他排隊(duì)候補(bǔ)的客戶(hù)。 2.2 功能需求分析 功能需求分析模塊圖如圖 2.1所示。 開(kāi)始 退出系統(tǒng) 辦理訂票業(yè)務(wù) 查詢(xún)航線 瀏覽已訂票客戶(hù)信息 瀏覽航線信息 辦理退票業(yè)務(wù) 圖2.1功能模塊圖 第 13頁(yè) 2.3 系統(tǒng)需求分析 開(kāi)發(fā)環(huán)境:Windows 7系統(tǒng) 使用軟件:編寫(xiě)實(shí)驗(yàn)報(bào)告: Microsoft Office Word 制作 程序:Microsoft Visual C++ 6.0
7、 三、概要設(shè)計(jì) 3.1 各模塊的算法設(shè)計(jì)說(shuō)明 1 .瀏覽航線信息功能,調(diào)用 display函數(shù)進(jìn)行輸出。如圖3.1所示。瀏覽 航線信息流程圖: 圖3.1瀏覽航線信息流程圖: 其中display函數(shù)的流程圖如圖3.2 display 函數(shù)流程圖: 2. 圖3.3 圖3.2 display 函數(shù)流程圖 瀏覽已訂票客戶(hù)信息功能,按順序輸出客戶(hù)信息鏈表中的信息。流程圖如 瀏覽已訂票客戶(hù)信息功能流程圖: 圖3.3瀏覽已訂票客戶(hù)信息功能流程圖 3. 。流程圖如圖3.4 查詢(xún)航線功能,根據(jù)客戶(hù)提出的終點(diǎn)站名輸出航線信息 查詢(xún)航線流程圖: 圖3.4查詢(xún)航線流
8、程圖 4.辦理訂票業(yè)務(wù)功能, 根據(jù)客戶(hù)提出的航線信息等進(jìn)行訂票 。流程圖如圖 3.5辦理訂票業(yè)務(wù)功能流程圖: 痂人航班號(hào) 對(duì)不 札族 購(gòu) 睜! 時(shí)您票己乘 否排隊(duì) ,的量過(guò)衢 登記信息等并 輸出琬鐮1 愉快「 輸出項(xiàng)迎您下 次歉訂勒. 第建息等 并輸出堆 冊(cè)成珈〃 圖3.5辦理訂票業(yè)務(wù)功能流程圖 5.辦理退票業(yè)務(wù)功能, 根據(jù)客戶(hù)提出的航線信息等進(jìn)行退票 。流程圖如圖 3.6辦理退票業(yè)務(wù)功能流程圖: 輸入航班號(hào) N 對(duì)不起, 你沒(méi)有日 過(guò)票! 不該末冷 時(shí)攙 有該航班 break p2=pl;pl =pl->neit;
9、 圖3.6辦理退票業(yè)務(wù)功能流程圖 6.主函數(shù)流程圖如圖 3.7主函數(shù)流程圖: 初始化,輸出菜 單,請(qǐng)選擇 ■輸出"歡迎使用本系 統(tǒng),再見(jiàn)i "exit(0), 圖3.7主函數(shù)流程圖
10、 /*單鏈隊(duì)列存儲(chǔ)等候替補(bǔ)的客戶(hù)信息 */ /*姓名*/ /*訂票量*/ 3.2存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說(shuō)明 typedef struct wat_ros { char name[10]; int req_amt; struct wat_ros *next; }qnode,*qptr; typedef struct pqueue /* 等候替補(bǔ)的客戶(hù)名單 */ { qptr front; qptr rear; }linkqueue; 上述單鏈隊(duì)列用來(lái)存儲(chǔ)排隊(duì)等候的客戶(hù)名單,這樣可以通過(guò)隊(duì)先進(jìn)先出的特 點(diǎn)來(lái)進(jìn)行操作。先排隊(duì)的客戶(hù)可以先訂票成功。 /* 乘員名單 */
11、 /* 客戶(hù)姓名 */ /* 訂票量 */ /* 艙位等級(jí) */ typedef struct ord_ros { char name[10]; int ord_amt; int grade; struct ord_ros *next; }linklist; 上述單鏈表用來(lái)存儲(chǔ)乘員的信息,包括姓名、訂票量、艙位等級(jí)。 struct airline /*航線信息 */ { char ter_name[10]; /* 抵達(dá)城市 */ char air_num[10]; /* 航班號(hào) */ char time[10]; /* 飛機(jī)時(shí)間 */ char pri[7];
12、/* 票價(jià) */ int tkt_amt; /* 乘員定額 */ int tkt_sur; /* 余票量 */ linklist *order; /*乘員名單域,指向乘員名單鏈表的頭指針 */ linkqueue wait; /* 等候替補(bǔ)的客戶(hù)名單域,分別指向排隊(duì)等候名單隊(duì)頭 隊(duì)尾的指針 */ }lineinfo; 這個(gè)結(jié)構(gòu)體存儲(chǔ)了航線信息,包括抵達(dá)城市、航班號(hào)、飛行時(shí)間、票價(jià)、乘 員定額、余票量等。 #define MAXSIZE 5 /*定義航線數(shù)量,可修改 */ struct airline air[MAXSIZE]= /* 初始化航線信息 */ { {&quo
13、t;beijing","1","1200","860",30,30}, {"shanghai","2","1000","770",20,20}, {"london","3","1330","960",10,10}, {"harbin","4","1700","760",50,50},
14、 {"dalian","5","1400","550",40,40} }; 通 過(guò) 修 改 全 局 變 量 MAXSIZE 的 數(shù) 值 即 可 更 改 航 線 數(shù) 。 在 struct airline air[MAXSIZE] 中可以修改、 增加、 刪除航線信息。 航線信息內(nèi)容依次為抵達(dá)城市、 航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量(飛行時(shí)間 1200 即 12 : 00)。 四、詳細(xì)設(shè)計(jì) 1. 查看航線信息 編 寫(xiě) void list() 函 數(shù) 來(lái) 查 看 全 部 航 線 信 息 。 其 中 調(diào)
15、 用 了 void display(struct airline *info) 函數(shù),該函數(shù)的功能是打印每條航線的基本信 息。這樣即可按順序打印出 struct airline 鏈表中存儲(chǔ)的全部航線信息。 2. 查看已訂票客戶(hù)信息 編寫(xiě) void prtlink() 函數(shù)來(lái)查看已訂票客戶(hù)信息。 這個(gè)函數(shù)中需要輸入要查詢(xún)的 航線,通過(guò) find() 函數(shù)來(lái)尋找這個(gè)航線然后輸出該航線乘員域的乘員信息。 3. 查詢(xún)航線 編寫(xiě) void search() 函數(shù)來(lái)實(shí)現(xiàn)查詢(xún)航線的功能。 用戶(hù)輸入抵達(dá)城市名, 該函數(shù) 會(huì)在航線信息鏈表中進(jìn)行查詢(xún)。如果有該城市,則會(huì)輸出此航線的信息。 4. 辦
16、理訂票業(yè)務(wù) 編寫(xiě) void order() 函數(shù)來(lái)實(shí)現(xiàn)訂票功能。首先提示用戶(hù)輸入航班號(hào),然后調(diào)用 find() 函數(shù)來(lái)查找此航班, 如果該航班存在, 則會(huì)提示用戶(hù)輸入信息并調(diào)用 linklist *insertlink(linklist *head,int amount,char name口,int grade)在訂票乘員名單域中添 加客戶(hù)信息。如果余票不足,則會(huì)提示用戶(hù)進(jìn)行排隊(duì),如果排隊(duì),則會(huì)調(diào)用提示 用戶(hù)輸入信息并調(diào)用 linkqueue appendqueue(linkqueue q,char name[],int amount) 在排隊(duì)等候乘員名單域中添加客戶(hù)信息。 5.
17、辦理退票業(yè)務(wù) 編寫(xiě) void return_tkt() 函數(shù)來(lái)實(shí)現(xiàn)退票功能。首先提示用戶(hù)輸入航班號(hào),然后 調(diào)用 find() 函數(shù)來(lái)查找此航班,如果該航班存在,則會(huì)提示用戶(hù)輸入信息,信息 正確則會(huì)提示退票成功。此時(shí)將乘員信息中的該乘員信息刪除,然后檢查替補(bǔ)乘 員鏈表中的信息,如果其訂票量可以得到滿(mǎn)足,則會(huì)將其插入到訂票客戶(hù)名單鏈 表中,提示他訂票成功。 6. 退出系統(tǒng) 主函數(shù)中無(wú)限循環(huán)輸出菜單 for(;;) ,用戶(hù)在菜單頁(yè)面下輸入 6 回車(chē)即 exit(0) , 即可退出系統(tǒng)。 五、源代碼 #include <stdio.h> #include <st
18、dlib.h> #include <string.h> #include <conio.h> #include <iostream.h> /*定義航線數(shù)量,可修改 */ #define MAXSIZE 5 typedef struct wat_ros /*單鏈隊(duì)列存儲(chǔ)等候替補(bǔ)的客戶(hù)信息 */ { char name[10]; /*姓名 */ int req_amt; /*訂票量 */ struct wat_ros *next; }qnode,*qptr; typedef struct pqueue /*等候替補(bǔ)的客戶(hù)名單 */
19、 { qptr front; /*等候替補(bǔ)客戶(hù)名單域的隊(duì)頭指針 */ qptr rear; /* 等候替補(bǔ)客戶(hù)名單域的隊(duì)尾指針 */ }linkqueue; typedef struct ord_ros /*乘員名單 */ { char name[10]; /*客戶(hù)姓名 */ int ord_amt; /* 訂票量 */ int grade; /*艙位等級(jí) */ struct ord_ros *next; }linklist; struct airline { char ter_name[10]; /* 抵達(dá)城市 */ char air_num[10]; /*航班號(hào)
20、 */ char time[10]; /* 飛機(jī)時(shí)間 */ char pri[7]; /*票價(jià) */ int tkt_amt; int tkt_sur; linklist *order; linkqueue wait; 指針 */ /* 乘員定額 */ /*余票量 */ /*乘員名單域,指向乘員名單鏈表的頭指針 */ /*等候替補(bǔ)的客戶(hù)名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的 }lineinfo; struct airline *start; void display(struct airline *info) /*打印每條航線的基本信息 */ { printf(
21、"%8s\t%3s\t%s\t\t%4s\t%3d\t%10d\n",info->ter_name,info->air_num,info->time,i nfo->pri,info->tkt_amt,info->tkt_sur); void list() { struct airline *info; int i=0; info=start; /* 打印全部航線信息 */ } 第 29 頁(yè) printf("終點(diǎn)站名\t航班號(hào)\t飛行時(shí)間\t票價(jià)\t乘員定額\t余票量\n"); while(i&l
22、t;MAXSIZE) { display(info); /*調(diào)用 display函數(shù)來(lái)輸出 */ info++; i++; } printf("\n\n"); } void search() { /* 根據(jù)客戶(hù)提出的終點(diǎn)站名輸出航線信息 */ struct airline *info,*find(); /*要抵達(dá)的城市名稱(chēng) */ char name[10]; int i=0; info=start; printf(" 請(qǐng)輸入要抵達(dá)城市的名稱(chēng) :"); scanf("%s",name); whil
23、e(i<MAXSIZE) { if(!strcmp(name,info->ter_name)) /*有該站名 strcmp則返回,if(!0)即break*/ { break; } info++; i++; } if(i>=MAXSIZE) /* 沒(méi)有匹配的航線 */ { printf(" 對(duì)不起,沒(méi)有這條航線 !\n"); } else { printf("終點(diǎn)站名\t航班號(hào)\t飛行時(shí)間\t票價(jià)\t乘員定額\t余票量\n"); display(info); } } struct airline *f
24、ind() { struct airline *info; char number[10]; int i=0; /*調(diào)用display函數(shù)輸出航線信息*/ / *根據(jù)系統(tǒng)提出的航班號(hào)查詢(xún)并以指針形式返回 */ /*查詢(xún)的航班號(hào) */ info=start; printf(" 請(qǐng)輸入航班號(hào) :"); scanf("%s",number); while(i<MAXSIZE) { if(!strcmp(number,info->air_num)) /* 有匹配航班 */ { return info; info++;
25、 i++; } printf(" 對(duì)不起,沒(méi)有這條航線 !\n"); /* 無(wú)匹配航班 */ return NULL; } void prtlink() { linklist *p; struct airline *info; /*打印訂票乘員名單域的客戶(hù)名單信息 */ info=find(); p=info->order; if(p!=NULL) { printf(" 客戶(hù)姓名 while(p) { /* 按順序輸出客戶(hù)信息鏈表 */ 訂票數(shù)額 艙位等級(jí) \n"); printf("%s\t\t%d\t
26、%d\n",p->name,p->ord_amt,p->grade); p=p->next; } } else /*沒(méi)有人訂這個(gè)航班 */ printf(" 該航線沒(méi)有客戶(hù)信息 !\n"); } linklist *insertlink(linklist *head,int amount,char name[],int grade) /* 增加訂票乘員名單 域的客戶(hù)信息 */ { linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist));
27、 if(!new1) { /* 存儲(chǔ)空間不足 */ printf("\nOut of memory!!\n"); return NULL; strcpy(new1->name,name); new1->ord_amt=amount; new1->grade=grade; new1->next=
28、NULL; if(head==NULL) /*若原訂票客戶(hù)信息為空 */ { head=new1; new1->next=NULL; } else { head=new1; } new1->next=p1; return head; } linkqueue appendqueue(linkqueue q,char name[],int amount) /*增加排隊(duì)等候的客戶(hù)名單 域*/ { qptr new1; new1=(qptr)malloc(sizeof(qnode)); strcpy(new1->name,name); new1-&
29、gt;req_amt=amount; new1->next=NULL; if(q.front==NULL) /*若原排隊(duì)等候客戶(hù)名單域?yàn)榭?*/ { q.front=new1; } else { q.rear->next=new1; } q.rear=new1; return q; void order() { struct airline *info; int amount,grade; char name[10]; info=start; if(!(info=find())) { return; } printf(" 請(qǐng)輸入您需
30、要的票數(shù) /* 辦理訂票業(yè)務(wù) */ /*訂票數(shù)量 ,艙位等級(jí) */ /*要訂的航班號(hào) */ /* 根據(jù)客戶(hù)提供的航班號(hào)進(jìn)行查詢(xún),如為空,退出該模塊 */ :"); scanf("%d",&amount); if(amount>info->tkt_amt) { /* 若客戶(hù)訂票額超過(guò)乘員定票總額,退出 */ printf("\n 對(duì)不起,您輸入票數(shù)已經(jīng)超過(guò)乘員定額 !"); return; } if(amount<=info->tkt_sur) 等記信息 */ /* 若客戶(hù)訂票額末超過(guò)余
31、票量,訂票成功并 { int i; printf(" 請(qǐng)輸入您的姓名 :"); scanf("%s",name); printf(" 請(qǐng)輸入您需要的艙位等級(jí) (1,2或):"); scanf("%d",&grade); info->order=insertlink(info->order,amount,name,grade); /* 在訂票乘員名單域 */ for(i=0;i<amount;i++) { printf("%s 的座位號(hào)是 /* 依次輸出該訂票
32、客戶(hù)的座位號(hào) */ :%d\n",name,info->tkt_amt-info->tkt_sur+i+1); } info->tkt_sur-=amount; /*該航線的余票量應(yīng)減掉該客戶(hù)的訂票量 */ printf("\n 祝您乘坐愉快 !\n"); } else /*若滿(mǎn)員或余票額少于訂票額,詢(xún)
33、問(wèn)客戶(hù)是否需要進(jìn)行排隊(duì)等候 */ { char r; printf("\n 沒(méi)有這么多票了,您需要排隊(duì)等候嗎 ?(Y/N)"); r=getch(); printf("%c",r); if(r=='Y'||r=='y') { printf("\n 請(qǐng)輸入您的姓名 :"); scanf("%s",name); info->wait=appendqueue(info->wait,name,amount); /*在排隊(duì)等候乘員名單域 中添加客戶(hù)信息 */ pr
34、intf("\n 注冊(cè)排隊(duì)成功 !\n"); } else { printf("\n 歡迎您再次訂購(gòu)! \n"); } } } void return_tkt() /* 退票模塊 */ { struct airline *info; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname[10]; if(!(info=find())) /*調(diào)用查詢(xún)函數(shù),根據(jù)客戶(hù)提供的航線進(jìn)行搜索 */ { return; } head=info->o
35、rder; p1=head; printf(" 請(qǐng)輸入你的姓名 :"); scanf("%s",cusname); while(p1!=NULL) /* 根據(jù)客戶(hù)提供的姓名到訂票客戶(hù)名單域進(jìn)行查詢(xún) */ { if(!strcmp(cusname,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { /* 若未找到,退出本模塊 */ printf(" 對(duì)不起,您沒(méi)有訂過(guò)票 !\n"); return; } else /*
36、 若信息查詢(xún)成功,刪除訂票客戶(hù)名單域中的信息 */ { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->tkt_sur+=p1->ord_amt; grade=p1->grade; printf("%s退票成功!\n",p1->name); free(p1); } info->order=head; f=(info->wait).front; r=(info->wait).rear; t=f; /*
37、重新將航線名單域指向訂票單鏈表的頭指針 */ /*f 指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn) */ /*r 指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn) */ /*t 為當(dāng)前滿(mǎn)點(diǎn)條件的排隊(duì)候補(bǔ)名單域 */ while(t) { if(info->tkt_sur>=info->wait.front->req_amt) /*若滿(mǎn)足條件者為頭
38、結(jié)點(diǎn) */ { int i; info->wait.front=t->next; printf("%s 訂票成功 !\n",t->name); for(i=0;i<t->req_amt;i++) /* 輸出座位號(hào) */ { printf("%s 的座位號(hào)是 :%d\n",t->name,(info->tkt_sur)-i); } info->tkt_sur-=t->req_amt; info->order=insertlink(info->order,t->req_
39、amt,t->name,grade);/* 插入至 U 訂票客 戶(hù)名單鏈表中 */ free(t); break; } back=t; t=t->next; if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/* 若滿(mǎn)足條件者不為頭結(jié)點(diǎn) */ { int i; back->next=t->next; printf("%s 訂票成功 !\n",t->name); for(i=0;i<t->req_amt;i++) /*輸出座位號(hào) */ { pr
40、intf("<%s>'s seat number is:%d\n",t->name,(info->tkt_sur)-i); } info->tkt_sur-=t->req_amt; info->order=insertlink(info->order,t->req_amt,t->name,grade);/* 插入至 U 訂票客 戶(hù)名單鏈表中 */ free(t);break; } if(f==r) { break; int menu_select() { int c; /* 菜單界面
41、*/ char s[20]; printf("\t 訂票系統(tǒng) \n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("1. 查看航線信息 \n"); printf("2. 查看已訂票客戶(hù)信息 \n"); printf("3. 查詢(xún)航線 \n"); printf("4. 辦理訂票業(yè)務(wù) \n"); printf("5. 辦理退票業(yè)務(wù) \n"); printf("6. 退出系統(tǒng) \
42、n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n"); do { printf(" 請(qǐng)選擇 (1-6):"); scanf("%s",s); c=atoi(s); }while(c<1||c>6); return c; } void main() { struct airline air[MAXSIZE]= /*初始化航線信息 */ { {"beijing","1","1200","8
43、60",30,30}, {"shanghai","2","1000","770",20,20}, {"london","3","1330","960",10,10}, {"harbin","4","1700","760",50,50}, {"dalian","5","1400"
44、,"550",40,40} }; start=air; for(;;) { system("cls"); switch(menu_select()) { case 1:list(); break; case 2:prtlink(); break; case 3:search(); break; case 4:order(); break; case 5:return_tkt(); break; case 6:printf("\n 感謝您 exit(0); } printf("\n 任意鍵繼續(xù) .
45、..\n") getch(); } } /* 無(wú)限循環(huán) (除非用戶(hù)選擇 /* 清空屏幕 */ /*打印全部航線信息 */ /*瀏覽已訂票客戶(hù)信息 */ /* 查詢(xún)航線 */ /* 訂票 */ /*退票 */ ,再見(jiàn) !\n"); /*退出系統(tǒng) */ /* 正常退出程序 */ /*任意鍵繼續(xù) */ .退出 )*/ 六、運(yùn)行結(jié)果分析 1 . 菜單:進(jìn)入系統(tǒng)后,會(huì)出現(xiàn)如下菜單,如圖 6.1 菜單: 第 # 頁(yè) 訂票系統(tǒng) 訂票系統(tǒng) Z 2JWAJ/k/ .息 住 戶(hù) 息客務(wù)務(wù) 信票業(yè)業(yè) 線訂桀杳示統(tǒng) 航已普退系 詢(xún)理理出 f
46、t-*-查辦辦退 第#頁(yè) 請(qǐng)選擇a-6):. 圖6.1菜單 用戶(hù)根據(jù)自己需求選擇輸入數(shù)字(1-6)即可進(jìn)入相應(yīng)功能。 2 .查看航線信息:在菜單頁(yè)面下輸入數(shù)字 1,回車(chē),即可瀏覽全部航線信息。如圖 6.2查看航線信息: 息客務(wù)務(wù) 信票業(yè)業(yè) 線訂蓄1示統(tǒng) 航己普速系 詢(xún)理理出 曲*-查辦辦退 ■ ■ 一 ?»? 12 3 4 5 6 請(qǐng)選擇〈―6〉 終點(diǎn)站名 航班號(hào) 飛行時(shí)間 票價(jià) 乘員定額 仝.帛 小十里 beijing 1 1200 S6B 30 30 shanghai 2 1000 770 20 20
47、 london 3 1330 960 10 10 hdPbin 4 1700 76。 5g 50 dalian 5 1480 553 40 40 任意疑繼續(xù)... 圖6.2查看航線信息 3.查看已訂票客戶(hù)信息:在菜單頁(yè)面下輸入數(shù)字 2,回車(chē),然后輸入航班號(hào)即可查 看。如圖6.3查看航線信息: 自5 信 統(tǒng)戶(hù) 系息客務(wù)務(wù) 票信票業(yè)業(yè) 訂線訂緒委示統(tǒng) 冊(cè)已航訂M-系 喜詢(xún)理里出 查查查辦辦退 fMwwv^fw*vf%rfWiVfVfwnjrf%Jvwrv fwrfwru1 rww 請(qǐng)選擇AN 請(qǐng)輸入航班號(hào)二. 圖6.3查看航線信息
48、該航線有客戶(hù)預(yù)定則顯示客戶(hù)預(yù)定的信息。如圖 6.3查看客戶(hù)預(yù)定信息: 1 .查看航線信息 2 .查看已訂票客戶(hù)信息 3 .查詢(xún)品線 ,?辦理訂票業(yè)務(wù) 5 .蘇理退票業(yè)■券 「退出系統(tǒng) ^MSmmmmmmmmjwwrvrwwvrwwtfwrvzzrvrvfwzz 請(qǐng)選怪£1-6”2 請(qǐng)輜入航班號(hào):2 客戶(hù)姓名 訂票數(shù)額 艙位等級(jí) hiye 任意鍵繼續(xù)-. 6.3查看客戶(hù)預(yù)定信息 如果該航線沒(méi)有客戶(hù)預(yù)定,則會(huì)提示該航線沒(méi)有客戶(hù)信息。如圖 6.4 無(wú)人預(yù)定航 息一 ! 信a 戶(hù) 信 息客務(wù)務(wù) 29戶(hù) 信票業(yè)業(yè)>:號(hào)客 線訂器委示統(tǒng)-6班有 航已齪訂退系
49、C1航?jīng)] 害詢(xún)理理出擇入線 杳查查辦辦退選幫 1.2.3.4.5.6.一 請(qǐng)請(qǐng)?jiān)? |任意鍵繼續(xù)…一 圖6.4無(wú)人預(yù)定航線 4.查詢(xún)航線:在菜單頁(yè)面下輸入數(shù)字3,回車(chē),即可進(jìn)入查詢(xún)航線功能。如圖6.5 查 詢(xún)航線頁(yè)面: 訂票系統(tǒng) 2. 自3 信 戶(hù) 息客務(wù)務(wù) 信票業(yè)業(yè) 線訂結(jié)一翟示統(tǒng) 航已普退系 一雪詢(xún)理理出 *-營(yíng)查辦辦退 rM^MnrwrvKRrfrewv*wrwiWWiH^nrwwM¥vwwwwwwvMwwwrw 請(qǐng)選擇《1-6) :3 請(qǐng)輸入要抵達(dá)城市的名稱(chēng): 圖6.5查詢(xún)航線頁(yè)面 根據(jù)提示輸入要抵達(dá)城市的名稱(chēng)即可查詢(xún)。 如果有該航線,則會(huì)顯
50、示該航線的信息 如圖6.6航線信息: 訂票系統(tǒng) 息 住 戶(hù) 息客務(wù)務(wù) 信票業(yè)業(yè) 線訂孝®蔡 航己霞M-系 詢(xún)理理出 查宜查辦辦退 2. 第35頁(yè) 也 謳 終 beijing 息客務(wù)務(wù) 3城這 信票業(yè)業(yè)>:達(dá)有 線訂善委示統(tǒng)-6蜃 航已航訂退系U要, Wp詢(xún)理理出擇入起 杳否查辦辦退選單 自心 任意鍵繼續(xù)... 5.辦理訂票業(yè)務(wù): 如圖6.8訂票頁(yè)面: 圖6.7無(wú)此航線 在菜單頁(yè)面下輸入數(shù)字 4,回車(chē),即可進(jìn)入辦理訂票業(yè)務(wù)功能。 竹祟券統(tǒng) 片訂孥一嗇系統(tǒng)-6班 和已誓退系C1W 一曹詢(xún)理理出擇入 查杳香亦辦退選輸 息客
51、務(wù)務(wù) 信票業(yè)業(yè) 白心 旨 戶(hù) d±l 輸入要抵達(dá)城市的名擲;be ij in目 國(guó)站名 航班導(dǎo)飛行時(shí) 1280 任意韓繼續(xù).?? 圖6.6航線信息 如果沒(méi)有該航線,則會(huì)顯示對(duì)不起,沒(méi)有這條航線。如圖 6.7無(wú)此航線: I 訂票系統(tǒng) 6.9訂票信息: 圖6.8訂票頁(yè)面 用戶(hù)根據(jù)提示依次輸入航班號(hào)、票數(shù)、姓名、艙位等級(jí)即可。如圖 息客務(wù)務(wù) 信票業(yè)業(yè) 線訂緒春系統(tǒng) 航已返系 詢(xún)理理出 查甘查辦辦退 !a«?!a, ? 12 3 4 5 6. 訂票系統(tǒng) 請(qǐng)選擇q-6兀4 醯女罐翻票數(shù)式 請(qǐng)曲入您的理Zbiye 請(qǐng)輸入您需要
52、的艙位等級(jí)口3或3八 圖6.9訂票信息 6.10訂票成功: 如果訂票成功,則會(huì)顯示座位號(hào),并提示祝您乘坐愉快。如圖 訂票系統(tǒng) fftjwwnmjwwvwwinimmnrwuwiruwwwwuwHwwwwwrww1 工.查看航線信息 Z.查看已訂票客戶(hù)信息 3 .查詢(xún)航線 4 ?辦理訂票業(yè)務(wù) 5 .辦理退票業(yè)務(wù) 6 .退出系統(tǒng) 請(qǐng)選搔 《1-6>二4 情輸入航班號(hào)9 請(qǐng)輸A你需要的票數(shù)9 請(qǐng)輸入傷超姓名;B1YE 請(qǐng)輸入健需要的舲位等級(jí)1.2或3):2 EIYE的座位號(hào)星:1 祝穿乘坐愉快? 任意鍵繼續(xù),一 圖6.10訂票成功 如果在輸入訂票信息時(shí),輸入的
53、票數(shù)大于額定乘員數(shù),則會(huì)訂票失敗并提示。 訂票系統(tǒng) 工.查看航線信息 2 .查看已訂票卷戶(hù)信息 ③,查詢(xún)航線 4 .辦理訂票業(yè)務(wù) 5 .辦理退票業(yè)務(wù) 6 .退出系統(tǒng) 請(qǐng)選擇《1-6)二4 請(qǐng)輸入航班號(hào)" 請(qǐng)輸入您需要的票數(shù)"口 樹(shù)不起,穿輸入票數(shù)已經(jīng)超過(guò)乘員定額? 任意鍵繼續(xù)?一 圖6.11訂票失敗 如果在輸入訂票信息時(shí),輸入的票數(shù)小于額定乘員數(shù),大于余票數(shù),則會(huì)提示沒(méi)有 這么多票了,詢(xún)問(wèn)是否進(jìn)行排隊(duì)等候。如圖 6.12詢(xún)問(wèn)是否排隊(duì)等候: 訂票系統(tǒng) 3, 4. 5, 信 自3客務(wù)務(wù) 信票業(yè)業(yè) 線訂線票票統(tǒng) 航已航訂退系 看看詢(xún)理理,+,
54、 查查查辦亦返 請(qǐng)選怪”-63二4 灣輸入航班號(hào)二2 請(qǐng)輸入您需要的票數(shù)門(mén)9 沿有這么方票了,窗需要排隊(duì)等候嗎? 圖6.12詢(xún)問(wèn)是否排隊(duì)等候 如果輸入N,代表不排隊(duì),則會(huì)提示歡迎下次訂購(gòu)。如果輸入 Y,代表進(jìn)行排隊(duì)等 候。這是會(huì)提示用戶(hù)輸入姓名進(jìn)行排隊(duì)。如圖 6.13排隊(duì)等候: 訂票系統(tǒng) 1 ?查看航線信息 2 .查看已訂票客戶(hù)信息 3 .查詢(xún)航線 4 .辦理訂票業(yè)務(wù) 5 .辦理退票業(yè)務(wù) 6 .退出系統(tǒng) 請(qǐng)選擇b-6兀4 諳輸入航班號(hào):2 請(qǐng)輸入蒯需要的票數(shù):仃 沒(méi)有這么多票了,弱需要排隊(duì)等候嗎"“N>y 請(qǐng)輸入族的姓名:LI LI 注冊(cè)排
55、隊(duì)成功? 任意鍵繼續(xù).一 圖6.13排隊(duì)等候 6.辦理退票業(yè)務(wù):在菜單頁(yè)面下輸入數(shù)字 5,回車(chē),即可進(jìn)入辦理退票業(yè)務(wù)功能。 如圖6.14辦理退票業(yè)務(wù)頁(yè)面: 訂票系統(tǒng) I.查看航線信息 2 .查看已訂票客戶(hù)信息 3 .查詢(xún)戰(zhàn)陽(yáng) 心辦理訂票業(yè)務(wù) 5 .辦理退票業(yè)務(wù) E.退出家統(tǒng) ir*uwHmjwwvir>uwxmr«WMWwwwHmLnr>uwxmr«wwwwHmjwrkr 請(qǐng)輸入航班號(hào):. 圖6.14辦理退票業(yè)務(wù)頁(yè)面 根據(jù)提示輸入航線號(hào)和姓名即可進(jìn)行退票。如果此時(shí)這條航線有人排隊(duì)等候,余票 數(shù)可以滿(mǎn)足其需求,其訂票即可成功。如圖
56、6.15排隊(duì)等候訂票成功: 訂票系統(tǒng) 1 .查看航線信息 2 .查看已訂票客戶(hù)信息 3 .查詢(xún)航線 4 ?辦理訂票業(yè)務(wù) 5 .辦理退票業(yè)務(wù) 6 .退出系統(tǒng) 清選怪《1-6'=5 請(qǐng)輸入航班號(hào):2 請(qǐng)扁人春的姓名:biye ,詢(xún)匕退票成功, LILI訂票成功, LILI的座位號(hào)皋二20 LILI的座位號(hào)是二19 LILI的座位號(hào)星:18 LILI的座位號(hào)呈:17 LI”的座位號(hào)呈 LILI的座位號(hào)星:15 LILI的座位號(hào)界■:I4 LI”的座位號(hào)呈這3 LILI的座位號(hào)是:12 LILI的座位號(hào)幕:11 LI”的座位號(hào)品:10 LILI的座位號(hào)是:9 LILI的座位號(hào)是
57、二8 LILI的座位號(hào)是,7 LILI的座位號(hào)杲遙 LI”的座位號(hào)是力 LILI的座位號(hào)是二4 LILI的座位號(hào)是:3 LILI的座位號(hào)舁二2 圖6.15排隊(duì)等候訂票成功 7 .退出系統(tǒng):在菜單頁(yè)面下輸入數(shù)字 6,回車(chē),即可退出系統(tǒng)。如圖 6.16退出系 統(tǒng): 訂票系統(tǒng) 查看航線信息 2 .查看已訂票客戶(hù)信息 3 .查詢(xún)航線 4 .辦理訂票業(yè)務(wù) E.辦理退票業(yè)務(wù) 退出系統(tǒng) 請(qǐng)選擇d〉二6 感謝瓢的使用?再見(jiàn),. Press any key to cointinuie 圖6.16退出系統(tǒng) 七、收獲與體會(huì) 在編寫(xiě)的時(shí)候只使用了相對(duì)較為簡(jiǎn)單的基礎(chǔ)語(yǔ)言,代替了相對(duì)較為復(fù)
58、雜的語(yǔ)言,降 低了運(yùn)行效率。測(cè)試輸入的數(shù)據(jù)也有一定的局限性,但是基本可以滿(mǎn)足訂票系統(tǒng)的需求。 這個(gè)程序有許多地方可以改進(jìn),例如: ① 數(shù)據(jù)全部存儲(chǔ)在內(nèi)存中,可以考慮繼續(xù)編寫(xiě)將數(shù)據(jù)保存在文件中,這樣不會(huì)丟 失。 ②航線信息只能通過(guò)修改代碼來(lái)修改,可以編寫(xiě)一個(gè)函數(shù)來(lái)修改航線信息并將其 保存在文件中。 ③ 使用的語(yǔ)言較基礎(chǔ),運(yùn)行效率較低,可以考慮寫(xiě)一些較為復(fù)雜但運(yùn)行效率高的 語(yǔ)言0 ④ 界面不夠美觀,菜單也只是局限在左上角,可以修改。 八、參考文獻(xiàn) [1]嚴(yán)蔚敏,吳偉民,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].清華大學(xué)出版社,1997. [2]夏濤.C語(yǔ)言程序設(shè)計(jì),北京郵電大學(xué)出版社,2007. [3]譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].清華大學(xué)出版社,2006. [4]百度.百度知道.百度文庫(kù) 第37頁(yè)
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點(diǎn)美食推薦
- XX國(guó)有企業(yè)黨委書(shū)記個(gè)人述責(zé)述廉報(bào)告及2025年重點(diǎn)工作計(jì)劃
- 世界濕地日濕地的含義及價(jià)值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)人到場(chǎng)心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫(huà)之美生活之美
- 節(jié)后開(kāi)工第一課輕松掌握各要點(diǎn)節(jié)后常見(jiàn)的八大危險(xiǎn)
- 廈門(mén)城市旅游介紹廈門(mén)景點(diǎn)介紹廈門(mén)美食展示
- 節(jié)后開(kāi)工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓(xùn)
- 深圳城市旅游介紹景點(diǎn)推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)勿忘安全本心人人講安全個(gè)個(gè)會(huì)應(yīng)急
- 預(yù)防性維修管理
- 常見(jiàn)閥門(mén)類(lèi)型及特點(diǎn)
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案