项目要求

  1.已经给出链表定义(本系统用双链表实现更为方便,但是由于要求用单链表,所以按照规定做事)

  2.信息录入(当然是添加航班与取消航班了)

  3.按照起飞时间先后顺序排列(可以在插入时即顺序插入,但为了体现排序过程,封装成了排序函数)

  4.可根据不同关键字进行查询(实现了三种具有代表性的查询方案:航班号查询(结果唯一),起点站查询(结果不唯一),路线查询(最常用))


实现

头文件

 1 //@ author 成鹏致远
 2 //@ net http://infodown.tap.cn
 3 //@ qq 552158509
 4 //@ blog lcw.cnblogs.com
 5
 6 #ifndef __FLIGHT_H
 7 #define __FLIGHT_H
 8
 9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <stdbool.h>
12 #include <string.h>
13
14 typedef struct flight
15 {
16     char number[10];//航班号
17     char staddress[20];//起站点
18     char arraddress[20];//终点站
19     char date[10];//班期
20     char type[4];//机型
21     int stime;//起飞时间
22     int atime;//到达时间
23     int value;//标价
24 }datatype;
25
26 typedef struct node
27 {
28     datatype info;
29     struct node *next;
30 }node_list,*p_node_list;
31
32
33 extern void flight_manage(p_node_list phead);//航班管理
34 extern void flight_add(p_node_list phead);//添加航班
35 extern p_node_list in_number(p_node_list phead, char *);//通过航班号查询航班,有则返回指向航班的前一个节点的指针(删除节点时方便操作)
36 extern void flight_cancel(p_node_list phead);//取消航班
37 extern void flight_show(p_node_list phead);//显示航班信息
38 extern void flight_search(p_node_list phead);//查询航班信息
39
40 extern void list_init(p_node_list *phead);//链表头初始化
41 extern void keep_scren();//保持界面
42 extern void flight_sort(p_node_list phead);//按起飞时间排序
43
44 extern void flight_print(p_node_list pnode);//打印pnode指向的结点的航班信息
45
46
47
48
49 extern void flight_search(p_node_list phead);//查询航班信息
50 extern void search_by_number(p_node_list phead, char *num);//航班号查询
51 extern void search_by_saddr(p_node_list phead, char *saddr);//起点站查询
52 extern void search_by_line(p_node_list phead, char *saddr, char *daddr);//航线查询
53
54
55
56 #endif

View Code

主文件

 1 //@ author 成鹏致远
 2 //@ net http://infodown.tap.cn
 3 //@ qq 552158509
 4 //@ blog lcw.cnblogs.com
 5
 6 //功能: 1.信息录入
 7 //     2.信息显示(按照起飞时间先后顺序显示)
 8 //     3.信息查询(可根据不同的关键字进行查询)
 9
10 #include "flight.h"
11
12 int main()
13 {
14     p_node_list phead;
15     int num;//功能选择
16     int ret;//存储scanf返回值
17
18     list_init(&phead);//初始化
19
20     do
21     {
22         system("clear");
23         printf("\tFlight Searching System\n");
24         printf("******************************* \n");
25         printf("1.Manage Flight \n");
26         printf("2.Printf Flight Information \n");
27         printf("3.Search Flight Information \n");
28         printf("4.Exit \n");
29         printf("******************************* \n");
30         printf("Pls select:");
31
32         ret = scanf("%d",&num);
33         while('\n' != getchar());//清空输入缓冲区
34
35         if(1 != ret)//输入字符
36         {
37             printf("******************************* \n");
38             printf("\tPls input your select !\n");
39             printf("******************************* \n");
40             sleep(2);
41         }
42
43
44         switch(num)
45         {
46             case 1://航班管理
47                 flight_manage(phead);
48                 break;
49             case 2://显示航班信息
50                 flight_show(phead);
51                 break;
52             case 3://查询航班信息
53                 flight_search(phead);
54                 break;
55             case 4://退出系统
56                 exit(0);
57             default:
58                 break;
59         }
60     }
61     while(4 != num);
62
63     return 0;
64 }

