服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现飞机票务系统

C语言实现飞机票务系统

2021-08-11 15:03bingongzi C/C++

这篇文章主要为大家详细介绍了C语言实现飞机票务系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
#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]='\0';
 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]='\0';
 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]='\0';//数组以\0结束
 
 
 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 ;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/bingongzi/article/details/86505885

延伸 · 阅读

精彩推荐