航空訂票系統(tǒng) 數(shù)據(jù)結(jié)構(gòu)程序設(shè)計實驗報告3_第1頁
航空訂票系統(tǒng) 數(shù)據(jù)結(jié)構(gòu)程序設(shè)計實驗報告3_第2頁
航空訂票系統(tǒng) 數(shù)據(jù)結(jié)構(gòu)程序設(shè)計實驗報告3_第3頁
航空訂票系統(tǒng) 數(shù)據(jù)結(jié)構(gòu)程序設(shè)計實驗報告3_第4頁
航空訂票系統(tǒng) 數(shù)據(jù)結(jié)構(gòu)程序設(shè)計實驗報告3_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實 驗 報 告課程名稱 數(shù)據(jù)結(jié)構(gòu)綜合設(shè)計實驗 實驗項目 航空訂票系統(tǒng) 系 別_ _計算機(jī)學(xué)院 _ _專 業(yè)_ 網(wǎng)絡(luò)工程 _班級/學(xué)號_網(wǎng)工1202/2012011411_學(xué)生姓名 _王宇涵_實驗日期 _2014年6月6日 成 績 _ 指導(dǎo)教師 黃改娟 田英愛 (一) 設(shè)計目的:假定民航機(jī)場共有n個航班,每個航班有一航班號、確定的航線(起始站、終點站)、確定的飛行時間(星期幾)和一定的成員訂額。設(shè)計一飛機(jī)訂票系統(tǒng),使之能提供下列服務(wù):1、航班信息錄入功能(航班信息用文件保存) 包括航班號、起始站、重點站、機(jī)票數(shù)等;2、航班信息瀏覽功能3、按航班號排序4、查詢航線:按航班號查詢5、承辦訂票和退票業(yè)

2、務(wù)(可選項)(二) 總體設(shè)計:編寫一個飛機(jī)訂票系統(tǒng)的程序,使該系統(tǒng)能夠?qū)崿F(xiàn)對航班信息的錄入、瀏覽、排序、查詢以及訂票、退票的功能。根據(jù)題目要求,首先要制作一個主菜單顯示出各個操作的提示可供用戶選擇,進(jìn)而一步步地深入操作。根據(jù)主菜單的內(nèi)容再進(jìn)一步編制具體操作的函數(shù),各個功能均用專門編制的函數(shù)來完成。這就是看到題目后的最初的思路。在這附上總體模塊設(shè)計圖:因為飛機(jī)訂票系統(tǒng)含有各航班的各項信息,如航班號、航線、飛行時間、機(jī)票數(shù)目等必要信息,所以就決定用剛學(xué)不久的結(jié)構(gòu)體數(shù)組來存放航班的各項信息,根據(jù)題目要求定義如下結(jié)構(gòu)體類型:頭文件包含、全局變量定義和結(jié)構(gòu)體定義源代碼:#include<stdio

3、.h>/標(biāo)準(zhǔn)輸入、輸出頭文件#include<string.h>/包含字符串函數(shù)處理頭文件#include<process.h>/包含access函數(shù)的頭文件#define N 1000 /定義最多的航班數(shù)#define PRINT "%dtt%stt%stt星期%stt%dn ",si.num,si.start,si.over,si.time,si.count /宏定義輸出格式struct air /定義結(jié)構(gòu)體數(shù)組 int num;/定義航班號 char start20;/航班起始站 char over20;/航班終點站 char time1

4、0;/飛行時間 int count;/機(jī)票數(shù)量sN;int i,m=0;/定義全局變量,記錄下航班信息的數(shù)量char ii10;/用來選擇是否繼續(xù)的變量以上就是我的總體設(shè)計思路。(三) 詳細(xì)設(shè)計:在本次的課程設(shè)計中我負(fù)責(zé)編制的是初始化、建立數(shù)據(jù)文件、數(shù)據(jù)文件讀取、數(shù)據(jù)文件保存、增加航班信息、訂票、退票業(yè)務(wù)函數(shù)的編寫。以下是我的負(fù)責(zé)部分的詳細(xì)設(shè)計內(nèi)容:1) 定義系統(tǒng)初始化函數(shù)數(shù)據(jù)文件是否存在輸入航班信息并建立新數(shù)據(jù)文件保存下來從已有的數(shù)據(jù)文件讀取已有的航班信息Y初始化結(jié)束N模塊功能:設(shè)立一個初始化函數(shù)來得到航班信息。具體設(shè)計是第一次運行程序時自動生成保存航班信息的文件,并輸入初始航班信息,待第二

5、次開始就可以直接讀取該文件獲得已有的航班信息并可直接使用。運用了access函數(shù)判斷文件是否存在。該函數(shù)源代碼為:void chushihua()/初始化函數(shù)if(access("hangban.dat",0)build();elseread();2) 定義建立新數(shù)據(jù)文件的函數(shù)系統(tǒng)初始化后,沒有尋找到數(shù)據(jù)文件,則進(jìn)行新建數(shù)據(jù)文件,此函數(shù)的作用就是進(jìn)行新建文件數(shù)據(jù)的錄入。運用到了文件指針的定義FILE *fp,文件的打開fopen和關(guān)閉fclose、成塊讀寫函數(shù)中的fwrite;運用for循環(huán)進(jìn)行各組數(shù)據(jù)的輸入,用m+記錄下輸入的航班數(shù)量,并運用if語句判斷是否輸入下一條航班

6、信息,若不繼續(xù)則返回主界面。該函數(shù)的源代碼為:3) 定義讀取文件內(nèi)航班信息的函數(shù)系統(tǒng)初始化之后,若原始數(shù)據(jù)文件存在,則進(jìn)行文件內(nèi)航班信息的讀取,以供接下來程序中的各個函數(shù)來使用。在該函數(shù)中同樣運用到了文件指針FILE *fp、文件的打開fopen和關(guān)閉fclose、成塊讀寫函數(shù)中的fread、文件結(jié)束檢測函數(shù)feof同時配合while語句控制文件的讀??;m+記錄下讀取到的航班數(shù)量等。4) 定義保存函數(shù)因為在飛機(jī)訂票系統(tǒng)中涉及到飛機(jī)的訂票和退票業(yè)務(wù),還有按航班號的排序功能,所以我就定義了這個保存函數(shù)來保存下每次運行系統(tǒng)后對整個訂票系統(tǒng)涉及到的資料的修改。為了簡便程序,我就準(zhǔn)備將此函數(shù)放在整個系統(tǒng)

7、得推出選項中,這樣就只在每次退出系統(tǒng)的時候進(jìn)行一次保存,將此次對文件修改的所有新信息都一次保存下來。這樣就實現(xiàn)了整個系統(tǒng)運行時進(jìn)行一次讀取,推出時一次保存的設(shè)計,大大簡便了文件的調(diào)用和讀取。保存函數(shù)運用到的知識點與讀取函數(shù)大致相同。此函數(shù)的源代碼為:有關(guān)文件讀取、寫入和保存的函數(shù)定義完了就開始設(shè)計與題目要求直接相關(guān)的函數(shù)了。5) 定義訂票業(yè)務(wù)函數(shù)在這個函數(shù)中首先調(diào)用了search函數(shù)查找需要訂票的航班。運用if語句實現(xiàn)訂票時的多種情況:訂票數(shù)輸入不正確、飛機(jī)票數(shù)不足等情況。訂票成功時運用si.count=si.count-n;將已被訂的機(jī)票數(shù)減去,以顯示新的即時航班信息6) 定義退票業(yè)務(wù)函數(shù):