View Code

航班管理文件

  1 //@ author 成鹏致远
  2 //@ net http://infodown.tap.cn
  3 //@ qq 552158509
  4 //@ blog lcw.cnblogs.com
  5
  6 #include "flight.h"
  7
  8 void flight_manage(p_node_list phead)//航班管理
  9 {
 10     int num;
 11     int ret;//存储scanf返回值
 12
 13     do
 14     {
 15         system("clear");
 16         printf("\tFlight Management\n");
 17         printf("******************************* \n");
 18         printf("1.Add flight \n");
 19         printf("2.Cancel flight \n");
 20         printf("3.Print flight information \n");
 21         printf("4.Exit \n");
 22         printf("******************************* \n");
 23         printf("Pls select:");
 24
 25         ret = scanf("%d",&num);
 26         while('\n' != getchar());//清空缓冲区
 27
 28         if(1 != ret)//输入字符
 29         {
 30             printf("******************************* \n");
 31             printf("\tPls input your select !\n");
 32             printf("******************************* \n");
 33             sleep(2);
 34         }
 35         switch(num)
 36         {
 37             case 1://添加航班
 38                 flight_add(phead);
 39                 break;
 40             case 2://取消航班
 41                 flight_cancel(phead);
 42                 break;
 43             case 3://航班信息
 44                 flight_show(phead);
 45                 break;
 46             case 4:
 47                 return;
 48             default:
 49                 break;
 50         }
 51     }
 52     while(4 != num);
 53 }
 54
 55 void flight_add(p_node_list phead)//添加航班
 56 {
 57     p_node_list pnode;
 58
 59     pnode = (p_node_list)malloc(sizeof(node_list));
 60     if(NULL == pnode)
 61     {
 62         perror("flight_add(malloc)");
 63         exit(1);
 64     }
 65
 66     //输入航班信息
 67     system("clear");
 68     printf("\tPls input flight information:\n");
 69     printf("******************************* \n");
 70     printf("1.Flight number      :");
 71         while(1)//航班号为主键,不能重复
 72         {
 73             gets(pnode->info.number);
 74             if(NULL != in_number(phead,pnode->info.number))
 75                 printf("Flight number exist,Pls input again:");
 76             else
 77                 break;
 78         }
 79     printf("2.Start address      :");
 80         gets(pnode->info.staddress);
 81     printf("3.Destination address:");
 82         gets(pnode->info.arraddress);
 83     printf("4.Flight date        :");
 84         gets(pnode->info.date);
 85     printf("5.Flight type        :");
 86         gets(pnode->info.type);
 87     printf("6.Flight start time  :");//需要对输入时间进行格式化处理和判断,这里略过
 88         scanf("%d",&pnode->info.stime);
 89     printf("7.Flight arrive time :");
 90         scanf("%d",&pnode->info.atime);
 91     printf("8.Ticket price       :");
 92         scanf("%d",&pnode->info.value);
 93
 94     pnode->next = phead->next;
 95     phead->next = pnode;
 96     printf("*******************************");
 97     printf("\n\tAdd success!\n");
 98     printf("*******************************");
 99     keep_scren();//保持界面
100
101 }
102
103 p_node_list in_number(p_node_list phead, char *number)//通过航班号查询是否已有此航班,如果有,则返回指向航班的前一个节点的指针(删除节点时方便操作)
104 {
105     p_node_list pnode  = phead;//遍历节点
106
107     while(NULL != pnode->next)
108     {
109         if(0 == strcmp(number,pnode->next->info.number))
110         {
111             return pnode;
112         }
113         pnode = pnode->next;
114     }
115
116     return NULL;
117 }
118
119 void flight_cancel(p_node_list phead)//取消航班
120 {
121     char num[10];
122     p_node_list pnode;//存储删除节点前一节点地址
123     p_node_list tmp;//临时指向删除节点地址
124
125     printf("Pls input the number to be cancel:");
126     gets(num);
127     pnode = in_number(phead,num);
128
129
130     if(NULL == pnode)//不存在此航班
131     {
132         printf("\tNo this flight,Pls check!");
133         keep_scren();//保持界面
134     }
135     else//删除航班
136     {
137         tmp = pnode->next;//删除该节点
138         pnode->next = tmp->next;//这里可以利用in_number()的返回值进行删除节点,pnode为另一变量,故只能对pnode->next赋值才能改变原链表
139         free(tmp);
140         printf("\tCancel success,Pls check!");
141         keep_scren();//保持界面
142     }
143
144 }
145
146 void flight_show(p_node_list phead)//显示航班信息
147 {
148     printf("*******************************\n");
149     printf("\tFlight Information\n");
150     printf("*******************************\n");
151     p_node_list pnode = phead->next;
152
153     if(NULL == pnode)
154     {
155         printf("\tNo flight,Pls check!\n");
156         printf("*******************************\n");
157     }
158
159     while(NULL != pnode)
160     {
161         flight_sort(phead);//先按起飞时间进行排序
162         flight_print(pnode);//打印航班信息
163         pnode = pnode->next;
164     }
165     keep_scren();//保持界面
166 }
167
168
169
170 void list_init(p_node_list *phead)//链表头初始化
171 {
172     *phead = (p_node_list)malloc(sizeof(node_list));
173     if(NULL == *phead)
174     {
175         perror("List_init(malloc)");
176         exit(1);
177     }
178     (*phead)->next = NULL;//初始化为空
179 }
180
181 void keep_scren()//保持界面
182 {
183     char answer;
184
185     printf("\n*******************************\n");
186     printf("\treturn ?(y/Y) \n");
187     while(1)
188     {
189         scanf("%c",&answer);
190         if('y' == answer || 'Y' == answer)
191             return;
192     }
193 }
194
195
196 void flight_sort(p_node_list phead)//按起飞时间排序
197 {
198     p_node_list pnode = phead->next;
199     p_node_list tmp;
200     datatype data;//用来临时存放元素数据
201
202     while(NULL != pnode)
203     {
204         tmp = pnode->next;
205
206         while(NULL != tmp)
207         {
208             if(pnode->info.stime > tmp->info.stime)//交换值域
209             {
210                 data = tmp->info;
211                 tmp->info = pnode->info;
212                 pnode->info = data;
213             }
214             tmp = tmp->next;
215         }
216         pnode = pnode->next;
217     }
218
219 }
220
221 void flight_print(p_node_list pnode)//打印pnode指向的结点的航班信息
222 {
223     printf("Flight number      :%s\t<------Key value \nStart address      :%s \nDestination address:%s \nFlight date        :%s \nFlight type        :%s \nStart time         :%d \nArrive time        :%d \nTicket price       :%d \n",pnode->info.number,pnode->info.staddress,pnode->info.arraddress,pnode->info.date,pnode->info.type,pnode->info.stime,pnode->info.atime,pnode->info.value);
224     printf("*******************************\n");
225 }

