C语言实现-航空订票系统(飞机订票系统)
2019-08-16 07:48:28来源:博客园 阅读 ()
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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:DFS(四):剪枝策略
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- 二叉排序树 2020-05-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash