


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、重慶交通大學課程設計課題:班 級:學生姓名:學 號:學生姓名:學 號:學生姓名:學 號:學生姓名:學 號:指導老師:2 0 1 8 年 1 2 月 6 日目錄一、課程設計目的 3二、課程設計內容3三、需求分析 3四、概要設計3五、詳細設計及運行結果4六、數據邏輯E-R圖 9七、訂票系統代碼編輯 .10八、收獲及體會 16一、課程設計目的1 數據結構課程設計是綜合運用數據結構課程中學到的幾種典型數據結構,以及程序設計 語言 <C 語言),自行實現一個較為完整的應用系統的設計與開發2 通過課程設計,自己通過系統分析、系統設計、編程調試,寫實驗報告等環節,進一步 掌握應用系統設計的方法和步驟,
2、靈活運用并深刻理解典型數據結構在軟件開發中的應 用。3 學會將知識應用于實際的方法,提高分析和解決問題的能力,增加綜合能力。 航空空訂票系統:<1)熟練掌握鏈表存儲結構及其建立過程和常用操作; <2)熟練掌握隊列的建立過程和常用操作; <3)學會自己調試程序的方法并掌握一定的技巧。二、課程設計內容航空客運訂票的業務活動包括:查詢航線、客票預訂和辦理退票等。設計一個航空客運 訂票系統,以使上述業務可以借助計算機來完成。三、需求分析1 每條航線所涉及的信息有:終點站名、航班號、飛機號、飛行日 < 星期幾)、乘員定 額、余票量、已訂票的客戶名單 <包括姓名、訂票量、艙位
3、等級 1,2 或 3)以及等候替補的 客戶名單 <包括姓名、所需票量);2 全部數據可以只放在內存中;3 系統能實現的操作和功能如下:a> 查詢航線:根據旅客提出的終點站名輸出下列信息:航班號、飛機號、星期幾飛行,最近一天航班的日期和余票額;b> 承辦訂票業務:根據客戶提出的要求 <航班號、訂票數額)查詢該航班票額情況,若尚有余票,則為客戶辦理訂票手續,輸出座位號;若已滿員或余票額少于定票額,則需重新詢問客戶要求。若需要,可登記排隊候補;c> 退票業務:根據客戶提供的情況 <日期、航班),為客戶辦理退票手續,然后查詢該航班是否有人排隊候補,首先詢問排在第一的
4、客戶,若所退票額能滿足他的要求,則為他辦理訂票手續,否則依次詢問其 他排隊候補的客戶。四、概要設計<1)顯示已初始化的全部航線信息<2)瀏覽已訂票客戶信息<3)根據客戶提出的終點站名,調用 findv)函數尋找航線信息,調用listv )函數輸出 航線信息 <4 )辦理訂票業務:根據客戶提供的航班號進行查詢航線信息,若客戶訂票額超過乘員定票 總額,退出,若客戶訂票額末超過余票量,訂票成功并登記信息,在訂票乘員名單域中添加 客戶信息;如果暫時沒有票,詢問客戶是否要排隊等侯,如果是,貝恠等候隊列增加該客戶 的訂票信息。<5 )辦理退票業務:調用查詢函數,根據客戶提供的
5、航線進行搜索根據客戶提供的姓名 到訂票客戶名單域進行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根 據隊列中從出的客戶信息判斷是否滿足要求,如果滿足,貝U將該客戶的信息插入到乘客信息 鏈表中。<6)退出本系統五、詳細設計及運行結果<1 )顯示已初始化的全部航線信息<2)瀏覽已訂票客戶信息<3 )查詢航線<4)辦理訂票業務<5)辦理退票業務<6)排序:sort_tkt(>六:數據邏輯一 E-R圖訂票數量訂票日期訂票人驗證方式訂票價格退票人驗證方式訂票狀態取消數量訂票人信息預定取消取消日期訂票人聯系方航班代碼起飛時間到達時間起點城市到達
6、城市/J、/*航空票務管理系統源代*/ #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。/* 飛機號 */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 飛機號 t 飛行周日 t 乘員定額 t 余票量 n"> 。 while(i<MAXSIZE>display(info> 。info+ 。i+ 。printf("nn"> 。void search(>/* 根據客戶提出的終點站名輸出航線信息 */ 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、 飛機號 t 飛行周日 t 乘員定額 t 余票量 n"> 。 display(info> 。struct airline *find(>/* 根據系統提出的航班號查詢并以指針形式返回*/ 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(" 客戶姓名 訂票數額 艙位等級 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(>/* 辦理訂票業務 */ struct airline *info 。int amount,grade 。char
16、 name10 。 info=start 。if(!(info=find(>>> return 。/* 根據客戶提供的航班號進行查詢,如為空,退出該模塊 */ printf(" 請輸入你訂票所需要的數量 :"> 。scanf("%d",&amount> 。 if(amount>info->tkt_amt>/* 若客戶訂票額超過乘員定票總額,退出 */ printf("n 對不起,您輸入的票的數量已經超過乘員定額 !"> 。 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 。/* 該航線的余票量應減掉該客戶的訂票量*/printf("n 祝您乘坐愉快! n"> 。else /* 若滿員或余票額少于訂票額,詢問客戶是否需要進行排隊等候*/ char r 。printf("n 已經沒有更多的票,您需要排隊等候嗎 ?(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 。/* 調用查詢函數,根據客戶提供的航線進行搜索 */ head=info->order 。p1=head。printf(" 請輸入你的姓名 <退票客戶) :"> 。scan
21、f("%s",cusname> 。while(p1!=NULL> /* 根據客戶提供的姓名到訂票客戶名單域進行查詢 */ 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 指向排隊等候名單隊列的頭結點 */ r=(info->wait>.rear 。 /*r 指向排隊等候名單隊列的尾結點 */ t=f 。 /*t 為當前滿點條
23、件的排隊候補名單域*/while(t>if(info->tkt_sur>=info->wait.front->req_amt>/* 若滿足條件者為頭結點 */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>/* 若滿足條件者不為頭結點 */ 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 航空客運訂票系統 n"> 。printf(printf("1. 瀏覽航線信息 :n"> 。printf("2. 瀏覽已訂票客戶信息 :n"> 。printf("3. 查詢航線 n"> 。printf("4. 辦理訂票業務 :n"&g
27、t; 。 printf("5. 辦理退票業務 :n"> 。 printf("6. 退出系統 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業融資方案()(3篇)
- 礦砂揚塵測評方案(3篇)
- 車位貸款金融方案(3篇)
- 綠化站管理方案(3篇)
- 中國民用航空飛行學院《求職訓練》2023-2024學年第二學期期末試卷
- 醫療精準規劃方案(3篇)
- 中原工學院《DMAXD》2023-2024學年第二學期期末試卷
- 濰坊工程職業學院《體育保健學Ⅱ》2023-2024學年第二學期期末試卷
- 四川農業大學《工程力學Ⅰ》2023-2024學年第二學期期末試卷
- 南京大學金陵學院《數字媒體藝術概論》2023-2024學年第二學期期末試卷
- 《工程勘察設計收費標準》(2002年修訂本)-完整版-1
- 【MOOC】材料力學-江蘇科技大學 中國大學慕課MOOC答案
- 物流公司合同范例范例
- 衛星導航產品培訓
- 江蘇省揚州市2024年化學中考試題【附答案】
- 2023-2024學年廣東省深圳市南山區八年級(下)期末歷史試卷
- 食品應急演練課件
- 鉗工基礎知識-刮削
- 課后服務家長滿意度調查表
- (完整版)西泠印社出版社三年級下冊《書法練習指導》完整教案
- 2024年經濟師考試農業經濟高級經濟實務試卷與參考答案
評論
0/150
提交評論