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

下載本文檔

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

文檔簡介

1、本文檔如對你有幫助,請幫忙下載支持!航空客運(yùn)訂票系統(tǒng)姓名: xxx班級: xxxx學(xué)號: xxxxxxxxx目錄一、問題描述 .1二、設(shè)計(jì)要求 .1三、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) .2四、詳細(xì)設(shè)計(jì)程序 .3五、運(yùn)行與測試 . .9六、收獲及體會(huì) .13一、問題描述設(shè)計(jì)一個(gè)航空客運(yùn)訂票系統(tǒng),為乘客提供各種航空客運(yùn)信息服務(wù)。二、設(shè)計(jì)要求1 每條航線所涉及的信息有:終點(diǎn)站名、航班號、飛機(jī)號、飛行日(星期幾) 、乘員定額、余票量、已訂票的客戶名單(包括姓名、訂票量、艙位等級 1,2 或 3)以及等候替補(bǔ)的客戶名單(包括姓名、所需票量) ;2 系統(tǒng)能實(shí)現(xiàn)的操作和功能如下:a) 查詢航線:根據(jù)旅客提出的終點(diǎn)站名輸出下列

2、信息:航班號、飛機(jī)號、星期幾飛行,最近一天航班的日期和余票額;b) 承辦訂票業(yè)務(wù):根據(jù)客戶提出的要求(航班號、訂票數(shù)額)查詢該航班票額情況,若尚有余票,則為客戶辦理訂票手續(xù),輸出座位號;若已滿員或余票額少于定票額,則需重新詢問客戶要求。若需要,可登記排隊(duì)候補(bǔ);c) 承辦退票業(yè)務(wù):根據(jù)客戶提供的情況(日期、航班) ,為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊(duì)候補(bǔ),首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊(duì)候補(bǔ)的客戶。三、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)本文檔如對你有幫助,請幫忙下載支持!a)等候替補(bǔ)的客戶名單(包括姓名、所需票量)typedef struct wa

3、t_ros char name10;/* 姓名 */int req_amt;/* 訂票量 */struct wat_ros *next;qnode,*qptr;typedef struct pqueu qptr front;/* 等候替補(bǔ)客戶名單域的頭指針*/qptr rear;/* 等候替補(bǔ)客戶名單域的屬指針*/linkqueue;b)訂票的客戶名單(包括姓名、訂票量、艙位等級1, 2 或 3)typedef struct ord_ros char name10;/* 客戶姓名 */int ord_amt;/* 訂票量 */int grade;/* 艙位等級 */struct ord_ros

4、 *next;linklist;c)每條航線所涉及的信息:終點(diǎn)站名、航班號、飛機(jī)號、飛行日(星期幾)、乘員定額、余票量、已訂票的客戶名單、以及等候替補(bǔ)的客戶名單struct airlinechar zong_name10;/* 終點(diǎn)站名 */char air_num10;/* 航班號 */char plane_num10;/* 飛機(jī)號 */char date7;/* 飛行日期(星期幾)*/int tkt_amt;/* 乘員定額 */int tkt_sur;/* 余票量 */linklist *order;/*乘員名單域,指向乘員名單鏈表的頭指針*/linkqueue wait;/* 等候替補(bǔ)的

5、客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/lineinfo;四、詳細(xì)設(shè)計(jì)程序本文檔如對你有幫助,請幫忙下載支持!主函數(shù):int menu_select()/* 菜單界面 */ int c;char s20;printf("ntt航空客運(yùn)訂票系統(tǒng) n");printf("*n");printf("1.瀏覽航線信息 n");printf("2.瀏覽已訂票客戶信息n");printf("3.查詢航線 n");printf("4.辦理訂票業(yè)務(wù) n");printf("

6、;5.辦理退票業(yè)務(wù) n");printf("6.查看剩余票數(shù)并排序n");printf("0.退出系統(tǒng) n");printf("*n");doprintf("請選擇 :");scanf("%s",s);c=atoi(s);while(c<0|c>7);return c;void main()start=air;for(;)switch(menu_select()case 1:list();break;case 2:prtlink();break;case 3:search(

7、);break;case 4:order();break;case 5:return_tkt();break;case 6:sort_tkt();break;case 0:printf("n歡迎使用本系統(tǒng),再見!n");exit(0);printf("nPress any key to continue!n");getch();航線信息:struct airlinechar zong_name10;/* char air_num10;/*終點(diǎn)站名航班號 */飛機(jī)號*/char date7;/*飛行日期(星期幾)*/本文檔如對你有幫助,請幫忙下載支持!in

8、t tkt_amt;/* int tkt_sur;/* linklist *order;/* linkqueue wait;/*乘員定額 */余票量 */乘員名單域,指向乘員名單鏈表的頭指針*/等候替補(bǔ)的客戶名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/lineinfo;struct airline *start;struct airline airMAXSIZE="aaa","1","001","SUN",30,15,"bbb","2","002",&q

