數據結構課程設計報告飛機訂票系統_第1頁
數據結構課程設計報告飛機訂票系統_第2頁
數據結構課程設計報告飛機訂票系統_第3頁
數據結構課程設計報告飛機訂票系統_第4頁
數據結構課程設計報告飛機訂票系統_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

.z軟件工程專業(yè)14級設計題目:飛機訂票系統設計與實現班級:姓名:2021年6月1日目錄TOC\o"1-2"\h\z\u一、設計任務與要求11.1總體目標與任務要求11.2題目選擇與目的意義11.3所選題目的主要工作1二、需求分析22.1用戶需求分析22.2功能需求分析22.3系統需求分析2三、概要設計33.1各模塊的算法設計說明33.2存儲構造設計說明8四、詳細設計10五、源代碼11六、運行結果分析21七、收獲與體會28八、主要參考資料28-.z一、設計任務與要求1.1總體目標與任務要求制作一個訂票系統,通過此系統可以實現如下功能:1〕錄入

可以錄入航班情況〔數據可以存儲在一個數據文件中,數據構造、具體數據自定〕。2〕查詢

可以查詢*個航線的情況〔如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉〕可以輸入起飛抵達城市,查詢飛機航班情況。3〕訂票

可以訂票,如果該航班已經無票,可以提供相關可選擇的航班〔訂票情況可以存在一個數據文件中,構造自己設定)。4〕退票可退票,退票后修改相關數據文件;客戶資料有,證件號,訂票數量及航班情況,訂單要有編號。

