版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
.z軟件工程專業(yè)14級設(shè)計題目:飛機訂票系統(tǒng)設(shè)計與實現(xiàn)班級:姓名:2021年6月1日目錄TOC\o"1-2"\h\z\u一、設(shè)計任務(wù)與要求11.1總體目標(biāo)與任務(wù)要求11.2題目選擇與目的意義11.3所選題目的主要工作1二、需求分析22.1用戶需求分析22.2功能需求分析22.3系統(tǒng)需求分析2三、概要設(shè)計33.1各模塊的算法設(shè)計說明33.2存儲構(gòu)造設(shè)計說明8四、詳細(xì)設(shè)計10五、源代碼11六、運行結(jié)果分析21七、收獲與體會28八、主要參考資料28-.z一、設(shè)計任務(wù)與要求1.1總體目標(biāo)與任務(wù)要求制作一個訂票系統(tǒng),通過此系統(tǒng)可以實現(xiàn)如下功能:1〕錄入
可以錄入航班情況〔數(shù)據(jù)可以存儲在一個數(shù)據(jù)文件中,數(shù)據(jù)構(gòu)造、具體數(shù)據(jù)自定〕。2〕查詢
可以查詢*個航線的情況〔如,輸入航班號,查詢起降時間,起飛抵達(dá)城市,航班票價,票價折扣,確定航班是否滿倉〕可以輸入起飛抵達(dá)城市,查詢飛機航班情況。3〕訂票
可以訂票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇的航班〔訂票情況可以存在一個數(shù)據(jù)文件中,構(gòu)造自己設(shè)定)。4〕退票可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有,證件號,訂票數(shù)量及航班情況,訂單要有編號。
5〕修改航班信息當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件。根據(jù)以上功能說明,設(shè)計航班信息,訂票信息的存儲構(gòu)造,設(shè)計程序完成功能。1.2題目選擇與目的意義選擇這個題目的原因是,訂票系統(tǒng)在現(xiàn)實生活中應(yīng)用很廣泛,通過這個系統(tǒng)可以使訂票、退票等變得簡便。與傳統(tǒng)的人工用紙、筆來記錄辦理訂票、退票等相比,使用這個系統(tǒng)也會增加工作效率。這個題目做出來的系統(tǒng)還是比擬實用的,所以我選擇了訂票系統(tǒng)這個題目。完成此系統(tǒng),需要綜合運用數(shù)據(jù)構(gòu)造課程中學(xué)到的幾種典型數(shù)據(jù)構(gòu)造,以及程序設(shè)計語言〔C語言〕,自行實現(xiàn)一個較為完整的應(yīng)用系統(tǒng)的設(shè)計與開發(fā)。通過課程設(shè)計,自己通過系統(tǒng)分析、系統(tǒng)設(shè)計、編程調(diào)試,寫實驗報告等環(huán)節(jié),進一步掌握應(yīng)用系統(tǒng)設(shè)計的方法和步驟,靈活運用并深刻理解典型數(shù)據(jù)構(gòu)造在軟件開發(fā)中的應(yīng)用。學(xué)會將知識應(yīng)用于實際的方法,提高分析和解決問題的能力,增加綜合能力。1.3所選題目的主要工作這個題目的主要工作是使訂票系統(tǒng)可以錄入航班情況,查詢*個航線的情況、辦理訂票、辦理退票、修改航班信息、查詢訂票信息等。二、需求分析2.1用戶需求分析用戶使用此程序所要完成的工作主要為:查詢所有航線信息、查看已訂票客戶信息、查詢航線、辦理訂票業(yè)務(wù)、辦理退票業(yè)務(wù)。通過此系統(tǒng)可以方便的進展上述工作。每條航線所涉及的信息有:終點站名、航班號、飛行時間、票價、乘員定額、余票量。已訂票的客戶信息包括、訂票量、艙位等級〔1,2或3〕。等候替補的客戶信息包括、所需票量。查詢航線功能可以根據(jù)旅客提出的終點站名輸出航班號、飛行時間、票價、乘員定額、余票量。訂票業(yè)務(wù)功能根據(jù)客戶提出的要求〔航班號、訂票數(shù)額〕查詢該航班票額情況,假設(shè)尚有余票,則為客戶辦理訂票手續(xù),輸出座位號;假設(shè)已滿員或余票額少于定票額,則需重新詢問客戶要求。假設(shè)需要,可登記排隊候補購票。退票業(yè)務(wù)功能根據(jù)客戶提供的情況〔航班號、〕為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候補,首先詢問排在第一的客戶,假設(shè)所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊候補的客戶。2.2功能需求分析功能需求分析模塊圖如圖2.1所示。圖2.1功能模塊圖2.3系統(tǒng)需求分析開發(fā)環(huán)境:Windows7系統(tǒng)使用軟件:編寫實驗報告:MicrosoftOfficeWord制作程序:MicrosoftVisualC++6.0三、概要設(shè)計3.1各模塊的算法設(shè)計說明1.瀏覽航線信息功能,調(diào)用display函數(shù)進展輸出。如圖3.1所示。瀏覽航線信息流程圖:圖3.1瀏覽航線信息流程圖:其中display函數(shù)的流程圖如圖3.2display函數(shù)流程圖:圖3.2display函數(shù)流程圖2.瀏覽已訂票客戶信息功能,按順序輸出客戶信息鏈表中的信息。流程圖如圖3.3瀏覽已訂票客戶信息功能流程圖:圖3.3瀏覽已訂票客戶信息功能流程圖3.查詢航線功能,根據(jù)客戶提出的終點站名輸出航線信息。流程圖如圖3.4查詢航線流程圖:圖3.4查詢航線流程圖4.辦理訂票業(yè)務(wù)功能,根據(jù)客戶提出的航線信息等進展訂票。流程圖如圖3.5辦理訂票業(yè)務(wù)功能流程圖:圖3.5辦理訂票業(yè)務(wù)功能流程圖5.辦理退票業(yè)務(wù)功能,根據(jù)客戶提出的航線信息等進展退票。流程圖如圖3.6辦理退票業(yè)務(wù)功能流程圖:圖3.6辦理退票業(yè)務(wù)功能流程圖6.主函數(shù)流程圖如圖3.7主函數(shù)流程圖:圖3.7主函數(shù)流程圖3.2存儲構(gòu)造設(shè)計說明typedefstructwat_ros/*單鏈隊列存儲等候替補的客戶信息*/{ charname[10];/**/ intreq_amt;/*訂票量*/ structwat_ros*ne*t;}qnode,*qptr;typedefstructpqueue/*等候替補的客戶*/{ qptrfront; qptrrear;}linkqueue;上述單鏈隊列用來存儲排隊等候的客戶,這樣可以通過隊先進先出的特點來進展操作。先排隊的客戶可以先訂票成功。typedefstructord_ros/*乘員*/{ charname[10];/*客戶*/ intord_amt; /*訂票量*/ intgrade; /*艙位等級*/ structord_ros*ne*t;}linklist;上述單鏈表用來存儲乘員的信息,包括、訂票量、艙位等級。structairline/*航線信息*/{ charter_name[10];/*抵達(dá)城市*/ charair_num[10];/*航班號*/ chartime[10];/*飛機時間*/ charpri[7];/*票價*/ inttkt_amt;/*乘員定額*/ inttkt_sur;/*余票量*/ linklist*order;/*乘員域,指向乘員鏈表的頭指針*/ linkqueuewait;/*等候替補的客戶域,分別指向排隊等候隊頭隊尾的指針*/}lineinfo;這個構(gòu)造體存儲了航線信息,包括抵達(dá)城市、航班號、飛行時間、票價、乘員定額、余票量等。*defineMA*SIZE5/*定義航線數(shù)量,可修改*/structairlineair[MA*SIZE]=/*初始化航線信息*/{ {"beijing","1","1200","860",30,30}, {"shanghai","2","1000","770",20,20}, {"london","3","1330","960",10,10}, {"harbin","4","1700","760",50,50}, {"dalian","5","1400","550",40,40}};通過修改全局變量MA*SIZE的數(shù)值即可更改航線數(shù)。在structairlineair[MA*SIZE]中可以修改、增加、刪除航線信息。航線信息容依次為抵達(dá)城市、航班號、飛行時間、票價、乘員定額、余票量〔飛行時間1200即12:00〕。四、詳細(xì)設(shè)計查看航線信息編寫voidlist()函數(shù)來查看全部航線信息。其中調(diào)用了voiddisplay(structairline*info)函數(shù),該函數(shù)的功能是打印每條航線的根本信息。這樣即可按順序打印出structairline鏈表中存儲的全部航線信息。查看已訂票客戶信息編寫voidprtlink()函數(shù)來查看已訂票客戶信息。這個函數(shù)中需要輸入要查詢的航線,通過find()函數(shù)來尋找這個航線然后輸出該航線乘員域的乘員信息。查詢航線編寫voidsearch()函數(shù)來實現(xiàn)查詢航線的功能。用戶輸入抵達(dá)城市名,該函數(shù)會在航線信息鏈表中進展查詢。如果有該城市,則會輸出此航線的信息。4.辦理訂票業(yè)務(wù)編寫voidorder()函數(shù)來實現(xiàn)訂票功能。首先提示用戶輸入航班號,然后調(diào)用find()函數(shù)來查找此航班,如果該航班存在,則會提示用戶輸入信息并調(diào)用linklist*insertlink(linklist*head,intamount,charname[],intgrade)在訂票乘員域中添加客戶信息。如果余票缺乏,則會提示用戶進展排隊,如果排隊,則會調(diào)用提示用戶輸入信息并調(diào)用linkqueueappendqueue(linkqueueq,charname[],intamount)在排隊等候乘員域中添加客戶信息。5.辦理退票業(yè)務(wù)編寫voidreturn_tkt()函數(shù)來實現(xiàn)退票功能。首先提示用戶輸入航班號,然后調(diào)用find()函數(shù)來查找此航班,如果該航班存在,則會提示用戶輸入信息,信息正確則會提示退票成功。此時將乘員信息中的該乘員信息刪除,然后檢查替補乘員鏈表中的信息,如果其訂票量可以得到滿足,則會將其插入到訂票客戶鏈表中,提示他訂票成功。6.退出系統(tǒng)主函數(shù)中無限循環(huán)輸出菜單for(;;),用戶在菜單頁面下輸入6回車即e*it(0),即可退出系統(tǒng)。五、源代碼*include<stdio.h>*include<stdlib.h>*include<string.h>*include<conio.h>*include<iostream.h>*defineMA*SIZE5/*定義航線數(shù)量,可修改*/typedefstructwat_ros/*單鏈隊列存儲等候替補的客戶信息*/{charname[10];/**/ intreq_amt;/*訂票量*/ structwat_ros*ne*t;}qnode,*qptr;typedefstructpqueue/*等候替補的客戶*/{ qptrfront;/*等候替補客戶域的隊頭指針*/ qptrrear;/*等候替補客戶域的隊尾指針*/}linkqueue;typedefstructord_ros/*乘員*/{ charname[10];/*客戶*/ intord_amt; /*訂票量*/ intgrade; /*艙位等級*/ structord_ros*ne*t;}linklist;structairline{ charter_name[10];/*抵達(dá)城市*/ charair_num[10];/*航班號*/ chartime[10];/*飛機時間*/ charpri[7];/*票價*/ inttkt_amt;/*乘員定額*/ inttkt_sur;/*余票量*/ linklist*order;/*乘員域,指向乘員鏈表的頭指針*/ linkqueuewait;/*等候替補的客戶域,分別指向排隊等候隊頭隊尾的指針*/}lineinfo;structairline*start;voiddisplay(structairline*info)/*打印每條航線的根本信息*/{ printf("%8s\t%3s\t%s\t\t%4s\t%3d\t%10d\n",info->ter_name,info->air_num,info->time,info->pri,info->tkt_amt,info->tkt_sur);}voidlist()/*打印全部航線信息*/{ structairline*info; inti=0; info=start; printf("終點站名\t航班號\t飛行時間\t票價\t乘員定額\t余票量\n"); while(i<MA*SIZE) { display(info);/*調(diào)用display函數(shù)來輸出*/ info++; i++; } printf("\n\n");}voidsearch()/*根據(jù)客戶提出的終點站名輸出航線信息*/{ structairline*info,*find(); charname[10];/*要抵達(dá)的城市名稱*/ inti=0; info=start; printf("請輸入要抵達(dá)城市的名稱:"); scanf("%s",name); while(i<MA*SIZE) { if(!strcmp(name,info->ter_name))/*有該站名strcmp則返回,if(!0)即break*/ { break; } info++; i++; } if(i>=MA*SIZE)/*沒有匹配的航線*/ { printf("對不起,沒有這條航線!\n"); } else { printf("終點站名\t航班號\t飛行時間\t票價\t乘員定額\t余票量\n"); display(info);/*調(diào)用display函數(shù)輸出航線信息*/ }}structairline*find()/*根據(jù)系統(tǒng)提出的航班號查詢并以指針形式返回*/{ structairline*info; charnumber[10];/*查詢的航班號*/ inti=0; info=start; printf("請輸入航班號:"); scanf("%s",number); while(i<MA*SIZE) { if(!strcmp(number,info->air_num))/*有匹配航班*/ { returninfo; } info++; i++; }/*無匹配航班*/ printf("對不起,沒有這條航線!\n"); returnNULL;}voidprtlink()/*打印訂票乘員域的客戶信息*/{ linklist*p; structairline*info; info=find(); p=info->order; if(p!=NULL)/*按順序輸出客戶信息鏈表*/ { printf("客戶訂票數(shù)額艙位等級\n"); while(p) { printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade); p=p->ne*t; }} else/*沒有人訂這個航班*/ printf("該航線沒有客戶信息!\n");}linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加訂票乘員域的客戶信息*/{ linklist*p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); if(!new1)/*存儲空間缺乏*/ { printf("\nOutofmemory!!\n"); returnNULL; } strcpy(new1->name,name); new1->ord_amt=amount; new1->grade=grade; new1->ne*t=NULL; if(head==NULL)/*假設(shè)原訂票客戶信息為空*/ { head=new1; new1->ne*t=NULL; } else { head=new1; } new1->ne*t=p1; returnhead;}linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排隊等候的客戶域*/{ qptrnew1; new1=(qptr)malloc(sizeof(qnode)); strcpy(new1->name,name); new1->req_amt=amount; new1->ne*t=NULL; if(q.front==NULL)/*假設(shè)原排隊等候客戶域為空*/ { q.front=new1; } else { q.rear->ne*t=new1; } q.rear=new1; returnq;}voidorder()/*辦理訂票業(yè)務(wù)*/{ structairline*info; intamount,grade;/*訂票數(shù)量,艙位等級*/ charname[10];/*要訂的航班號*/ info=start; if(!(info=find()))/*根據(jù)客戶提供的航班號進展查詢,如為空,退出該模塊*/ { return; } printf("請輸入您需要的票數(shù):"); scanf("%d",&amount); if(amount>info->tkt_amt)/*假設(shè)客戶訂票額超過乘員定票總額,退出*/ { printf("\n對不起,您輸入票數(shù)已經(jīng)超過乘員定額!"); return; } if(amount<=info->tkt_sur)/*假設(shè)客戶訂票額末超過余票量,訂票成功并等記信息*/ { inti; printf("請輸入您的:"); scanf("%s",name); printf("請輸入您需要的艙位等級(1,2或):"); scanf("%d",&grade); info->order=insertlink(info->order,amount,name,grade);/*在訂票乘員域中添加客戶信息*/ for(i=0;i<amount;i++)/*依次輸出該訂票客戶的座位號*/ { printf("%s的座位號是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1); } info->tkt_sur-=amount;/*該航線的余票量應(yīng)減掉該客戶的訂票量*/ printf("\n祝您乘坐愉快!\n"); } else/*假設(shè)滿員或余票額少于訂票額,詢問客戶是否需要進展排隊等候*/ { charr; printf("\n沒有這么多票了,您需要排隊等候嗎?(Y/N)"); 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("\n歡送您再次訂購!\n"); } }}voidreturn_tkt()/*退票模塊*/{ structairline*info; qnode*t,*back,*f,*r; intgrade; linklist*p1,*p2,*head; charcusname[10]; if(!(info=find()))/*調(diào)用查詢函數(shù),根據(jù)客戶提供的航線進展搜索*/ { return; } head=info->order; p1=head; printf("請輸入你的:"); scanf("%s",cusname); while(p1!=NULL)/*根據(jù)客戶提供的到訂票客戶域進展查詢*/ { if(!strcmp(cusname,p1->name)) { break; } p2=p1; p1=p1->ne*t; } if(p1==NULL)/*假設(shè)未找到,退出本模塊*/ { printf("對不起,您沒有訂過票!\n"); return; } else/*假設(shè)信息查詢成功,刪除訂票客戶域中的信息*/ { if(p1==head) { head=p1->ne*t; }else { p2->ne*t=p1->ne*t; }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)前滿點條件的排隊候補域*/ while(t) { if(info->tkt_sur>=info->wait.front->req_amt)/*假設(shè)滿足條件者為頭結(jié)點*/ { inti; info->wait.front=t->ne*t; printf("%s訂票成功!\n",t->name); for(i=0;i<t->req_amt;i++) /*輸出座位號*/ { printf("%s的座位號是:%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);/*插入到訂票客戶鏈表中*/ free(t); break; } back=t;t=t->ne*t; if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*假設(shè)滿足條件者不為頭結(jié)點*/ { inti; back->ne*t=t->ne*t; printf("%s訂票成功!\n",t->name); for(i=0;i<t->req_amt;i++)/*輸出座位號*/ { printf("<%s>'sseatnumberis:%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);/*插入到訂票客戶鏈表中*/ free(t);break; } if(f==r) { break; } }}intmenu_select()/*菜單界面*/{ intc; chars[20]; printf("\t訂票系統(tǒng)\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("1.查看航線信息\n"); printf("2.查看已訂票客戶信息\n"); printf("3.查詢航線\n"); printf("4.辦理訂票業(yè)務(wù)\n"); printf("5.辦理退票業(yè)務(wù)\n"); printf("6.退出系統(tǒng)\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n"); do { printf("請選擇(1-6):"); scanf("%s",s); c=atoi(s); }while(c<1||c>6); returnc;}voidmain(){ structairlineair[MA*SIZE]=/*初始化航線信息*/ { {"beijing","1","1200","860",30,30}, {"shanghai","2","1000","770",20,20}, {"london","3","1330","960",10,10}, {"harbin","4","1700","760",50,50}, {"dalian","5","1400","550",40,40} }; start=air; for(;;)/*無限循環(huán)(除非用戶選擇.退出)*/ { system("cls");/*清空屏幕*/ switch(menu_select()) { case1:list();/*打印全部航線信息*/ break; case2:prtlink();/*瀏覽已訂票客戶信息*/ break; case3:search();/*查詢航線*/ break; case4:order();/*訂票*/ break; case5:return_tkt();/*退票*/ break; case6:printf("\n感您的使用,再見!\n");/*退出系統(tǒng)*/ e*it(0);/*正常退出程序*/ } printf("\n任意鍵繼續(xù)...\n"); getch();/*任意鍵繼續(xù)*/ }}六、運行結(jié)果分析1.菜單:進入系統(tǒng)后,會出現(xiàn)如下菜單,如圖6.1菜單:圖6.1
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年石油化工監(jiān)控系統(tǒng)合同3篇
- 《泵類培訓(xùn)內(nèi)容》課件
- 二零二五年度水池施工:建筑材料質(zhì)量保證與檢驗合同2篇
- 《搶救設(shè)備管理》課件
- 二零二五年度安防設(shè)備租賃與智能化升級合同
- 園區(qū)車輛使用安全協(xié)議書(2篇)
- 二零二五年度房產(chǎn)買賣合同數(shù)據(jù)統(tǒng)計分析與評估報告3篇
- 上海濟光職業(yè)技術(shù)學(xué)院《高等代數(shù)三節(jié)連上》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度環(huán)境監(jiān)測與治理安全生產(chǎn)及環(huán)境保護合作協(xié)議3篇
- ESG主題研究系列:ESG投資概述及其在多因子策略中的應(yīng)用
- Module 6 Unit 2 It was amazing.(說課稿)-2023-2024學(xué)年外研版(一起)英語五年級下冊
- 跑步圖片課件教學(xué)課件
- 房屋租賃合同樣本樣本
- 法務(wù)公司合同范本
- GB/T 44591-2024農(nóng)業(yè)社會化服務(wù)社區(qū)生鮮店服務(wù)規(guī)范
- 招標(biāo)基礎(chǔ)知識題庫單選題100道及答案解析
- 寧波文旅會展集團有限公司招聘筆試題庫2024
- 高速公路收費站員工年度考評辦法
- 【課件】跨學(xué)科實踐:探索廚房中的物態(tài)變化問題-人教版八年級上冊物理
- 房地產(chǎn)企業(yè)崗位招聘筆試題題庫之四(含答案)營銷副總經(jīng)理
- 名著導(dǎo)讀《儒林外史》閱讀周計劃 統(tǒng)編版語文九年級下冊
評論
0/150
提交評論