View Code

航班查询文件

  1 //@ author 成鹏致远
  2 //@ net http://infodown.tap.cn
  3 //@ qq 552158509
  4 //@ blog lcw.cnblogs.com
  5
  6 #include "flight.h"
  7
  8
  9 void flight_search(p_node_list phead)//查询航班信息
 10 {
 11     int num;
 12     int ret;//存储scanf返回值
 13     char number[10],saddr[20],daddr[20];//航班号,起点站,终点站
 14
 15     do
 16     {
 17         system("clear");
 18         printf("\tSearch Flight!\n");
 19         printf("******************************* \n");
 20         printf("1.Search by number \n");
 21         printf("2.Search by start address \n");
 22         printf("3.Search by flight line \n");
 23         printf("4.Exit \n");
 24         printf("******************************* \n");
 25         printf("Pls select:");
 26
 27         ret = scanf("%d",&num);
 28         while('\n' != getchar());//清空缓冲区
 29
 30         if(1 != ret)//输入字符
 31         {
 32             printf("******************************* \n");
 33             printf("\tPls input your select\n");
 34             printf("******************************* \n");
 35             sleep(2);
 36         }
 37         switch(num)
 38         {
 39             case 1://航班号查询
 40                 {
 41                     printf("Pls input the number:");
 42                     gets(number);
 43                     search_by_number(phead,number);
 44                     break;
 45                 }
 46             case 2://起点站查询
 47                 {
 48                     printf("Pls input the start address:");
 49                     gets(saddr);
 50                     search_by_saddr(phead,saddr);
 51                     break;
 52                 }
 53             case 3://路线查询
 54                 {
 55                     printf("Pls input the start address:");
 56                     gets(saddr);
 57                     printf("Pls input the destination address:");
 58                     gets(daddr);
 59                     search_by_line(phead,saddr,daddr);
 60                     break;
 61                 }
 62             case 4:
 63                 return;
 64             default:
 65                 break;
 66         }
 67     }
 68     while(4 != num);
 69 }
 70
 71
 72 void search_by_number(p_node_list phead, char *num)//航班号查询
 73 {
 74     p_node_list pnode = in_number(phead, num);//返回指定节点的下一个节点
 75     if(NULL == pnode)
 76     {
 77         printf("No Flight!\n");
 78         keep_scren();
 79     }
 80     else//打印航班信息
 81     {
 82         pnode = pnode->next;
 83         flight_print(pnode);
 84         keep_scren();
 85     }
 86 }
 87
 88
 89 void search_by_saddr(p_node_list phead, char *saddr)//起点站查询
 90 {
 91     p_node_list pnode = phead->next;
 92
 93     if(NULL == pnode)//无航班
 94     {
 95         printf("No Flight!\n");
 96         keep_scren();
 97     }
 98     else//遍历查找
 99     {
100         while(NULL != pnode)
101         {
102             if(0 == strcmp(saddr,pnode->info.staddress))//找到
103             {
104                 flight_print(pnode);//打印航班信息
105                 keep_scren();
106                 break;
107             }
108             pnode = pnode->next;
109         }
110     }
111 }
112 void search_by_line(p_node_list phead, char *saddr, char *daddr)//航线查询
113 {
114     p_node_list pnode = phead->next;
115
116     if(NULL == pnode)//无航班
117     {
118         printf("No Flight!\n");
119         keep_scren();
120     }
121     else//遍历查找
122     {
123         while(NULL != pnode)
124         {
125             if(0 == strcmp(saddr,pnode->info.staddress) && 0 == strcmp(daddr,pnode->info.arraddress))//找到
126             {
127                 flight_print(pnode);//打印航班信息
128                 keep_scren();
129                 break;
130             }
131             pnode = pnode->next;
132         }
133     }
134 }

View Code

Makefile文件

1 flight:flight_manage.c main.c flight_search.c
2         gcc -o $@ $^
3
4 clean:
5         $(RM) flight .*.sw?

View Code

【数据结构】小项目:航班查询系统相关推荐

  1. C小项目 —— 学生选课系统

    C小项目 -- 学生选课系统 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include&l ...

  2. 2018年江苏省计算机小高考,江苏2018年小高考成绩查询系统网站入口:江苏省教育考试院...

    [导语]无忧考网从江苏省教育考试院获悉,江苏2018年小高考成绩查询系统网站入口将于4月9日上午正式开通! 江苏省教育考试院关于发布江苏省2018年普通高中学业水平测试必修科目考试成绩的通告 江苏省2 ...

  3. Java 编写航班查询系统 窗体程序 完整源码

    开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可以.数据库采用:MySQL.运行主程序,或者执行打开JAR文件即可以运行本程序. 系统框架 利用JDK自带的SWING框架开发,需要 ...

  4. 航班编程代码c语言,航班查询系统C语言源程序

    <航班查询系统C语言源程序>由会员分享,可在线阅读,更多相关<航班查询系统C语言源程序(8页珍藏版)>请在人人文库网上搜索. 1.include #include #inclu ...

  5. c语言航班信息查询系统 程序,航班查询系统C语言源程序.doc

    航班查询系统C语言源程序 #include #include #include #define NOD struct plane_list struct plane {char number [10] ...

  6. java 航班_Java实现简单航班查询系统-Go语言中文社区

    #java实现简单航班管理系统 题目要求:声明一个Flight(航班)类,该类包含private域航班号(如:CA1430),起飞时间(如:10:15AM),到达时间(如:2:30PM).为该类声明合 ...

  7. Java实现简单航班查询系统

    #java实现简单航班管理系统 题目要求:声明一个Flight(航班)类,该类包含private域航班号(如:CA1430),起飞时间(如:10:15AM),到达时间(如:2:30PM).为该类声明合 ...

  8. ## 大一java课程设计_航班查询系统(我是小白)

    大一java课程设计_航班查询系统(我是小白) 备注:第一个java程序有借鉴别人的成分,因为忘了在哪个大佬上面借鉴的,所以在此备注,如有侵权,请联系删除,(仅用于学习使用,并未想盈利) 框体介绍 一 ...

  9. 【小项目】OA系统-员工管理

    [小项目]OA系统-员工管理 嘿,你好啊,好久没有更新文章了,本站最近遭遇了大的波动,暂时没心情更新.刚好16级学弟学妹们要参加初级软件工程师的证书考试,看了他们的习题,就简单做了一个,方便他们观看. ...

