资源简介
1.问题描述
该设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
2.扩展功能:
①能够在起点站与终点站相同的航班信息中筛选出票价最低及飞行时间最短的航班,并显示;
②能够不断添加新的航班信息;
③能够检验输入时间的合法性。
3.任务要求
对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表(8条记录)
航班号 起点站 终点站 班期 起飞时间 到达时间 机型 票价
CA1544 合肥 北京 1.2.4.5 1055 1240 733 960
MU5341 上海 广州 每日 1420 1615 M90 1280
CZ3869 重庆 深圳 2.4.6 0855 1035 733 1010
MU3682 桂林 南京 2.3.4.6.7 2050 2215 M90 1380
HU1836 上海 北京 每日 0940 1120 738 1250
CZ3528 成都 厦门 1.3.4.5.7 1510 1650 CRJ 1060
MU4594 昆明 西安 1.3.5.6 1015 1140 328 1160
SC7425 青岛 海口 1.3.6 1920 2120 DH4 1630
其中航班号一项的格式为:
K0 K1 K2 K3 K4 K5
C Z 3 8 6 9
其中K0和K1的输入值是航空公司的别称,用两个大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
代码片段和文件信息
#include
#include
#include
#include/*getch()不回显函数的头文件*/
#define Max 100
#define keylen 7
#define flight_num 10/*航班号数字*/
#define flight_letter 26/*航班号字母*/
typedef char keytype;/*定义一个关键字类型*/
typedef struct
{
char start[6];/*起点站*/
char end[6];/*终点站*/
char date[15];/*班期*/
char stime[5];/*起飞时间*/
char atime[5];/*到达时间*/
char type[4];/*机型*/
int price;/*票价*/
}Flight;/*航班记录类型*/
typedef struct
{
keytype keys[keylen];/*关键字(航班号)*/
Flight others;/*其它信息*/
int next;
}SLNode;/*静态链表结点类型*/
typedef struct
{
SLNode SL[Max];/*静态链表,SL[0]为头结点*/
int keynum;/*记录当前关键字字符个数*/
int length;/*当前表长*/
}SLList;/*静态链表类型*/
typedef int array_num[flight_num];/*十进制数字指针数组*/
typedef int array_letter[flight_letter];/*26个字母指针数组*/
//函数声明
SLList inputdata1(SLList &L);
SLList inputdata(SLList &L);/*输入函数(数据有序化)*/
void Menu(SLList L);/*检索菜单及控制函数*/
void distribute_num(SLNode *SLint iarray_num farray_num e);/*数字字符分配函数(一趟)*/
void Collect_num(SLNode *SLint iarray_num farray_num e);/*数字字符收集函数(一趟)*/
void distribute_letter(SLNode *SLint iarray_letter farray_letter e);/*字母字符分配函数(一趟)*/
void Collect_letter(SLNode *SLint iarray_letter farray_letter e);/*字母字符收集函数(一趟)*/
void RadixSort(SLList &L);/*链式基数排序函数*/
void Arrange(SLList &L);/*按指针链重新整理静态链表,便于查找(省时省空间)*/
int half_search(SLList Lkeytype key[]);/*折半查找(航班号)*/
void price_search(SLList Lint w);/*票价查找*/
void order_search(SLList Lkeytype key[]int i);/*顺序查找*/
void find_way(SLList Lchar sta[]char end[]);/*票价查找*/
int main()
{
SLList L;
L.keynum=6;/*航班号当前个数*/
L.length=0;/*航班信息当前个数(初始化)*/
inputdata(L);/*数据输入并有序化*/
Menu(L);/*检索菜单及输出*/
return 0;
}
void distribute_num(SLNode *SLint iarray_num farray_num e)/*数字字符分配函数(一趟)*/
{
int jp;
for(j=0;j {
f[j]=e[j]=0;/*顺序表初始化,置空各子表*/
}
for(p=SL[0].next;p;p=SL[p].next)
{
j=SL[p].keys[i]%48;/*将数字字符转化成相对应的数值型数字*/
if(!f[j])
f[j]=p;/*f[j]为0*/
else
SL[e[j]].next=p;
e[j]=p;/*将p指向的结点插入到第j个子表中*/
}
}
void Collect_num(SLNode *SLint iarray_num farray_num e)/*数字字符收集函数(一趟)*/
{
int jt;
for(j=0;f[j];j++)/*找第一个非空子表*/
SL[0].next=f[j];/*指向第一个非空子表的一个结点*/
t=e[j];
while(j {
for(j=j+1;j if(f[j])
{
SL[t].next=f[j];
t=e[j]; /*连接两个非空子表*/
}
}
SL[t].next=0;/*t指向最后一个非空子表的最后一个结点*/
}
void distribute_letter(SLNode *SLint iarray_letter farray_letter e)/*字母字符分配函数(一趟)*/
{
int jp;
for(j=0;j {
f[j]=e[j]=0;
}
for(p=SL[0].next;p;p=SL[p].next)
{
j=SL[p].keys[i]%65;/*A-Z的ASCII码值为65-90*/
if(!f[j])
f[j]=p;
else
SL[e[j]].next=p;
e[j]=p;
}
}
void Collect_letter(SLNode *SLint iarray_letter farray_letter e)/*字母字符收集函数(一趟)*/
{
int jt;
f
- 上一篇:矩阵相乘的c语言代码
- 下一篇:C++学校人员信息管理系统课程设计.doc
相关资源
- C语言封装的HttpClient接口
- C语言课设计算器
- C语言 学生兴趣管理系统
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- KMP算法C语言程序
- Linux c语言 学生成绩管理系统
- 弹跳的小球(test.c)
- 林锐—高质量C编程
- 基于c语言的通讯录系统
- C语言全套课件与教学资料-哈工大
- 计算机二级C语言真题.docx
- C语言实现 设备信息管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- C语言标准库函数大全.chm
- C语言常用代码(分章节)
- c语言课程设计:客房登记系统源码
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c语言文都讲义2020
- c语言课件56883
- C语言推箱子win控制台
- C语言程序设计50例.docx
- 烟花优化算法(c语言版)
- C语言程序设计教材习题参考答案.do
- 数据结构(C语言版)ppt课件,清华,
- c语言编程经典例题100例 word版
- C语言编译器的设计与实现.doc
- C语言基础教程.pdf56620
评论
共有 条评论