




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.高級語言程序設計課程設計報告題目: 飛機訂票系統程序設計 專 業 : 班 級 : 學 號 : 姓 名 : 指導教師 : 日 期: 山東工商學院信電學院.;1、程序基本功能要求 本程序首先輸入用戶名、密碼進入系統;從菜單中選擇可以輸入機票信息對機票信息進行瀏覽、修改、查詢、退訂票等功能并可以通過其內部各類方式或菜單內選項了解航班更細的信息。(1)航班信息用文件保存,因而要提供文件的輸入輸出操作。 (2)航班信息的錄入,其中包括了航班信息中的航班號、起始站、終點站、預售機票數 、已售機票數。 (3)航班信息瀏覽功能且提供顯示操作。(4)可以查詢航線,查詢方式有按航班號查詢、按起點站查詢、按終點站
2、查詢按航線查詢、按飛行時間查詢五種,可從各個方面進行查詢,方便快捷。(5)承辦訂票和退票業務,可顯示剩余票數和已買票數。當票數被訂或被退時票數會隨之變化,統計較為靈活。(6)提供鍵盤式選擇菜單以實現功能選擇。2、總體設計.編寫一個飛機訂票系統的程序使該系統能夠實現對航班信息的錄入、瀏覽、修改、查詢以及訂票、退票的功能。根據課程設計要求和本組人員的增補,首先要通過一個用戶登錄界面進入系統,其次要制作一個主菜單顯示出各個操作的提示可供用戶選擇進而一步步地深入操作。根據主菜單的內容再進一步編制具體操作的函數,各個功能均用專門編制的函數來完成。因為飛機訂票系統含有各航班的各項信息如航班號、航線、飛行時
3、間、機票數目等必要信息所以就決定用剛學不久的結構體數組來存放航班的各項信息,這就是看到題目后的最初的思路。在整個程序中,含有多種類型的頭文件,包括了標準輸入、輸出頭文件、字符串函數處理頭文件、動態存儲與釋放函數頭文件;在結構體數組中也對不同類型的數組進行不同的定義,例如: int flightno、int totalticket、char start10等;在各類信息的顯示操作中,本系統在執行瀏覽、查詢和退訂票是充分利用函數的調用,利用switch()語句進行,簡便實用;在此系統中,函數相互嵌套,形成了一個完整的系統。 本次設計需要編制初始化、建立數據文件、數據文件保存、增加航班信息、訂票、退
4、票業務等內容。首先需要設立一個初始化函數來得到航班信息。具體設計是第一次運行程序時自動生成保存航班信息的文件,并輸入初始航班信息,待第二次開始就可以直接讀取該文件獲得已有的航班信息并可直接使用。運用了access函數判斷文件是否存在。系統初始化后,沒有尋找到數據文件則進行新建數據文件。此函數的作用就是進行新建文件數據的錄入,運用到了文件指針的定義FILE *fp文件的打開fopen和關閉fclose、成塊讀寫函數中的fwrite運用for循環進行各組數據的輸入,用m+記錄下輸入的航班數量并運用if語句判斷是否輸入下一條航班信息,若不繼續則返回主界面。系統初始化之后若原始數據文件存在則進行文件內
5、航班信息的讀取以供接下來程序中的各個函數來使用。在該函數中同樣運用到了文件指針FILE *fp、文件的打開fopen和關閉fclose、成塊讀寫函數中的fread、文件結束檢測函數feof同時配合while語句控制文件的讀取,m+記錄下讀取到的航班數量等。因為在飛機訂票系統中涉及到飛機的訂票和退票業務還有按航班號的排序功能,所以我就定義了這個保存函數來保存下每次運行系統后對整個訂票系統涉及到的資料的修改。為了簡便程序我就準備將此函數放在整個系統得推出選項中,這樣就只在每次退出系統的時候進行一次保存將此次對文件修改的所有新信息都一次保存下來。這樣就實現了整個系統運行時進行一次讀取,推出時一次保存
6、的設計大大簡便了文件的調用和讀取。保存函數運用到的知識點與讀取函數大致相同。在這個函數中首先調用了search函數查找需要訂票的航班。運用if語句實現訂票時的多種情況,訂票數輸入不正確、飛機票數不足等情況。訂票成功時運用si.totalticket=si.totalticket-n,si.sellticket=si.sellticket+n將已被訂的機票數減去以顯示新的即時航班信息。與訂票函數相類似si.totalticket=si.totalticket+n,si.sellticket=si.sellticket-n。只做稍稍修改就行退票成功是用.。將航班的剩余票數加上去以顯示即時航班信息。
7、模塊分工:進入系統菜單 、輸出航班信息、訂票信息由劉妍負責輸入航班信息、保存航班信息、讀取航班信息由龔媛負責查詢航班信息、退票信息、修改信息部分由郭勇艷負責3、詳細設計系統程序結構(流程圖)建立新數據文件開始系統初始化修改航班信息航班信息瀏覽查找航班信息訂票業務退票業務退出并保存從已有的數據文件讀取按航班號、起始站、時間、航線查找輸入的各類信息錄入信息系統流程圖利用fread(&si,sizeof(flight),1,fp)讀取信息fread(&si,sizeof(flight),1,fp);文件打開否 輸入信息是否繼續將信息輸出到磁盤結束開始輸出錯誤信息航班信息瀏覽函數:流程
8、圖顯示信息開始文件打開查找航班信息是否查找到輸入信息是否繼續結束輸出錯誤信息刪除操作查詢模塊:流程圖.路線終點站起點站開始文件打開查詢方式是否繼續結束輸出錯誤信息航班號飛行時間4、程序運行結果(截圖)登陸系統時需輸入用戶信息圖1進入系統后出現菜單供選擇,選擇需要進入的窗口圖2航班信息的錄入圖3瀏覽航班信息圖4航班信息的修改圖5查詢菜單圖6通過航班號和時間進行查詢圖7系統訂票圖8退票系統圖9退出系統圖105、源程序代碼(代碼中注明每段代碼的完成人)/*用戶名:dianke 密碼:12345*/#include<stdio.h> /標準輸入、輸出頭文件#include<strin
9、g.h> /包含字符串函數處理頭文件#include<stdlib.h> /包含動態存儲與釋放函數頭文件#include<conio.h> /包含字符串的輸入、輸出頭文件#define N 10000 struct flight /定義結構體數組 int flightno; char start10; char end10; char day10; int totalticket;int sellticket;sN;int i;int m=0;#define PRINT "%-d%14s%13s%12s%12d%16dn",si.flightn
10、o,si.start,si.end,si.day,si.totalticket,si.sellticket /定義輸出格式void menu(); /進入系統菜單void print(); /輸出航班信息 void booking(); /訂票信息void input(); /輸入航班信息void save(); /保存航班信息 void read(); /讀取航班信息void search(); /查詢航班信息void back(); /退票信息 void correct(); /修改信息void menu() int j; printf(" 歡迎進入飛機訂票管理系統!n"
11、;); printf("=n"); do printf(" 1.錄入航班信息 n"); printf(" 2.瀏覽航班信息 n"); printf(" 3.修改航班信息 n"); printf(" 4.查詢航班信息 n"); printf(" 5.訂票信息 n"); printf(" 6.退票信息 n"); printf(" 0.退出航班信息管理系統 n"); printf("=n"); printf("請
12、在0-6中選擇以回車鍵結束:n"); scanf("%d",&j); switch(j) case 1: input(); /調用輸入模塊 break; case 2:print(); /調用打印模塊 break; case 3:correct(); /調用修改模塊 break; case 4:search(); /調用查詢模塊 break; case 5:booking(); /調用訂票模塊 break; case 6:back(); /調用退票模塊 break; case 0:; break; while(j!=0); /判斷結束 printf(&qu
13、ot;謝謝使用,再見!n"); /主函數結束void main() /打印主函數程序信息int i,k,part1,part2; char name10="dianke",password10="0" char person10, c10="12345"printf ("tt * 歡迎進入飛機訂票管理系統!*nn"); /打印提示信息printf ("tt 本系統由 、 、 編寫完成 nn");printf ("tt (*_*) nn");printf ("
14、;ttt 用 戶 登 錄nn");for(k=0;k!=3;) /打開文件并判斷printf("tttt 用戶名:"); /打印用戶名 gets(person); part1=strcmp(person,name); printf("tttt 密碼:"); /打印密碼 for(i=0;i<5;i+) ci=getch(); printf("*"); gets(c); part2=strcmp(c,password); if(part1=0 && part2=0) printf("tttt 登陸
15、成功!nn"); menu(); break; else printf ("ttt 用戶名或密碼錯誤!nn");printf ("ttt 請注意:您還剩%d次機會!nn",2-k); k+;if (k=3) printf ("對不起,由于您輸入的用戶名或密碼3次有誤,已被強制退出。n");void input() /打印模塊程序 int y; printf("請依次輸入航班信息:n"); /打印提示信息 printf("完成輸入信息請鍵入w以回車鍵結束n"); printf("
16、;-n"); for(i=0;i<N;i+) printf("請輸入航班號:n"); scanf("%d",&si.flightno); /讀取航班號 printf("請輸入起始站:n"); scanf("%s",si.start); /讀取起始站 printf("請輸入終點站:n"); scanf("%s",si.end); /讀取終點站 printf("請輸入時間:n"); scanf("%s",si.day
17、); /讀取時間 printf("請輸入預售票總數:n"); scanf("%d",&si.totalticket); /讀取預售票數 printf("請輸入已售票總數:n",m); scanf("%d",&si.sellticket); /讀取已售票總數 m+; printf("第%d個信息已經輸完是否繼續?按任意數字鍵繼續,按0結束",m); scanf("%d",&y); if(y=0) save(); /將結構體信息存盤 print(); /輸
18、出輸入的航班信息 break; void save() /保存模塊程序 FILE *fp,*fp1; /定義文件指針 if(fp=fopen("chen.dat","wb")=NULL) /打開文件并判斷是否出錯 printf("創建文件失敗!nn"); /打印出錯提示 getchar(); return; if(fp1=fopen("hao.dat","wb")=NULL) /打開文件并判斷是否出錯 printf("創建文件失敗!nn"); /打印出錯提示 getchar(
19、); return; for(i=0;i<m;i+) if(fwrite(&si,sizeof(struct flight),1,fp)=0) /向文件寫入數據,并判斷是否出錯 printf("向文件輸入數據失敗!nn"); fprintf(fp1,"%d",m); fclose(fp); /關閉文件 fclose(fp1); /關閉文件void read() /從文件讀取信息模塊 FILE *fp,*fp1; /定義文件指針 if(fp=fopen("chen.dat","rb")=NULL) /打
20、開文件,并判斷是否出錯 printf("出錯,請檢查文件是否存在,按任意鍵返回住菜單");/打印出錯提示 getchar(); if(fp1=fopen("hao.dat","rb")=NULL) /打開文件并判斷是否出錯 printf("創建文件失敗!nn"); /打印出錯提示 getchar(); return; fscanf(fp1,"%d",&m); fclose(fp1); /關閉文件 for(i=0;i<m;i+) fread(&si,sizeof(flight
21、),1,fp); /從文件中讀取信息 fclose(fp); /關閉文件void print() /打印模塊 char w10; read(); /調用讀取文件函數 printf("航班號 起始站 終點站 時間 預售票總數 已售票總數n"); for(i=0;i<m;i+) printf(PRINT); /打印信息 printf("請按任意鍵回車鍵結束返回上層菜單以:n"); scanf("%s",w); void search() /查詢模塊 char startname10; char endname10;char day1
22、0; char p10; int n,no; do printf("請選擇查詢方式:n"); /打印查詢方式菜單 printf("1.按航班號查詢n");printf("2.按起點站查詢n"); printf("3.按終點站查詢n"); printf("4.按航線查詢n");printf("5.按飛行時間查詢n"); printf("0.返回n"); printf("請在0-5中選擇:n"); printf("按其他鍵以回車鍵
23、結束返回主菜單:n"); scanf("%d",&n); /讀取查找方式 if(n=0) break; switch(n) case 1: printf("請輸入航班號:n"); scanf("%d",&no); /航班號 break;case 2:printf("請輸入起點站名稱:n");scanf("%s",&startname);break; case 3: printf("請輸入終點站名稱:n"); scanf("%s&qu
24、ot;,endname); /讀取終點站 break; case 4: printf("請輸入起始站名稱:n"); scanf("%s",startname); /讀取起始站 printf("請輸入終點站名稱:n"); scanf("%s",endname); /終點站 break; case 5:printf("請輸入飛行時間:n");scanf("%s",&day);break; read(); /調用讀取函數 for(i=0;i<m;i+) if(strc
25、mp(si.end,startname)=0|strcmp(si.end,endname)=0)/按終點站起始站判斷輸出條件 printf("n查詢航班信息成功!n"); printf("航班號 起始站 終點站 時間 預售票總數 已售票總數n"); printf(PRINT); /打印信息 break; if(si.flightno=no) /按航班號判斷輸出條件 printf("n查詢航班信息成功!n"); printf("航班號 起始站 終點站 時間 預售票總數 已售票總數n"); printf(PRINT);
26、 /打印信息 break; if(strcmp(si.day,day)=0) printf("n查詢航班信息成功!"); printf("n航班號 起始站 終點站 時間 剩余機票數 預售機票數n"); printf(PRINT);/打印信息 break; no=0; /將航班號賦值為0 printf("沒有您需要的信息或查找完畢:nn" "是否繼續查找?請鍵入yes或no以回車鍵結束n"); scanf("%s",p);while(strcmp(p,"yes")=0); /判
27、斷結束void booking() /訂票模塊 int n; char f10; do search(); /調用查詢模塊 printf("請輸入您要訂的機票數以回車鍵結束:n"); scanf("%d",&n); /讀取所訂機票數 if(n<0) printf("請輸入有效的機票數!n"); /判斷機票數是否出錯 break; if(si.totalticket!=0&&si.totalticket>=n) /判斷是否出錯 si.totalticket=si.totalticket-n; si.s
28、ellticket=si.sellticket+n; save(); /調用保存函數 printf("訂票成功!nn"); break; if(si.totalticket<n) /判斷是否出錯 printf("請輸入有效的機票數:n"); break; printf("是否繼續? 請輸入yes或no以回車鍵結束:n"); /判斷是否繼續訂票 scanf("%s",f);while(!strcmp(f,"yes"); /判斷結束 void back() /退票模塊 int n; char
29、f10; do search(); /調用查詢模塊 printf("請輸入您要退的機票數目:n"); scanf("%d",&n); /輸入所退票數 if(n<0) /判斷票數是否有效 printf("請輸入有效的機票數!n"); si.totalticket=si.totalticket+n; si.sellticket=si.sellticket-n; save(); /調用保存模塊 printf("退票成功!nn"); printf("是否繼續? 請鍵入yes或no以回車鍵結束:nn&
30、quot;);/判斷是否繼續退票 scanf("%s",f);while(!strcmp(f,"yes"); /判斷并跳出循環 getchar();void correct() /修改模塊 struct cor /定義結構體 int no; char startname10; char endname10; char day10; int totalticket;int sellticket;x1; char j10; int n; read(); /調用讀取模塊 do printf( "請選擇修改方式:n"); printf( &q
31、uot;*1,按航班號修改:n"); printf( "*2,按航線修改: n"); printf("請在1-2中修改以回車鍵結束:n"); scanf("%d",&n); /讀取修改方式 switch(n) case 1:printf("請輸入航班號:n"); scanf("%d",&x0.no); /讀取航班號 break; case 2:printf("請輸入起始站:n"); scanf("%s",x0.startname)
32、; /讀取起始站 printf("請輸入終點站:n"); scanf("%s",x0.endname); /讀取終點站 break; for(i=0;i<m;i+) if(strcmp(si.end,x0.startname)=0&&strcmp(si.end,x0.endname)=0) /判斷輸出條件 printf("航班號 起始站 終點站 時間 預售票總數 已售票總數n"); printf(PRINT); break; if(si.flightno=x0.no) /判斷輸出條件 printf("航班號 起始站 終點站 時間 預售票總數 已售票總數n"); printf(PRINT); break; x0.no=0; /將結構體中的號為零 p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州省銅仁一中2025屆高三下學期2月調考仿真模擬數學試題
- 2024年南方石油勘探開發有限責任公司秋季高校畢業生招聘20人筆試參考題庫附帶答案詳解
- 原始社會的教育與教師
- 電商課程走進校園
- 肝炎病人如何健康教育
- 二零二五商品房實測面積補充協議
- 離婚的財產分割協議書
- 護理大學生小講課
- 文員勞務合同
- 七下試卷作文題目及答案
- 小學音樂國測(國家義務教育質量監測)復習內容
- 清表施工方案5完整
- 肛腸科發揮中醫藥特色措施
- 實驗六復方磺胺甲惡唑片含量測定
- 鋰電池項目投資預算分析(范文模板)
- 鋼絲繩理論重量計算方式
- 滸墅關鎮社區家長學校工作臺帳(模板)
- 基于UbD理論小說敘事視角的群文閱讀設計
- (完整word版)成績證明模板(一)(word文檔良心出品)
- aci318r08混凝土結構設計規范(中文版)
- 《玉米施肥方案》ppt課件
評論
0/150
提交評論