本文小编为大家详细介绍“C语言如何实现飞机售票系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现飞机售票系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、项目简介
通过“航空售票系统”C语言课程设计的实践,掌握函数、数据的读取和存储。熟练链表的操作,为后期学习打下基础。
二、任务概述
(1) 将飞机坐位分为20排,每排4个位子。
(2) 系统可让乘客自己选座号和区域,直到乘客满意为止。
(3) 若无法满足的话,改乘另一个航班。
(4) 定上票的乘客需给出姓名和身份证号。
(5) 要求打印出乘客信息。
三、功能展示
四、思维导图
五、程序源码
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 100typedef 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) { 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) { 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() { 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); 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();}
读到这里,这篇“C语言如何实现飞机售票系统”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。