




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、訂票系統1.需求分析任務:通過此系統可以實現如下功能:錄入:可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構具體數據自定)查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達城市,查詢飛機航班情況;訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班;退票:可退票,退票后修改相關數據文件;客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。修改航班信息:當航班信息改變可以修改航班數據文件要求:根據以上功能說明,設計航班信息,訂票信息的存儲結構,設計程
2、序完成功能;2:主要設計思路:1) 算法構造流程圖:A:主菜單:主菜單0123456789輸列出按航按訂票退票修改保存讀取退出入航班班號城程序系統飛機文件文航的信查詢市航班件班息航班來的信下載的信息查息文件信詢息航班B:各分塊模板的構造流程圖:0.輸入航班的信息起飛城降落城出發時降落時剩下的座價折市市間間位格扣航班1.列出航班的信息繼續y退出n2.按航班號查詢航班信息輸入所需要查詢的航班號顯示這個航班的的信息3.按城市來查詢航班輸入起飛城市輸入降洛城市顯示這個航班的信息4.訂票程序輸入號碼輸入名字輸入ID需要定的票數航班號5.退票系統輸入航班號6.修改飛確定退票1輸入要修重新輸)機航班的信息輸
3、入你ID參改的航班號否新的航班信息7.保存文件顯示保存成功3:功能函數設計:(1) :訂票系統主菜單函數menu_select()本函數主要構造系統的主菜單,系統需要實現很多功能,并且各個功能需要各自的函數支持,所以通過主菜單可以輕松的進入各個函數下實現各自的功能,故主菜單顯得尤為重要。其實就是通過鍵盤輸入選擇項,然后通過scanf接受,在通過swtich判斷進入各個選擇項。(2) :工作人員管理函數enter()&change()系統需要各個航班的詳細信息,所以需要工作人員把信息輸入系統里,以供乘客查詢訂票。enter()函數的構造就是為了解決這個問題。而有可能航班線路更改或由于天氣等原因飛
4、機的起飛時間發生了更改,故工作人員需要及時更改信息,所以需要構造change()函數。(3):列出航班信息的函數list0乘客需要查詢各個航班的信息,所以通過系統要能調出上面工作人員已經錄入好的航班信息,所以構造本函數來實現這個功能。(4)乘客具體查詢函數search()本函數分兩個分函數:searchi()和search20,它們分別實現乘客的按航班查詢和按出發及抵達城市的兩種查詢方案。(5)票務管理函數book()&quit0通過book()函數可以實現乘客的訂票操作,通過quit0可以實現乘客的退票操作。(6)文件操作函數save()&load03.源程序代碼:(WINTC下運行)#in
5、clude#include#include#include#defineN20#defineQ40/*定義數據結構*/*乘客信息*/typedefstruct(charnumber。;/*編號*/charid20;/*證件號7charname10;/*姓名*/intcount;/*訂票數*/charflightname10;/*乘坐航班號*/GUEST;/*航班信息*/typedefstructcharplarerumber10;/*航班號*/charTake_off_city20;/*起飛城市*/*抵達城市7charArrived_in_city20;ctkeofMime20;/*起飛時間*
6、/charLanding_time20;/*降落時間*/intshipping;/*艙位數7charprice5;/*票價*/chardiscount5;/*折扣*/GUESTguest20;intsit;FLY;/*菜單函數,函數返回值為整數,代表所選的菜單項7menu_select()(intc;printf(按任意鍵返回主菜單n”);/*提示壓任意鍵繼續7getch。;/*讀入任意字符7printf(nWelcometonnnprintf(nTicketsBookingSystemnnH*MENUnnprintf(0.printf(H1.printf(M2.printf(H3.print
7、f(H4.printf(H5.printf(6.printf(n7.printf(8.printf(H9.printf(*nndo輸入航班信息n”);列出航班的信息n“);按航班號查詢航班信息n按城市來查詢航班n);訂票程序n”);退票系統nn);修改飛機航班的信息n”);保存文件n”);讀取和下載文件n);退出nn););printf( ”n輸入你的選擇項(09):);/*提示輸入選項*/printf(nscanf(d”,&c);/*輸入選擇項7while(cv0|c9);/*選擇項不在9之間重輸7returnc;/*返回選擇項,主程序根據該數調用相應的函數7)/*輸入函數*/intente
8、r(FLYt)(inti,k,n5m,wj;char*s;printf(輸入航線總數(n40|n0)(printf(輸入錯誤!!再次輸入(0vnv=40):);/輸入航線總數*/scanf(%dn,&n);printf(.輸入航班的信息nn“);/*提示信息*/printf(航班號起飛城市降落城市出發時間降落時間剩下的座位價格折扣n“);printf(n);for(i=0;in;i+)(scanf(H%sMplanenumber);/*輸入姓名*/scanf(”s】i.Take_off_dty);/*輸入起飛城市7scanf(”s”,ti.Airived_in_city);/*輸入降落城市sc
9、anf(s”,ti.takeoff_time);/*輸入起飛時間*/scanf(H%sM,ti.Landing_time);/*輸入降落時間*/scanf(%d”,&ti.shipping);/*輸入艙位數*/scanf(H%sn,ti.price);/*輸入票價7scanf(discount);/*輸入折扣*/printf();nHfor(i=0;in;i+)ti.sit=0;returnn;/*返回記錄條數*/)/顯示記錄,參數為記錄數組和記錄條數*/voidlist(FLYt,intn)(inti;printf(航班號起飛城市降落城市出發時間降落時間剩下的座位價格折扣n”);printf
10、(nn);for(i=0;in-1)/*如果整數i值大于n-1,說明沒找到*/printf(”沒有找到n);else(printf(航班號起飛城市降落城市出發時間降落時間剩下的座位折扣價格n);/*顯示記錄*/printf(n);printf(H%-12s%-12s%-1Os%-12s%-10s%-7d%-7s%-7sn,ti.planenumber,ti.Take_off_city,ti.ArrivedJn_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);/*按起降城市查找記錄7voidsearch
11、2(FLYt,intn)chars120;chars220;inti;printf(輸入起飛城市名稱scanf(”s”,s1);/*輸入起飛城市名7printf(輸入降落城市名稱:“);scanf(”s”,s2);/*輸入降落城市名*/for(i=0;ivn;i+)/*從第一條記錄開始,直到最后一條7(if(strcmp(s1)ti.Take_off_city)=0)&(strcmp(s23ti.Arrived_in_city)=0)/*記錄中的城市和待比較的是否相等*/break;/*相等,則返回該記錄的下標號,程序提前結結束if(in-1)/*如果整數i值大于n-1,說明沒找到*/prin
12、tf(沒有找到n);else(價格printf(航班號起飛城市降落城市出發時間降落時間剩下的座位折扣rT);/*找到,顯示記錄*/printf(Hn);printf(H%-12s%-12s%-1Os%-12s%-10s%-7d%-7s%-7snn,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);/*訂票*/voidbook(FLYt,intn)chars20,number110,name110,id120,fl
13、ightname110;inti,j=0,m,k,count1;printf(輸入你想預訂的票數:);scanf(d”,&m);航班號n”); /*訂的票printf(號碼姓名證件號提示信息*/printf(nJfor(k=0;kn-1)/*如果整數i值大于n-1,說明沒找到*/printf(對不起!沒有此航班n”);m=m+2;k+;)/*退票7voidquit(FLYt,intn)(chars120,s220;/*保存待查找航班名和證件號字符串7inti,k,j,h,l5ch;printf(請輸入你想退訂的航班號:”);scanf(n%s;s1);/*輸入待查找航班名*/printf(請輸
14、入你的證件號:”);scanf(H%s;s2);/*輸入待查找證件號7姓名證件號printf(號碼訂的票數航班號n”);/*顯示提示*/printf(n)for(i=0;ivn;i+)/*從第一條記錄開始,直到最后一條7(for(j=O;jn-1)/*如果整數i值大于n-1,說明沒找到*/printf(沒有找到nM);else(printf(你是否確認刪除(1/0)n“);/*確認是否要刪除7scanf(”d*&ch);/*輸入一個整數或7if(ch=1)/*如果確認刪除整數為7for(k=l+1;kn-1)/*如果整數i值大于n-1,說明沒找到*/printf(沒有找到nn);else(pr
15、intf(航班號起飛城市降落城市出發時間降落時間剩下的座位價格折扣nM);/*找到,顯示原先記錄7printf();nHprintf(H%-12s%-12s%-1Os%-12s%-10s%-7d%-7s%-7sn,ti.planenumber,ti.Take_off_city,ti.ArrivedJn_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);printf(pleaseinputthenewinformation:n);scanf(n%snplanenumber);/*輸入航班名*/scanf(
16、n%sH,ti.Take_off_city);/*輸入起始城市*/scanf(”%s”,ti.Arrived_in_city)/*輸入終點城市*/scanf(n%sn5ti.takeoff_time);/*輸入起飛時間*/scanf(n%sn5ti.Landing_time);/*輸入降落時間*/scanf(dti.shipping);/*輸入座位號*/scanf(%s,ti.price);/*輸入票價*/scanf(n%sH,ti.discount);/*輸入折扣*/*保存資料*/voidsave(FLYt,intn)intij;FILE*fp;/*指向文件的指針7if(fp=fopen(R
17、ecord1.txtnwbn)=NULL)/*打開文件,并判斷打開是否正常*/(printf(cannotopenfilen);/*沒打開7exit(1);/*退出*/)printf(An保存文件n“);/*輸出提示信息*/fprintf(fp,”dn);/*將記錄數寫入文件7fprintf(fp5”rn);/*將換行符號寫入文件*/for(i=0;in;i+)fprintf(fp,s%s%s%s%s%d%s%sn,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.ship
18、ping,ti.price,ti.discount);fprintf(fp,”rn”);/*將換行符號寫入文件*/fprintf(fp,%d;ti.sit);/*將記錄數寫入文件7fprintf(fp,”rn”);/*將換行符號寫入文件7for(j=O;jti.sit;j+)fprintf(fp,%s%s%s%d%s,ti.guestj.number,,ti.guestj.id,ti.guestj.count,ti.guestj.flightname);/*格式寫入記錄*/fprintf(fp,rn);/*將換行符號寫入文件7)fclose(fp);/*關閉文件7p
19、rintf*恭喜!保存成功*5);/*顯示保存成功7/讀入函數,參數為結構體數組7intload(FLYt)inti,n,j;FILE*fp;/*指向文件的指針7if(fp=fopen(nrecord1.txtnJrb)=NULL)/*打開文件*/(printf(不能打開n”);/*不能打開7exit(1);/*退出*/fscanf(fp,d”,&n);/讀入記錄數7for(i=0;in;i+)/*讀入記錄數*/fscanf(fp,%s%s%s%s%s%d%s%sn,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_ti
20、me,ti.Landingshipping,ti.price,ti.discount);fscanf(fp,M%dn5&ti.sit);for(j=O;jti.sit;j+)fscanf(fp,n%s%s%s%d%sM,ti.guestj.number,,ti.guestj.id,&ti.guestj.coijnt,ti.guestj.flightname);/*按格式讀入記錄7fclose(fp);/*關閉文件7printf(你已經成功從文件讀取數據!!nnnn);/*顯示讀取成功*/returnn;/*返回記錄數7)/*主函數7main()inti;FLYfli
21、ghtQ;intlength;/*保存記錄長度/for(;)/*無限循環*/件/switch(menu_select()/*調用主菜單函數,返回值整數作開關語句的條caseO:length=enter(flight);case1:list(flight,length);case2:search1(flightjength);case3:search2(flight,length);case4:book(flight,length);case5:quit(flight,length);case6:channge(flight,length);break;/*輸入記錄7break;/*顯示全部記錄
22、*/break;/*查找記錄*/break;/*查找記錄7break;/*訂票*/break;/*退票*/break;/*修改航班信息*/case7:save(flight,length);break;/*保存文件7case8:length=load(flight);break;/*讀文件*/case9:exit(0);/*如返回值為則程序結束*/票系統4.系統運行時窗口截圖:(VC6.0下的運行結果)門*CzDqcua9nteaAidSAttincsXAdBinislrratvzAWBBbufbaoktickatese菜單IfcleonetoTicketsBoolkingrSvsten人 Q
23、 吩牛 罷胡猶 駐史 占M沆或 正才! T*予充雪 一 -T沆需孚S飛二和 入出 &馨示發 一子惜 酬安夫n艮一名信息I 1 .列I出航I班的I信息k班號起飛戒幣降落城幣出發時間障落時間剩下的座位價惰折扣)23L|B101010i465008090.9反任意鍵返回主菜單2.按航班號查詢航6、小的性十衛T否.nil吠.輸入宇浮翩益石出發時間降落時間剩下的座垃價格折掃班信息gu3.按輸八你的選擇項I入起飛城市名初上d每i入瞳閣名橡合肥心縣九飛城市降落城市降落時間剩下的座需價格折扣城市來查123_t按任意犍返回壬集單合肥10;0B.8詢航班4,訂票程序5.退輸你的瑋薛:幣V丹:5.主皺入保理一的癥班
24、號:彳桀使輸入你的證件弋:3424231?8?e81221Vl證件號訂的票數骯班號坦碼拒名34Z1Z31?B?081221?1ZK機航班的信就班弓起飛城市降落辟山發時間降蓿葉問剩下葩座位價格利6.133上海合肥Ift:HRIflr4IBSHRRAHH.pleaseinputtheneuinFornacian:125上梅合肥?:4610:05457500.?7.保存文件的遍歷過8,讀取文件、下載文件輸入你的選擇項”行什孑保存辛蚩g七樣寸程演一需求分析:設計程序完成如下功能:對給定的圖的結構和起點,產生深度優先遍歷和廣度優先遍歷,并列出求解的過程動態演示。主要設計思路:設計思想:簡而言之,深度優先
25、,就是先遍歷它的一個鄰接點,這個鄰接點的鄰接點然后才遍歷其他的鄰接點。廣度優先,就是先把它所有的鄰接點都遍歷完以后,再遍歷它每個鄰接點的鄰接點。存儲結構為圖的鄰接多重表,它是無向圖的一種鏈式存儲結構。深度優先遍歷:設X是當前被訪問頂點,在對X做過訪問標記后,選擇一條從X出發的未檢測過的邊(X,y)O若發現頂點y已訪問過,則重新選擇另一條從X出發的未檢測過的邊,否則沿邊(x,y)到達未曾訪問過的y,對y訪問并將其標記為已訪問過;然后從y開始搜索,直到搜索完從y出發的所有路徑,即訪問完所有從y出發可達的頂點之后,才回溯到頂點x,并且再選擇一條從x出發的未檢測過的邊。上述過程直至從x出發的所有邊都已
26、檢測過為止。此時,若x不是源點,則回溯到在x之前被訪問過的頂點;否則圖中所有和源點有路徑相通的頂點(即從源點可達的所有頂點)都已被訪問過,若圖G是連通圖,則遍歷過程結束,否則繼續選擇一個尚未被訪問的頂點作為新源點,進行新的搜索過程。廣度優先遍歷:設x和y是兩個相繼要被訪問的未訪問過的頂點。它們的鄰接點分別記為x1,x2,xs和y1,y2,yto為確保先訪問的頂點其鄰接點亦先被訪問,在搜索過程中使用隊列來保存已訪問過的頂點。當訪問x和y時,這兩個頂點相繼入隊。此后,當x和y相繼出隊時,我們分別從x和y出發搜索其鄰接點x1,X2,xs和y1,y2,,yt,對其中未訪者進行訪問并將其入隊。這種方法是
27、將每個已訪問的頂點入隊,故保證了每個頂點至多只有一次入隊A.圖的算法構造思想:1. CreateALGraph()初始條件:V是圖的頂點集,VR是圖中弧的集合.操作結果:按V和VR是定義構造圖G.2. DestroyGraph(&G)初始條件:圖G存在操作結果:銷毀圖G3. LocateVex(G,u)初始條件:圖G存在,u和G中頂點有相同的特征操作結果:若圖G中存在頂點u,則返回該頂點在圖中的位置;否則返回其他信息4. GetVex(G,v)初始條件:圖G存在,v是G中頂點操作結果:返回V的值5. FirstAjvex(G,v)初始條件:圖G存在,v是G中頂點操作結果:返回V的第一個鄰接頂點
28、,若頂在圖中沒有鄰接頂點,則返回為空6. NextAjvex(G,v,w)初始條件:圖G存在,v是G中頂點,w是v的鄰接頂點操作結果:返回v的下一個鄰接頂點,若w是v的最后一個鄰接頂點,則返回空7. DeleteVexx(&G,v)初始條件:圖G存在,v是G中頂點操作結果:刪除頂點V已經其相關的弧8. DFStraverse(ALGraph)初始條件:圖G存在,visit的頂點的應用函數操作結果:對圖進行深度優先遍歷,在遍歷過程中對每個結點調用visit函數一次,一旦visit失敗,則操作失敗9. BFStraverse(ALGraph)初始條件:圖G存在,visit的頂點的應用函數操作結果:
29、對圖進行廣度優先遍歷,在遍歷過程中對每個結點調用visit函數一次,一旦visit失敗,則操作失敗附圖的結構體構造:ALGraph數據對象v:v是具有相同特性的數據元素的集合,稱為點集.數據關系R:R=VRVR=(v,w)|v,w屬于V,(v,w)表示v和w之間存在的路徑B.隊列的算法構造:1. lnit_SeqQueue()操作結果:構造一個空隊列Q2. DestryoQueue(&Q)初始條件:隊列Q已存在。操作結果:隊列Q被銷毀,不再存在。3. ln_SeqQueue()初始條件:隊列Q已經存在操作結果:插入元素e為Q的新的隊尾元素4. Out_SeqQueue()操作結果:刪除Q的隊尾
30、元素,并用e返回其值初始條件:Q為非空隊列5. Empty_SeqQueue()初始條件:隊列已經存在操作結果:若隊列為空,則返回TRUE否則返回FLASEC.本程序包含的模板:1 .程序模塊Main()(取得頂點數和弧數;生成鄰接表結構的圖;深度遍歷圖;廣度遍歷圖;2 .造鄰接表結構的圖;3 .度優先遍歷圖;4 .度優先遍歷圖;5.列的基本操作模塊;6.數聲明模塊;三.源程序代碼:(VC+6.0下運行)includeincludeinclude#defineMAX_VERTEX_NUM5/0/圖的最大頂點數#defineMAXQSIZE200/隊列的最大容量enumBOOLFalsejrue
31、);/定義枚舉變量typedefstructArcNode/圖的鄰接表存儲intadjvex;/該弧所指向的頂點的位置structArcNode*nextarc;/指向下一條弧的指針ArcNode;/弧結點typedefstructArcNode*AdjListMAX_VERTEX_NUM;/指向第一條依附該頂點的弧的指針intvexnum,arcnum;/圖的當前頂點和弧數Graph;typedefstruct/隊列結構intelemMAXQSIZE;/數據域intfront;/隊頭指針intrear;/隊尾指針SqQueue;BOOLvisitedMAX_VERTEX_NUM;/全局變量訪
32、問標志數組voidCreateGraph(Graph&);/生成圖的鄰接表voidDFSTraverse(Graph);/深度優先搜索遍歷圖voidDFS(Graph,int);voidBFSTraverse(Graph);/廣度優先搜索遍歷圖voidlnitial(SqQueue&);/初始化一個隊列BOOLQueueEmpty(SqQueue);/判斷隊列是否空BOOLEnQueue(SqQueue&i,nt);/將一個元素入隊列BOOLDeQueue(SqQueue&i5nt&);/將一個元素出隊列intFirstAdjVex(Graph,int);/求圖中某一頂點的第一個鄰接頂點int
33、NextAdjVex(Graph,int,int);/求某一頂點的下一個鄰接頂點intmain()GraphG;/采用鄰接表結構的圖charj=y;printf(“題目:編制一個“圖遍歷的演示”的程序.n);/程序解說printf(”n本程序將演示生成一個圖,并對它進行遍歷.n);printf。輸入圖的頂點數和弧數:n格式:頂點數,弧數;例如:5,4n”);printf(接著輸入各邊(弧尾,弧頭):n例如:5,3n3,1n1,2n2,4n”);printf。程序會生成一個圖,并對它進行深度和廣度遍歷.n);printf(深度遍歷:1-2-4-3-5n廣度遍歷:1-2-3-4-5nH);/whi
34、le(j!=N&j!=n)printf(”n請輸入頂點數和弧數:”);scanf(d,%d”,&G.vexnum,&Garcnum);/輸入圖的頂點數和弧數CreateGraph(G);/生成鄰接表結構的圖DFSTraverse(G);/深度優先搜索遍歷圖BFSTraverse(G);/廣度優先搜索遍歷圖printf(”圖遍歷完畢,繼續進行嗎?(Y/N)”);scanf(n%c,&j);)voidCreateGraph(Graph&G)構造鄰接表結構的圖Ginti;intstart,end;ArcNode*s;for(i=1;i=G.vexnum;i+)G.AdjListi=NULL;/初始化指針數組for(i=1;inextarc=G.AdjListstart;/插入到鄰接表中s-adjvex=end;G.AdjListstart=s;s=(ArcNode*)malloc(sizeof(ArcNode);s-nextarc=G.AdjListend;s-adjvex=start;G.AdjListend=s;voidDFSTraverse(GraphG)深度優先遍歷圖Ginti;printf(深度優先遍歷:”);/訪問標志數組初始化for(i=1;i=G.vexnum;i+)visitedi=False;for(i=1;inJ);for(w=FirstAdj
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 備戰2024年籃球裁判員考試的高效技巧 試題及答案
- 2025年新疆高三三模高考英語試卷試題及答案詳解
- 籃球裁判員的職業道德試題及答案
- 2024年種子繁育員考生的心理建設試題及答案
- 2024年足球裁判員的國際標準試題及答案
- 2024年模具設計師資格認證考試考前準備清單試題及答案
- 2024年游泳救生員競技考試的試題及答案
- 農業植保員考試難點與試題及答案對策
- 國際貿易學試題(含答案)
- 游泳救生員獨立工作能力試題及答案
- 雪絨花(簡譜)
- 水印輥安裝使用指南
- 基坑支護監理質量評估報告
- 東風電路圖Word版
- 樓板裂縫鑒定報告(范本)
- PANTONE潘通色卡C卡
- 特殊過程及關鍵工序界定(共32頁)
- V帶輪設計說明書
- 電路圖與實物圖互畫練習一二
- 京九鐵路線南昌段隧道整治施工組織設計
- 拼音表(聲母、帶聲調的韻母和整體認讀音節)
評論
0/150
提交評論