航空订票系统_load.c
上传用户:janny_wxd
上传日期:2010-02-03
资源大小:261k
文件大小:13k
源码类别:

控制台编程

开发平台:

C/C++

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define OK 1
  5. #define TRUE 1
  6. #define FALSE 0
  7. #define ERROR 0
  8. #define OVERFLOW -2
  9. #define PR printf
  10. typedef int status;
  11. typedef struct airline{
  12. char line_num[8];//航班号
  13. char plane_num[8];//飞机号
  14. char end_place[20];//目的的
  15. int total;//座位总数
  16. int left;//剩余座位
  17. struct airline *next;//下一个结点
  18. }airline;
  19. typedef struct customer{
  20. char name[9];//顾客名
  21. char line_num[8];//航班号
  22. int seat_num;//座位号
  23. struct customer *next;//下一个结点
  24. }customer;
  25. airline *init_airline(){//初始化链表
  26. airline *l;
  27. l=(airline*)malloc(sizeof(airline));
  28. if(l==NULL){
  29. exit(0);
  30. }
  31. l->next=NULL;
  32. return l;
  33. }
  34. customer * init_customer(){//初始化链表
  35. customer *l;
  36. l=(customer*)malloc(sizeof(customer));
  37. if(l==NULL){
  38. exit(0);
  39. }
  40. l->next=NULL;
  41. return l;
  42. }
  43. status insert_airline(airline **p,char *line_num,char *plane_num,char *end_place,int total,int left){//airline链表插入操作
  44. airline *q;
  45. q=(airline*)malloc(sizeof(airline));
  46. strcpy(q->line_num , line_num);
  47. strcpy(q->plane_num , plane_num);
  48. strcpy(q->end_place , end_place);
  49. q->total  =total;
  50. q->left =left;
  51. q->next=NULL;
  52. (*p)->next=q;
  53. (*p)=(*p)->next;
  54.  //   printf("insert %d ,%dis succssed!n",e,bl);
  55. return OK;
  56. }
  57. status insert_customer(customer **p,char *name,char *line_num,int seat){//customer链表插入操作
  58. customer *q;
  59. q=(customer*)malloc(sizeof(customer));
  60. strcpy(q->name , name);
  61. strcpy(q->line_num , line_num);
  62. q->seat_num =seat;
  63. q->next=NULL;
  64. (*p)->next=q;
  65. (*p)=(*p)->next;
  66.  //   printf("insert %d ,%dis succssed!n",e,bl);
  67. return OK;
  68. }
  69. airline *modefy_airline(airline *l,char *line_num)
  70. {
  71. airline *p;
  72. p=l->next ;
  73. for(;p!=NULL;p=p->next )
  74. {
  75. if(strcmp(line_num,p->line_num )==0)
  76. {
  77. p->left ++;
  78. PR("modefy %sn",p->line_num );
  79. return l;
  80. }
  81. }
  82. PR("没有这个航班,无法完成修改任务!n");
  83. return 0;
  84. }
  85. airline *delete_airline(airline *h,char *line_num)
  86. {
  87. airline *p,*pr;
  88. pr=h;
  89. p=pr->next ;
  90. while(p!=NULL)
  91. {
  92. if(strcmp(line_num,p->line_num )==0)
  93. {
  94. pr->next =p->next ;
  95. PR("删除  %s  航班n",p->line_num  );
  96. return h;
  97. }
  98. pr=pr->next ;
  99. p=pr->next ;
  100. }
  101. PR("无此航班,无法删除!n");
  102. return 0;
  103. }
  104. customer *delete_customer(customer *h,char *line_num)
  105. {
  106. customer *p,*pr;
  107. pr=h;
  108. p=pr->next ;
  109. while(p!=NULL)
  110. {
  111. if(strcmp(line_num,p->line_num )==0)
  112. {
  113. pr->next =p->next ;
  114. }
  115. pr=pr->next ;
  116. p=pr->next ;
  117. }
  118. // PR("无此航班,无法删除!n");
  119. return h;
  120. }
  121. customer *delete_cus(customer *h,airline *l,char *name)
  122. {
  123. customer *p,*pr;
  124. char line_num[8];
  125. // qr=h;
  126. pr=h;
  127. p=pr->next ;
  128. // PR("开始删除n");
  129. while(p!=NULL)
  130. {
  131. if(strcmp(name,p->name )==0)
  132. {
  133. strcpy(line_num,p->line_num );
  134. l=modefy_airline(l,line_num);
  135. pr->next =p->next ;
  136. PR("顾客 %s 退票成功!n",p->name );
  137. return h;
  138. }
  139. pr=pr->next ;
  140. p=pr->next ;
  141. }
  142. PR("无此顾客,无法退票!n");
  143. return 0;
  144. }
  145. status save_airline(airline *l)
  146. {
  147. FILE *fp_airline,*fp_air;
  148. char ch='#';
  149. airline *p=l->next ;
  150. char filename[]="c:\airline.dat";
  151. char file[]="c:\air.dat";
  152. if((fp_airline=fopen(filename,"wb"))==NULL)
  153. {
  154. printf("can not open file to write:%sn",filename);
  155. return ERROR;
  156. }
  157. if((fp_air=fopen(file,"wb"))==NULL)
  158. {
  159. printf("can not open file to write:%sn",file);
  160. return ERROR;
  161. }
  162. for(;p!=NULL;p=p->next )
  163. {
  164. // printf("%s,%s,%s,%d,%dn",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left );
  165. if(fwrite(p,sizeof(airline),1,fp_air)!=1)
  166. {
  167. printf("fwrite is errorn");
  168. fclose(fp_air);
  169. }
  170. fprintf(fp_airline,"%s,%s,%s,%d,%d%cn",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left ,ch);
  171. }
  172. fclose(fp_airline);
  173. fclose(fp_air);
  174. return OK;
  175. }
  176. status save_customer(customer *l)
  177. {
  178. FILE *fp_customer,*fp_cus;
  179. char ch='#';
  180. customer *p=l->next ;
  181. char filename[]="c:\customer.dat";
  182. char file[]="c:\cus.dat";
  183. if((fp_customer=fopen(filename,"wb"))==NULL)
  184. {
  185. printf("can not open file to write:%sn",filename);
  186. return ERROR;
  187. }
  188. if((fp_cus=fopen(file,"wb"))==NULL)
  189. {
  190. printf("can not open file to write:%sn",file);
  191. return ERROR;
  192. }
  193. for(;p!=NULL;p=p->next )
  194. {
  195. if(fwrite(p,sizeof(customer),1,fp_cus)!=1)
  196. {
  197. printf("fwrite is errorn");
  198. fclose(fp_cus);
  199. }
  200. fprintf(fp_customer,"%s,%s,%d%c",p->name ,p->line_num ,p->seat_num ,ch);
  201. }
  202. fclose(fp_customer);
  203. fclose(fp_cus);
  204. return OK;
  205. }
  206. int changStrInt(char *ch)
  207. {
  208. int a=1,b=0,c=0,i;
  209. for (i=strlen(ch)-1;i>=0;i--)
  210. {
  211. if (ch[i]<58&&ch[i]>47)
  212. {
  213. b=a*(ch[i]-48);
  214. a=a*10;
  215. c=c+b;
  216. }
  217. else 
  218. {
  219. PR("%c 不合法,无法将此字符串转化为整形!n",ch[i]);
  220. return 0;
  221. }
  222. // printf("the c is %dn",c);
  223. }
  224. return c;
  225. }
  226. status load_airline(airline **l)
  227. {
  228. FILE *fp_air;
  229. char file[]="c:\air.dat";
  230. airline *p=*l;
  231. if((fp_air=fopen(file,"rb"))==NULL)
  232. {
  233. printf("can not open file to fread:%sn",file);
  234. return ERROR;
  235. }
  236. for(;p->next !=NULL;p=p->next )
  237. {
  238. if(fread(p,sizeof(airline),1,fp_air)!=1)
  239. {
  240. if(feof(fp_air))
  241. {
  242. fclose(fp_air);
  243. return OK;
  244. }
  245. printf("fwrite is errorn");
  246. }
  247. }
  248. fclose(fp_air);
  249. }
  250. /* int flag=0,i=0;
  251. char ch;
  252. char line_num[8];//航班号
  253. char plane_num[8];//飞机号
  254. char end_place[20];//目的的
  255. char total_str[5];
  256. char left_str[5];
  257. int total;//座位总数
  258. int left;//剩余座位 
  259. airline *p=*l;
  260. char filename[50]="c:\airline.dat";
  261. if((fp_airline=fopen(filename,"rb"))==NULL)
  262. {
  263. printf("can not open file to load:%sn",filename);
  264. return ERROR;
  265. }
  266. while(!feof(fp_airline))
  267. {
  268. ch=fgetc(fp_airline);
  269. if(ch!='#')
  270. {
  271. if(flag==0&&ch!=',')
  272. {
  273. line_num[i]=ch;
  274. i++;
  275. }
  276. else if(flag==1&&ch!=',')
  277. {
  278. plane_num[i]=ch;
  279. i++;
  280. }
  281. else if(flag==2&&ch!=',')
  282. {
  283. end_place[i]=ch;
  284. i++;
  285. }
  286. else if(flag==3&&ch!=',')
  287. {
  288. total_str[i]=ch;
  289. i++;
  290. }
  291. else if(flag==4&&ch!=',')
  292. {
  293. left_str[i]=ch;
  294. i++;
  295. }
  296. else if (ch==',')
  297. {
  298. flag++;
  299. i=0;
  300. }
  301. else 
  302. {
  303. PR("错误n");
  304. return ERROR;
  305. }
  306. }
  307. else
  308. {
  309. flag=0;
  310. total=changStrInt(total_str);
  311. left=changStrInt(left_str);
  312. insert_airline(&p,line_num,plane_num,end_place,total,left);
  313. p=p->next ;
  314. }
  315. }
  316. fclose(fp_airline);
  317. return OK;*/
  318. status load_customer(customer **l)
  319. {
  320. FILE *fp_customer;
  321. int flag=0,i=0;
  322. char ch;
  323. char name[9];
  324. char line_num[8];//航班号
  325. char seat_num_str[5];
  326. int seat_num;//座位 
  327. customer *p=*l;
  328. char filename[50]="c:\customer.dat";
  329. if((fp_customer=fopen(filename,"rb"))==NULL)
  330. {
  331. printf("can not open file to load:%sn",filename);
  332. return ERROR;
  333. }
  334. while(!feof(fp_customer))
  335. {
  336. ch=fgetc(fp_customer);
  337. printf("%cn",ch);
  338. if(ch!='#')
  339. {
  340. if(flag==0&&ch!=',')
  341. {
  342. name[i]=ch;
  343. i++;
  344. }
  345. else if(flag==1&&ch!=',')
  346. {
  347. line_num[i]=ch;
  348. i++;
  349. }
  350. else if(flag==2&&ch!=',')
  351. {
  352. seat_num_str[i]=ch;
  353. i++;
  354. }
  355. else if (ch==',')
  356. {
  357. flag++;
  358. i=0;
  359. }
  360. else 
  361. {
  362. PR("错误n");
  363. return ERROR;
  364. }
  365. }
  366. else
  367. {
  368. flag=0;
  369. seat_num=changStrInt(seat_num_str);
  370. PR("%10s      %10s       %dn",p->name ,p->line_num ,p->seat_num );
  371. insert_customer(&p,name,line_num,seat_num);
  372. p=p->next ;
  373. }
  374. }
  375. fclose(fp_customer);
  376. return OK;
  377. }
  378. status creat_airline(airline **l)
  379. {
  380. airline *p=*l;
  381. int i=0;
  382. char *line_num[3]={"bjnc01","bjsh02","shgz03"};
  383. char *plane_num[3]={"plane1","plane2","plane3"};
  384. char *end_place[3]={"南昌","上海","广州"};
  385. int total[3]={100,100,100};
  386. int left[3]={51,50,78};
  387. for (i=0;i<3;i++){
  388. insert_airline(&p,line_num[i],plane_num[i],end_place[i],total[i],left[i]);
  389. }
  390. return OK;
  391. }
  392. status creat_customer(customer **l)
  393. {
  394. customer *p=*l;
  395. int i=0;
  396. char *name[3]={"欧阳锦林","尹焕亮","付胜"};
  397. char *line_num[3]={"bjnc01","bjsh02","shgz03"};
  398. int seat_num[3]={1,5,10};
  399. for (i=0;i<3;i++){
  400. insert_customer(&p,name[i],line_num[i],seat_num[i]);
  401. }
  402. return OK;
  403. }
  404. status increase_air(airline *l,char *line_num,char *plane_num,char *end_place,int total)
  405. {
  406. airline *p=l->next ;
  407. for(;p->next !=NULL;p=p->next){}
  408. insert_airline(&p,line_num,plane_num,end_place,total,total);
  409. PR("增加航班 %s 成功!n",line_num);
  410. return OK;
  411. }
  412. status book(airline *l,char *line_num,customer *c,char *name)
  413. {
  414. airline *p=l;
  415. customer *q=c->next ;
  416. p=l->next ;
  417. for(;q->next !=NULL;q=q->next){}
  418. // PR("%sn",q->name );
  419. for(;p!=NULL;p=p->next )
  420. {
  421. if(strcmp(line_num,p->line_num )==0)
  422. {
  423. if(p->left >0)
  424. {
  425. PR("恭喜您!订票成功!n");
  426. PR("你的座位号是:  %dn",(p->total -p->left +1));
  427. insert_customer(&q,name,line_num,p->total -p->left +1);
  428. p->left --;
  429. return OK;
  430. }
  431. else PR("对不起,座位已满!n");
  432. return 0;
  433. }
  434. }
  435. PR("对不起,没有这个航班号!n");
  436. return ERROR;
  437. }
  438. status print_airline(airline *l)
  439. {
  440. airline *p=l->next ;
  441. for(;p!=NULL;p=p->next )
  442. {
  443. PR("%8s%8s%8s%9d%9dn",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left );
  444. }
  445. return OK;
  446. }
  447. status print_customer(customer *l)
  448. {
  449. customer *p=l->next ;
  450. for(;p!=NULL;p=p->next )
  451. {
  452. PR("%10s      %10s       %dn",p->name ,p->line_num ,p->seat_num );
  453. }
  454. return OK;
  455. }
  456. void main()
  457. {
  458. char choice,choice2,name[9],line_num[8],password[9],ch,plane_num[8],end_place[9];
  459. char pass[9]="wj024",re_pass_1[9],re_pass_2[9];
  460. int t=1,tt=1,total;
  461. airline *air=init_airline();
  462. customer *cus=init_customer();
  463. //PR("%d",sizeof(airline));
  464. PR("微机024班 数据结构 课程设计 (一)n");
  465. PR("          航空订票系统n");
  466. PR("小组成员:欧阳锦林,王峰,段静缘n");
  467. creat_airline(&air);
  468. creat_customer(&cus);
  469. save_airline(air);
  470. save_customer(cus);
  471. while(t==1)
  472. {
  473. PR("*----------------------------*n");
  474. PR("*--航空订票系统选择菜单------*n");
  475. PR("*  订票-------0        *n");
  476. PR("*  退票-------1        *n");
  477. PR("*  查询-------2        *n");
  478. PR("*  修改航线---3        *n");
  479. PR("*  读入文件---4        *n");
  480. PR("*  退出-------5        *n");
  481. PR("*----------------------------*n");
  482. PR("请选择: ");
  483. choice = getch();
  484. if(choice=='0')
  485. {
  486. PR("n请输入你要订的航班号: ");
  487. scanf( "%s",line_num);
  488. PR("请输入你的姓名: ");
  489. scanf( "%s",name);
  490. book(air,line_num,cus,name);
  491. save_airline(air);
  492. save_customer(cus);
  493. }
  494. else if(choice=='1')
  495. {
  496. PR("n请输入你的姓名: ");
  497. scanf( "%s",name);
  498. cus=delete_cus(cus,air,name);
  499. save_airline(air);
  500. save_customer(cus);
  501. }
  502. else if(choice=='2')
  503. {
  504. PR("n  航班号  飞机号   目的地    总票数   余票数n");
  505. print_airline(air);
  506. PR("    姓名            航班号      座位号n");
  507. print_customer(cus);
  508. }
  509. else if(choice=='3')
  510. {
  511. tt=1;
  512. PR("请输入密码: n");
  513. scanf("%s",password);
  514. if(strcmp(password,pass)==0)
  515. {
  516. while (tt==1){
  517. PR("n*------------------------------*n");
  518. PR("*-------航线信息修改:----------*n");
  519. PR("* 增加航班号-----'0'     *n");
  520. PR("* 删除航班号-----'1'     *n");
  521. PR("* 修改密码-------'2'     *n");
  522. PR("* 查询航线信息---'3'     *n");
  523. PR("* 退出航线修改---'4'     *n");
  524. PR("*------------------------------*n");
  525. PR("请选择: ");
  526. choice2=getch();
  527. if(choice2=='0')
  528. {
  529. PR("请输入你要增加的航班号: ");
  530. scanf("%s",line_num);
  531. PR("请输入飞机号: ");
  532. scanf("%s",plane_num);
  533. PR("请输入目的地: ");
  534. scanf("%s",end_place);
  535. PR("请输入座位总数: ");
  536. scanf("%d",&total);
  537. increase_air(air,line_num,plane_num,end_place,total);
  538. save_airline(air);
  539. save_customer(cus);
  540. }
  541. else if (choice2=='1')
  542. {
  543. PR("请输入你要删除的航班号: n");
  544. scanf("%s",line_num);
  545. air=delete_airline(air,line_num);
  546. cus=delete_customer(cus,line_num);
  547. save_airline(air);
  548. save_customer(cus);
  549. }
  550. else if(choice2=='2')
  551. {
  552. PR("注意:密码不能超过8位!n");
  553. PR("请输入新密码:");
  554. scanf("%s",re_pass_1);
  555. PR("请再输入一次: ");
  556. scanf("%s",re_pass_2);
  557. if(strcmp(re_pass_1,re_pass_2)==0)
  558. {
  559. strcpy(pass,re_pass_1);
  560. PR("密码修改成功!请记住.n");
  561. }
  562. else {
  563. PR("你两次输入的密码不一致!n");
  564. }
  565. }
  566. else if(choice2=='3')
  567. {
  568. PR("n  航班号  飞机号   目的地    总票数   余票数n");
  569. print_airline(air);
  570. }
  571. else if(choice2=='4')
  572. {
  573. tt=0;
  574. }
  575. else {
  576. PR("你的输入有误n");
  577. tt=0;
  578. }
  579. }//end while
  580. }//end if
  581. else {
  582. PR("对不起!你输入的密码不正确!n");
  583. }
  584. }//end else if 修改
  585. else if(choice=='4')
  586. {
  587. // load_airline(&air);
  588. // load_customer(&cus);
  589. PR("文件读入完成n");
  590. }
  591. else if(choice=='5')
  592. {
  593. PR("再见!");
  594. t=0;
  595. }
  596. else 
  597. {
  598. PR("你的输入有误n");
  599. }
  600. }
  601. }