C語言課程設(shè)計――飛機(jī)訂票系統(tǒng)說明書(第一個人)_第1頁
C語言課程設(shè)計――飛機(jī)訂票系統(tǒng)說明書(第一個人)_第2頁
C語言課程設(shè)計――飛機(jī)訂票系統(tǒng)說明書(第一個人)_第3頁
C語言課程設(shè)計――飛機(jī)訂票系統(tǒng)說明書(第一個人)_第4頁
C語言課程設(shè)計――飛機(jī)訂票系統(tǒng)說明書(第一個人)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目 錄設(shè)計目的1總體設(shè)計1詳細(xì)設(shè)計3調(diào)試與測試5核心源程序清單和執(zhí)行結(jié)果5源程序代碼5截圖13仍存在的問題15心得體會15設(shè)計進(jìn)度表16參考文獻(xiàn)17一、 正文(一) 設(shè)計目的:假定民航機(jī)場共有n個航班,每個航班有一航班號、確定的航線(起始站、終點站)、確定的飛行時間(星期幾)和一定的成員訂額。設(shè)計一飛機(jī)訂票系統(tǒng),使之能提供下列服務(wù):1、航班信息錄入功能(航班信息用文件保存) 包括航班號、起始站、重點站、機(jī)票數(shù)等;2、航班信息瀏覽功能3、按航班號排序4、查詢航線:按航班號查詢5、承辦訂票和退票業(yè)務(wù)(可選項)(二) 總體設(shè)計:編寫一個飛機(jī)訂票系統(tǒng)的程序,使該系統(tǒng)能夠?qū)崿F(xiàn)對航班信息的錄入、瀏覽、排序

2、、查詢以及訂票、退票的功能。根據(jù)題目要求,首先要制作一個主菜單顯示出各個操作的提示可供用戶選擇,進(jìn)而一步步地深入操作。根據(jù)主菜單的內(nèi)容再進(jìn)一步編制具體操作的函數(shù),各個功能均用專門編制的函數(shù)來完成。這就是看到題目后的最初的思路。在這附上總體模塊設(shè)計圖:飛機(jī)訂票系統(tǒng)系統(tǒng)初始化增加航班信息航班信息瀏覽航班排序訂票業(yè)務(wù)退票業(yè)務(wù)建立新數(shù)據(jù)文件從已有的數(shù)據(jù)文件讀取按航班號從小到大排序按航班號從大到小排序查找航班信息按航班號查找退出并保存因為飛機(jī)訂票系統(tǒng)含有各航班的各項信息,如航班號、航線、飛行時間、機(jī)票數(shù)目等必要信息,所以就決定用剛學(xué)不久的結(jié)構(gòu)體數(shù)組來存放航班的各項信息,根據(jù)題目要求定義如下結(jié)構(gòu)體類型:頭

3、文件包含、全局變量定義和結(jié)構(gòu)體定義源代碼:#include/標(biāo)準(zhǔn)輸入、輸出頭文件#include/包含字符串函數(shù)處理頭文件#include/包含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 time10;/飛行時間 int count;/機(jī)票數(shù)

4、量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è)立一個初始化函數(shù)來得到航班信息。具體設(shè)計是第一次運(yùn)數(shù)據(jù)文件是否存在輸入航班信息并建立新數(shù)據(jù)文件保存下來從已有的數(shù)據(jù)文件讀取已有的航班信息Y初始化結(jié)束N行程序時自動生成保存航班信息的文件,并輸入初始航班信息,待第二次開始就可以直接讀取該文件獲得已有的航班信息

5、并可直接使用。運(yùn)用了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ù)的錄入。運(yùn)用到了文件指針的定義FILE *fp,文件的打開fopen和關(guān)閉fclose、成塊讀寫函數(shù)中的fwrite;運(yùn)用for循環(huán)進(jìn)行各組數(shù)據(jù)的輸入,用m+記錄下輸入的航班數(shù)量,并運(yùn)用if語句判斷是否輸入下一條航班信息,若不繼續(xù)則返回主界面。該函數(shù)的源代碼為:3) 定義讀取文件內(nèi)航

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

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

8、.count+n; 將航班的剩余票數(shù)加上去以顯示即時航班信息。7) 定義主函數(shù)主函數(shù)主要就是提供系統(tǒng)的主菜單界面供用戶選擇。運(yùn)行主函數(shù)時首先調(diào)用chushihua函數(shù)判定數(shù)據(jù)文件是否存在、是否要進(jìn)行初始航班信息輸入;若已存在則進(jìn)入主界面菜單供用戶選擇,運(yùn)用swich語句對用戶的不同選擇來調(diào)用各功能的函數(shù)。并用dowhile語句循環(huán)實現(xiàn)能夠讓用戶進(jìn)行多次的選擇。(四) 調(diào)試與測試調(diào)試過程中曾經(jīng)遇到過一些問題,但是也不多,遇到過:訂票或退票的時候不能將剩余的票數(shù)加上和減去。后來經(jīng)過詳細(xì)的檢查與對照課本知識點找出了相應(yīng)的錯誤點,經(jīng)過修改加入票數(shù)加減語句,再經(jīng)過與保存函數(shù)的配合后實現(xiàn)了題目要求的功能。