8、與訂票函數(shù)相類似,只做稍稍修改就行退票成功是用si.count=si.count+n; 將航班的剩余票數(shù)加上去以顯示即時航班信息。7) 定義主函數(shù)主函數(shù)主要就是提供系統(tǒng)的主菜單界面供用戶選擇。運行主函數(shù)時首先調(diào)用chushihua函數(shù)判定數(shù)據(jù)文件是否存在、是否要進(jìn)行初始航班信息輸入;若已存在則進(jìn)入主界面菜單供用戶選擇,運用swich語句對用戶的不同選擇來調(diào)用各功能的函數(shù)。并用dowhile語句循環(huán)實現(xiàn)能夠讓用戶進(jìn)行多次的選擇。程序:#include<dos.h>#include <stdio.h>#include <stdlib.h>#include <

9、;string.h>#define N 20#define Q 40 /*定義數(shù)據(jù)結(jié)構(gòu)*/*乘客信息*/typedef struct char number10;/*編號*/ char id20; /*證件號*/ char name10; /*姓名*/ int count; /*訂票數(shù)*/ char flightname10;/*乘坐航班號*/GUEST; /*航班信息*/typedef structchar planenumber10;/*航班號*/ char Take_off_city20;/*起飛城市*/ char Arrived_in_city20;/*抵達(dá)城市*/ char t

10、akeoff_time20;/*起飛時間*/ char Landing_time20;/*降落時間*/ int shipping; /*艙位數(shù)*/ char price5; /*票價*/ char discount5; /*折扣*/ GUEST guest20; int sit;FLY;/*菜單函數(shù),函數(shù)返回值為整數(shù),代表所選的菜單項*/menu_select() int c; printf("按任意鍵返回主菜單n");/*提示壓任意鍵繼續(xù)*/ getch(); /*讀入任意字符*/ printf(" Welcome tonn"); printf(&qu

11、ot; Tickets Booking Systemnn"); printf(" *MENU*nn"); printf(" 0. 輸入航班信息n"); printf(" 1. 列出航班的信息n"); printf(" 2. 按航班號查詢航班信息n"); printf(" 3. 按城市來查詢航班n"); printf(" 4. 訂票程序n"); printf(" 5. 退票系統(tǒng)n"); printf(" 6. 修改飛機(jī)航班的信息n&quo

12、t;); printf(" 7. 保存文件n"); printf(" 8. 讀取和下載文件n"); printf(" 9. 退出n"); printf(" *nn"); do printf("n 輸入你的選擇項(09):"); /*提示輸入選項*/ scanf("%d",&c); /*輸入選擇項*/ while(c<0|c>9); /*選擇項不在9之間重輸*/ return c; /*返回選擇項,主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/*輸入函數(shù)*/int ent

13、er(FLY t) int i,k,n,m,w,j; char *s; printf("輸入航線總數(shù)(n<=40):");/*輸入航線總數(shù)*/ scanf("%d",&n); while(n>40|n<0) printf("輸入錯誤!再次輸入(0<n<=40):");/*輸入航線總數(shù)*/ scanf("%d",&n); printf(" 輸入航班的信息nn");/*提示信息*/ printf("航班號起飛城市 降落城市 出發(fā)時間 降落時間

14、剩下的座位 價格 折扣n"); printf("-n"); for(i=0;i<n;i+) scanf("%s",ti.planenumber);/*輸入姓名*/ scanf("%s",ti.Take_off_city);/*輸入起飛城市*/ scanf("%s",ti.Arrived_in_city);/*輸入降落城市*/ scanf("%s",ti.takeoff_time);/*輸入起飛時間*/ scanf("%s",ti.Landing_time);/

15、*輸入降落時間*/ scanf("%d",&ti.shipping);/*輸入艙位數(shù)*/ scanf("%s",ti.price);/*輸入票價*/ scanf("%s",ti.discount);/*輸入折扣*/ printf("-n"); for(i=0;i<n;i+)ti.sit=0; return n; /*返回記錄條數(shù)*/*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)*/void list(FLY t,int n) int i; printf("航班號起飛城市 降落城市 出發(fā)時間 降落時間

16、剩下的座位 價格 折扣n"); printf("-n"); for(i=0;i<n;i+) printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount); printf(" *end*n");/*按航班號查找記錄*/void search1(FLY t,i

17、nt n) char s20; /*保存待查找航班名字符串*/ int i; printf("輸入你想查找的航班名:"); scanf("%s",s); /*輸入待查找航班名*/ for(i=0;i<n;i+)/*從第一條記錄開始,直到最后一條*/ if(strcmp(s,ti.planenumber)=0) /*記錄中的航班名和待比較的是否相等*/ break; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/ if(i>n-1) /*如果整數(shù)i值大于n-1,說明沒找到*/ printf("沒有找到n"); else

