logo资料库

数据结构课程设计 :航班信息的查询与检索.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
题目:航班信息的查询与检索 设计一个实用的航班信息查询和检索系统,要求能对飞机航班信息进行排 序和查询。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信 息进行查询。 一、 模型分析 当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型 等信息。因此设计此航班信息查询系统。 本算法可对飞机航班信息进行录入、排序和查找,可按航班的航班号、起点站、终点站、 起飞时间和到达时间信息进行查询。 (1) 输入的形式:选择功能时,应输入与所选功能对应的一个整型数据;输入航班信 息包括航班号(由 2 位大写字母和 4 位数字组成)、起点站(1~6 位字符)、终点站(1~6 位 字符)、班期(1~7 位字符)、起飞时间(1~4 位字符)、到达时间(1~4 位字符)、机型(1~3 位字符)和票价(整型数字)。 (2)输出的形式:提示用户输入功能代号;提示用户输入要查询的航班信息;显示给 航班记录的相关信息,包括航班号、起点站、终点站、班期、起飞时间、到达时间、机型和 票价信息。 (3)算法所采用的数据结构:用链式基数排序算法对航班号进行排序,按链表对各条 记录进行有序化运算;用二分查找算法检索航班号信息,用顺序查找算法检索其他信息,显 示查询结果。 (4)测试数据: A.航班信息输入。 CA1544 合肥 北京 1.2.4.5 1055 1240 733 960 B.航班信息查询。 选择按航班号查询:1 输入待查询的航班号:CA1544 输入效验成功时,若查找到,即会显示该航班记录的相关信息: CA1544 合肥 北京 1.2.4.5 1055 1240 733 960 若未查找到,即会显示: “很抱歉,无此航班信息。” 验证失败时,即会显示: “错误信息:航班号须由 2 位大写字母和 4 位数字组成。” 然后结束此次操作。
二、 算法设计 (1)为了实现上述程序功能,采用链式基数排序算法对航班号进行排序,然后便能用 二分查找算法高效地检索航班号信息,其他信息的检索功能采用顺序查找算法实现。 (2)算法用到的抽象数据类型定义: ADT SInfor{ 数据对象:D={ei|ei∈StructSet, i=1,2,…,n,n>=0} 数据关系:R1={|ei-1,ei∈D,i=1,…,n} 基本操作: CreateSInfor(&L) 操作结果:构造一个存储航班信息的链表。 DestroySInfor(&L) 初始条件:L 已存在。 操作结果:销毁 L。 AddSInfor(&L) 初始条件:L 已存在。 操作结果:添加航班信息。 SearchSInfor(L) 初始条件:L 已存在。 操作结果:查询航班信息。 DisplaySInfor(&L) 初始条件:L 已存在。 操作结果:显示航班信息。 }ADT Sinfor (3)主程序的流程: int main(void) { 初始化; 显示用户界面; 信息录入,并作输入效验; 执行查询; 退出系统; } (4)各程序模块之间的调用关系: main()调用 Prompt(),InputData(),searchcon() InputData()调用 Check_HangBanHao(),RadixSort() , Arrange() searchcon()调用 BinSearch(),SeqSearch(),Display(),Prompt() RadixSort()调用 Distribute(),Collect(),Distribute_c(),Collect_c() (5)函数调用关系图: main() InputData() Check_HangBanHao() Arrange()
RadixSort() Prompt() searchcon() Distribute() Distribute() Distribute() BinSearch() SeqSearch() Display() 三、源程序 : #include #include #include #include #define MaxSpace 100 #define keylen 6 #define RADIX_n 10 #define RADIX_c 26 #define SHOW_MSG_ERROR "\n 错误信息:航班号须由 2 位大写字母和 4 位数字组成。 \n 输入数据错误,程序终止执行!\n" using namespace std; typedef char KeyType; typedef struct { //起点 //终点 //班期 char start[6]; char end[6]; char sche[6]; char time1[4]; //起飞时间 char time2[4]; //到达时间 char model[3];//机型 int price; //票价 }InfoType; typedef struct { //航班记录类型
KeyType keys[keylen]; InfoType others; int next; }SLNode; typedef struct { SLNode sl[MaxSpace]; int keynum; int length; }SLList; typedef int ArrType_n[RADIX_n]; typedef int ArrType_c[RADIX_c]; //关键字(航班号) //静态链表结点类型 //静态链表 //关键字字符数 //表长 //静态链表类型 KeyType key[keylen],kl[4]; /*====================函数声明*/ void Distribute(SLNode *sl, int i, ArrType_n &f, ArrType_n &e); void Collect(SLNode *sl, int i, ArrType_n f, ArrType_n e); void Distribute_c(SLNode *sl, int i, ArrType_c &f, ArrType_c &e); void Collect_c(SLNode *sl, int i, ArrType_c f, ArrType_c e); void RadixSort(SLList &L); void Arrange(SLList &L); int BinSearch(SLList L, KeyType key[]); void SeqSearch(SLList L, KeyType key[],int i); void DisplayStyle(int i, char *s); void Display(SLList L, int i); void Quit(void); void searchcon(SLList L); void Prompt(void); bool InputData(SLList &L); bool Check_HangBanHao(char *HangBanHao); /*----------------------------- 数字字符分配函数 */ void Distribute(SLNode *sl, int i, ArrType_n &f, ArrType_n &e) { int j,p; for(j=0;j
f[j]=p; else sl[e[j]].next=p; e[j]=p; //| //| 将 p 指向的结点插入到第 j 个子表中 //| //--------------------------------// } } /*----------------------------- 数字字符收集函数 */ void Collect(SLNode *sl, ArrType_n f, ArrType_n e) { int j,t; for(j=0;!f[j];j++); sl[0].next=f[j]; t=e[j]; while(j
void Collect_c(SLNode *sl, ArrType_c f, ArrType_c e) { int j,t; for(j=0;!f[j]; j++); sl[0].next=f[j];t=e[j]; while(j=2;i--) { //对低四位数字部分进行分配和收集 Distribute(L.sl,i,fn,en); Collect(L.sl,fn,en); } for(i=1;i>=0;i--) { //对高位的 2 位字母进行分配和收集 Distribute_c(L.sl,i,fc,ec); Collect_c(L.sl,fc,ec); } }/*RAdixSort*/ /*----------------------------- 按指针链整理线性表 */ void Arrange(SLList &L) { int p,q,i; SLNode temp; p=L.sl[0].next; //p 指向第一个结点
for(i=1;i
} } if(m==0) printf("很抱歉,无此航班信息。\n"); } /*打印班次信息函数*/ void Display(SLList L, int i) { printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 DisplayStyle(6, L.sl[i].keys);DisplayStyle(7, L.sl[i].others.start); DisplayStyle(7, L.sl[i].others.end);DisplayStyle(7, L.sl[i].others.sche); DisplayStyle(9, L.sl[i].others.time1);DisplayStyle(9, L.sl[i].others.time2); DisplayStyle(5, L.sl[i].others.model);printf("%6d\n",L.sl[i].others.price); printf("\n"); \n"); } /*调整对齐格式函数*/ void DisplayStyle(int i, char *s) { int j; i -= strlen(s); for(j=0; j=1 && i<=6){ printf("\n 请选择命令代号(0----6): ");
分享到:
收藏