9、調(diào)試成功。(五) 核心源程序清單和執(zhí)行結(jié)果:a) 源程序清單:#include/標(biāo)準(zhǔn)輸入、輸出頭文件#include/包含字符串函數(shù)處理頭文件#include/包含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 time10;/飛行時間int count;/機(jī)

10、票數(shù)量sN;int i,m=0;/定義全局變量char ii10;void add();/函數(shù)聲明增加航班信息函數(shù)void print(); /顯示航班信息void search();/查找航班信息void dingpiao();/訂票業(yè)務(wù)void tuipiao();/退票void read();/讀取文件void save();/保存文件void output();/輸出格式void paixu();/航班排序void chushihua();/系統(tǒng)初始化void build();/建立數(shù)據(jù)文件void paixu1();/按航班號從小到大排序void paixu2();/從大到小void

11、 main()/主函數(shù)int j; chushihua();/系統(tǒng)初始化判斷是否存在原始數(shù)據(jù)文件printf( O(_)O歡迎使用天鑫飛機(jī)訂票系統(tǒng)(*_*)n);/打印出系統(tǒng)主界面do printf(= ); printf(1.增加航班信息n t2.瀏覽航班信息n tt3.查找航班信息(按航班號)tt(_)n ttt4.航班排序(按航班號)n tttt5.訂票業(yè)務(wù)n to()ottt6.退票業(yè)務(wù)n tttttt0.退出n);printf(= ); printf(請在0-6中選擇以回車鍵結(jié)束: );scanf(%d,&j);switch(j)case 1: add();/調(diào)用增加航班函數(shù)brea