5〕修改航班信息當航班信息改變可以修改航班數據文件。根據以上功能說明,設計航班信息,訂票信息的存儲構造,設計程序完成功能。1.2題目選擇與目的意義選擇這個題目的原因是,訂票系統在現實生活中應用很廣泛,通過這個系統可以使訂票、退票等變得簡便。與傳統的人工用紙、筆來記錄辦理訂票、退票等相比,使用這個系統也會增加工作效率。這個題目做出來的系統還是比擬實用的,所以我選擇了訂票系統這個題目。完成此系統,需要綜合運用數據構造課程中學到的幾種典型數據構造,以及程序設計語言〔C語言〕,自行實現一個較為完整的應用系統的設計與開發(fā)。通過課程設計,自己通過系統分析、系統設計、編程調試,寫實驗報告等環(huán)節(jié),進一步掌握應用系統設計的方法和步驟,靈活運用并深刻理解典型數據構造在軟件開發(fā)中的應用。學會將知識應用于實際的方法,提高分析和解決問題的能力,增加綜合能力。1.3所選題目的主要工作這個題目的主要工作是使訂票系統可以錄入航班情況,查詢*個航線的情況、辦理訂票、辦理退票、修改航班信息、查詢訂票信息等。二、需求分析2.1用戶需求分析用戶使用此程序所要完成的工作主要為:查詢所有航線信息、查看已訂票客戶信息、查詢航線、辦理訂票業(yè)務、辦理退票業(yè)務。通過此系統可以方便的進展上述工作。每條航線所涉及的信息有:終點站名、航班號、飛行時間、票價、乘員定額、余票量。已訂票的客戶信息包括、訂票量、艙位等級〔1,2或3〕。等候替補的客戶信息包括、所需票量。查詢航線功能可以根據旅客提出的終點站名輸出航班號、飛行時間、票價、乘員定額、余票量。訂票業(yè)務功能根據客戶提出的要求〔航班號、訂票數額〕查詢該航班票額情況,假設尚有余票,則為客戶辦理訂票手續(xù),輸出座位號;假設已滿員或余票額少于定票額,則需重新詢問客戶要求。假設需要,可登記排隊候補購票。退票業(yè)務功能根據客戶提供的情況〔航班號、〕為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊候補,首先詢問排在第一的客戶,假設所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊候補的客戶。2.2功能需求分析功能需求分析模塊圖如圖2.1所示。圖2.1功能模塊圖2.3系統需求分析開發(fā)環(huán)境:Windows7系統使用軟件:編寫實驗報告:MicrosoftOfficeWord制作程序:MicrosoftVisualC++6.0三、概要設計3.1各模塊的算法設計說明1.瀏覽航線信息功能,調用display函數進展輸出。如圖3.1所示。瀏覽航線信息流程圖:圖3.1瀏覽航線信息流程圖:其中display函數的流程圖如圖3.2display函數流程圖:圖3.2display函數流程圖2.瀏覽已訂票客戶信息功能,按順序輸出客戶信息鏈表中的信息。流程圖如圖3.3瀏覽已訂票客戶信息功能流程圖:圖3.3瀏覽已訂票客戶信息功能流程圖3.查詢航線功能,根據客戶提出的終點站名輸出航線信息。流程圖如圖3.4查詢航線流程圖:圖3.4查詢航線流程圖4.辦理訂票業(yè)務功能,根據客戶提出的航線信息等進展訂票。流程圖如圖3.5辦理訂票業(yè)務功能流程圖:圖3.5辦理訂票業(yè)務功能流程圖5.辦理退票業(yè)務功能,根據客戶提出的航線信息等進展退票。流程圖如圖3.6辦理退票業(yè)務功能流程圖:圖3.6辦理退票業(yè)務功能流程圖6.主函數流程圖如圖3.7主函數流程圖:圖3.7主函數流程圖3.2存儲構造設計說明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];/*抵達城市*/ charair_num[10];/*航班號*/ chartime[10];/*飛機時間*/ charpri[7];/*票價*/ inttkt_amt;/*乘員定額*/ inttkt_sur;/*余票量*/ linklist*order;/*乘員域,指向乘員鏈表的頭指針*/ linkqueuewait;/*等候替補的客戶域,分別指向排隊等候隊頭隊尾的指針*/}lineinfo;這個構造體存儲了航線信息,包括抵達城市、航班號、飛行時間、票價、乘員定額、余票量等。*defineMA*SIZE5/*定義航線數量,可修改*/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的數值即可更改航線數。在structairlineair[MA*SIZE]中可以修改、增加、刪除航線信息。航線信息容依次為抵達城市、航班號、飛行時間、票價、乘員定額、余票量〔飛行時間1200即12:00〕。四、詳細設計查看航線信息編寫voidlist()函數來查看全部航線信息。其中調用了voiddisplay(structairline*info)函數,該函數的功能是打印每條航線的根本信息。這樣即可按順序打印出structairline鏈表中存儲的全部航線信息。查看已訂票客戶信息編寫voidprtlink()函數來查看已訂票客戶信息。這個函數中需要輸入要查詢的航線,通過find()函數來尋找這個航線然后輸出該航線乘員域的乘員信息。查詢航線編寫voidsearch()函數來實現查詢航線的功能。用戶輸入抵達城市名,該函數會在航線信息鏈表中進展查詢。如果有該城市,則會輸出此航線的信息。4.辦理訂票業(yè)務編寫voidorder()函數來實現訂票功能。首先提示用戶輸入航班號,然后調用find()函數來查找此航班,如果該航班存在,則會提示用戶輸入信息并調用linklist*insertlink(linklist*head,intamount,charname[],intgrade)在訂票乘員域中添加客戶信息。如果余票缺乏,則會提示用戶進展排隊,如果排隊,則會調用提示用戶輸入信息并調用linkqueueappendqueue(linkqueueq,charname[],intamount)在排隊等候乘員域中添加客戶信息。5.辦理退票業(yè)務編寫voidreturn_tkt()函數來實現退票功能。首先提示用戶輸入航班號,然后調用find()函數來查找此航班,如果該航班存在,則會提示用戶輸入信息,信息正確則會提示退票成功。此時將乘員信息中的該乘員信息刪除,然后檢查替補乘員鏈表中的信息,如果其訂票量可以得到滿足,則會將其插入到訂票客戶鏈表中,提示他訂票成功。6.退出系統主函數中無限循環(huán)輸出菜單for(;;),用戶在菜單頁面下輸入6回車即e*it(0),即可退出系統。五、源代碼*include<stdio.h>*include<stdlib.h>*include<string.h>*include<conio.h>*include<iostream.h>*defineMA*SIZE5/*定義航線數量,可修改*/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];/*抵達城市*/ 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);/*調用display函數來輸出*/ info++; i++; } printf("\n\n");}voidsearch()/*根據客戶提出的終點站名輸出航線信息*/{ structairline*info,*find(); charname[10];/*要抵達的城市名稱*/ inti=0; info=start; printf("請輸入要抵達城市的名稱:"); 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);/*調用display函數輸出航線信息*/ }}structairline*find()/*根據系統提出的航班號查詢并以指針形式返回*/{ 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("客戶訂票數額艙位等級\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)/*假設原訂票客戶信息為空*/ { 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)/*假設原排隊等候客戶域為空*/ { q.front=new1; } else { q.rear->ne*t=new1; } q.rear=new1; returnq;}voidorder()/*辦理訂票業(yè)務*/{ structairline*info; intamount,grade;/*訂票數量,艙位等級*/ charname[10];/*要訂的航班號*/ info=start; if(!(info=find()))/*根據客戶提供的航班號進展查詢,如為空,退出該模塊*/ { return; } printf("請輸入您需要的票數:"); scanf("%d",&amount); if(amount>info->tkt_amt)/*假設客戶訂票額超過乘員定票總額,退出*/ { printf("\n對不起,您輸入票數已經超過乘員定額!"); return; } if(amount<=info->tkt_sur)/*假設客戶訂票額末超過余票量,訂票成功并等記信息*/ { 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;/*該航線的余票量應減掉該客戶的訂票量*/ printf("\n祝您乘坐愉快!\n"); } else/*假設滿員或余票額少于訂票額,詢問客戶是否需要進展排隊等候*/ { 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()))/*調用查詢函數,根據客戶提供的航線進展搜索*/ { return; } head=info->order; p1=head; printf("請輸入你的:"); scanf("%s",cusname); while(p1!=NULL)/*根據客戶提供的到訂票客戶域進展查詢*/ { if(!strcmp(cusname,p1->name)) { break; } p2=p1; p1=p1->ne*t; } if(p1==NULL)/*假設未找到,退出本模塊*/ { printf("對不起,您沒有訂過票!\n"); return; } else/*假設信息查詢成功,刪除訂票客戶域中的信息*/ { 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指向排隊等候隊列的頭結點*/ r=(info->wait).rear;/*r指向排隊等候隊列的尾結點*/ t=f;/*t為當前滿點條件的排隊候補域*/ while(t) { if(info->tkt_sur>=info->wait.front->req_amt)/*假設滿足條件者為頭結點*/ { 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)/*假設滿足條件者不為頭結點*/ { 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訂票系統\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("1.查看航線信息\n"); printf("2.查看已訂票客戶信息\n"); printf("3.查詢航線\n"); printf("4.辦理訂票業(yè)務\n"); printf("5.辦理退票業(yè)務\n"); printf("6.退出系統\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");/*退出系統*/ e*it(0);/*正常退出程序*/ } printf("\n任意鍵繼續(xù)...\n"); getch();/*任意鍵繼續(xù)*/ }}六、運行結果分析1.菜單:進入系統后,會出現如下菜單,如圖6.1菜單:圖6.1

溫馨提示

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

評論

0/150

提交評論