C語言航空訂票系統(tǒng)副本_第1頁
C語言航空訂票系統(tǒng)副本_第2頁
C語言航空訂票系統(tǒng)副本_第3頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、重慶交通大學(xué)課程設(shè)計課題:班 級:學(xué)生姓名:學(xué) 號:學(xué)生姓名:學(xué) 號:學(xué)生姓名:學(xué) 號:學(xué)生姓名:學(xué) 號:指導(dǎo)老師:2 0 1 8 年 1 2 月 6 日目錄一、課程設(shè)計目的 3二、課程設(shè)計內(nèi)容3三、需求分析 3四、概要設(shè)計3五、詳細(xì)設(shè)計及運行結(jié)果4六、數(shù)據(jù)邏輯E-R圖 9七、訂票系統(tǒng)代碼編輯 .10八、收獲及體會 16一、課程設(shè)計目的1 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是綜合運用數(shù)據(jù)結(jié)構(gòu)課程中學(xué)到的幾種典型數(shù)據(jù)結(jié)構(gòu),以及程序設(shè)計 語言 <C 語言),自行實現(xiàn)一個較為完整的應(yīng)用系統(tǒng)的設(shè)計與開發(fā)2 通過課程設(shè)計,自己通過系統(tǒng)分析、系統(tǒng)設(shè)計、編程調(diào)試,寫實驗報告等環(huán)節(jié),進(jìn)一步 掌握應(yīng)用系統(tǒng)設(shè)計的方法和步驟,

2、靈活運用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的應(yīng) 用。3 學(xué)會將知識應(yīng)用于實際的方法,提高分析和解決問題的能力,增加綜合能力。 航空空訂票系統(tǒng):<1)熟練掌握鏈表存儲結(jié)構(gòu)及其建立過程和常用操作; <2)熟練掌握隊列的建立過程和常用操作; <3)學(xué)會自己調(diào)試程序的方法并掌握一定的技巧。二、課程設(shè)計內(nèi)容航空客運訂票的業(yè)務(wù)活動包括:查詢航線、客票預(yù)訂和辦理退票等。設(shè)計一個航空客運 訂票系統(tǒng),以使上述業(yè)務(wù)可以借助計算機(jī)來完成。三、需求分析1 每條航線所涉及的信息有:終點站名、航班號、飛機(jī)號、飛行日 < 星期幾)、乘員定 額、余票量、已訂票的客戶名單 <包括姓名、訂票量、艙位

3、等級 1,2 或 3)以及等候替補的 客戶名單 <包括姓名、所需票量);2 全部數(shù)據(jù)可以只放在內(nèi)存中;3 系統(tǒng)能實現(xiàn)的操作和功能如下:a> 查詢航線:根據(jù)旅客提出的終點站名輸出下列信息:航班號、飛機(jī)號、星期幾飛行,最近一天航班的日期和余票額;b> 承辦訂票業(yè)務(wù):根據(jù)客戶提出的要求 <航班號、訂票數(shù)額)查詢該航班票額情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號;若已滿員或余票額少于定票額,則需重新詢問客戶要求。若需要,可登記排隊候補;c> 退票業(yè)務(wù):根據(jù)客戶提供的情況 <日期、航班),為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候補,首先詢問排在第一的

4、客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其 他排隊候補的客戶。四、概要設(shè)計<1)顯示已初始化的全部航線信息<2)瀏覽已訂票客戶信息<3)根據(jù)客戶提出的終點站名,調(diào)用 findv)函數(shù)尋找航線信息,調(diào)用listv )函數(shù)輸出 航線信息 <4 )辦理訂票業(yè)務(wù):根據(jù)客戶提供的航班號進(jìn)行查詢航線信息,若客戶訂票額超過乘員定票 總額,退出,若客戶訂票額末超過余票量,訂票成功并登記信息,在訂票乘員名單域中添加 客戶信息;如果暫時沒有票,詢問客戶是否要排隊等侯,如果是,貝恠等候隊列增加該客戶 的訂票信息。<5 )辦理退票業(yè)務(wù):調(diào)用查詢函數(shù),根據(jù)客戶提供的