9、uot;MON",40,10,"ccc","3","003","FRI",50,14,"ddd","4","004","TUE",60,20;void display(struct airline *info)/* 打印每條航線的基本信息*/printf("%8st%3st%st%4stt%3dt%10dn",info->ter_name,info->air_num,info->plane

10、_num,inf o->date,info->tkt_amt,info->tkt_sur);void list()/*打印全部航線信息*/ struct airline *info;int i=0;info=start;printf("終點(diǎn)站名t航班號 t飛機(jī)號 t飛行日期t乘員定額t余票量n");while(i<MAXSIZE)display(info);info+;i+;printf("nn");查詢航線:void search()/* 根據(jù)客戶提出的終點(diǎn)站名輸出航線信息*/ struct airline *info,*fin

11、d(); char name10;int i=0;info=start;printf("請輸入終點(diǎn)站名:");scanf("%s",name);while(i<MAXSIZE)if(!strcmp(name,info->zong_name) break;info+;i+;if(i>=MAXSIZE)printf("對不起,該航線未找到!n");else本文檔如對你有幫助,請幫忙下載支持!printf(" 終點(diǎn)站名 t 航班號 t 飛機(jī)號 t 飛行日期 t 乘員定額 t 余票量 n"); displ

12、ay(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) return info;info+;i+;printf("對不起,該航線末找到!n");return NULL;客戶信息 :void

13、 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->ord_amt,p->grade);p=p->next;elseprintf("該航線沒有客戶信息!n");linklist *insertlink(linklist *head

14、,int amount,char name,int grade)/* 增加訂票乘員名單域的客戶信息*/ linklist *p1,*new1;p1=head;new1=(linklist *)malloc(sizeof(linklist);if(!new1) printf("nOut of memory!n");return NULL;strcpy(new1->name,name);new1->ord_amt=amount;new1->grade=grade;本文檔如對你有幫助,請幫忙下載支持!new1->next=NULL;if(head=NULL

15、)/*若原無訂票客戶信息*/head=new1;new1->next=NULL;elsehead=new1;new1->next=p1;return head;linkqueue appendqueue(linkqueue q,char name,int amount)/* 增加排隊(duì)等候的客戶名單域*/ qptr new1;new1=(qptr)malloc(sizeof(qnode);strcpy(new1->name,name);new1->req_amt=amount;new1->next=NULL;if(q.front=NULL)/*若原排隊(duì)等候客戶名單域

16、為空*/q.front=new1;elseq.rear->next=new1;q.rear=new1;return q;訂票業(yè)務(wù):void order()/*辦理訂票業(yè)務(wù)*/ struct airline *info;int amount,grade;char name10;info=start;if(!(info=find() return;/*根據(jù)客戶提供的航班號進(jìn)行查詢,如為空,退出該模塊*/printf("請輸入你訂票所需要的數(shù)量:");scanf("%d",&amount);if(amount>info->tkt_am

17、t)/*若客戶訂票額超過乘員定票總額,退出*/ printf("n對不起,您輸入的票的數(shù)量已經(jīng)超過乘員定額!");return;if(amount<=info->tkt_sur)/*若客戶訂票額末超過余票量,訂票成功并等記信息*/int i;printf("請輸入您的姓名(訂票客戶):");scanf("%s",name);printf("請輸入 %s票的艙位等級:",name);scanf("%d",&grade);info->order=insertlink(inf

18、o->order,amount,name,grade);/*在訂票乘員名單域中添加客戶信息*/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)行排隊(duì)等候*/ char

19、 r;printf("n已經(jīng)沒有更多的票,您需要排隊(duì)等候嗎?(Y/N)");r=getch();printf("%c",r);if(r='Y'|r='y') printf("n請輸入您的姓名(排隊(duì)訂票客戶):");scanf("%s",name);info->wait=appendqueue(info->wait,name,amount);/*在排隊(duì)等候乘員名單域中添加客戶信息printf("n注冊成功 !n");*/else printf("

20、;n歡迎您下次再次訂購!n");退票業(yè)務(wù):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("請輸入你的姓名(退票客戶):");scanf("%s",cusname);while(p1!=NULL) /

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

22、t;%s成功退票!free(p1);n",p1->name);info->order=head;/*重新將航線名單域指向訂票單鏈表的頭指針*/f=(info->wait).front;/*f指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn)*/r=(info->wait).rear;/*r指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn)*/本文檔如對你有幫助,請幫忙下載支持!t=f;/*t為當(dāng)前滿點(diǎn)條件的排隊(duì)候補(bǔ)名單域*/while(t)if(info->tkt_sur=info->wait.front->req_amt)/* 若滿足條件者為頭結(jié)點(diǎn)*/int i;info->w

23、ait.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);info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到訂票客戶名單鏈表中*/free(t);break;

24、back=t;t=t->next;if(info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若滿足條件者不為頭結(jié)點(diǎn) int i;back->next=t->next;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(t);break;if(f=r) break;剩票排序:void sort_tkt()/*

溫馨提示

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

評論

0/150

提交評論