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

控制台编程

开发平台:

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;
  148. char ch='#';
  149. airline *p=l->next ;
  150. char filename[]="c:\airline.dat";
  151. if((fp_airline=fopen(filename,"wb"))==NULL)
  152. {
  153. printf("can not open file to write:%sn",filename);
  154. return ERROR;
  155. }
  156. for(;p!=NULL;p=p->next )
  157. {
  158. // printf("%s,%s,%s,%d,%dn",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left );
  159. fprintf(fp_airline,"%s,%s,%s,%d,%d%cn",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left ,ch);
  160. }
  161. fclose(fp_airline);
  162. return OK;
  163. }
  164. status save_customer(customer *l)
  165. {
  166. FILE *fp_customer;
  167. char ch='#';
  168. customer *p=l->next ;
  169. char filename[]="c:\customer.dat";
  170. if((fp_customer=fopen(filename,"wb"))==NULL)
  171. {
  172. printf("can not open file to write:%sn",filename);
  173. return ERROR;
  174. }
  175. for(;p!=NULL;p=p->next )
  176. {
  177. // PR("%s,%s,%dn",p->name ,p->line_num ,p->seat_num );
  178. fprintf(fp_customer,"%s,%s,%d%c",p->name ,p->line_num ,p->seat_num ,ch);
  179. }
  180. fclose(fp_customer);
  181. return OK;
  182. }
  183. int changStrInt(char *ch)
  184. {
  185. int a=1,b=0,c=0,i;
  186. for (i=strlen(ch)-1;i>=0;i--)
  187. {
  188. if (ch[i]<58&&ch[i]>47)
  189. {
  190. b=a*(ch[i]-48);
  191. a=a*10;
  192. c=c+b;
  193. }
  194. else 
  195. {
  196. PR("%c 不合法,无法将此字符串转化为整形!n",ch[i]);
  197. return 0;
  198. }
  199. // printf("the c is %dn",c);
  200. }
  201. return c;
  202. }
  203. status load_airline(airline **l)
  204. {
  205. FILE *fp_airline;
  206. int flag=0,i=0;
  207. char ch;
  208. char line_num[8];//航班号
  209. char plane_num[8];//飞机号
  210. char end_place[20];//目的的
  211. char total_str[5];
  212. char left_str[5];
  213. int total;//座位总数
  214. int left;//剩余座位 
  215. airline *p=*l;
  216. char filename[50]="c:\airline.dat";
  217. if((fp_airline=fopen(filename,"rb"))==NULL)
  218. {
  219. printf("can not open file to load:%sn",filename);
  220. return ERROR;
  221. }
  222. while(!feof(fp_airline))
  223. {
  224. ch=fgetc(fp_airline);
  225. if(ch!='#')
  226. {
  227. if(flag==0&&ch!=',')
  228. {
  229. line_num[i]=ch;
  230. i++;
  231. }
  232. else if(flag==1&&ch!=',')
  233. {
  234. plane_num[i]=ch;
  235. i++;
  236. }
  237. else if(flag==2&&ch!=',')
  238. {
  239. end_place[i]=ch;
  240. i++;
  241. }
  242. else if(flag==3&&ch!=',')
  243. {
  244. total_str[i]=ch;
  245. i++;
  246. }
  247. else if(flag==4&&ch!=',')
  248. {
  249. left_str[i]=ch;
  250. i++;
  251. }
  252. else if (ch==',')
  253. {
  254. flag++;
  255. i=0;
  256. }
  257. else 
  258. {
  259. PR("错误n");
  260. return ERROR;
  261. }
  262. }
  263. else
  264. {
  265. flag=0;
  266. total=changStrInt(total_str);
  267. left=changStrInt(left_str);
  268. insert_airline(&p,line_num,plane_num,end_place,total,left);
  269. p=p->next ;
  270. }
  271. }
  272. fclose(fp_airline);
  273. return OK;
  274. }
  275. status load_customer(customer **l)
  276. {
  277. FILE *fp_customer;
  278. int flag=0,i=0;
  279. char ch;
  280. char name[9];
  281. char line_num[8];//航班号
  282. char seat_num_str[5];
  283. int seat_num;//座位 
  284. customer *p=*l;
  285. char filename[50]="c:\customer.dat";
  286. if((fp_customer=fopen(filename,"rb"))==NULL)
  287. {
  288. printf("can not open file to load:%sn",filename);
  289. return ERROR;
  290. }
  291. while(!feof(fp_customer))
  292. {
  293. ch=fgetc(fp_customer);
  294. printf("%cn",ch);
  295. if(ch!='#')
  296. {
  297. if(flag==0&&ch!=',')
  298. {
  299. name[i]=ch;
  300. i++;
  301. }
  302. else if(flag==1&&ch!=',')
  303. {
  304. line_num[i]=ch;
  305. i++;
  306. }
  307. else if(flag==2&&ch!=',')
  308. {
  309. seat_num_str[i]=ch;
  310. i++;
  311. }
  312. else if (ch==',')
  313. {
  314. flag++;
  315. i=0;
  316. }
  317. else 
  318. {
  319. PR("错误n");
  320. return ERROR;
  321. }
  322. }
  323. else
  324. {
  325. flag=0;
  326. seat_num=changStrInt(seat_num_str);
  327. PR("%10s      %10s       %dn",p->name ,p->line_num ,p->seat_num );
  328. insert_customer(&p,name,line_num,seat_num);
  329. p=p->next ;
  330. }
  331. }
  332. fclose(fp_customer);
  333. return OK;
  334. }
  335. status creat_airline(airline **l)
  336. {
  337. airline *p=*l;
  338. int i=0;
  339. char *line_num[3]={"bjnc01","bjsh02","shgz03"};
  340. char *plane_num[3]={"plane1","plane2","plane3"};
  341. char *end_place[3]={"南昌","上海","广州"};
  342. int total[3]={100,100,100};
  343. int left[3]={51,50,78};
  344. for (i=0;i<3;i++){
  345. insert_airline(&p,line_num[i],plane_num[i],end_place[i],total[i],left[i]);
  346. }
  347. return OK;
  348. }
  349. status creat_customer(customer **l)
  350. {
  351. customer *p=*l;
  352. int i=0;
  353. char *name[3]={"欧阳锦林","尹焕亮","付胜"};
  354. char *line_num[3]={"bjnc01","bjsh02","shgz03"};
  355. int seat_num[3]={1,5,10};
  356. for (i=0;i<3;i++){
  357. insert_customer(&p,name[i],line_num[i],seat_num[i]);
  358. }
  359. return OK;
  360. }
  361. status increase_air(airline *l,char *line_num,char *plane_num,char *end_place,int total)
  362. {
  363. airline *p=l->next ;
  364. for(;p->next !=NULL;p=p->next){}
  365. insert_airline(&p,line_num,plane_num,end_place,total,total);
  366. PR("增加航班 %s 成功!n",line_num);
  367. return OK;
  368. }
  369. status book(airline *l,char *line_num,customer *c,char *name)
  370. {
  371. airline *p=l;
  372. customer *q=c->next ;
  373. p=l->next ;
  374. for(;q->next !=NULL;q=q->next){}
  375. // PR("%sn",q->name );
  376. for(;p!=NULL;p=p->next )
  377. {
  378. if(strcmp(line_num,p->line_num )==0)
  379. {
  380. if(p->left >0)
  381. {
  382. PR("恭喜您!订票成功!n");
  383. PR("你的座位号是:  %dn",(p->total -p->left +1));
  384. insert_customer(&q,name,line_num,p->total -p->left +1);
  385. p->left --;
  386. return OK;
  387. }
  388. else PR("对不起,座位已满!n");
  389. return 0;
  390. }
  391. }
  392. PR("对不起,没有这个航班号!n");
  393. return ERROR;
  394. }
  395. status print_airline(airline *l)
  396. {
  397. airline *p=l->next ;
  398. for(;p!=NULL;p=p->next )
  399. {
  400. PR("%8s%8s%8s%9d%9dn",p->line_num ,p->plane_num ,p->end_place ,p->total ,p->left );
  401. }
  402. return OK;
  403. }
  404. status print_customer(customer *l)
  405. {
  406. customer *p=l->next ;
  407. for(;p!=NULL;p=p->next )
  408. {
  409. PR("%10s      %10s       %dn",p->name ,p->line_num ,p->seat_num );
  410. }
  411. return OK;
  412. }
  413. void main()
  414. {
  415. char choice,choice2,name[9],line_num[8],password[9],ch,plane_num[8],end_place[9];
  416. char pass[9]="wj024",re_pass_1[9],re_pass_2[9];
  417. int t=1,tt=1,total;
  418. airline *air=init_airline();
  419. customer *cus=init_customer();
  420. PR("微机024班 数据结构 课程设计 (一)n");
  421. PR("          航空订票系统n");
  422. PR("小组成员:欧阳锦林,王峰,段静缘n");
  423. creat_airline(&air);
  424. creat_customer(&cus);
  425. save_airline(air);
  426. save_customer(cus);
  427. while(t==1)
  428. {
  429. PR("*----------------------------*n");
  430. PR("*--航空订票系统选择菜单------*n");
  431. PR("*  订票-------0        *n");
  432. PR("*  退票-------1        *n");
  433. PR("*  查询-------2        *n");
  434. PR("*  修改航线---3        *n");
  435. // PR("*  读入文件---4        *n");
  436. PR("*  退出-------4        *n");
  437. PR("*----------------------------*n");
  438. PR("请选择: ");
  439. choice = getch();
  440. if(choice=='0')
  441. {
  442. PR("n请输入你要订的航班号: ");
  443. scanf( "%s",line_num);
  444. PR("请输入你的姓名: ");
  445. scanf( "%s",name);
  446. book(air,line_num,cus,name);
  447. save_airline(air);
  448. save_customer(cus);
  449. }
  450. else if(choice=='1')
  451. {
  452. PR("n请输入你的姓名: ");
  453. scanf( "%s",name);
  454. cus=delete_cus(cus,air,name);
  455. save_airline(air);
  456. save_customer(cus);
  457. }
  458. else if(choice=='2')
  459. {
  460. PR("n  航班号  飞机号   目的地    总票数   余票数n");
  461. print_airline(air);
  462. PR("    姓名            航班号      座位号n");
  463. print_customer(cus);
  464. }
  465. else if(choice=='3')
  466. {
  467. tt=1;
  468. PR("请输入密码: n");
  469. scanf("%s",password);
  470. if(strcmp(password,pass)==0)
  471. {
  472. while (tt==1){
  473. PR("n*------------------------------*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("*------------------------------*n");
  481. PR("请选择: ");
  482. choice2=getch();
  483. if(choice2=='0')
  484. {
  485. PR("请输入你要增加的航班号: ");
  486. scanf("%s",line_num);
  487. PR("请输入飞机号: ");
  488. scanf("%s",plane_num);
  489. PR("请输入目的地: ");
  490. scanf("%s",end_place);
  491. PR("请输入座位总数: ");
  492. scanf("%d",&total);
  493. increase_air(air,line_num,plane_num,end_place,total);
  494. save_airline(air);
  495. save_customer(cus);
  496. }
  497. else if (choice2=='1')
  498. {
  499. PR("请输入你要删除的航班号: n");
  500. scanf("%s",line_num);
  501. air=delete_airline(air,line_num);
  502. cus=delete_customer(cus,line_num);
  503. save_airline(air);
  504. save_customer(cus);
  505. }
  506. else if(choice2=='2')
  507. {
  508. PR("注意:密码不能超过8位!n");
  509. PR("请输入新密码:");
  510. scanf("%s",re_pass_1);
  511. PR("请再输入一次: ");
  512. scanf("%s",re_pass_2);
  513. if(strcmp(re_pass_1,re_pass_2)==0)
  514. {
  515. strcpy(pass,re_pass_1);
  516. PR("密码修改成功!请记住.n");
  517. }
  518. else {
  519. PR("你两次输入的密码不一致!n");
  520. }
  521. }
  522. else if(choice2=='3')
  523. {
  524. PR("n  航班号  飞机号   目的地    总票数   余票数n");
  525. print_airline(air);
  526. }
  527. else if(choice2=='4')
  528. {
  529. tt=0;
  530. }
  531. else {
  532. PR("你的输入有误n");
  533. tt=0;
  534. }
  535. }//end while
  536. }//end if
  537. else {
  538. PR("对不起!你输入的密码不正确!n");
  539. }
  540. }//end else if 修改
  541. /* else if(choice=='4')
  542. {
  543. load_airline(&air);
  544. load_customer(&cus);
  545. PR("文件读入完成n");
  546. }*/
  547. else if(choice=='4')
  548. {
  549. PR("再见!");
  550. t=0;
  551. }
  552. else 
  553. {
  554. PR("你的输入有误n");
  555. }
  556. }
  557. }