C語言 飛機訂票系統(tǒng)
《C語言 飛機訂票系統(tǒng)》由會員分享,可在線閱讀,更多相關《C語言 飛機訂票系統(tǒng)(16頁珍藏版)》請在裝配圖網上搜索。
1、【精品文檔】如有侵權,請聯系網站刪除,僅供學習與交流 C語言 飛機訂票系統(tǒng) .....精品文檔...... 飛機訂票系統(tǒng) 一、課程設計目的 (1)了解并掌握算法的設計方法,具備初步的獨立分析和設計能力; (2)初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼、測試等基本方法和技能; (3)提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力; 二、課程設計的內容和要求 本程序主要用于機票的管理,甩以提供了以下功能,行班信息輸入輸出保 存、航線查詢、訂票,退票,和修改航班信息。 創(chuàng)建航班信息:包括航班號、起飛時間、降落時間、起飛抵達城市、航班票價、及票
2、價的折扣,票數等信息.錄入的信息應該保存在一個文件里。 瀏覽航班信息:通過瀏覽系統(tǒng),客戶可以根據自己時間、金錢等多方面的因素選擇適合自己的航班。 修改航班信息:當航班信息改變可以修改航班數據文件。 查詢航班信息:可通過航班號查詢,可通過飛機終點站查詢,也可以按航線查詢。 刪除航班信息:可通過航班號刪除,也可以按航線刪除。 添加航班信息:按添加的航班數量依次添加航班信息 訂票:可以訂票,如果該航班已經無票,可以推薦相關航班 退票:不滿意所訂的票時可進行退票 三、算法的基本思想 1.涉及到的數據結構 typedef struct flightnode //
3、定義結構體數組 int num; //航班號 char start[20]; //起始城市 char over[20]; //終點城市 char Stime[10]; //起始時間 har Etime[10]; int Price; int Discount; //折扣 int count; //機票數 struct flightno
4、de *next; } NODE; 2.基本功能模塊 飛機票管理系統(tǒng) 修改航班信息 訂票 退票 添加航班信息 刪除航班信息 查找航班信息 瀏覽航班信息 創(chuàng)建航班信息 主函數模塊。 1) 函數原形:void main(); 2) 功能:調用initlist(&h) 函數和menu()函數,初始化函數和顯示主界面 創(chuàng)建航班信息模塊 1) 函數原形:void creat(); 2) 功能:本模塊是對程序中的create()函數和save()函數的詳細說明——鏈表的存儲結構,對該創(chuàng)建的鏈表調用save()函數,存儲到數據文件中去 瀏覽航班信
5、息模塊 1) 函數原形: void print(); 2) 功能:輸出航班信息 修改航班信息模塊 1)函數原形: void change() 2) 功能:當航班信息改變可以修改航班數據文件 20查找航班信息模塊 1)函數原形: NODE *search():查找航班信息數據 2) 功能:由于航班的錄入和保存是由鏈表存儲結構進行的,所以此查詢就可通過鏈表對該文件進行查看或者查詢,查詢我們可根據航班號和航班抵達的城市和航線匹配查詢,在查詢中將需要查詢的航班號 no和文件閱讀時指針所指的值num進行比較,而按抵達城市查找則利用函數strcmp(p->next->st
6、art,name1)若匹配則輸出; 刪除航班信息模塊 1)函數原形: void del() 2) 功能:選擇按什么方式刪除,然后按該方式刪除 添加航班信息模塊 1)函數原形: void add(); 2) 功能:按添加的航班數量依次添加航班信息 訂票信息模塊 1)函數原形: int book_tickets() 2) 功能:先根據search()函數查詢要訂票的航班,在訂票時應先按乘客想要定的航班號或者抵達城市或航線查詢,并按乘客欲定的票的數目與查詢數目進行比較,若訂票的票數小于該航班票數,則輸出訂票成功,,且在整個定票系統(tǒng)中,所有的定票都用鏈表進行存儲管理 退票信息模塊
7、 1)函數原形: int tuipiao() 2) 功能:在退票系統(tǒng)中即對航班票的數據文件進行管理,所以可先按照查詢航班票的方法,若查詢到的票的信息和乘客此時要求退票的信息相匹配,則在該定票數據文件中刪除相應的該票的節(jié)點,再修改其航班信息 3.主要功能模塊流程圖 輸出界面 開始 選擇操作 結束 按航班號或航線 退票信息 退出 選擇0 選擇8 選擇7 訂票信息 添加航班信息 刪除航班信息 查找航班信息 選擇6 選擇5 選擇4 選擇3 修改航班信息 瀏覽航班信息 選擇2 選擇1 創(chuàng)建航班信息 按航班或終點站或航線 四、
8、系統(tǒng)測試 1.選擇1,運行界面如下: 2.選擇2,運行界面如下: 3.選擇3,運行界面如下: 4.選擇4,運行界面如下: 5.選擇5,運行界面如下: 6.選擇6,運行界面如下: 7.選擇7,運行界面如下: 8.選擇8,運行界面如下: 9.選擇0,運行界面如下: 五.結論 本次程序設計主要用到了結構體、調用函數、文件的保存、輸入以及輸出等功能。使我對數據結構有了更深一層的認識,特別是對動態(tài)鏈表和文件的運用得到了很大的提高。 在本次實驗中程序曾多次編譯、運行出錯,多虧了王帥老師的指導才將錯誤找出并改正,通過本次實驗,我認識到實踐和動手的重要性。 六.源程序及系統(tǒng)文件使用
9、說明
程序清單
#include
10、0]; //終點城市 char Stime[10]; //起始時間 char Etime[10]; int Price; float Discount; //折扣 int count; //機票數 struct flightnode *next; } NODE; #define PRINT "%4d %9.6s %9.6s %9.6s %9.6s %9d %.1f %9d \n",p->next-
11、>num,p->next->start,p->next->over,p->next->Stime,p->next->Etime,p->next->Price,p->next->Discount,p->next->count //定義輸出格式 void creat(); //創(chuàng)建航班信息文件 void print(); //輸出航班信息 void save(); //保存航班信息 int read(); //讀取航班信息 NODE *search(); //查找航班
12、信息 void del(); //刪除航班信息 int book_tickets(); //訂票信息 int tuipiao(); //退票信息 void change(); //修改信息 void menu(); //菜單 void initlist(NODE **); //初始化函數 void add(); //添加信息函數 NODE *h=NULL; //建立全局變量,存鏈表頭指針 int m=0; //航班數量 void initl
13、ist(NODE **h) *h=(NODE *)malloc(sizeof(NODE)); (*h)->next=NULL; void creat() //打印模塊程序 FILE *fp; NODE *p=NULL; //定義移動指針 int i,flightnum; char y; p=h; if((fp=fopen("air.dat","rb"))!=NULL)//打開文件,并判斷是否出錯 printf(" 信息文件已經存在,不必
14、創(chuàng)建!按任意鍵后回車返回\n\n\n");//打印出錯提示 fclose(fp); fflush(stdin); getchar(); return ; p=h; printf("請輸入要輸入的航班數量:"); fflush(stdin); //清除文件緩沖區(qū) scanf("%d",&flightnum); //讀取航班數 system("cls"); //清屏 printf(" 請依次輸入航班信息:\n\n"); //打印提示信
15、息
printf("--------------------------------------------------------------------------\n");
for(i=0;i
16、 scanf("%10s",&p->next->start);//讀取起飛城市 printf("終點站:"); fflush(stdin); scanf("%10s",&p->next->over);//讀取抵達城市 printf("起始時間:"); fflush(stdin); scanf("%10s",&p->next->Stime);//讀取起飛時間 printf("抵達時間:"); fflush(stdin); scanf("%10s",&p->next->Etime);//讀取抵達時間 printf("航班票
17、價:"); fflush(stdin); scanf("%d",&p->next->Price);//讀取航班票價 printf("票價折扣:"); fflush(stdin); scanf("%10f",&p->next->Discount);//讀取票價折扣 printf("機票數:",m); fflush(stdin); scanf("%d",&p->next->count);//讀取機票數 printf(" 第%d個信息已經輸完\n",i+1); p=p->next;
18、m++; printf("信息輸入完畢,是否存盤:存盤按0,不存盤按其他任意鍵"); fflush(stdin); y=getchar(); if(y=='0') save();//將結構體信息存盤 print();//輸出輸入的航班信息 void save()//保存模塊程序 NODE *p=NULL;//定義移動指針 FILE *fp,*fp1;//定義指向文件指針 p=h; if((fp=fopen("air.dat","wb"))==NULL)//打開文件并判斷是否出錯 printf(" 創(chuàng)建文件失敗!\n\n
19、\n");//打印出錯提示 fflush(stdin); getchar(); return; if((fp1=fopen("num.dat","wb"))==NULL)//打開文件并判斷是否出錯 printf(" 創(chuàng)建文件失敗!\n\n\n");//打印出錯提示 fflush(stdin); getchar(); return; while(p->next!=NULL) if(fwrite(p->next,sizeof(NODE),1,fp)==0)//向文件寫入數據,并判斷是否出錯
20、 printf(" 向文件輸入數據失敗!\n\n\n"); break; else p=p->next; fprintf(fp1,"%d",m); //按指定的格式輸出到fp1所指定的文件中 fclose(fp);//關閉文件 fclose(fp1);//關閉文件 int read()//從文件讀取信息模塊 FILE *fp,*fp1;//定義文件指針 NODE *p=NULL; int i; initlist(&h); p=h; if((fp=fopen("air.dat","rb"))
21、==NULL)//打開文件,并判斷是否出錯 printf("出錯,請檢查信息文件是否存在,按任意鍵后回車返回住菜單\n\n\n");//打印出錯提示 fflush(stdin); getchar(); return 0; if((fp1=fopen("num.dat","rb"))==NULL)//打開文件并判斷是否出錯 printf(" 創(chuàng)建文件失敗!\\n\n\n");//打印出錯提示 fflush(stdin); getchar(); return 0; fscanf(fp1,"%d"
22、,&m); //從fp1所指定的文件中按給定的格式將輸入數據送內存中
fclose(fp1);//關閉文件
printf("\n 總共%d個航班信息\n",m);
for(i=0;i
23、/打印模塊 NODE *p=NULL; if(read()==0)return;//調用讀取文件函數,并判斷是否文件存在。 p=h; printf("═══════════════════════════════════════\n"); printf("航班號 起始站 終點站 起始時間 抵達時間 航班票價 票價折扣 票數 \n"); while(p->next!=NULL) printf(PRINT);//打印信息 p=p->next; printf("══════════════════════════════════
24、═════"); printf("\n\n\n\n\n\n請按任意鍵后回車結束返回上層菜單:\n"); fflush(stdin); getchar(); NODE *search()//查詢模塊 NODE *p=NULL; NODE *x=NULL; /*用于記錄查詢到的記錄*/ char name1[20]; char name2[20]; char ii[10]; int n,no; int flag=0; if(read()==0)return 0; p=h; do printf("
25、 請選擇查找方式:\n\n"); //打印查詢方式菜單 printf("--------------------------------------------------------------------------\n"); printf(" 1.按航班號查找\n\n" " 2.按終點站查找\n\n" " 3.按航線查找\n\n" "
26、 0.返回\n\n"); printf(" 請在0-3中選擇:\n\n" " 按其他鍵后回車返回主菜單:\n\n\n\n\n"); fflush(stdin); scanf("%d",&n);//讀取查找方式 if(n==0) break; switch(n) case 1: printf(" 請輸入航班號:\n"); fflush(stdin); scanf("%d",&no)
27、;//航班號 break; case 2: printf(" 請輸入終點站名稱:\n"); fflush(stdin); scanf("%10s",name2);//讀取終點站 break; case 3: printf(" 請輸入起始站名稱:\n"); fflush(stdin); scanf("%10s",name1);//讀取起始站 printf(" 請輸入終點站名稱:
28、\n"); fflush(stdin); scanf("%10s",name2);//終點站 break; default: printf(" 請選擇有效查詢方式!\n\n\n"); while(p->next!=NULL) if(strcmp(p->next->start,name1)==0||strcmp(p->next->over,name2)==0) //按終點站起始站判斷輸出條件 printf(" \n查找航班信息成功!\n\n\n");
29、 printf("航班號 起始站 終點站 起始時間 抵達時間 航班票價 票價折扣 票數\n"); printf(PRINT);//打印信息 x=p->next; flag=1; break; if(p->next->num==no)//按航班號判斷輸出條件 printf(" \n查找航班信息成功!\n\n\n"); printf("航班號 起始站 終點站 起始時間 抵達時間 航班票價 票價折扣 票數\n");
30、 printf(PRINT);//打印信息 x=p->next; flag=1; break; p=p->next; if(!flag) printf("查找失敗!:\n\n\n\n\n"); printf ( "\n\n\n" " 是否重新查找?\n" " 請鍵入yes或no\n" " 后回車鍵結束 \n" "----
31、--------------------------------------------- \n\n\n\n\n"); no=0;//將航班號賦值為0 p=h; flag=0; fflush(stdin); scanf("%10s",ii); }while(strcmp(ii,"yes")==0);//判斷結束 return(x); void add() int flightnum; int i,y; NODE*p=NULL; i=read(); if(i
32、==0)return; p=h; while(p->next!=NULL)p=p->next; printf("請輸入要輸入的航班數量:"); fflush(stdin); scanf("%d",&flightnum); //讀取航班數 system("cls"); printf(" 請依次輸入航班信息:\n\n"); //打印提示信息 printf("--------------------------------------------------------------------------\n"); f
33、or(i=0;i
34、s",&p->next->over);//讀取抵達城市 printf("起飛時間:"); fflush(stdin); scanf("%10s",&p->next->Stime);//讀取起飛時間 printf("抵達時間:"); fflush(stdin); scanf("%10s",&p->next->Etime);//讀取抵達時間 printf("航班票價:"); fflush(stdin); scanf("%d",&p->next->Price);//讀取航班票價 printf("票價折扣:"); fflus
35、h(stdin); scanf("%10f",&p->next->Discount);//讀取票價折扣 printf("機票數:",m); fflush(stdin); scanf("%d",&p->next->count);//讀取機票數 printf(" 第%d個信息已經輸完\n",i+1); p=p->next; m++; printf("信息輸入完畢,是否存盤:存盤按0,不存盤按其他任意鍵后回車"); fflush(stdin); scanf("%d",&y); if(y
36、==0) save();//將結構體信息存盤 print();//輸出輸入的航班信息 void del()//刪除模塊 NODE *p=NULL; NODE *temp=NULL; char name1[20]; char name2[20]; char ii[10]; int no,n; int flag=0; if(read()==0)return;;//調用讀取函數 do printf(" 請選擇刪除以方式回車鍵結束:\n\n"); printf("
37、 *1.按航班號刪除\n\n" " *2.按航線刪除\n\n" " *0.返回\n\n"); printf(" 請在0-2中選擇以回車鍵結束:\n\n\n"); fflush(stdin); scanf("%d",&n);//讀取刪除方式 if(n==0) break; //跳出循環(huán) switch(n) case 1: printf("
38、 航班號:\n"); fflush(stdin); scanf("%d",&no); //讀取航班號 p=h; break; //跳出循環(huán) case 2: printf(" 起始站名稱:\n"); fflush(stdin); scanf("%10s",name1);//讀取起始站 printf(" 終點站名稱:\n"); fflu
39、sh(stdin); scanf("%10s",name2); //讀取終點站 p=h; break; //跳出循環(huán) default: printf(" 請選擇有效的選項:\n"); continue; while(p->next!=NULL) { if(p->next->num==no||(strcmp(p->next->start,name1)==0&&strcmp(p->next->over,name2)==0)) .//判斷輸入信息是否存在 t
40、emp= p->next->next; p->next=temp; m--; flag=1; printf(" 刪除成功!剩余%d條信息\n\n\n\n\n",m); break; p= p->next; if(!flag)printf(" 沒有這個信息!\n\n\n\n\n"); printf(" 是否繼續(xù)刪除\n" " 請鍵入yes或no
41、以回車鍵結束\n"); fflush(stdin); scanf("%10s",ii); //讀取是否繼續(xù)信息 save(); //調用存儲函數 if(!strcmp(ii,"yes")) //判斷是否繼續(xù)刪除 printf(" 請按任意鍵后回車結束返回上層菜單:\n\n\n\n\n\n"); break; }while(1); //判斷結束 int book_tickets()//訂票模塊 int n; char a[10]; NODE *x=NULL; NODE *p=NULL; d
42、o printf("查找要訂票的航班:\n"); x = search();//調用查詢模塊 if(x!=NULL) printf("請輸入您要訂的機票數以回車鍵結束:\n"); fflush(stdin); scanf("%d",&n); //讀取所訂機票數 else return (0); if(n<0) printf(" 請輸入有效的機票數!\n\n\n\n\n\n");//判斷機票數是否出錯 break; if(x->count!=0&&x->count>=n)//判斷是否出錯 x->count=x
43、->count-n;
save();//調用保存函數
printf(" 訂票成功!\n\n");
break;
if(x->count 44、n(1);
int tuipiao() //退票模塊
int n;
char a[10];
NODE *p=NULL;
NODE *x=NULL;
do
printf(" 查找要退票的航班\n");
x= search(); //調用查詢模塊
if(x!=NULL)
printf(" 請輸入您要退的機票數目:\n");
fflush(stdin);
scanf("%d",&n); //輸入所退票數
else return (0);
while(n< 45、0) //判斷票數是否有效
printf(" 請輸入有效的機票數!\n\n\n\n\n\n");
fflush(stdin);
scanf("%d",&n);
x->count= x->count+n;
save(); //調用保存模塊
printf("退票成功!\n\n\n\n\n");
printf("是否繼續(xù)退票?請鍵入yes或no以回車鍵結束:\n\n\n");//判斷是否繼續(xù)退票
fflush(stdin);
scanf("%10s",a);
}wh 46、ile(!strcmp(a,"yes"));//判斷并跳出循環(huán)
return (1);
fflush(stdin);
getchar();
void change() //修改模塊
char j[10];
NODE *x=NULL;
NODE *p=NULL;
if(read()==0)return;
do
x=search();
if(x!=NULL)
printf( " 請重新輸入本條信息\n\n\n\n\n");
printf("航班號:\n");
fflus 47、h(stdin);
scanf("%d",&x->num); //讀取航班號
printf("起始站:\n");
fflush(stdin);
scanf("%10s",&x->start);//讀取起始站
printf("終點站:\n");
fflush(stdin);
scanf("%10s",&x->over);//讀取終點站
printf("起始時間:\n");
fflush(stdin);
scanf("%10s",&x->Stime);//讀取起始時間
printf(" 48、抵達時間:\n");
fflush(stdin);
scanf("%10s",&x->Etime);//讀取抵達時間
printf("航班票價:\n");
fflush(stdin);
scanf("%d",&x->Price);//讀取航班票價
printf("票價折扣:\n");
fflush(stdin);
scanf("%10f",&x->Discount);//讀取票價折扣
printf("機票數:\n");
fflush(stdin);
scanf("%d",&x->count 49、);//讀取機票數
save();//調用保存模塊
printf(" 是否繼續(xù)修改?請鍵入yes或no以回車鍵結束:\n\n\n\n\n");
fflush(stdin);
scanf("%10s",j);
}while(strcmp(j,"yes")==0); //判斷結束
void menu()
int j;
printf("\n------歡迎進入中國民航管理系統(tǒng)--------\n\n");
do
printf( " 1.創(chuàng)建航班信息文件 \n"
50、 " 2.瀏覽航班信息 \n"
" 3.修改航班信息 \n"
" 4.查找航班信息 \n"
" 5.刪除航班信息 \n"
" 6.添加航班信息 \n"
" 51、 7.訂票信息 \n"
" 8.退票信息 \n"
" 0.退出 \n\n");
printf(" 請在0-9中選擇以回車鍵結束:\n\n");
fflush(stdin);
scanf("%d",&j);
switch(j)
case 1: creat();//調用輸入模塊
break;
case 2:print();/ 52、/調用打印模塊
break;
case 3:change();//調用修改模塊
break;
case 4:search();//調用查找模塊
break;
case 5:del(); //調用刪除模塊
break;
case 6:add();//調用訂票模塊
break;
case 7:book_tickets();//調用訂票模塊
break;
case 8:tuipiao();//調用退票模塊
break;
case 0:;
break;
default:printf("請選擇有效選項!按任意鍵后回車返回。\n\n\n\n\n\n\n\n\n\n\n\n");
fflush(stdin);
getchar();
}while(j!=0);//判斷結束
printf(" 謝謝使用,再見!\n");
void main()
initlist(&h);
menu();} //主函數結束
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。