C语言 数据结构课设 航空订票系统
发布时间
阅读量:
阅读量
目录
实现功能
部分功能测试截图
代码展示
实现功能
1.订票
2.退票
3.查询航班信息
4.修改航班信息
5.录入航班信息
6.打印订票信息
部分功能测试截图
功能选择界面

查询航班功能测试



订票功能测试

打印订票信息

代码展示
代码中需要的二个文件内容如下
第一个对应于代码中的《新建文本文本2.txt》,第二个指的是《新建文本文档.txt》。接下来需要创建两个txt文件夹,请将以下两个内容复制粘贴到相应的位置,并注意文件名中存在空格的情况。
注意
12:3616:1436908:3013:4269906:5811:3669921:3223:5679911:0019:3689909:3615:5536609:3314:4536612:1214:3019908:0012:30899
123456西安北京 200 369369宝鸡北京 220 148758上海北京 120 789456成都南京 220 484565南京揭阳 120 889834咸阳武汉 300 588685长春沈阳 210 789468九州台湾 100 556266香港黄冈 200
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #include <windows.h>
5. #define T1 p->data.fNumber //宏定义其中常用变量,便于书写
6. #define T2 p->data.place_go
7. #define T3 p->data.place_to
8. #define T4 p->data.seat_total
9. #define T5 p->data.seat_remainder
10. #define T6 p->data.goTime
11. #define T7 p->data.toTime
12. #define T8 p->data.price
13. #define R1 p->data.name
14. #define R2 p->data.fNumber
15. #define R3 p->data.id
16. #define R4 p->data.number
17. #define R5 p->data.Votes
18. typedef struct //航班结点定义
19. {
20. char place_go[20]; //始发地
21. char place_to[20]; //目的地
22. int seat_total; //座位总数
23. int seat_remainder; //剩余座位数
24. int fNumber; //航班号
25. char goTime[6]; //起飞时间
26. char toTime[6]; //抵达时间
27. char price[6]; //票价
28. }plane;
29.
30. typedef struct PNode //航班结构体定义
31. {
32. plane data;
33. struct PNode *next;
34. }PNode,*PlaneList;
35.
36. typedef struct //乘客结点定义
37. {
38. char name[14]; //姓名
39. char id[30]; //身份证号码
40. int number; //购票数
41. int Votes; //订单号
42. int fNumber; //航班号
43. }passenger;
44.
45. typedef struct RNode
46. {
47. passenger data;
48. struct RNode *next;
49. }RNode,*RenList;
50.
51. void input(PNode* head){ //用文件输入航班信息的方法
52.
53. FILE *fp,*fp1;
54. PlaneList p,r;
55. char qq[3];
56. int i,m;
57. r = head;
58. if((fp=fopen("新建文本文档.txt","r"))==NULL){
59. printf("航空基本信息文件打开失败!");
60. }
61. if((fp1=fopen("新建文本文档2.txt","r"))==NULL){
62. printf("航空补充信息文件打开失败!");
63. }
64. for(i=1;i<=9;i++) //自定义了9个航班信息,所以这里循环9次
65. {
66. p = (PlaneList)malloc(sizeof(PNode));
67. p->next = NULL;
68. fscanf(fp,"%d",&p->data.fNumber);
69. fgets(p->data.place_go,5,fp);
70. fgets(p->data.place_to,5,fp);
71. fscanf(fp,"%d",&m);
72. fgets(p->data.goTime,6,fp1);
73. fgets(p->data.toTime,6,fp1);
74. fgets(p->data.price,4,fp1);
75. p->data.seat_total = m;
76. p->data.seat_remainder = m;
77. r->next = p;
78. r = p;
79. }
80. }
81.
82. void input_1(PNode* head){ //由控制台输入航班信息的方法
83.
84. PlaneList p,t;
85. int m,x;
86. int fn;
87. char go[20],to[20];
88. p = head;
89. while(p->next!=NULL){
90. p=p->next; //将p指向head最后一个航班,方便在其后面链上其他航班信息
91. } //也防止新录入的信息顶掉已有信息
92.
93. printf("请输入需要输入的航班数:");
94. scanf("%d",&x);
95. printf(".......................................开始录入.......................................\n");
96. for(int i=1;i<=x;i++)
97. {
98. printf("***********开始输入第%d个航班信息***********\n",i);
99. t = (PlaneList)malloc(sizeof(PNode));
100. t->next=NULL;
101. printf("请输入航班号:");
102. scanf("%d",&fn);
103.
104. in: while(1){
105. PlaneList p;
106. p = head;
107. int tip = 1;
108. while(p->next!=NULL){
109. p=p->next;
110. if(fn==p->data.fNumber){
111. printf("输入错误!该航班已存在!\n");
112. printf("请重新输入航班号:");
113. scanf("%d",&fn);
114. tip = 2;
115. break;
116. }
117. }
118. if(tip==2){
119. goto in;
120. }else{
121. t->data.fNumber = fn;
122. break;
123. }
124. }
125. printf("请输入始发地:");
126. scanf("%s",go);
127. while(1){
128. if(strlen(go)<=8&&strlen(go)>=2){
129. strcpy(t->data.place_go,go);
130. break;
131. }
132. else
133. {
134. printf("请重新输入始发地(1至4个汉字或2至8个英文字符):");
135. scanf("%s",go);
136. }
137. }
138.
139.
140. printf("请输入目的地:");
141. scanf("%s",to);
142. while(1){
143. if(strlen(to)<=8&&strlen(to)>=2){
144. strcpy(t->data.place_to,to);
145. break;
146. }
147. else
148. {
149. printf("请重新输入目的地(1至4个汉字或2至8个英文字符):");
150. scanf("%s",to);
151. }
152. }
153.
154. printf("请输入机票总数:");
155. scanf("%d",&m);
156. t->data.seat_total = m;
157. t->data.seat_remainder = m;
158. printf("请输入飞机起飞时间:");
159. scanf("%s",t->data.goTime);
160. printf("请输入飞机抵达时间:");
161. scanf("%s",t->data.toTime);
162. printf("请输入该航班票价:");
163. scanf("%s",t->data.price);
164. p->next = t;
165. p = t;
166.
167. }
168. printf(".......................................录入完成.......................................\n");
169. }
170.
171. void inout(PNode* head) //查看所有航班信息的方法
172. {
173. PlaneList p;
174. p = head;
175. int i=0;
176. printf(".........................咸阳机场欢迎你.........................\n");
177. printf(" 航班号 始发地 目的地 机票总数 剩余票数 出发时间 抵达时间 价格\n");
178. while(p->next!=NULL){
179. p = p->next;
180. printf("%9d %10s %8s %d %d %10s %6s %4s\n",T1,T2,T3,T4,T5,T6,T7,T8);
181. }
182. }
183.
184. void inout_1(RNode* rhead) //查看乘客订单信息的方法
185. {
186. RenList p;
187. p = rhead;
188. if(p->next==NULL){
189. printf("没有订单信息!\n");
190. }else{
191. printf(".........................咸阳机场欢迎你.........................\n");
192. printf(" 姓名 航班 身份证号码 订单号 票数 \n");
193. }
194. while(p->next!=NULL){
195. p = p->next;
196. printf("%8s %d %18s %8d %d\n",R1,R2,R3,R4,R5);
197.
198. }
199.
200. }
201.
202. void research_1(PNode* head) //通过航班号查看航班信息的方法
203. {
204. int x,tip;
205. PlaneList p;
206. p = head;
207. tip = 1;
208. printf("请输入要查找的航班号:");
209. scanf("%d",&x);
210. printf("开始查找\n");
211. while(p->next!=NULL)
212. {
213. p = p->next;
214. if(p->data.fNumber==x)
215. {
216.
217. printf(" 航班号 始发地 目的地 机票总数 剩余票数 出发时间 抵达时间 价格\n");
218. printf("%9d %10s %8s %d %d %10s %6s %4s\n",T1,T2,T3,T4,T5,T6,T7,T8);
219. tip = 2;
220. break;
221. }
222.
223. }
224.
225. if(tip==1){
226. printf("该航班不存在\n");
227. }
228.
229. }
230.
231.
232. void research_2(PNode* head) //通过目的地和始发地查看航班信息的方法
233. {
234. char str1[20],str2[20];
235. PlaneList p;
236. int tip;
237. tip = 1;
238. p = head;
239. printf("请输入要查找的始发地:");
240. scanf("%s",str1);
241. printf("请输入要查找的目的地:");
242. scanf("%s",str2);
243. printf("开始查找\n");
244. while(p->next!=NULL){
245. p = p->next;
246. if(!strcmp(str1, p->data.place_go)&&!strcmp(str2, p->data.place_to)){
247. printf(" 航班号 始发地 目的地 机票总数 剩余票数 出发时间 抵达时间 价格\n");
248. printf("%9d %10s %8s %d %d %10s %6s %4s\n",T1,T2,T3,T4,T5,T6,T7,T8);
249. tip = 2;
250. break;
251. }
252. }
253.
254. if(tip==1){
255. printf("未找到该航班or该航班不存在\n");
256. }
257. }
258.
259.
260. void revise(PNode* head) //修改航班信息的方法
261. { //别问我为什么航空客运订票系统还可以修改航班信息,问就是题目要求的
262. PlaneList p;
263. int x,tip;
264. p = head;
265. printf("请输入要修改的航班号:");
266. scanf("%d",&x);
267. printf("开始修改\n");
268. while(p->next!=NULL)
269. {
270. p = p->next;
271. if(p->data.fNumber==x)
272. {
273. printf("请输入要修改的信息\n");
274. printf("请输入航班号:");
275. scanf("%d",&p->data.fNumber);
276. fflush(stdin);
277. printf("请输入始发地:");
278. scanf("%s",p->data.place_go);
279. printf("请输入目的地:");
280. scanf("%s",p->data.place_to);
281. printf("请输入机票总数:");
282. scanf("%d",&p->data.seat_total);
283. tip = 2;
284. break;
285. }
286.
287. }
288.
289. if(tip==1){
290. printf("未找到该航班or该航班不存在\n");
291. }
292. }
293.
294. void purchase (PNode* head,RNode* rhead) //乘客买票的方法
295. {
296. PlaneList p;
297. RenList r,h;
298. r = (RenList)malloc(sizeof(RNode));
299. r->next = NULL;
300. int x,t,tip,tip1;
301. p = head;
302. h = rhead;
303. tip = 1;
304. tip1 = 1;
305. char name[14];
306. char id[30];
307.
308. if(h->next!=NULL){ //让h指向rhead表尾,防止新输入信息替换掉已有信息
309. h = h->next;
310. }
311. printf("请输入真实姓名:");
312. scanf("%s",name);
313. while(1){
314. if(strlen(name)<=14&&strlen(name)>=4){
315. strcpy(r->data.name,name); //对信息筛选后赋给新申请的乘客信息结点
316. break; //以下大致相同,不在赘述
317. }
318. else
319. {
320. printf("请重新输入姓名(2-7个汉字):");
321. scanf("%s",name);
322. }
323. }
324.
325. printf("请输入身份证号:");
326. scanf("%s",id);
327. while(1){
328. if(strlen(id)==18){
329. for(int i=1;i<=18;i++)
330. {
331. if(id[i]<='0'&&id[i]>='9')
332. {
333. break;
334. }
335.
336. }
337. strcpy(r->data.id,id);
338. break;
339. }
340. else
341. {
342. printf("请输入合法身份证号码:");
343. scanf("%s",id);
344. }
345. }
346.
347.
348. printf("请选择乘坐航班:");
349. scanf("%d",&x);
350. while(1){
351. while(p->next!=NULL)
352. {
353. p = p->next;
354. if(p->data.fNumber==x)
355. {
356. tip1 = 2;
357. break;
358. }
359. }
360. if( tip1 != 2 )
361. {
362. printf("该航班不存在,请重新输入:");
363. p = head;
364. scanf("%d",&x);
365. }
366. else break;
367. }
368.
369.
370.
371. printf("请输入需要购买的票数;");
372. scanf("%d",&t);
373. while(1)
374. {
375. while(p!=NULL)
376. {
377. if(p->data.seat_remainder>=t)
378. {
379. p->data.seat_remainder-=t; //购票成功则修改剩余机票信息
380. tip = 2;
381. r->data.number = x-123; //依据航班号生成订单号
382. r->data.Votes = t;
383. r->data.fNumber = x;
384. printf("购票成功!\n");
385. }
386. break;
387.
388. }
389. if(tip!=2)
390. {
391. printf("还要%d张票\n",p->data.seat_remainder);
392. printf("机票不足,请重新输入:\n");
393. scanf("%d",&t);
394. }
395. else break;
396. }
397.
398. h->next=r; //让h指向新申请并已赋值的乘客结点
399. h = r; //其实就是乘客链表的创建过程,只不过中间掺杂了对输入信息的筛选语句
400. //所以比较分散
401. }
402.
403. void quash(PNode* head,RNode* rhead) //乘客退票方法
404. {
405. PlaneList p;
406. RenList r;
407. int x,t,tip;
408. p = head;
409. r = rhead;
410. tip = 1;
411. char name[14];
412. char id[18];
413.
414. qq: for(int i=1;i<=3;i++){
415. if(tip==2)
416. break;
417. printf("请输入身份证号:");
418. scanf("%s",id);
419. while(r->next!=NULL){
420. r=r->next;
421. if(!strcmp(id,r->data.id)){
422. printf("请选择航班:");
423. scanf("%d",&x);
424. if(r->data.fNumber!=x){
425. printf("你没有购买过该航班的票!");
426. printf("您还有%d次机会!!\n!",3-i);
427. break;
428. }
429. else{
430. while(p->next!=NULL)
431. {
432. p = p->next;
433. if(p->data.fNumber==x) //找到航班信息,并修改票数
434. {
435. printf("请输入需要退票的票数;");
436. scanf("%d",&t);
437. if(t<=r->data.number){
438. p->data.seat_remainder+=t;
439. r->data.number-=t;
440. tip = 2;
441. printf("退票成功!");
442. break;
443. }else{
444. printf("票数异常!!!\n");
445. printf("您还有%d次机会!!\n!",3-i);
446. }
447.
448. }
449. }
450. }
451. }
452. }
453.
454. }
455.
456. if(tip==1){
457. printf("退票失败\n");
458. }
459. }
460.
461. void print() //优化界面,也便于后期维护
462. {
463. printf(" ******************************************************************************** \n");
464. printf(" ****************************欢迎进入航空订票系统******************************** \n");
465. printf("\n");
466. printf(" 1 订票 \n");
467. printf("\n");
468. printf(" 2 退票 \n");
469. printf("\n");
470. printf(" 3 查询航班信息 \n");
471. printf("\n");
472. printf(" 4 修改航班信息 \n");
473. printf("\n");
474. printf(" 5 录入航班信息 \n");
475. printf("\n");
476. printf(" 6 打印订票信息 \n");
477. printf("\n");
478. printf(" 7 退出程序 \n");
479. printf("\n");
480. printf(" ******************************************************************************** \n");
481.
482. }
483.
484. void print1() //优化界面,也便于后期维护
485. {
486. printf(" ******************************************************************************** \n");
487. printf(" ****************************欢迎进入航空订票系统******************************** \n");
488. printf("\n");
489. printf("\n");
490. printf(" 1 查询所有航班 \n");
491. printf("\n");
492. printf(" 2 按航班号查询航班 \n");
493. printf("\n");
494. printf(" 3 按航程查询航班 \n");
495. printf("\n");
496. printf(" 4 返回 \n");
497. printf("\n");
498. printf("\n");
499. printf(" ******************************************************************************** \n");
500. }
501. int main()
502. {
503.
504. PNode *head; //定义航班链表和乘客链表并进行初始化
505. RNode *rhead;
506. int select;
507. head = (PlaneList)malloc(sizeof(PNode));
508. head->next = NULL;
509. rhead = (RenList)malloc(sizeof(RNode));
510. rhead->next = NULL;
511. input(head); //直接从文件中读取航班信息,这样就可直接测试系统,
512. //不用在输入大量航班才能进行测试
513. to: while(1){
514. system("cls");
515. printf("\n");
516. printf("\n");
517. print();
518. printf("请输入要进行的操作:");
519. scanf("%d",&select);
520. switch (select) {
521. case 1:
522. purchase(head,rhead);
523. printf("三秒后程序将返回.......");
524. Sleep(3*1000); //让程序停止运行三秒
525. system("cls"); //清除界面,配合break达到自动返回的目的
526. break;
527. case 2:
528. quash(head,rhead);
529. printf("三秒后程序将返回.......");
530. Sleep(3*1000);
531. system("cls");
532. break;
533. case 3:
534. while(1){
535. system("cls");
536. print1();
537. printf("请选择查询方式:");
538. scanf("%d",&select);
539. switch (select) {
540. case 1:
541. inout(head);
542. printf("五秒后程序将返回.......");
543. Sleep(5*1000);
544. system("cls");
545. break;
546. case 2:
547. research_1(head);
548. printf("五秒后程序将返回.......");
549. Sleep(5*1000);
550. system("cls");
551. break;
552. case 3:
553. research_2(head);
554. printf("五秒后程序将返回.......");
555. Sleep(5*1000);
556. system("cls");
557. break;
558. case 4:
559. goto to;
560. default:
561. printf(" 错误指令 #304 ");
562. break;
563. }
564. }
565.
566. case 4:
567. revise(head);
568. printf("五秒后程序将返回.......");
569. Sleep(5*1000);
570. system("cls");
571. break;
572. case 5:
573. input_1(head);
574. printf("五秒后程序将返回.......");
575. Sleep(5*1000);
576. system("cls");
577. break;
578. case 6:
579. inout_1(rhead);
580. printf("五秒后程序将返回.......");
581. Sleep(5*1000);
582. //system("cls");
583. break;
584. case 7:
585. exit(0);
586.
587. default:
588.
589. printf(" 错误指令 #304 ");
590. break;
591. }
592. }
593. return 0;
594. //复制粘贴后麻烦大家点个免费的赞哦!
595. //复制粘贴后麻烦大家点个免费的赞哦!
596. //复制粘贴后麻烦大家点个免费的赞哦!
597. }
598.
全部评论 (0)
还没有任何评论哟~