最新文章

  1. 深度学习之卷积神经网络(5)表示学习
  2. 使用 CSS 用户选择控制选择
  3. jquery网页刷新后控件失效_jquery动态增减控件如何才能不刷新页面
  4. [Java基础]List集合子类特点
  5. jexboss工具 -- JBOSS未授权访问漏洞利用
  6. React开发(148):componentWillReceiveProps
  7. C# 取二位小数点(四舍五入)
  8. C#程序设计下,网易云课堂,计算机专业
  9. 视频软件会声会影支持哪些视频格式?
  10. Kubernetes环境下如何运行Coherence缓存集群
  11. ug二次开发python_学习UG NX软件二次开发你必须具备这些基础!
  12. Educational Codeforces Round 77 D.A Game with Traps(二分+差分+前缀和)
  13. 一图掌握ICT项目管理流程图「实例」
  14. 惠普服务器驱动自动安装步骤,惠普系统安装步骤的【详细介绍】
  15. 给div添加蒙版(遮罩?)
  16. vue报错“NavigationDuplicat: Avoided redundant navigation to current location”解决方法
  17. 京东手机评论数据集介绍
  18. 鼠标移动文字上显示图片
  19. 什么是云服务举例说明_什么叫云服务举例说明(云服务器实例是什么)
  20. Foo,getName题解分析

热门文章

  1. 信息安全技术——Many Time Pad攻击实验
  2. sprintboot 微信静默授权代码
  3. 高中计算机课代表优秀事迹,开学啦 | 课代表欧弟的优秀事迹
  4. 滁州职业学院计算机,2020年滁州职业技术学院分类职业技能(系统根据考生所填第一志愿发布试卷进行测试)1、机电类专业技能(满分80分)...
  5. 09款苹果笔记本图片_简单分辨二手苹果笔记本(MacBook Pro)年份的方法
  6. 云计算技术基础【6】
  7. spring boot 瘦身打包排除其他依赖jar包
  8. JZOJ 3158 【JSOI2013】丢番图
  9. ROM、RAM、内存、内存条、外存、内部存储器、外部存储器、FLASH等之间的关系
  10. 给自己一个整洁的办公环境,我是指你的电脑系统