



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、重慶交通大學課程設計課題:班級:學生姓名:學號:學生姓名:學號:學生姓名:學號:學生姓名:學號:指導老師:2012年12月6日目錄.3.3.3.3.4E-R9.1016一、課程設計目的1 數據結構課程設計是綜合運用數據結構課程中學到的幾種典型數據結構, 以及程序設計語言( C 語言),自行實現一個較為完整的應用系統的設計與開發2通過課程設計,自己通過系統分析、系統設計、編程調試,寫實驗報告等環節,進一步掌握應用系統設計的方法和步驟,靈活運用并深刻理解典型數據結構在軟件開發中的應用。3學會將知識應用于實際的方法,提高分析和解決問題的能力,增加綜合能力。航空空訂票系統:(1)熟練掌握鏈表存儲結構及
2、其建立過程和常用操作;(2)熟練掌握隊列的建立過程和常用操作;(3)學會自己調試程序的方法并掌握一定的技巧。二、課程設計內容航空客運訂票的業務活動包括:查詢航線、客票預訂和辦理退票等。設計一個航空客運訂票系統,以使上述業務可以借助計算機來完成。三、需求分析1 每條航線所涉及的信息有:終點站名、航班號、飛機號、飛行日(星期幾) 、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級 1,2 或 3)以及等候替補的客戶名單(包括姓名、所需票量) ;2 全部數據可以只放在內存中;3 系統能實現的操作和功能如下:a) 查詢航線:根據旅客提出的終點站名輸出下列信息:航班號、飛機號、星期幾飛行,
3、最近一天航班的日期和余票額;b) 承辦訂票業務:根據客戶提出的要求(航班號、訂票數額)查詢該航班票額情況,若尚有余票,則為客戶辦理訂票手續,輸出座位號;若已滿員或余票額少于定票額,則需重新詢問客戶要求。若需要,可登記排隊候補;c) 退票業務:根據客戶提供的情況(日期、航班) ,為客戶辦理退票手續,然后查詢該航班是否有人排隊候補,首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續,否則依次詢問其他排隊候補的客戶。四、概要設計1系統結構圖(功能模塊圖)主函數瀏覽航線信瀏覽已訂票查詢航線辦理訂票業辦理退票業退出系統按剩余票數排序息客戶信息務務2功能模塊說明(1)顯示已初始化的全部航
4、線信息(2)瀏覽已訂票客戶信息(3)根據客戶提出的終點站名,調用 find()函數尋找航線信息,調用 list()函數輸出航線信息(4)辦理訂票業務:根據客戶提供的航班號進行查詢航線信息,若客戶訂票額超過乘員定票總額,退出,若客戶訂票額末超過余票量,訂票成功并登記信息,在訂票乘員名單域中添加客戶信息;如果暫時沒有票,詢問客戶是否要排隊等侯,如果是,則在等候隊列增加該客戶的訂票信息。( 5)辦理退票業務:調用查詢函數,根據客戶提供的航線進行搜索根據客戶提供的姓名到訂票客戶名單域進行查詢。退票成功后,重新將航線名單域指向訂票單鏈表的頭指針。根據隊列中從出的客戶信息判斷是否滿足要求,如果滿足,則將該
5、客戶的信息插入到乘客信息鏈表中。( 6)退出本系統五、詳細設計及運行結果(1)顯示已初始化的全部航線信息開始初始化i<MAXSIZE調用 find()函數輸出?結束( 2)瀏覽已訂票客戶信息開始調用 find ()函數P=NULL?該航線沒有P 不為空輸出客戶信息客戶信息結束(3)查詢航線開始初始化i<MAXSIZE!strcmp(name,info->ter_name)info+ , i+未找到i>=MAXSIZE調用函數輸出結束( 4)辦理訂票業務開始初始化!(info=find()客戶訂票額不超過乘員定票總額,登記信息在排隊等候乘員名單域中添加客戶信息加到客戶名單
6、域結束( 5)辦理退票業務開始調用find函對航線搜索p1!=NULLp1! =NULL刪除客戶信息重新將航線名單域指向訂票單鏈表的頭指針,重新將航線名單域指向訂票單鏈表的頭指針,r 指向排隊等候名單隊列的尾結點頭結點t 不為空將 客 戶 信 息 插 到 訂將客戶信息插到訂票客票客戶名單鏈表戶名單鏈表結束(6)排序: sort_tkt()六:數據邏輯 E-R 圖訂票數量訂票日期訂票價格訂票狀態訂票人姓名取消數量取消日期訂票人聯系方式訂退票票人人驗驗證證方方式式航班號訂票人航班代碼訂票航人班信起飛時間預定信息息到達時間取消起點城市到達城市七、訂票系統代碼編輯/* 航空票務管理系統源代碼*/#in
7、clude <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 3 /*定義航線量的最大值*/typedef struct wat_ros char name10;/* 姓名 */ int req_amt;/* 訂票量 */ struct wat_ros *next;qnode,*qptr;typedef struct pqueueqptr front;/* 等候替補客戶名單域的頭指針*/qptr rear;/* 等候替補客戶名單域的屬指針*/linkqueue;typedef str
8、uct ord_ros char name10;/* 客戶姓名 */ int ord_amt;/* 訂票量 */int grade;/* 艙位等級 */struct ord_ros *next;linklist;struct airlinechar ter_name10;/* 終點站名*/char air_num10;/* 航班號 */char plane_num10;/* 飛機號 */char day7;/* 飛行周日(星期幾)*/int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量 */linklist *order;/*乘員名單域,指向乘員名單鏈表的頭指針*/
9、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,info->t kt_amt,info->tkt_sur);void list()/* 打印全部航線信息*
10、/ 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()/* 根據客戶提出的終點站名輸出航線信息*/ struct airline *info,*find(); char name10;int i=0; info=start;printf(" 請輸入終點站名:");sca
11、nf("%s",name);while(i<MAXSIZE) if(!strcmp(name,info->ter_name) break;info+;i+;if(i>=MAXSIZE)printf(" 對不起,該航線未找到!n");elseprintf(" 終點站名 t 航班號 t 飛機號 t 飛行周日 t 乘員定額 t 余票量 n"); display(info);struct airline *find()/* 根據系統提出的航班號查詢并以指針形式返回*/ struct airline *info;char nu
12、mber10;int i=0;info=start;printf(" 請輸入航班號:");scanf("%s",number);while(i<MAXSIZE) if(!strcmp(number,info->air_num) return info;info+;i+;printf(" 對不起,該航線末找到!n");return NULL;void prtlink()/* 打印訂票乘員名單域的客戶名單信息*/ linklist *p;struct airline *info; info=find();p=info->
13、order;if(p!=NULL)printf(" 客戶姓名訂票數額艙位等級 n");while(p)printf("%stt%dt%dn",p->name,p->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=(lin
14、klist *)malloc(sizeof(linklist);if(!new) printf("nOut of memory!n");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(link
15、queue q,char name,int amount)/* 增加排隊等候的客戶名單域*/ qptr new; new=(qptr)malloc(sizeof(qnode); strcpy(new->name,name);new->req_amt=amount;new->next=NULL;if(q.front=NULL)/*若原排隊等候客戶名單域為空*/q.front=new;elseq.rear->next=new;q.rear=new;return q;void order()/* 辦理訂票業務 */ struct airline *info; int amou
16、nt,grade; char name10; info=start;if(!(info=find() return;/*根據客戶提供的航班號進行查詢,如為空,退出該模塊*/printf(" 請輸入你訂票所需要的數量:");scanf("%d",&amount);if(amount>info->tkt_amt)/*若客戶訂票額超過乘員定票總額,退出*/printf("n 對不起,您輸入的票的數量已經超過乘員定額 !"); return;if(amount<=info->tkt_sur)/*若客戶訂票額末超
17、過余票量,訂票成功并等記信息*/int i;printf(" 請輸入您的姓名(訂票客戶):");scanf("%s",name);printf(" 請輸入 %s 票的艙位等級 :",name);scanf("%d",&grade);info->order=insertlink(info->order,amount,name,grade);/*在訂票乘員名單域中添加客戶信息*/for(i=0;i<amount;i+)/*依次輸出該訂票客戶的座位號*/printf("%s 的座位號是
18、 :%dn",name,info->tkt_amt-info->tkt_sur+i+1);info->tkt_sur-=amount;/* 該航線的余票量應減掉該客戶的訂票量*/printf("n 祝您乘坐愉快!n");else/* 若滿員或余票額少于訂票額,詢問客戶是否需要進行排隊等候*/ char r;printf("n已經沒有更多的票,您需要排隊等候嗎?(Y/N)");r=getch();printf("%c",r);if(r='Y'|r='y') printf(&qu
19、ot;n 請輸入您的姓名(排隊訂票客戶):"); scanf("%s",name);info->wait=appendqueue(info->wait,name,amount);/* 在排隊等候乘員名單域中添加客戶信息 */ printf("n 注冊成功 !n");else printf("n 歡迎您下次再次訂購!n");void return_tkt()/* 退票模塊 */ struct airline *info;qnode *t,*back,*f,*r; int grade;linklist *p1,*p2
20、,*head;char cusname10;if(!(info=find() return;/* 調用查詢函數,根據客戶提供的航線進行搜索 */ head=info->order;p1=head;printf(" 請輸入你的姓名(退票客戶):");scanf("%s",cusname);while(p1!=NULL) /* 根據客戶提供的姓名到訂票客戶名單域進行查詢 */ if(!strcmp(cusname,p1->name) break;p2=p1;p1=p1->next;if(p1=NULL) printf("對不起,你
21、沒有訂過票!n");return;/*若未找到,退出本模塊*/else/*若信息查詢成功,刪除訂票客戶名單域中的信息*/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;/*f指向排隊
22、等候名單隊列的頭結點*/r=(info->wait).rear;/*r指向排隊等候名單隊列的尾結點*/t=f;/*t 為當前滿點條件的排隊候補名單域*/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 的座位號是
23、:%dn",t->name,(info->tkt_sur)-i);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->n
24、ext;printf("%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);/*插入到訂票客戶名單鏈表中*/free(
25、t);break;if(f=r) break;int menu_select()/* 菜單界面 */ int c;char s20;printf("ntt 航空客運訂票系統 n"); printf("*n");printf("1. 瀏覽航線信息 :n"); printf("2. 瀏覽已訂票客戶信息 :n"); printf("3. 查詢航線 n");printf("4. 辦理訂票業務 :n");printf("5. 辦理退票業務 :n"); printf(
26、"6. 退出系統 n"); printf("*n");doprintf(" 請選擇 :");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","M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備沉降觀測管理制度
- 設備設施檢查管理制度
- 設計公司人事管理制度
- 設計服飾搭配管理制度
- 評估公司人事管理制度
- 診所抓藥日常管理制度
- 診所行風建設管理制度
- 試驗設施器材管理制度
- 財務部精細化管理制度
- 財政直達資金管理制度
- 2024年合肥市公安局警務輔助人員招聘筆試參考題庫附帶答案詳解
- 2024網站滲透測試報告
- 2024年中國建筑西南勘察設計研究院有限公司招聘筆試參考題庫含答案解析
- DG-TJ08-2433A-2023 外墻保溫一體化系統應用技術標準(預制混凝土反打保溫外墻)
- 教師法制教育培訓課件
- 眾包物流模式下的資源整合與分配
- 鐵路貨運流程課件
- 四川省成都市成華區2023-2024學年七年級上學期期末數學試題(含答案)
- 慢性硬膜下血腫護理要點大揭秘
- 管工基礎知識培訓課件
- 成人氣管切開拔管中國專家共識解讀
評論
0/150
提交評論