5、航線進(jìn)行搜索根據(jù)客戶提供的姓名 到訂票客戶名單域進(jìn)行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根 據(jù)隊列中從出的客戶信息判斷是否滿足要求,如果滿足,貝U將該客戶的信息插入到乘客信息 鏈表中。<6)退出本系統(tǒng)五、詳細(xì)設(shè)計及運行結(jié)果<1 )顯示已初始化的全部航線信息<2)瀏覽已訂票客戶信息<3 )查詢航線<4)辦理訂票業(yè)務(wù)<5)辦理退票業(yè)務(wù)<6)排序:sort_tkt(>六:數(shù)據(jù)邏輯一 E-R圖訂票數(shù)量訂票日期訂票人驗證方式訂票價格退票人驗證方式訂票狀態(tài)取消數(shù)量訂票人信息預(yù)定取消取消日期訂票人聯(lián)系方航班代碼起飛時間到達(dá)時間起點城市到達(dá)

6、城市/J、/*航空票務(wù)管理系統(tǒng)源代*/ #in elude <stdio.h> #in elude <stdlib.h> #in elude <stri ng.h>#defi ne MAXSIZE 3 /* 定義航線量的最大值 */ typedef struct wat_ros char name10。/* 姓名 */int req_amt。/* 訂票量 */struct wat_ros *next 。qnode,*qptr 。typedef struct pqueue qptr front。/*等候替補客戶名單域的頭指針*/qptr rear。/*等候替補

7、客戶名單域的屬指針*/linkqueue 。typedef struct ord_ros char name10。 /* 客戶姓名 */int ord_amt。/* 訂票量 */int grade。 /* 艙位等級 */struct ord_ros *next。linklist 。struct airli ne char ter_name10 。 /* 終點站名 */char air_num10。 /* 航班號 */char plane_num10。/* 飛機(jī)號 */char day7 。 /*飛行周日 <星期幾)*/int tkt_amt 。 /* 乘員定額 */int tkt_sur

8、 。/* 余票量 */linklist *order 。 /* 乘員名單域,指向乘員名單鏈表的頭指針*/linkqueue wait 。/* 等候替補的客戶名單域,分別指向排隊等候名單隊頭隊尾的指針*/lineinfo 。struct airline *start 。void display(struct airline *info>/* 打印每條航線的基本信息 */printf("%8st%3st%st%4stt%3dt%10dn",info->ter_name,info->air_num,info->plane_num,info->day,

9、info- >tkt_amt,info->tkt_sur> 。void list(>/* 打印全部航線信息 */ struct airline *info 。int i=0 。info=start 。printf(" 終點站名 t 航班號 t 飛機(jī)號 t 飛行周日 t 乘員定額 t 余票量 n"> 。 while(i<MAXSIZE>display(info> 。info+ 。i+ 。printf("nn"> 。void search(>/* 根據(jù)客戶提出的終點站名輸出航線信息 */ struc

10、t airline *info,*find(> 。char name10 。int i=0 。info=start 。printf(" 請輸入終點站名 :"> 。scanf("%s",name> 。while(i<MAXSIZE> if(!strcmp(name,info->ter_name>> break 。info+ 。i+ 。if(i>=MAXSIZE>printf(" 對不起,該航線未找到 !n"> 。elseprintf(" 終點站名 t 航班號 t

11、 飛機(jī)號 t 飛行周日 t 乘員定額 t 余票量 n"> 。 display(info> 。struct airline *find(>/* 根據(jù)系統(tǒng)提出的航班號查詢并以指針形式返回*/ struct airline *info 。char number10 。int i=0 。info=start 。printf(" 請輸入航班號 :"> 。scanf("%s",number> 。while(i<MAXSIZE> if(!strcmp(number,info->air_num>> r

12、eturn info 。 info+ 。i+ 。printf(" 對不起,該航線末找到 !n"> 。return NULL 。void prtlink(>/* 打印訂票乘員名單域的客戶名單信息 */ linklist *p 。struct airline *info 。info=find(> 。p=info->order 。if(p!=NULL>printf(" 客戶姓名 訂票數(shù)額 艙位等級 n"> 。while(p> printf("%stt%dt%dn",p->name,p->

13、ord_amt,p->grade> 。 p=p->next 。elseprintf(" 該航線沒有客戶信息 !n"> 。linklist *insertlink(linklist *head,int amount,char name,int grade> /* 增加訂票乘員名單域的客戶信息 */ linklist *p1,*new 。p1=head。new=(linklist *>malloc(sizeof(linklist>> 。if(!new> printf("nOut of memory!n"&

14、gt; 。 return NULL 。 strcpy(new->name,name> 。new->ord_amt=amount 。new->grade=grade 。new->next=NULL 。if(head=NULL>/* 若原無訂票客戶信息 */head=new 。 new->next=NULL 。 elsehead=new 。new->next=p1 。return head 。linkqueue appendqueue(linkqueue q,char name,int amount>/* 增加排隊等候的客戶名單域 */ qpt

15、r new 。 new=(qptr>malloc(sizeof(qnode>> 。 strcpy(new->name,name> 。 new->req_amt=amount 。 new->next=NULL 。 if(q.front=NULL>/* 若原排隊等候客戶名單域為空 */ q.front=new 。else q.rear->next=new 。q.rear=new 。 return q 。void order(>/* 辦理訂票業(yè)務(wù) */ struct airline *info 。int amount,grade 。char

16、 name10 。 info=start 。if(!(info=find(>>> return 。/* 根據(jù)客戶提供的航班號進(jìn)行查詢,如為空,退出該模塊 */ printf(" 請輸入你訂票所需要的數(shù)量 :"> 。scanf("%d",&amount> 。 if(amount>info->tkt_amt>/* 若客戶訂票額超過乘員定票總額,退出 */ printf("n 對不起,您輸入的票的數(shù)量已經(jīng)超過乘員定額 !"> 。 return 。if(amount<=inf

17、o->tkt_sur>/* 若客戶訂票額末超過余票量,訂票成功并等記信息 */ int i 。 printf(" 請輸入您的姓名 <訂票客戶) :"> 。 scanf("%s",name> 。printf(" 請輸入 %s 票的艙位等級 :",name> 。 scanf("%d",&grade> 。info->order=insertlink(info->order,amount,name,grade> 。/* 在訂票乘員名單域中添加客戶信息 */

18、 for(i=0 。 i<amount 。 i+>/* 依次輸出該訂票客戶的座位號 */printf("%s 的座位號是 :%dn",name,info->tkt_amt-info->tkt_sur+i+1> 。 info->tkt_sur-=amount 。/* 該航線的余票量應(yīng)減掉該客戶的訂票量*/printf("n 祝您乘坐愉快! n"> 。else /* 若滿員或余票額少于訂票額,詢問客戶是否需要進(jìn)行排隊等候*/ char r 。printf("n 已經(jīng)沒有更多的票,您需要排隊等候嗎 ?(Y/N

19、>"> 。 r=getch(> 。printf("%c",r> 。if(r='Y'|r='y'> printf("n 請輸入您的姓名 <排隊訂票客戶) :"> 。 scanf("%s",name> 。info->wait=appendqueue(info->wait,name,amount> 。 /* 在排隊等候乘員名單域中添加客戶信息*/printf("n 注冊成功 !n"> 。else printf

20、("n 歡迎您下次再次訂購! n"> 。void return_tkt(>/* 退票模塊 */ struct airline *info 。qnode *t,*back,*f,*r 。int grade 。linklist *p1,*p2,*head 。char cusname10 。if(!(info=find(>>> return 。/* 調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進(jìn)行搜索 */ head=info->order 。p1=head。printf(" 請輸入你的姓名 <退票客戶) :"> 。scan

21、f("%s",cusname> 。while(p1!=NULL> /* 根據(jù)客戶提供的姓名到訂票客戶名單域進(jìn)行查詢 */ if(!strcmp(cusname,p1->name>> break 。p2=p1 。 p1=p1->next 。if(p1=NULL> printf(" 對不起,你沒有訂過票 !n"> 。 return。 /* 若未找到,退出本模塊 */ else/* 若信息查詢成功,刪除訂票客戶名單域中的信息 */if(p1=head> head=p1->next 。else p2-&

22、gt;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 。 /*f 指向排隊等候名單隊列的頭結(jié)點 */ r=(info->wait>.rear 。 /*r 指向排隊等候名單隊列的尾結(jié)點 */ t=f 。 /*t 為當(dāng)前滿點條

23、件的排隊候補名單域*/while(t>if(info->tkt_sur>=info->wait.front->req_amt>/* 若滿足條件者為頭結(jié)點 */int i 。info->wait.front=t->next 。printf("%s 訂票成功! n",t->name> 。for(i=0 。 i<t->req_amt 。 i+>/* 輸出座位號 */printf("%s 的座位號是 :%dn",t->name,(info->tkt_sur>-i>

24、; 。info->tkt_sur-=t->req_amt 。 info->order=insertlink(info->order,t->req_amt,t->name,grade> 。 /* 插入到訂票客戶名單鏈表中 */ free(t> 。break。back=t。 t=t->next 。 if(info->tkt_sur>>=(t->req_amt>&&t!=NULL>/* 若滿足條件者不為頭結(jié)點 */ int i 。back->next=t->next 。printf(

25、"%s 訂票成功! n",t->name> 。for(i=0 。 i<t->req_amt 。 i+>/* 輸出座位號 */ printf("<%s>'s seat number is:%dn",t->name,(info->tkt_sur>-i> 。info->tkt_sur-=t->req_amt 。info->order=insertlink(info->order,t->req_amt,t->name,grade> 。 /* 插入到

26、訂票客戶名單鏈表中 */ free(t> 。 break。if(f=r> break 。int menu_select(>/* 菜單界面 */ int c 。char s20 。*n">printf("ntt 航空客運訂票系統(tǒng) n"> 。printf(printf("1. 瀏覽航線信息 :n"> 。printf("2. 瀏覽已訂票客戶信息 :n"> 。printf("3. 查詢航線 n"> 。printf("4. 辦理訂票業(yè)務(wù) :n"&g

27、t; 。 printf("5. 辦理退票業(yè)務(wù) :n"> 。 printf("6. 退出系統(tǒng) n"> 。printf(H*n">do printf(" 請選擇 :"> 。 scanf("%s",s> 。c=atoi(s> 。while(c<0|c>7> 。 return c 。main(> struct airline airMAXSIZE="beijing","1","B8571","SUN",3,3,"shanghai","2","S1002","MON",2,2,"london","3","L1003","FRI",1,1。/* 初始化航線信息 */* clrscr(> 。 */ start=air 。for( 。 >switch(menu_select(>>

溫馨提示

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

最新文檔

評論

0/150

提交評論