怎么用C语言实现飞机票务系统

发布时间:2021-08-11 14:42:24 作者:chen
来源:亿速云 阅读:215

这篇文章主要讲解了“怎么用C语言实现飞机票务系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现飞机票务系统”吧!

飞机票务系统设计要求:有登录系统界面、账号、密码;建立航班信息功能;查看从郑州到某终点站飞机票信息功能;飞机票购买功能;添加购票人信息功能;显示购票人信息功能;退定飞机票功能;

程序中的音乐可以改为自己指定的,用时把我用的音乐那行代码注释掉即可。

代码如下:

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<Windows.h>#include<conio.h>//主要是一些用户通过按键盘产生的对应操作,比如getch()函数 #include<time.h> //时间库 #include<mmsystem.h>//windows中与多媒体有关的大多数接口#pragma comment(lib,"winmm.lib")//预处理,支持对windows 多媒体的编程.//#include<graphics.h>//图形库 #define N 15 //航班最多15,N为全局变量 typedef struct traininfor { char qishi[30]; //起始站  char zhongdian[30]; //终点站  char trainnumber[10]; //航班号  float price; //飞机票单人价格  int piaonumber; //每次航班的生成票数  char time[30]; //飞机出发时间 }hang; struct ticket{ char buyer[20]; //购票人姓名  char ID[20]; //购票人身份证号  int buynumber; //购买飞机票的张数 float money;//用户购买票总钱数 hang buy; //用户买的飞机票信息  struct ticket *next;//指针节点 };  int d=0;//统计有多少次航班struct ticket *yonghu;//用户购票信息头结点hang plane[N]; //航班信息结构体数组  int menu();//打印主菜单函数 void DengLu();//登录票务系统函数 void JianFile();//建立文件航班信息函数void OpenFile();//读取文件信息函数 void check(); //查看从郑州到某终点站飞机票信息函数 void buy(); //飞机票购买函数 void add();//添加购票人信息 int TicketMenu();//用户购票菜单 void XianShi();//显示购票人信息 void tui(); //退定飞机票函数 void exit(); // 退出程序  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////int main(){ DengLu();// 登录票务系统函数 JianFile();//建立文件航班信息  //OpenFile();//打开文件读取航班信息   while(1) {//每次操作完自动返回主菜单作用 switch(menu()) {//menu()函数为输入选项 case 1://选项为1时   OpenFile();//打开文件读取航班信息  printf("已成功导入航班信息\n\n\n");   break;    case 2: //选项为2时   check();// 查看从郑州到某终点站飞机票信息函数   break;   case 3://选项为3时   buy();//飞机票购买函数   break;   case 4://选项为4时   tui();//退票函数   break;   case 5://选项为5时   system("cls");//清屏   printf("感谢您的使用,祝您的旅途愉快\n");  Sleep(5000);//延迟15秒   exit(1);//  break;  }  } return 0;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////登录票务系统void DengLu() { //getch()=从键盘输入一个字符且不显示 getche()=从键盘输入一个字符并显示  printf("欢迎来到票务系统,请先注册票务系统账号(账号为10位,密码为6位):\n"); printf("温馨提示:若登录密码输入有误超过三次,电脑会自动关机:\n\n"); char ch;//重键盘上输入一个字符 char password[10];//passsword数组表示初始密码 char input[10];//input数组表示待输入的密码  char Szhanghao[20];// zhanghao数组表示申请的账号  char Dzhanghao[20];// zhanghao数组表示登录的账号 int i=0,j;//控制输入次数 int number,find,count; printf("申请账号:\n"); fflush(stdin);//清空输入流  while(1) { ch=getche();//从键盘输入一个字符,保存到ch变量 //加过滤,只要数字,其他的不做任何处理 if(ch>='0' && ch<='9') //if( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') ) { printf("\a");//转义字符\a=bell Szhanghao[i++]=ch;//把申请的账号储存到数组中  if(10==i)//写条件语句时,把常量放前面 { Szhanghao[i]=''; break;//账号为十位时停止输入  }  } } //1提示输入密码 printf("\n设置卡的密码:\n"); //2输入密码 i=0; while(1) { ch=getch();//从键盘输入一个字符,保存到ch变量 //加过滤,只要数字,其他的不做任何处理 if(ch>='0' && ch<='9') //if( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') ) { printf("*\a");//转义字符\a=bell password[i++]=ch;//把初始密码储存到数组中  if(6==i)//写条件语句时,把常量放前面 { password[i]=''; break;//初始密码为六位时停止输入  }  } } Sleep(2000); system("cls"); printf("温馨提示:若登录密码输入有误超过三次,电脑会自动关机:\n\n"); printf("请登录您的账号:\n"); while(1) { gets(Dzhanghao); if(strcmp(Dzhanghao,Szhanghao)!=0) printf("您输入的账号有误,请重新输入:\n"); else break;  }  number=0;//输入密码的次数  count =3;//有3次机会   while(count--) {//循环三次  find=0;j=0;//find初始化为0,表示输入密码正确  memset(input,0,sizeof(input));//初始化输入密码数组    printf("请输入账号密码:\n"); for(i=0;i<6;i++) {//输入六位密码  ch=getch();//从键盘输入一个字符,保存到ch变量中 if(ch>='0' && ch<='9') {//密码为数字时加入数组  printf("*\a"); input[j++]=ch; } } input[j]='';//数组以结束    for(i=0;i<=5;i++) {//密码是否输入正确  if(input[i]!=password[i]) {//输入密码与初始密码不匹配  find=1; break; } }   if(find==0) {//输入密码正确  printf("\n输入正确,即将进入票务系统主页"); PlaySound("20100814_5c610cfa0dec6116aa701YT6vHJzW9Zw.wav", NULL, SND_FILENAME | SND_SYNC); //音乐播放 printf("\n"); //Sleep(3000);//延时3秒  system("cls");//清屏  break; } else {//输入密码次数加一  number++; printf("\n输入密码错误,"); }  }  if(3==number) {//当输入错误次数到达3次时  printf("\n输入三次密码错误,不能再输入,电脑将在10秒后自动关机\n"); system("shutdown -s -t 10");//电脑即将关机  } return ;}  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////void JianFile(){ FILE *fp;//定义文件指针 if((fp=fopen("txt.in","w"))==NULL) {//创建文件失败 printf("建立失败!\n"); exit(0); } //向文件中输入航班信息 fprintf(fp,"郑州 南阳 T1230 110.50 200 2018年11月6日12点15分\n"); fprintf(fp,"郑州 信阳 T1231 120.50 200 2018年11月6日13点15分\n"); fprintf(fp,"郑州 商丘 T1232 100.00 200 2018年11月6日14点15分\n"); fprintf(fp,"郑州 开封 T1234 115.50 200 2018年11月6日15点15分\n"); fprintf(fp,"郑州 洛阳 T1235 95.00 200 2018年11月6日16点15分\n"); fprintf(fp,"郑州 三门峡 T1236 97.30 200 2018年11月6日17点15分\n"); fprintf(fp,"郑州 鹤壁 T1237 130.50 200 2018年11月6日18点15分\n"); fprintf(fp,"郑州 周口 T1238 117.00 200 2018年11月6日19点15分\n"); fprintf(fp,"郑州 驻马店 T1239 135.00 200 2018年11月6日20点15分"); fclose(fp); return ;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////文件读取航班信息void OpenFile(){  FILE *fp; //定义文件指针  d=0;//表示读取到当前文件位置 if((fp=fopen("txt.in","r"))==NULL) {//打开文件 printf("文件打开失败!\n"); return ; }  while(!feof(fp)) {//读取到文件为空  //printf("请设定第%d个站的地点、车次、价格、还剩票数、到站时间、已被购买票数:\n",d); fscanf(fp,"%s%s%s%f%d%s",plane[d].qishi,plane[d].zhongdian,plane[d].trainnumber,&plane[d].price,&plane[d].piaonumber,plane[d].time); d++; }  fclose(fp);//关闭文件  return ;} /////////////////////////////////////////////////////////////////////////////////////////////////////////////////int menu(){ char s[10];//输入字符串选项 int n;//整型选项 //菜单框架 printf("--------------------票务系统目录--------------------\n\n"); printf("1, 导入航班信息\n"); printf("2, 查询飞机票\n"); printf("3, 购买飞机票\n"); printf("4, 退订飞机票\n"); printf("5, 退出程序\n"); printf("注意:飞机从本站能到达的地方有南阳、信阳、商丘\n"); printf("开封、洛阳、三门峡、鹤壁、周口、驻马店\n"); printf("如果您想了解更多信息请输入选项序号\n \n"); printf("本程序制作者:2017级物联网工程一班 胡斌\n"); printf("请输入选项:");  while(1) {//死循环状态 fflush(stdin);//清空输入流 gets(s);//得到一串字符串 n=atoi(s);//字符串转化为整数  if(n<1||n>5)//判断输入的选项是否正确 printf("输入错误,请重新输入:\n"); else//符合条件,结束循环 break;  } //返回选项值 return n;} /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 查看从郑州到某终点站飞机票信息函数void check(){ int i,j;//循环变量 int find=1,flag=0,count=0;//标志变量 char qi[30];//起始站  char mudi[30];//终点站  printf("请输入起始地(提示:起始地为郑州): \n"); scanf("%s",qi);//输入起始地 printf("请输入目的地: \n"); scanf("%s",mudi);//输入目的地  while(1) {//死循环状态 if(0==strcmp(qi,"郑州")) {//起始地为郑州时 flag=1;//标志变量为1,表示起始地没有出错 for(j=0;j<d;j++) {//循环d次航班信息 if(0==strcmp(plane[j].zhongdian,mudi)) {//输入的终点站与航班信息终点站一致  count=1;//标志变量为1  printf("航班号: ");//输出航班号  printf("%s\n",plane[j].trainnumber);  printf("起始地: ") ;//输出起始地  printf("%s\n",plane[j].qishi);  printf("目的地: ");//输出目的地  printf("%s\n",plane[j].zhongdian);  printf("此次航班单人票价: ");//输出票价  printf("%.2f\n",plane[j].price);  printf("此次航班时间:");//输出航班时间  printf("%s\n",plane[j].time);  printf("此次航班飞机票数量: ");//输出票数  printf("%d\n\n\n\n",plane[j].piaonumber);   return ; } } } else { flag=1;//起始地输入错误 printf("输入有误,返回菜单!\n\n\n"); return ; }  if(0==count&&flag==1) {//起始地并且目的地输入错误 printf("sorry 您查询的结果无信息!\n\n\n"); return ; } } return ;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////对购物车进行操作void buy(){ while(1) {//成死循环状态 switch(TicketMenu())  {//ShopCartMenu()为输入选项 case 1://选项1 显示用户购票列表信息  XianShi();  break; case 2: //选项2 添加用户购票信息   add();  break; case 3: //选项3 退出  printf("即将退出子程序\n");   Sleep(2000);//延时两秒  return ;  } } return ;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////打印购物车菜单int TicketMenu(){ int n;//输入选项 char s[5];//输入字符串 //购票子程序菜单框架 printf("\n\n请选择操作:\n"); printf("--------------------------------------------\n"); printf("1. 显示当前购票列表\n"); printf("2. 添加购票人信息\n"); printf("3. 退出\n"); printf("--------------------------------------------\n"); printf("请选择对应数字1~3\n");  while(1) {//成死循环状态 fflush(stdin);//清空输入流 gets(s);//输入一串字符串 n=atoi(s);//字符串转化为整数  if(n<1||n>3)//判断输入的选项是否正确  printf("输入错误,请重新输入:\n"); else//输入正确,结束循环 break; } return n;//返回输入选项} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////显示用户购票信息void XianShi(){ FILE *fp;//定义文件指针 struct ticket *p;//定义一个新节点 p=yonghu;//把整个购票信息赋给p  if((fp=fopen("goupiao.txt","r"))==NULL)  {//判断是否打开了文件 printf("打开文件失败\n"); printf("暂时还没有用户购票信息\n\n"); return ; } //printf("\n姓名  身份证    起始站  目的站   购买票数\n"); while(p!=NULL)  {//输出购票人信息 //fscanf(fp,"%s%s%s%s%d",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,&p->buynumber); printf("姓名: "); printf("%s\n",p->buyer); printf("身份证号: "); printf("%s\n",p->ID); printf("起始地: ") ; printf("%s\n",p->buy.qishi); printf("目的地: "); printf("%s\n",p->buy.zhongdian); printf("购买票数: "); printf("%d\n",p->buynumber); printf("此次航班总钱数: "); printf("%.2f\n",p->money); printf("此次航班时间:"); printf("%s\n\n\n\n",p->buy.time); //printf("姓名  身份证   起始地  目的地  购买票数 票的价格 出发时间\n"); //printf("%-11s%-20s%-10s%-10s%-7d%-7.2f%-20s\n",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,,p->buy.price,p->buy.time);//输出购票人信息 p=p->next;//指向下一个节点 }  fclose(fp);//关闭文件  return ;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////添加用户购票信息void add(){ FILE *fp1,*fp;//定义两个文件指针 struct ticket *p,*p1;//定义两个节点  int i,j;//定义控制循环变量 int count,flag;//定义标志变量 int buynumber1;//用户购买的票数 char choice1[10];//选择变量 char choice2[10];//选择变量 char mingzi[20];//用户姓名 char shenfen[20];//用户身份证号  char qi[30];//起始站  char mudi[30];//终点站  do{//开始进入循环 printf("请输入您的姓名:\n"); scanf("%s",mingzi); printf("请输入您的身份证号:\n"); scanf("%s",shenfen); printf("请输入起始地(提示:起始地为郑州): \n"); scanf("%s",qi); printf("请输入目的地: \n"); scanf("%s",mudi); count=0;flag=0;//标志变量初始化 while(1) {//成死循环状态 if(0==strcmp(qi,"郑州")) {//起始站为郑州 flag=1;//标志为1 for(j=0;j<d;j++) {//循环d次航班信息 // printf("%s %s %.2f %d %s %d",pointtr->station[j],pointtr->trainnumber[j],pointtr->price[j],pointtr->piaonumber[j],pointtr->time[j],pointtr->buynumber[j]);  if(0==strcmp(plane[j].zhongdian,mudi))  {//目的地一致时  count=1;//标志为1  //输出航班信息  printf("航班号: ");  printf("%s\n",plane[j].trainnumber);  printf("起始地: ") ;  printf("%s\n",plane[j].qishi);  printf("目的地: ");  printf("%s\n",plane[j].zhongdian);  printf("此次航班单人票价: ");  printf("%.2f\n",plane[j].price);  printf("此次航班时间:");  printf("%s\n",plane[j].time);  printf("此次航班飞机票数量: ");  printf("%d\n",plane[j].piaonumber);   break;//结束循环  } } break ;//结束循环 } else { flag=1; printf("输入有误:\n\n\n"); fflush(stdin);//清空输入流  break; //结束循环 }  if(0==count&&flag==0) {//输入条件不符合 printf("sorry 您查询的结果无信息!\n\n\n"); return ; } } if(1==count) {//找到用户所需航班信息 printf("您确定购买此飞机票吗?(1.是 2.否)\n"); scanf("%s",choice1);//输入选项 if(0==strcmp(choice1,"1")) {//选项为1时 printf("请输入您要购买的张数:\n"); scanf("%d",&buynumber1);//输入购买票数 if(buynumber1<0) {//不符合客观情况  printf("输入有误,请重新输入!\n\n\n");  break; }  if(plane[j].piaonumber-buynumber1>=0) {//输入正确  plane[j].piaonumber=plane[j].piaonumber-buynumber1;//计算剩余飞机票    p=new ticket;//生成新节点   if(p==NULL)  {//分配内存失败   printf("内存申请失败!\n\n\n");  exit(1);  }  p->buynumber=buynumber1;//用户所购票数  strcpy(p->buyer,mingzi);//用户姓名  strcpy(p->ID,shenfen);//用户身份证号   p->buy=plane[j];//航班信息  p->next=NULL;//指向下一个节点为空    p1=yonghu;//把用户信息赋给p1  if(yonghu==NULL)//头结点为空   yonghu=p;//把节点赋值给头结点   else  {  while(p1->next!=NULL)  p1=p1->next;//把链表循环到尾部   p->next=p1->next;   p1->next=p;//把新节点p挂在链表尾部   } } else {  printf("飞机票已售完或不足,不能购买!\n\n\n");  break; } } else if(0==strcmp(choice1,"2")) {//输入选项为2时 printf("放弃购买, 返回!\n\n\n"); break; } else {//输入选项有误 printf("输入错误,返回!\n\n\n"); break; } } else//没有找到用户所需航班 printf("输入有误");  printf("是否继续购票?(1.是,2.否)\n"); fflush(stdin);//清空输入流  scanf("%s",choice2);//输入选项  }while(strcmp(choice2,"1")==0);//当选项为1时  if((fp1=fopen("goupiao.txt","w"))==NULL) {//判断文件是否创建失败 printf("创建文件失败。\n"); return ;  }  p=yonghu;//把用户信息赋给p while(p!=NULL) {//一直循环到链表为空 p->money=p->buy.price*p->buynumber;//计算票价总钱数 fprintf(fp1,"%s %s %s %s %d %.2f %s\n",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,p->buynumber,p->money,p->buy.time); p=p->next;//指向下一个节点 } fclose(fp1);//关闭文件 return ;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////退订飞机票void tui(){ FILE *fp,*fp1;//定义两个文件指针 char s[20];//身份证号 char s1[20];//目的地  char choice[10];//选择项 int buynumber2;//退订的票数 int i,j;//控制循环变量 int find=0;//标志变量 struct ticket *p;//定义新节点 printf("您确定要退票吗?1.是 2.否\n"); scanf("%s",choice);//输入选项 if(0==strcmp(choice,"1")) {//选项为1时 printf("请输入身份证号:\n"); scanf("%s",s);//输入身份证号  printf("请输入目的地:\n"); scanf("%s",s1);//输入目的地 if((fp=fopen("goupiao.txt","r"))==NULL) {//打开文件  printf("打开文件失败\n"); return ;  } p=yonghu;//把用户信息赋给p while(p!=NULL) {//循环到链表为空时 //fscanf(fp,"%s%s%s%s%f%d%s",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,p->buy.price,&p->buynumber,p->buy.time); if(0==strcmp(s,p->ID)&&(0==strcmp(s1,p->buy.zhongdian))) {//找到对应的用户 find=1;//标志变量为1 printf("请输入退票张数:\n"); scanf("%d",&buynumber2);//输入退订票数 if(buynumber2<0) {//不符合客观情况  printf("输入有误, 返回菜单!\n");  return ; }  if(p->buynumber>=buynumber2)  {//输入票数符合条件  fclose(fp);//关闭yonghu文件  if((fp=fopen("goupiao.txt","w"))==NULL)  {//判断文件是否创建失败  printf("创建文件失败\n");  return ;  }   if((fp1=fopen("txt.in","w"))==NULL)  {//判断文件是否创建失败  printf("创建文件失败。\n");  return ;    }  printf("退票成功,返回菜单!\n\n\n");  for(i=0;i<d;i++)  {//循环d次航班信息  if(0==strcmp(plane[i].zhongdian,p->buy.zhongdian))  {//找到对应终点站,计算剩余票数  plane[i].piaonumber+=buynumber2;  }  fprintf(fp1,"%s %s %s %f %d %s\n",plane[i].qishi,plane[i].zhongdian,plane[i].trainnumber,plane[i].price,plane[i].piaonumber,plane[i].time);  }  p->buynumber-=buynumber2;//用户所购票数  p->money=p->buynumber*p->buy.price;//购票的总价钱    p=yonghu;//把用户信息赋给p  while(p!=NULL)  {//循环链表为空时  fprintf(fp,"%s %s %s %s %.2f %d %s\n",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,p->money,p->buynumber,p->buy.time);  p=p->next;//指向下一个节点  }    fclose(fp);//关闭文件  fclose(fp1);//关闭文件    return ; } else {  printf("输入错误,返回菜单!\n\n\n");   return ; } } p=p->next;//指向下一个节点 } if(0==find) {//输入有误 printf("查询不到信息,返回菜单\n\n\n"); return ; } } else if(0==strcmp(choice,"2")) {//输入选项为2时 printf("放弃退票,返回菜单!\n\n\n"); return ; } else {//输入有误 printf("输入错误,返回菜单!\n\n\n"); return ; } return ;}

感谢各位的阅读,以上就是“怎么用C语言实现飞机票务系统”的内容了,经过本文的学习后,相信大家对怎么用C语言实现飞机票务系统这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. C语言如何实现打飞机游戏
  2. C语言怎么实现打飞机小游戏

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:PHP重置数组为连续数字索引的方式有哪些

下一篇:spring、mybatis配置方式有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》