12、k;case 2:print();/調(diào)用顯示模塊break;case 3:search();/調(diào)用查找模塊break;case 4:paixu();/調(diào)用排序函數(shù)break;case 5:dingpiao();/調(diào)用訂票模塊break;case 6:tuipiao();/調(diào)用退票模塊break; case 0:/退出系統(tǒng)save();printf(謝謝使用,再見! );break;while(j!=0);/判斷是否調(diào)用其他函數(shù) void chushihua()/定義系統(tǒng)初始化函數(shù)if(access(hangban.dat,0)build();elseread();void build()/定義

13、建立數(shù)據(jù)文件函數(shù)FILE *fp;/定義文件指針if(fp=fopen(hangban.dat,wb)=NULL)/打開文件并判定是否出錯 printf(創(chuàng)建文件失敗! );/打印出錯提示getchar();return;printf(請依次輸入航班信息(以回車鍵結(jié)束):n); /打印提示信息printf(- n);for(i=0;iN;i+)printf(請輸入航班號: ); scanf(%d,&si.num);/輸入航班號printf(請輸入起始站: );scanf(%s,si.start);/輸入起始站printf(請輸入終點站: );scanf(%s,si.over);/輸入終點站pr

14、intf(請輸入時間(星期幾): );scanf(%s,si.time);/輸入時間printf(請輸入機(jī)票數(shù): );scanf(%d,&si.count);/輸入機(jī)票數(shù)fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完畢,是否繼續(xù)添加?請鍵入y或n以回車鍵結(jié)束:);scanf(%s,ii);if(strcmp(ii,y)!=0)/判斷是否繼續(xù)添加航班信息fclose(fp);/關(guān)閉文件return;void read()/定義讀取文件函數(shù)FILE *fp;if(fp=fopen(hangban.dat,r)=NULL)printf(創(chuàng)建文件失敗

15、! );getchar();return;i=0;while(!feof(fp)fread(&si,sizeof(struct air),1,fp);/逐塊讀取數(shù)據(jù)i+;m+;/計算存在航班數(shù)m-;fclose(fp);void save()/定義保存函數(shù)FILE *fp;if(fp=fopen(hangban.dat,wb)=NULL) printf(創(chuàng)建文件失敗! );getchar();return;for(i=0;im;i+)/逐塊保存數(shù)據(jù)fwrite(&si,sizeof(struct air),1,fp);fclose(fp);void add()/定義增加航班信息函數(shù)doprin

16、tf(請依次輸入您要增加的航班信息(以回車鍵結(jié)束): n); /打印提示信息printf(- n);printf(請輸入航班號: ); scanf(%d,&sm.num);/讀取航班號printf(請輸入起始站: );scanf(%s,sm.start);/讀取起始站printf(請輸入終點站: );scanf(%s,sm.over);/讀取終點站printf(請輸入時間: );scanf(%s,sm.time);/讀取時間printf(請輸入機(jī)票數(shù): );scanf(%d,&sm.count);/讀取機(jī)票數(shù)m+;printf(添加完畢,是否繼續(xù)添加?請鍵入y或n以回車鍵結(jié)束:);scanf(

17、%s,ii);while(!strcmp(ii,y);/判斷是否繼續(xù)添加void output()/定義輸出格式函數(shù)printf(航班號tt起始站tt終點站tt時間tt機(jī)票數(shù)n);/信息標(biāo)題 for(i=0;im;i+)printf(PRINT);/打印出信息void print()/定義顯示航班信息函數(shù)printf(n目前我們有如下航班:n);output();/調(diào)用輸出格式函數(shù)printf(n請按回車鍵返回上層菜單 );getchar();getchar(); void search()/定義查詢函數(shù)int n;doprintf(n請輸入航班號: );scanf(%d,&n);/輸入查詢的

18、航班號for(i=0;im;i+) if(si.num=n)/按航班號判定輸出條件 printf(n您所查找的航班信息為:n );printf(航班號tt起始站tt終點站tt時間tt機(jī)票數(shù) nn);printf(PRINT);/顯示信息 printf(n查詢完畢,按回車鍵繼續(xù));getchar();getchar();return;printf(n對不起,沒有您需要的信息!n );printf(是否重新查找?請鍵入y或n以回車鍵結(jié)束 );scanf(%s,ii);while(!strcmp(ii,y);/判定是否重新查找 void dingpiao()/定義訂票業(yè)務(wù)函數(shù)int n;char a

19、10=y;dosearch();/調(diào)用查詢模塊if(!strcmp(ii,n)printf(對不起!沒有找到您所需要的航班,所以不能訂票。n);/未查找到所需航班printf(n請按回車鍵返回上層菜單 );getchar();getchar();strcpy(ii,n);break;doprintf(請輸入您要訂的機(jī)票數(shù)(以回車鍵結(jié)束): );scanf(%d,&n);/輸入所訂機(jī)票數(shù)if(n=n)/判定機(jī)票數(shù)是否大于等于訂票數(shù)si.count=si.count-n;printf(訂票成功! );break;else if(si.countn)/判定機(jī)票數(shù)是否小于訂票數(shù) printf(對不起,

20、你所選擇的航班只剩 %d張機(jī)票n, si.count);printf(是否需要重新輸入機(jī)票數(shù)?請輸入y或n以回車鍵結(jié)束: );/判定是否重新輸入訂票數(shù)scanf(%s,a);while(!strcmp(a,y);printf(是否需要訂其他航班的機(jī)票?請輸入y或n以回車鍵結(jié)束: );scanf(%s,a);while(!strcmp(a,y);/判定是否繼續(xù)訂票void tuipiao()/定義退票函數(shù)int n;char a10;dosearch();/調(diào)用查詢函數(shù)if(!strcmp(ii,n)printf(對不起!沒有找到您所需要的航班,所以不能退票。n);printf(n請按回車鍵返回

21、上層菜單 );getchar();getchar();strcpy(ii,n);break;printf(請輸入您要退的機(jī)票數(shù)目: );scanf(%d,&n);/輸入所退票數(shù)if(n=0)/判定票數(shù)是否有效printf(輸入錯誤!至少需退1張機(jī)票。 );else si.count=si.count+n;printf(退票成功! );printf(是否繼續(xù)? 請鍵入y或n以回車鍵結(jié)束: );/判定是否繼續(xù)退票scanf(%s,a);while(!strcmp(a,y);/判定并跳出循環(huán) void paixu()/定義排序函數(shù)int n;printf(n* ); printf(1.按航班號從小到

22、大排序n t2.按航班號從大到小排序n);printf(* ); printf(請在1-2中選擇以回車鍵結(jié)束: );scanf(%d,&n);/輸入排序方式switch(n)case 1:paixu1();/調(diào)用從小到大排序函數(shù)break;case 2:paixu2();/調(diào)用從大到小排序函數(shù)break;printf(排序后的航班信息為:n);output();/顯示排序后航班信息printf(n請按回車鍵返回上層菜單 ); getchar(); getchar();void paixu1()/定義從小到大排序函數(shù)int k,j;struct air t;for(i=0;im;i+)/選擇法排

23、序k=i;for(j=i+1;jsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;void paixu2()/定義從大到小排序函數(shù)int k,j;struct air t;for(i=0;im;i+)k=i;for(j=i+1;jm;j+)if(sk.numsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;以上即為我們的源程序清單。b) 執(zhí)行結(jié)果:程序最終運(yùn)行情況如所貼圖表。1) 第一次運(yùn)行程序(輸入初始數(shù)據(jù))界面提示輸入原始數(shù)據(jù):請輸入航班號請輸入起始站請輸入終點站請輸入飛行時間請輸入機(jī)票數(shù)。我按照提示一次輸入了4個航班信息后按提示輸入“n”則不再繼續(xù)輸入,系統(tǒng)顯示出了主菜單界面。接著按0退出程序,顯示“謝謝使用,再見?!眻D表 1主菜單界面2) 第二次運(yùn)行程序(進(jìn)行航班信息的瀏覽)運(yùn)行程序就不再顯示輸入航班信息了,而是直接顯示出了主菜單界面(如圖表1)。在提示中輸入“2” 顯示航班信息。輸出如下航班信息(如圖表2),確實顯示出輸入的4個航班信息。

溫馨提示

  • 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

提交評論