C语言实现-航空订票系统(飞机订票系统)

2019-08-16 07:48:28来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

C语言实现-航空订票系统(飞机订票系统)

开发环境:CodeBlocks

开发语言:C

实现功能:登录,订票,退票

数据存储:文本读写

涉及文件:

?

相关文件下载:

码云:传送门

程序主界面:

?

源码如下:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <stdbool.h>
  5 #include <conio.h>
  6 #define MAX_Flight 50
  7 #define MAX_Passenger 20
  8 #define MAX_Order 50
  9 
 10 typedef struct Flight
 11 {
 12     char fid[20];         //航班号
 13     char fname[20];    //航班名称
 14     char start[10];  //起点
 15     char end[10];     //终点
 16     int fnum;    //票数
 17 }Flight;
 18 
 19 typedef struct Passenger{
 20     char pid[20];    //身份证
 21     char pname[10];    //姓名
 22     char password[20];    //密码
 23     char tell[20];    //电话
 24 }Passenger;
 25 
 26 typedef struct Order{
 27     char pid[20];    //身份证
 28     char fid[20];    //航班号
 29     int num;    //票数
 30 }Order;
 31 
 32 Flight *FLI;
 33 Passenger *PAS;
 34 Order *ORD;
 35 
 36 char start[10]; //起点
 37 char end[10];   //终点
 38 char search_fid[50][20];    //符合条件的航班号
 39 int search_fnum[50];    //符合条件的航班票数
 40 int online = 0; //是否登录的变量
 41 char online_pid[20];    //在线用户的身份证
 42 int search_num = 0;    //符合条件的航班数
 43 
 44 void init_sys(void);    // 系统初始化
 45 void show_flight(void);    // 显示航班表
 46 void start_sys(void);    // 系统开始运行
 47 void exit_sys(void);    // 退出系统
 48 void menu(void);        // 生成主菜单
 49 void login(void);       // 登录
 50 void logout(void);  //用户登出
 51 void passenger_info(void);  //查询旅客信息
 52 bool change_pas_info(void); //修改旅客信息
 53 void search_start(void);    // 生成查询页面
 54 bool search(void);    // 查询航班
 55 void order_list(void);    // 生成订单表
 56 void del_order(void);    // 退票
 57 void clear_stdin(void);    // 清除输入缓冲区
 58 char* get_str(char* str,size_t len);  // 获取字符串
 59 char get_cmd(char start,char end);    // 获取cmd命令
 60 
 61 int main()
 62 {
 63     init_sys();
 64     start_sys();
 65     exit_sys();
 66     return 0;
 67 }
 68 
 69 // 系统初始化
 70 void init_sys(void)
 71 {
 72     // 申请堆内存、加载数据
 73     FLI = calloc(MAX_Flight,sizeof(Flight));
 74     PAS = calloc(MAX_Passenger,sizeof(Passenger));
 75     ORD = calloc(MAX_Order,sizeof(Order));
 76     printf("system_init...\n");
 77 
 78     FILE* ofrp = fopen("order.txt","r");
 79     int i=0;
 80     for(i=0; i<MAX_Order; i++)    //读取文本中的数据到内存
 81     {    int num = 0;
 82         num = fscanf(ofrp,"%s %s %d\n",ORD[i].pid,ORD[i].fid,&ORD[i].num);
 83     }
 84 
 85     FILE* ffrp = fopen("flight.txt","r");
 86     for(i=0; i<MAX_Flight; i++)
 87     {
 88         int num = 0;
 89         num = fscanf(ffrp,"%s %s %s %s %d\n",FLI[i].fid,FLI[i].fname,FLI[i].start,FLI[i].end,&FLI[i].fnum);
 90     }
 91 
 92     FILE* pfrp = fopen("passenger.txt","r");
 93     for(i=0; i<MAX_Passenger; i++)
 94     {
 95         int num = 0;
 96         num = fscanf(pfrp,"%s %s %s %s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
 97     }
 98 }
 99 
100 // 显示航班表
101 void show_flight(void)
102 {
103     int i = 0;
104     for(i=0; i<MAX_Flight; i++)
105     {
106         if(strlen(FLI[i].fid) != 0)
107         {
108             printf("id:%s name:%s start:%s end:%s fnum:%d\n",FLI[i].fid,FLI[i].fname,FLI[i].start,FLI[i].end,FLI[i].fnum);
109         }
110     }
111 }
112 
113 // 系统开始运行
114 void start_sys(void)
115 {
116     // 进入系统的业务流程控制
117     //printf("系统开始运行...\n");
118     //show_flight();
119     while(true)
120     {
121         menu();
122         switch(get_cmd('0','7'))
123         {
124             case '1': search_start(); break;
125             case '2': order_list(); break;
126             case '3': del_order(); break;
127             case '4': passenger_info(); break;
128             case '5': change_pas_info(); break;
129             case '6': login(); break;
130             case '7': logout(); break;
131             case '0': return;
132         }
133     }
134 }
135 
136 // 系统结束
137 void exit_sys(void)
138 {
139     printf("data insert...\n");
140     FILE* ofwp = fopen("order.txt","w");
141     printf("ready insert order.txt\n");
142     int i= 0;
143     for(i=0; i<MAX_Order; i++)    //数据存储回本地
144     {
145         int num = 0;
146         if(strlen(ORD[i].pid) != 0)
147         {
148             num = fprintf(ofwp,"%s %s %d\n",ORD[i].pid,ORD[i].fid,ORD[i].num);
149             //printf("insert order.txt success\n");
150         }
151     }
152 
153     FILE* ffwp = fopen("flight.txt","w");
154     printf("insert flight.txt\n");
155     for(i=0; i<MAX_Flight; i++)
156     {
157         int num = 0;
158         if(strlen(FLI[i].fid) != 0)
159         {
160             num = fprintf(ffwp,"%s %s %s %s %d\n",FLI[i].fid,FLI[i].fname,FLI[i].start,FLI[i].end,FLI[i].fnum);
161             //printf("insert flight.txt success\n");
162         }
163     }
164 
165     FILE* pfwp = fopen("passenger.txt","w");
166     printf("insert passenger.txt\n");
167     for(i=0; i<MAX_Passenger; i++)
168     {
169         int num = 0;
170         if(strlen(PAS[i].pid) != 0)
171         {
172             num = fprintf(pfwp,"%s %s %s %s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
173             //printf("insert passenger.txt success\n");
174         }
175     }
176     // 释放内存、保存数据
177     free(FLI);
178     free(PAS);
179     free(ORD);
180     printf("exit...\n");
181 }
182 
183 // 生成主菜单
184 void menu(void)
185 {
186     printf("\n");
187     printf("********************************\n");
188     printf("|                              |\n");
189     printf("|      flight order system     |\n");
190     printf("*      1.search_flight         *\n");  //查询航班
191     printf("|      2.order_list            |\n");   //查询订票信息
192     printf("*      3.del_order             *\n");    //退订
193     printf("|      4.passenger_info        |\n");   //查询旅客信息
194     printf("*      5.change_pas_info       *\n");  //修改旅客信息
195     printf("|      6.login                 |\n");  //用户登录
196     printf("*      7.logout                *\n");    //用户登出
197     printf("|      0.exit_sys              |\n");   //退出系统
198     printf("|                              |\n");
199     printf("********************************\n");
200     //printf("\n");
201 }
202 
203 // 登录
204 void login(void)
205 {
206     if(online == 0)    //如果没有登录
207     {
208         int i=0;
209         int time = 0;
210         while(time<3)
211         {
212             char entry_pid[20]; //临时变量身份证
213             char entry_pw[20];  //临时变量密码
214             printf("please login!\n");
215             printf("please entry pid:");
216             get_str(entry_pid,20);
217             printf("please entry password:");
218             get_str(entry_pw,20);
219             for(i=0; i<MAX_Passenger; i++)
220             {
221                 if(strlen(entry_pid)==0 || strlen(entry_pw)==0)
222                 {
223                     printf("pid or password can't be empty\n");
224                     time++;
225                     break;
226                 }
227                 else if(strcmp(PAS[i].pid,entry_pid) == 0 && strcmp(PAS[i].password,entry_pw) == 0)
228                 {
229                     printf("login success!\n");
230                     strcpy(online_pid,entry_pid);
231                     online = 1;
232                     return;
233                 }
234                 else if(i==MAX_Passenger-1)
235                 {
236                     printf("pid or password error\n");
237                     time++;
238                 }
239             }
240         }
241         online = -1;
242         printf("you have been locked,you can use this system now\n");
243     }
244     else if(online ==1)
245     {
246         printf("you have been login\n");
247     }
248     else
249     {
250         printf("you have been locked,you can use this system now\n");
251     }
252 
253 }
254 
255 // 用户登出
256 void logout(void)
257 {
258     if(online == 1)    //如果已经登录
259     {
260         online = 0;
261         printf("logout success\n");
262     }
263     else if(online == -1)
264     {
265         printf("you have been locked,you can use this system now\n");
266     }
267     else
268     {
269         printf("you have not login\n");
270     }
271 }
272 
273 // 查询旅客信息
274 void passenger_info(void)
275 {
276     if(online == 1)    //如果已经登录
277     {
278         //printf("online_pid:");
279         //puts(online_pid);
280         int i = 0;
281         for(i=0; i<MAX_Passenger; i++)
282         {
283             if(strcmp(online_pid,PAS[i].pid)==0)
284             {
285                 printf("pid:%s, pname:%s, password:%s, tell:%s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
286                 break;
287             }
288         }
289     }
290     else if(online == -1)
291     {
292         printf("you have been locked,you can use this system now\n");
293     }
294     else
295     {
296         printf("you have not login\n");
297     }
298 }
299 
300 //修改旅客信息
301 bool change_pas_info(void)
302 {
303     if(online == 1)    //如果已经登录
304     {
305         printf("your old info:\n");
306         int i = 0;
307         for(i=0; i<MAX_Passenger; i++)
308         {
309             if(strcmp(online_pid,ORD[i].pid)==0)
310             {
311                 printf("pid:%s, pname:%s\npassword:%s, tell:%s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
312                 break;
313             }
314         }
315         char new_pid[20];
316         char new_pname[10];
317         char new_password[20];
318         char new_tell[20];
319         printf("please entry new pid:");
320         get_str(new_pid,20);
321         printf("please entry new pname:");
322         get_str(new_pname,10);
323         printf("please entry new password:");
324         get_str(new_password,20);
325         printf("please entry new tell:");
326         get_str(new_tell,20);
327         strcpy(PAS[i].pid,new_pid);
328         strcpy(PAS[i].pname,new_pname);
329         strcpy(PAS[i].password,new_password);
330         strcpy(PAS[i].tell,new_tell);
331         printf("change success\n");
332     }
333     else if(online == -1)
334     {
335         printf("you have been locked,you can use this system now\n");
336     }
337     else
338     {
339         printf("you have not login\n");
340     }
341 }
342 
343 // 开始查询航班
344 void search_start(void)
345 {
346     if(search())
347     {
348         printf("1.order\n");
349         printf("0.back\n");
350         char cmd = get_cmd('0','1');
351         if(cmd == '0')
352         {
353             return;
354             //start_sys();
355         }
356         else
357         {
358             char fid[20];   // 选择的航班号
359             if(online == 1) // 如果已经登录
360             {
361                 printf("please entry fid:");
362                 get_str(fid,20);
363                 if(0 == strlen(fid))
364                 {
365                     printf("fid is empty\n");
366                 }
367                 int i = 0;
368                 for(i=0; i<search_num; i++)
369                 {
370                     //printf("fid:%s s_fid:%s num:%d\n",fid,search_fid[i],search_fnum[i]);
371                     if(strcmp(fid,search_fid[i])==0 && search_fnum[i]>0)    //查询到对应航班
372                     {
373                         printf("order success\n");
374                         int j=0;
375                         for(j=0; j<MAX_Flight; j++) // 遍历航班表
376                         {
377                             if(strcmp(fid,FLI[j].fid)==0)
378                             {
379                                 FLI[j].fnum--;    //票数减1
380                                 break;
381                             }
382                         }
383                         int k=0;
384                         for(k=0; k<MAX_Order; k++)  // 遍历订票表
385                         {
386                             //printf("ready insert...\n");
387                             if(strlen(ORD[k].pid) == 0) // 在空位置插入数据
388                             {
389                                 strcpy(ORD[k].pid,online_pid);  // 插入当前用户身份证
390                                 strcpy(ORD[k].fid,search_fid[i]);   // 插入当前选择的航班号
391                                 ORD[k].num = 1;
392                                 printf("insert_to_order success\n");
393                                 break;
394                             }
395                         }
396                         return;
397                     }
398                     else if(strcmp(fid,search_fid[i])==0 && search_fnum[i] == 0)
399                     {
400                         printf("no ticket\n");
401                         search_start();
402                     }
403                     else if(i==MAX_Flight-1)
404                     {
405                         printf("don't have this fid\n");
406                         search_start();
407                     }
408                 }
409             }
410             else if(online == -1)
411             {
412                 printf("you have been locked,you can use this system now\n");
413             }
414             else
415             {
416                 login();
417             }
418         }
419     }
420 }
421 
422 // 查询航班
423 bool search(void)
424 {
425     printf("start: \n");
426     get_str(start,10);
427     printf("end: \n");
428     get_str(end,10);
429     int i=0;
430     search_num = 0;
431     for(i=0; i<MAX_Flight; i++)
432     {
433         if(strlen(start) == 0 || strlen(end) == 0)
434         {
435             printf("start or end can't be empty\n");
436             return false;
437         }
438         if(strcmp(FLI[i].start,start)==0 && strcmp(FLI[i].end,end)==0)
439         {
440             printf("fid:%s, ticket_num:%d\n",FLI[i].fid,FLI[i].fnum);
441             strcpy(search_fid[search_num],FLI[i].fid);
442             search_fnum[search_num] = FLI[i].fnum;
443             //printf("search_fid[%d]:%s, search_fun[%d]:%d\n",search_num,search_fid[search_num],search_num,search_fnum[search_num]);
444             ++search_num;
445         }
446         if(0 == search_num && i == MAX_Flight-1)
447         {
448             printf("no flight\n");
449             return false;
450         }
451         if(search_num > 0 && i == MAX_Flight-1)
452         {
453             //show_flight();
454             return true;
455         }
456     }
457 }
458 
459 // 输出订单信息
460 void order_list(void)
461 {
462     if(online == 1)
463     {
464         int i=0;
465         for(i=0; i<MAX_Order; i++)
466         {
467             if(strcmp(online_pid,ORD[i].pid)==0)
468             {
469                 //printf("online_pid:%s\n",online_pid);
470                 printf("fid:%s, pid:%s, ticket:%d\n",ORD[i].fid,ORD[i].pid,ORD[i].num);
471             }
472         }
473     }
474     else if(online == -1)
475     {
476         printf("you have been locked,you can use this system now\n");
477     }
478     else
479     {
480         login();
481     }
482 }
483 
484 // 删除订单
485 void del_order(void)
486 {
487     if(online == 1)
488     {
489         char fid[20];
490         printf("order_list:\n");
491         order_list();
492         printf("please entry del_order fid:");
493         get_str(fid,20);
494         int i=0;
495         for(i=0; i<MAX_Order; i++)
496         {
497             if(strlen(fid)==0)  //判空
498             {
499                 printf("del_order fid can't be empty\n");
500                 return;
501             }
502             if(strcmp(fid,ORD[i].fid)==0)
503             {
504                 memset(ORD[i].pid,'\0',sizeof(ORD[i].pid));
505                 int j=0;
506                 for(j=0; j<MAX_Flight; j++)
507                 {
508                     if(strcmp(fid,FLI[j].fid)==0)
509                     {
510                         FLI[j].fnum++;  // 返还飞机票
511                         break;
512                     }
513                 }
514                 printf("delete success\n");
515                 return;
516             }
517         }
518     }
519     else if(online == -1)
520     {
521         printf("you have been locked,you can use this system now\n");
522     }
523     else
524     {
525         login();
526     }
527 
528 }
529 
530 // 清理输入缓冲区
531 /*void clear_stdin(void)
532 {
533     stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
534 }
535 */
536 
537 // 读取输入字符串
538 char* get_str(char* str,size_t len)
539 {
540     if(NULL == str)
541     {
542         puts("empty ptr!");
543         return NULL;
544     }
545 
546     char *in=fgets(str,len,stdin);
547 
548     size_t cnt = strlen(str);
549     if('\n' == str[cnt-1])
550     {
551         str[cnt-1] = '\0';
552     }
553     else
554     {
555         scanf("%*[^\n]");
556         scanf("%*c");
557     }
558     
559     //clear_stdin();
560 
561     return str;
562 }
563 
564 // 获取cmd命令
565 char get_cmd(char start,char end)
566 {
567     //clear_stdin();
568 
569     printf("please entry cmd:");
570     while(true)
571     {
572         char val = getch();
573         if(val >= start && val <= end)
574         {
575             printf("%c\n",val);
576             return val;
577         }
578     }
579 }

 


原文链接:https://www.cnblogs.com/ikaros-521/p/11180065.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:HelloWorld! C++纠错版

下一篇:DFS(四):剪枝策略