18、printf("航班號起飛城市 降落城市 出發(fā)時間 降落時間 剩下的座位 價格 折扣n"); /*顯示記錄*/ printf("-n"); printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount); /*按起降城市查找記錄*/void search2(FLY t,in

19、t n) char s120; char s220; int i; printf("輸入起飛城市名稱:"); scanf("%s",s1); /*輸入起飛城市名*/ printf("輸入降落城市名稱:"); scanf("%s",s2); /*輸入降落城市名*/ for(i=0;i<n;i+)/*從第一條記錄開始,直到最后一條*/ if(strcmp(s1,ti.Take_off_city)=0)&&(strcmp(s2,ti.Arrived_in_city)=0) /*記錄中的城市和待比較的

20、是否相等*/ break; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/ if(i>n-1) /*如果整數(shù)i值大于n-1,說明沒找到*/ printf("沒有找到n"); else printf("航班號起飛城市 降落城市 出發(fā)時間 降落時間 剩下的座位 價格 折扣n"); /*找到,顯示記錄*/ printf("-n"); printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived

21、_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount); /*訂票*/void book(FLY t,int n) char s20,number110,name110,id120,flightname110; int i,j=0,m,k,count1; printf("輸入你想預(yù)訂的票數(shù):"); scanf("%d",&m); printf("號碼 姓名 證件號 訂的票數(shù) 航班號n"); /*提示信息*/ printf("

22、-n"); for(k=0;k<m;k+) scanf("%s",number1); scanf("%s",name1);/*輸入訂票客戶姓名*/ scanf("%s",id1);/*輸入證件號*/ scanf("%d",&count1);/*輸入訂票票數(shù)*/ scanf("%s",flightname1);/*輸入航班號*/ for(i=0;i<n;i+)/*從第一條記錄開始,直到最后一條*/ if(strcmp(flightname1,ti.planenumbe

23、r)=0) /*記錄中的航班名和待比較的是否相等*/ j=ti.sit; strcpy(ti.guestj.number,number1); strcpy(,name1); strcpy(ti.guestj.id,id1); ti.guestj.count=count1; strcpy(ti.guestj.flightname,flightname1); ti.shipping=ti.shipping-count1; ti.sit+; break; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/ if(i>n-1) /*如果整數(shù)i值大于n-1,說明沒找到*

24、/ printf("對不起!沒有此航班n"); m=m+2; k+; /*退票*/void quit(FLY t,int n) char s120,s220; /*保存待查找航班名和證件號字符串*/ int i,k,j,h,l,ch; printf("請輸入你想退訂的航班號:"); scanf("%s",s1); /*輸入待查找航班名*/ printf("請輸入你的證件號:"); scanf("%s",s2); /*輸入待查找證件號*/ printf("號碼 姓名 證件號 訂的票數(shù) 航

25、班號n"); /*顯示提示*/ printf("-n"); for(i=0;i<n;i+)/*從第一條記錄開始,直到最后一條*/ for(j=0;j<ti.sit;j+) if(strcmp(s1,ti.guestj.flightname)=0)&&(strcmp(s2,ti.guestj.id)=0) printf("%-11s%-16s%-16s%-14d%-10sn",ti.guestj.number,,ti.guestj.id,ti.guestj.count,ti.guestj.f

26、lightname); ti.shipping=ti.shipping+ti.guestj.count; l=j; h=i; break; i=h; if(i>n-1) /*如果整數(shù)i值大于n-1,說明沒找到*/ printf("沒有找到n"); else printf("你是否確認(rèn)刪除(1/0)n"); /*確認(rèn)是否要刪除*/ scanf("%d",&ch); /*輸入一個整數(shù)或*/ if(ch=1) /*如果確認(rèn)刪除整數(shù)為*/ for(k=l+1;k<ti.sit;k+) strcpy(ti.guestk-1.

27、number,ti.guestk.number); /*將后一條記錄的姓名拷貝到前一條*/ strcpy(,); strcpy(ti.guestk-1.id,ti.guestk.id); ti.guestk-1.count=ti.guestk.count; strcpy(ti.guestk-1.flightname,ti.guestk.flightname); ti.sit-; printf("退票成功!n");/*提示退票成功*/ /*修改航班信息*/void channge(FLY t,int n) char

28、s20; /*要刪除記錄的姓名*/ int i,j; printf("請輸入你要修改的航班號:"); /*提示信息*/ scanf("%s",s);/*輸入航班名*/ for(i=0;i<n;i+)/*從第一條記錄開始,直到最后一條*/ if(strcmp(s,ti.planenumber)=0) /*記錄中的航班名和待比較的是否相等*/ break; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/ if(i>n-1) /*如果整數(shù)i值大于n-1,說明沒找到*/ printf("沒有找到n"); else printf

29、("航班號起飛城市 降落城市 出發(fā)時間 降落時間 剩下的座位 價格 折扣n"); /*找到,顯示原先記錄*/ printf("-n"); printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount); printf("please input the new i

30、nformation:n"); scanf("%s",ti.planenumber);/*輸入航班名*/ scanf("%s",ti.Take_off_city);/*輸入起始城市*/ scanf("%s",ti.Arrived_in_city);/*輸入終點城市*/ scanf("%s",ti.takeoff_time);/*輸入起飛時間*/ scanf("%s",ti.Landing_time);/*輸入降落時間*/ scanf("%d",ti.shipping

31、);/*輸入座位號*/ scanf("%s",ti.price);/*輸入票價*/ scanf("%s",ti.discount);/*輸入折扣*/ /*保存資料*/void save(FLY t,int n) int i,j; FILE *fp; /*指向文件的指針*/ if(fp=fopen("record1.txt","wb")=NULL) /*打開文件,并判斷打開是否正常*/ printf("can not open filen");/*沒打開*/ exit(1); /*退出*/ pri

32、ntf("n保存文件n"); /*輸出提示信息*/ fprintf(fp,"%d",n); /*將記錄數(shù)寫入文件*/ fprintf(fp,"rn"); /*將換行符號寫入文件*/ for(i=0;i<n;i+) fprintf(fp,"%s %s %s %s %s %d %s %s",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discou

33、nt); fprintf(fp,"rn"); /*將換行符號寫入文件*/ fprintf(fp,"%d",ti.sit); /*將記錄數(shù)寫入文件*/ fprintf(fp,"rn"); /*將換行符號寫入文件*/ for(j=0;j<ti.sit;j+) fprintf(fp,"%s %s %s %d %s",ti.guestj.number,,ti.guestj.id,ti.guestj.count,ti.guestj.flightname);/*格式寫入記錄*/ fprintf

34、(fp,"rn"); /*將換行符號寫入文件*/ fclose(fp);/*關(guān)閉文件*/ printf("*恭喜!保存成功*n"); /*顯示保存成功*/*讀入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組*/int load(FLY t) int i,n,j; FILE *fp; /*指向文件的指針*/ if(fp=fopen("record1.txt","rb")=NULL)/*打開文件*/ printf("不能打開n"); /*不能打開*/ exit(1); /*退出*/ fscanf(fp,"%d",&n); /*讀入記錄數(shù)*/ for(i=0;i<n;i+)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論