C語言實現飛機售票系統
本文實例為大傢分享瞭C語言實現飛機售票系統的具體代碼,供大傢參考,具體內容如下
一、項目簡介
通過“航空售票系統”C語言課程設計的實踐,掌握函數、數據的讀取和存儲。熟練鏈表的操作,為後期學習打下基礎。
二、任務概述
(1) 將飛機坐位分為20排,每排4個位子。
(2) 系統可讓乘客自己選座號和區域,直到乘客滿意為止。
(3) 若無法滿足的話,改乘另一個航班。
(4) 定上票的乘客需給出姓名和身份證號。
(5) 要求打印出乘客信息。
三、功能展示
四、思維導圖
五、程序源碼
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100 typedef struct plane { char ID[10]; /*航班代號*/ char BePlace[10];/*飛機起飛地點*/ char EnPlace[10];/*飛機降落終點*/ char data[15];/*飛機起飛時間*/ int max;/*飛機最大乘客人數*/ int num;/*飛機已售票數*/ }PLANE;PLANE ti[N]; typedef struct user { char name[20]; int number; char id[20]; char seat[3]; }USER;USER si[N]; int n,n1;/*當前的航班數目以及新加入的航班*/ int e,r; void menu(); void menu1(); void input(int i) /* 輸入航班模塊,enter的子模塊 */ { printf("請輸入航班代號:\n"); scanf("%s",ti[i].ID); printf("請輸入起飛地點:\n"); scanf("%s",ti[i].BePlace); printf("請輸入降落地點:\n"); scanf("%s",ti[i].EnPlace); printf("請輸入起飛時間:\n"); scanf("%s",ti[i].data); printf("請輸入最大座位:\n"); scanf("%d",&ti[i].max); ti[i].num=0; } void enter() /* 添加航班模塊 */ { int i; system( "cls" ); /*清屏*/ n1=0; n=n+n1; printf("請輸入航班的數目:"); scanf("%d",&n1); /*要輸入的記錄個數*/ printf("\n請輸入數據(原已有%d趟航班)\n\n",n); for(i=n;i<n+n1;i++) { printf("\n請輸入第 %d 航班記錄.\n",i+1); input(i); /*調用輸入函數*/ } getchar(); menu(); } void printf_one(int i) /*顯示一個記錄的函數*/ { printf("\t%-8s %-8s %-8s %-8s %-8d %-8d ",ti[i].ID,ti[i].BePlace,ti[i].EnPlace,ti[i].data,ti[i].max,ti[i].num); } void dele(int k) /* 刪除用戶信息,shanchu的子模塊 */ { int i; for(i=(k+1);i<N;i++){ strcpy(si[k].name,si[k+1].name); si[k].number=si[k+1].number; strcpy(si[k].id,si[k+1].id); } } int shanchu(struct plane a) /* 刪除用戶訂票模塊,退票的子模塊 */ { int i; for(i=0;i<N;i++) { if(strcmp(a.ID,si[i].id)==0) { dele(i); } } return i; } int browse() /* 瀏覽模塊 */ { int i; r=0; system( "cls" ); puts("\n\t------------------------------航班瀏覽------------------------------"); printf("\n\t航班代號 起飛地點 降落地點 起飛時間 最大乘客 已售票數\n"); for(i=0;i<n+n1;i++) { r=r+ti[i].num; } for(i=0;i<n+n1-r-2;i++) { printf_one(i); printf("\n"); } getchar(); getchar(); menu(); return i; } void search_time() /* 時間查詢模塊,查詢的子模塊 */ { int i,m=0; struct plane s; system( "cls" ); printf("\n\nEnter the time:"); scanf("%s",s.data); /*輸入出發的時間*/ puts("\n--------------------------------------------------------------------"); printf("\n\t航班代號 起飛地點 降落地點 起飛時間 最大乘客 已售票數\n"); for(i=0;i<n+n1;i++) { if(strcmp(s.data,ti[i].data)==0) { m++; if((m!=0)&&(m%10==0)) /*目的是分屏顯示*/ { printf("\n\nPress any key to contiune . . ."); getchar(); puts("\n\n"); } printf_one(i); printf("\n"); /*調用顯示一個記錄的函數*/ } } puts("\n--------------------------------------------------------------------"); getchar(); /*按任意健*/ getchar(); menu1(); } void serch_end() /* 終點查詢模塊,查詢的子模塊 */ { int i,m=0; struct plane s; system( "cls" ); printf("\n\nEnter the end Place:"); scanf("%s",s.EnPlace); /*輸入要到達的地方*/ puts("\n--------------------------------------------------------------------"); printf("\n\t航班代號 起飛地點 降落地點 起飛時間 最大乘客 已售票數\n"); for(i=0;i<n+n1;i++) { if(strcmp(ti[i].EnPlace,s.EnPlace)==0) { m++; if((m!=0)&&(m%10==0)) /*目的是分屏顯示*/ { printf("\n\nPress any key to contiune . . ."); getchar(); puts("\n\n"); } printf_one(i); printf("\n"); /*調用顯示一個記錄的函數*/ } } puts("\n--------------------------------------------------------------------"); getchar(); /*按任意健*/ getchar(); menu1(); } void menu1() /* 查找模塊 */ { int n,w1; do { system( "cls" ); /*清屏*/ puts("\t\t\t\t 飛機售票操作!\n\n"); puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.按照時間查找航班"); puts("\t\t\t\t2.按照地點查找航班"); puts("\t\t\t\t3.返回主菜單"); puts("\n\n\t\t**********************************************\n"); printf("Choice your number(1-3): [ ]\b\b"); scanf("%d",&n); if(n<1||n>3) /*對選擇的數字作判斷*/ { w1=1; printf("your choice is not between 1 and 3,Please input again:"); getchar(); getchar(); } else w1=0; } while(w1==1); /*選擇功能*/ switch(n) { case 1:search_time();break; case 2:serch_end();break; case 3:menu();break; } } int search() /* 售票的查找模塊,book的子模塊 */ { int i,k; struct plane s; k=-1; printf("請輸入要訂票的起飛地點:\n"); scanf("%s",s.BePlace);/*輸入要起飛的地方*/ printf("請輸入要訂票的降落地點:\n"); scanf("%s",s.EnPlace);/*輸入要到達的地方*/ printf("請輸入要訂票的起飛時間:\n"); scanf("%s",s.data); /*輸入出發的時間*/ for(i=0;i<n+n1;i++) /*查找要修改的數據*/ { if(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnPlace)==0&&strcmp(s.data,ti[i].data)==0) { k=i; /*找到要修改的記錄*/ strcpy(s.data,ti[i].data); printf_one(k); break; /*調用顯示一個記錄的函數*/ } } if(k==-1) { printf("\n\nNO exist!"); return -1; } else return k; } void book() /* 訂票模塊 */ { int i; system( "cls" ); r=0; printf("歡迎進入售票窗口!\n"); printf("飛機上有20排座位,每排有4個座位,每排分為A,B,C,D。其中A,D靠窗戶。\n19,20為吸煙區。座位選擇按先選排序號再選座位號"); printf("\n\n\n請輸入您的姓名:\n"); /*用戶信息輸入*/ scanf("%s",si[e].name); printf("請輸入您的身份證號:\n"); scanf("%d",&si[e].number); printf("請輸入你想選的座位號:\n"); scanf("%s",si[e].seat); i=search(); if(i!=-1) { if(ti[i].num>=ti[i].max) { printf("\n該趟航班票已售完!"); } else { ti[i].num++; strcpy(si[e].id,ti[i].ID); e++; printf("\n訂票成功!\n"); } } else { printf("該航班不存在!\n"); } getchar(); getchar(); /*按任意健*/ menu(); } void back() /* 退票模塊 */ { int i,k=-1; struct plane s; char name[20]; int number; system( "cls" ); printf("歡迎進入退票窗口!\n"); printf("\n請輸入您的姓名:\n"); scanf("%s",name); printf("請輸入您的身份證號:\n"); scanf("%d",&number); printf("\n\n輸入航班代號:"); scanf("%s",s.ID); /*輸入要到達的地方*/ for(i=0;i<n+n1;i++) /*查找要修改的數據*/ { if(strcmp(s.ID,ti[i].ID)==0) { k=i; /*找到要修改的記錄*/ printf_one(k); break; /*調用顯示一個記錄的函數*/ } } if(k==-1) { printf("\n\nNO exist!"); } else { ti[i].num--; shanchu(s);// r--; printf("\n退票成功!\n"); } getchar(); /*按任意健*/ getchar(); /*按任意健*/ menu(); } void watch() /*瀏覽已售信息模塊*/ { int i; system( "cls" ); r=0; for(i=0;i<n+n1;i++) { r=r+ti[i].num; } printf("\n\t-------------------已售信息-------------------\n"); printf("\n\t姓 名 身份證號 座位號 已買航班代號\n"); for(i=0;i<r;i++) { printf("\t%-6s %-8d %8s %5s\n",si[i].name,si[i].number,si[i].seat,si[i].id); } printf("\n\t----------------------------------------------\n"); getchar(); getchar(); menu(); } void save()/*文件保存*/ { int w=1,m=1; r=0; FILE *fp,*fp1; int i,j; system( "cls" ); if((fp=fopen("ticket.txt","wb"))==NULL) /*以輸出打開方式,在此前的記錄被覆蓋*/ { printf("\nCannot open file\n"); return ; } for(i=0;i<n+n1;i++) if(fwrite(&ti[i],sizeof(struct plane),1,fp)!=1) { printf("file write error\n"); w=0; } if(w==1) { printf("ticket file save ok!\n"); } fclose(fp); if((fp1=fopen("sale.txt","wb"))==NULL) /*以輸出打開方式,在此前的記錄被覆蓋*/ { printf("\nCannot open file\n"); return ; } for(i=0;i<n+n1;i++) { r=r+ti[i].num; } for(j=0;j<=r;j++) if(fwrite(&si[j],sizeof(struct user),1,fp1)!=1) { printf("file write error\n"); m=0; } if(m==1) { printf("sale file save ok!\n"); } fclose(fp1); getchar(); getchar(); menu(); } void load() /* 加載模塊 */ { FILE *fp,*fp1; int i,w,j,m; w=1; m=1; system( "cls" ); if((fp=fopen("ticket.txt","rb"))==NULL) { printf("\nCan not open file!\n"); w=0; return; } n=0; for(i=0;!feof(fp);i++) { fread(&ti[i],sizeof(struct plane),1,fp); n++; } n=n-1; fclose(fp); if(w==1) printf("Load ticket file ok!\n"); if((fp1=fopen("sale.txt","rb"))==NULL) { printf("\nCan not open file\n"); m=0; return; } r=0; for(j=0;!feof(fp1);j++) { fread(&si[j],sizeof(struct user),1,fp1); n++; } r=r-1; fclose(fp1); if(m==1) printf("Load sale file ok!"); getchar(); getchar(); menu(); } void menu() /* 主頁面 */ { int n,w1; do { system( "cls" ); /*清屏*/ puts("\t\t\t\t 航空公司售票系統!\n\n"); puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1. 輸入新航班"); puts("\t\t\t\t2. 瀏覽航班 "); puts("\t\t\t\t3. 航班查詢"); puts("\t\t\t\t4. 訂票"); puts("\t\t\t\t5. 退票"); puts("\t\t\t\t6. 瀏覽已售信息"); puts("\t\t\t\t7. 保存"); puts("\t\t\t\t8. 載入"); puts("\t\t\t\t9. 退出"); puts("\n\n\t\t**********************************************\n"); printf("Choice your number(1-9): [ ]\b\b"); scanf("%d",&n); if(n<1||n>9) /*對選擇的數字作判斷*/ { w1=1; printf("your choice is not between 1 and 9,Please input enter to choice again:"); getchar(); getchar(); } else w1=0; } while(w1==1); /* 選擇功能,menu的子模塊 */ switch(n) { case 1:enter();break; /*輸入模塊*/ case 2:browse();break; /*瀏覽航班模塊*/ case 3:menu1();break; /*航班查找模塊*/ case 4:book();break; /*訂票模塊*/ case 5:back();break; /*退票模塊*/ case 6:watch();break; /*瀏覽已售信息模塊*/ case 7:save();break; /*保存模塊*/ case 8:load();break; /*加載模塊*/ case 9:exit(0); } } int main() /*主函數 */ { menu(); }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。