




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 c語言程序設計 課程設計題目: 飛機訂票系統(tǒng) 院(系): 專業(yè)班級: 學 號: 學生姓名: 指導教師: 教師職稱: 起止時間: 課程設計(報告)任務及評語 學 號學生姓名專業(yè)班級程序設計(報告)題目飛機訂票系統(tǒng)程序設計(報告)任務程序設計的任務與要求:(1)掌握c語言編程的基礎知識。(2)較熟練地編寫c語言應用程序。(3)了解c語言的常用標準函數、編程技巧、異常處理。(5)聯系已學過的內容,鞏固所學的理論,增強獨立工作能力。(6)通過設計主要使學生有一個獨立編寫程序的過程,對理論學習及動手能力都有一個很大的提高。(7)通過本次設計,進一步培養(yǎng)學生熱愛專業(yè)的思想,同時對本專業(yè)綜合素質的提高起一
2、個積極的推動作用。課程設計過程中,要嚴格遵守實踐環(huán)節(jié)的時間安排,聽從指導教師的指導。正確地完成上述內容,記錄實習日記,規(guī)范完整地撰寫出課程設計報告。指導教師評語及成績成績: 指導教師簽字: 年 月 日目 錄第1章 課程設計的目的與要求11.1 課程設計目的11.2 課程設計的實驗環(huán)境11.3 課程設計的預備知識11.4 課程設計要求1第2章 課程設計內容22.1程序功能介紹22.2程序整體設計說明22.2.1設計思路22.2.2數據結構設計及用法說明32.2.3程序結構(流程圖)52.2.4各模塊的功能及程序說明52.2.5程序結果62.3程序源代碼及注釋7第3章 課程設計總結17參考資料 1
3、8第1章 課程設計的目的與要求1.1 課程設計目的本課程設計是計算機科學與技術專業(yè)重要的實踐性環(huán)節(jié)之一,是在學生學習完程序設計語言(c)課程后進行的一次全面的綜合練習。本課程設計的目的和任務: 1. 鞏固和加深學生對c語言課程的基本知識的理解和掌握 2. 掌握c語言編程和程序調試的基本技能 3. 利用c語言進行基本的軟件設計4. 掌握書寫程序設計說明文檔的能力5. 提高運用c語言解決實際問題的能力1.2 課程設計的實驗環(huán)境硬件要求能運行windows 2000/xp操作系統(tǒng)的微機系統(tǒng)。c語言程序設計及相應的開發(fā)環(huán)境。1.3 課程設計的預備知識熟悉c語言及c語言開發(fā)工具。1.4 課程設計要求1.
4、 分析課程設計題目的要求2. 寫出詳細設計說明3. 編寫程序代碼,調試程序使其能正確運行4. 設計完成的軟件要便于操作和使用5. 設計完成后提交課程設計報告第2章 課程設計內容2.1程序功能介紹本程序首先輸入機票信息,管理員在保存功能中通過密碼驗證輸入機票信息,可以對機票信息進行查詢;修改;刪除等功能。一般用戶可以使用訂票;顯示;退票等功能,在訂票時用戶輸入密碼在退票時通過驗證后成功退票。假定民航機場共有n個航班,每個航班有一航班號、確定的航線(起始站、終點站)、確定的飛行時間(星期幾)和一定的成員訂額。設計一個飛機訂票系統(tǒng),使之能提供下列服務:1、航班信息錄入功能(航班信息用文件保存) 包括
5、航班號、起始站、重點站、機票數等;2、航班信息瀏覽功能3、按航班號排序4、查詢航線:按航班號查詢5、承辦訂票和退票業(yè)務(可選項)2.2程序整體設計說明編寫一個飛機訂票系統(tǒng)的程序,使該系統(tǒng)能夠實現對航班信息的錄入、瀏覽、排序、查詢以及訂票、退票的功能。根據題目要求,首先要制作一個主菜單顯示出各個操作的提示可供用戶選擇,進而一步步地深入操作。根據主菜單的內容再進一步編制具體操作的函數,各個功能均用專門編制的函數來完成。因為飛機訂票系統(tǒng)含有各航班的各項信息,如航班號、航線、飛行時間、機票數目等必要信息,所以就決定用剛學不久的結構體數組來存放航班的各項信息,這就是看到題目后的最初的思路。2.2.1設計
6、思路本次設計需要編制初始化、建立數據文件、數據文件保存、增加航班信息、訂票、退票業(yè)務等內容。首先需要設立一個初始化函數來得到航班信息。具體設計是第一次運行程序時自動生成保存航班信息的文件,并輸入初始航班信息,待第二次開始就可以直接讀取該文件獲得已有的航班信息并可直接使用。運用了access函數判斷文件是否存在。系統(tǒng)初始化后,沒有尋找到數據文件,則進行新建數據文件,此函數的作用就是進行新建文件數據的錄入。運用到了文件指針的定義file *fp,文件的打開fopen和關閉fclose、成塊讀寫函數中的fwrite;運用for循環(huán)進行各組數據的輸入,用m+記錄下輸入的航班數量,并運用if語句判斷是否
7、輸入下一條航班信息,若不繼續(xù)則返回主界面。系統(tǒng)初始化之后,若原始數據文件存在,則進行文件內航班信息的讀取,以供接下來程序中的各個函數來使用。在該函數中同樣運用到了文件指針file *fp、文件的打開fopen和關閉fclose、成塊讀寫函數中的fread、文件結束檢測函數feof同時配合while語句控制文件的讀??;m+記錄下讀取到的航班數量等。因為在飛機訂票系統(tǒng)中涉及到飛機的訂票和退票業(yè)務,還有按航班號的排序功能,所以我就定義了這個保存函數來保存下每次運行系統(tǒng)后對整個訂票系統(tǒng)涉及到的資料的修改。為了簡便程序,我就準備將此函數放在整個系統(tǒng)得推出選項中,這樣就只在每次退出系統(tǒng)的時候進行一次保存,
8、將此次對文件修改的所有新信息都一次保存下來。這樣就實現了整個系統(tǒng)運行時進行一次讀取,推出時一次保存的設計,大大簡便了文件的調用和讀取。保存函數運用到的知識點與讀取函數大致相同。在這個函數中首先調用了search函數查找需要訂票的航班。運用if語句實現訂票時的多種情況:訂票數輸入不正確、飛機票數不足等情況。訂票成功時運用si.count=si.count-n;將已被訂的機票數減去,以顯示新的即時航班信息。與訂票函數相類似,只做稍稍修改就行退票成功是用si.count=si.count+n; 將航班的剩余票數加上去以顯示即時航班信息。2.2.2數據結構設計及用法說明 數據結構設計:因為飛機訂票系統(tǒng)
9、含有各航班的各項信息,如航班號、航線、飛行時間、機票數目等必要信息,所以就決定用剛學不久的結構體數組來存放航班的各項信息,根據題目要求定義如下結構體類型:#include /標準輸入、輸出頭文件/#include /包含字符串函數處理頭文件/#include /包含access函數的頭文件/#define n 1000 /定義最多的航班數/#define print %dtt%stt%stt星期%stt%dn ,si.num,si.start,si.over,si.time,si.count /宏定義輸出格式/struct air /定義結構體數組/int num; /定義航班號/char s
10、tart20; /航班起始站/char over20; /終點站/char time10; /飛行時間/int count; /機票數量/sn;int i,m=0; /定義全局變量,記錄下航班信息的數量/char i10; /*用來選擇是否繼續(xù)的變量*/用法說明:1、首先進入程序歡迎界面(對系統(tǒng)的說明,及程序分組名單)停留15s。再由程序主界面(按數字1-5 再回車)進入其他功能。2、輸入密碼(第一次設置密碼)機票信息管理,并選1進入機票信息錄入,選2瀏覽航班信息。選3進行查詢航班記錄。定票時應查詢所有的航班信息。3、輸入正確的航班號,并且輸入正確的個人信息。進入退票系統(tǒng)是否查詢所有機票信息。
11、選擇輸入信息輸入的方式并輸入。退票時的信息顯示然后確定。2.2.3程序結構(流程圖)建立新數據文件開始系統(tǒng)初始化增加航班信息航班信息瀏覽查找航班信息航班排序訂票業(yè)務退票業(yè)務退出并保存從已有的數據文件讀取按航班號查找由小到大或由大到小2.2.4各模塊的功能及程序說明1、保存模塊:含有機票信息的管理,對機票信息輸入,查詢,修改,刪除。2、訂票模塊:當有機票信息后可以訂票,訂票時輸入航班號(進入時有可以查詢所有機票信息)出現航班信息,確定訂票后輸入個人信息:姓名,性別,證件號,聯系電話,密碼(退票時用)。出現您的個人信息,確定后回車訂票結束。3、顯示模塊:含全部;航班號;出發(fā)地;目的地等方式查詢所有
12、機票信息。4、退票模塊:當輸入姓名或證件號后會顯示您定的航班信息,再要求輸入密碼,當密碼正確時會顯示您的個人信息,回車再是否確定退票。5 查詢模塊:(輸入管理密碼)輸入航班號,顯示航班信息 和所有乘客個人信息。6 排序模塊:當輸入航班信息時,會自動的按航班號從大到小排序。2.2.5程序結果 第一次運行程序(輸入初始數據) 圖表 1主菜單界面 第二次運行程序(進行航班信息的瀏覽) 圖表 2顯示航班信息 查詢航班信息圖表 3查詢航班信息 航班排序 圖表 4航班排序 訂票業(yè)務 圖表 5訂票業(yè)務1 票數不足情況2.3程序源代碼及注釋#include /標準輸入、輸出頭文件/#include /包含字符
13、串函數處理頭文件/#include /包含access函數的頭文件/#define n 1000 /定義最多的航班數/#define print %dtt%stt%stt星期%stt%dn ,si.num,si.start,si.over,si.time,si.count /宏定義輸出格式/struct air /定義結構體數組/int num; /定義航班號/char start20; /航班起始站/char over20; /終點站/char time10; /飛行時間/int count; /機票數量/sn;int i,m=0; /定義全局變量/char i 10;void add();
14、 /函數聲明增加航班信息函數/void print(); /顯示航班信息/void search(); /查找航班信息/void dingpiao(); /訂票業(yè)務/void tuipiao(); /退票/void read(); /讀取文件/void save(); /保存文件/void output(); /輸出格式/void paixu(); /航班排序/void chushihua(); /系統(tǒng)初始化/void build(); /建立數據文件/void paixu1(); /按航班號從小到大排序/void paixu2(); /從大到小/void main() /主函數/int j;
15、 chushihua(); /系統(tǒng)初始化判斷是否存在原始數據文件/printf( o(_)o歡迎使用天鑫飛機訂票系統(tǒng)(*_*)n);/打印出系統(tǒng)主界面/doprintf(= ); printf(1.增加航班信息nt2.瀏覽航班信息ntt3.查找航班信息(按航班號)tt(_)nttt4.航班排序(按航班號)ntttt5.訂票業(yè)務nto()ottt6.退票業(yè)務ntttttt0.退出n);printf(= ); printf(請在0-6中選擇以回車鍵結束: );scanf(%d,&j);switch(j)case 1: add(); /調用增加航班函數/break;case 2:print(); /
16、調用顯示模塊/break;case 3:search(); /調用查找模塊/break;case 4:paixu(); /調用排序函數/break;case 5:dingpiao(); /調用訂票模塊/break;case 6:tuipiao(); /調用退票模塊/break; case 0: /退出系統(tǒng)/save();printf(謝謝使用,再見! );break;while(j!=0); /判斷是否調用其他函數/void chushihua() /定義系統(tǒng)初始化函數/if(access(hangban.dat,0)build();elseread();void build() /定義建立數
17、據文件函數/file *fp; /定義文件指針/if(fp=fopen(hangban.dat,wb)=null) /打開文件并判定是否出錯/ printf(創(chuàng)建文件失敗! ); /打印出錯提示/getchar();return;printf(請依次輸入航班信息(以回車鍵結束):n); /打印提示信息/printf(- n);for(i=0;in;i+)printf(請輸入航班號: ); scanf(%d,&si.num); /輸入航班號/printf(請輸入起始站: );scanf(%s,si.start); /輸入起始站/printf(請輸入終點站: );scanf(%s,si.over)
18、; /輸入終點站/printf(請輸入時間(星期幾): );scanf(%s,si.time); /輸入時間/printf(請輸入機票數: );scanf(%d,&si.count); /輸入機票數/fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完畢,是否繼續(xù)添加?請鍵入y或n以回車鍵結束:);scanf(%s,ii);if(strcmp(ii,y)!=0) /判斷是否繼續(xù)添加航班信息/fclose(fp); /關閉文件/return;void read() /定義讀取文件函數/file *fp;if(fp=fopen(hangban.dat,
19、r)=null)printf(創(chuàng)建文件失敗! );getchar();return;i=0;while(!feof(fp)fread(&si,sizeof(struct air),1,fp); /逐塊讀取數據/i+;m+; /計算存在航班數/m-;fclose(fp);void save() /定義保存函數/file *fp;if(fp=fopen(hangban.dat,wb)=null) printf(創(chuàng)建文件失敗! );getchar();return;for(i=0;im;i+) /逐塊保存數據/fwrite(&si,sizeof(struct air),1,fp);fclose(fp
20、);void add() /定義增加航班信息函數/doprintf(請依次輸入您要增加的航班信息(以回車鍵結束): n); /打印提示信息/printf(- n);printf(請輸入航班號: ); scanf(%d,&sm.num); /讀取航班號/printf(請輸入起始站: );scanf(%s,sm.start); /讀取起始站/printf(請輸入終點站: );scanf(%s,sm.over); /讀取終點站/printf(請輸入時間: );scanf(%s,sm.time); /讀取時間/printf(請輸入機票數: );scanf(%d,&sm.count); /讀取機票數/m
21、+;printf(添加完畢,是否繼續(xù)添加?請鍵入y或n以回車鍵結束:);scanf(%s,ii);while(!strcmp(ii,y); /判斷是否繼續(xù)添加/void output() /定義輸出格式函數/printf(航班號tt起始站tt終點站tt時間tt機票數n); /信息標題/for(i=0;im;i+)printf(print); /打印出信息/void print() /定義顯示航班信息函數/printf(n目前我們有如下航班:n);output(); /調用輸出格式函數/printf(n請按回車鍵返回上層菜單 );getchar();getchar();void search()
22、 /定義查詢函數/int n;doprintf(n請輸入航班號: );scanf(%d,&n); /輸入查詢的航班號/for(i=0;im;i+)if(si.num=n) /按航班號判定輸出條件/printf(n您所查找的航班信息為:n );printf(航班號tt起始站tt終點站tt時間tt機票數 nn);printf(print); /顯示信息/printf(n查詢完畢,按回車鍵繼續(xù));getchar();getchar();return;printf(n對不起,沒有您需要的信息!n );printf(是否重新查找?請鍵入y或n以回車鍵結束 );scanf(%s,ii);while(!st
23、rcmp(ii,y); /判定是否重新查找/void dingpiao() /定義訂票業(yè)務函數/int n;char a10=y;dosearch(); /調用查詢模塊/if(!strcmp(ii,n)printf(對不起!沒有找到您所需要的航班,所以不能訂票。n); /未查找到所需航班/printf(n請按回車鍵返回上層菜單 );getchar();getchar();strcpy(ii,n);break;doprintf(請輸入您要訂的機票數(以回車鍵結束): );scanf(%d,&n); /輸入所訂機票數/if(n=n) /判定機票數是否大于等于訂票數/si.count=si.coun
24、t-n;printf(訂票成功! );break;else if(si.countn) /判定機票數是否小于訂票數/printf(對不起,你所選擇的航班只剩 %d張機票n, si.count);printf(是否需要重新輸入機票數?請輸入y或n以回車鍵結束: );/判定是否重新輸入訂票數/scanf(%s,a);while(!strcmp(a,y);printf(是否需要訂其他航班的機票?請輸入y或n以回車鍵結束: );scanf(%s,a);while(!strcmp(a,y); /判定是否繼續(xù)訂票/void tuipiao() /定義退票函數/int n;char a10;dosearch
25、(); /調用查詢函數/if(!strcmp(ii,n)printf(對不起!沒有找到您所需要的航班,所以不能退票。n);printf(n請按回車鍵返回上層菜單 );getchar();getchar();strcpy(ii,n);break;printf(請輸入您要退的機票數目: );scanf(%d,&n); /輸入所退票數/if(n=0) /判定票數是否有效/printf(輸入錯誤!至少需退1張機票。 );else si.count=si.count+n;printf(退票成功! );printf(是否繼續(xù)? 請鍵入y或n以回車鍵結束: ); /判定是否繼續(xù)退票/scanf(%s,a);
26、while(!strcmp(a,y); /判定并跳出循環(huán)/ void paixu() /定義排序函數/int n;printf(n* ); printf(1.按航班號從小到大排序nt2.按航班號從大到小排序n);printf(* ); printf(請在1-2中選擇以回車鍵結束: );scanf(%d,&n); /輸入排序方式/switch(n)case 1:paixu1(); /調用從小到大排序函數/break;case 2:paixu2(); /調用從大到小排序函數/break;printf(排序后的航班信息為:n);output(); /顯示排序后航班信息/printf(n請按回車鍵返回
27、上層菜單 );getchar();getchar();void paixu1() /定義從小到大排序函數/int k,j;struct air t;for(i=0;im;i+) /選擇法排序/k=i;for(j=i+1;jsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;void paixu2() /定義從大到小排序函數/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;第3章 課程設計總結經過此次的課程設計,可以很明確的了解到
28、自己哪些知識點掌握的比較好,哪些知識點運用的還不夠熟練。通過此次課程設計也學會綜合運用理論知識來分析和解決實際問題的能力、養(yǎng)成嚴謹的科學態(tài)度和良好的程序設計習慣,實現由知識向智能的初步轉化;學會遵循軟件開發(fā)過程的基本規(guī)范,運用結構化程序設計的方法,按照課程設計的題目要求,并能夠完成設計、編寫、調試和測試應用程序及編寫文檔的任務程序整體上運行與題目要求很吻合,算法大多比較通用,各個函數模塊的正確性、完備性、對輸入的容錯能力以及算法的進一步改進在設計中都有表述,這道題使我熟悉了文件的輸入輸出操作,真切的感受到了fprintf和fwrite函數的區(qū)別!回顧起此次課程設計,至今我仍感慨頗多,從理論到實踐,在整整半個月的日子里,我學到很多很多的東西,不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的內容。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院編織合同范本
- 公司股權交叉持股合同范例
- 全屋定制活動合同范例
- 農村房子貸款合同范例
- 印刷裝訂合同范例
- 印花購銷合同范例
- 勘察總價合同范例
- 農村地基打樁合同范例
- 出租早攤合同范例
- 產品包銷英文合同范本
- 2024年06月湖南瀏陽農村商業(yè)銀行股份有限公司社會招考30名員工筆試歷年參考題庫附帶答案詳解
- ??谱o理人才培養(yǎng)
- 《廣東省建設工程消防設計、審查疑難問題解析》
- 公路工程施工質量控制培訓
- 組織拳擊比賽行業(yè)市場突圍建議書
- 2024年上海市安全員-B證(項目負責人)理論考試題及答案
- 蔬菜種植基地管理手冊
- 《T CMADI 085-2022牙槽骨增量用增材制造個性化鈦網》
- 2024解析:第二十章電與磁-講核心(解析版)
- DB4101T 25.2-2021 物業(yè)服務規(guī)范 第2部分:住宅
- 六年級數學下冊 負數練習題(人教版)
評論
0/150
提交評論