资源描述
目 录
一、系统开发的背景 1
二、系统分析与设计 1
(一)系统功能要求 1
(二)系统模块结构设计 1
三、系统的设计与实现 2
(一)查询函数: 2
(二)输入函数 6
四、系统测试 7
(一)测试main()函数 7
(二)测试查询函数 11
(三)测试输入函数 13
五、总结 14
六、附件(代码、部分图表) 15
航班查询系统
一、系统开发的背景
随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行各业,影响着人们的价值观念与生活方式。因此,要提升企业竞争力,就要大力推进企业信息化建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流,从而提高企业综合实力。该课程设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
二、系统分析与设计
(一)系统功能要求
可以输入航班信息系,可采用基数排序法对飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行。
1. 航班记录包括:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价。
2.查询航班信息。
(二)系统模块结构设计
通过对系统功能的分析,航班查询系统功能如图X所示。
航班查询系统
到达时间查询
起飞时间查询
终点站查询
起飞站查询
航班号查询
图1 航班查询系统功能图
通过上图的功能分析,把整个系统划分为5个模块:
1、航班号查询,该模块主要实现通过输入航班号实现对该趟航班的查询。
2、班期查询,该模块主要实现通过输入班期实现对该趟航班的查询。
3、起飞站查询,该模块主要实现通过输入起飞地点实现对该趟航班的查询。
4、到达站查询,该模块主要实现通过输入到站地点实现对该趟航班的查询。
5、起飞时间查询,该模块主要实现通过输入起飞时间实现对该趟航班的查询。
三、系统的设计与实现
(一)查询函数:
分析:输入要查询的方式,例如:航班号、起点站、终点站、起飞时间、到达时间。该函数的流程图如下图2所示。
开始
初始化信息
排序
主菜单显示
输入查询序号
判断序号
起点站
到达时间
班号
起飞时间
到达站
输出航班信息
结束
图2:查询函数流程图
该模块的具体代码如下所示。
void Seqsearch(sllist l,keytype key[],int i)
{ //顺序查找函数
int j,k,m=0;
printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *\n");
for(j=1;j<=l.length;j++)
{
switch(i)
{
case 1:k=strcmp(key,l.sl[j].keys);break;
case 2:k=strcmp(key,l.sl[j].others.qdz);break;
case 3:k=strcmp(key,l.sl[j].others.zdz);break;
case 4:k=strcmp(key,l.sl[j].others.qftime);break;
case 5:k=strcmp(key,l.sl[j].others.artime);break;
}
if(k==0)
{m=1;
printf("%s\t",l.sl[j].keys);
printf("%s\t",l.sl[j].others.qdz);
printf("%s\t",l.sl[j].others.zdz);
printf("%s\t",l.sl[j].others.bq);
printf("%s\t",l.sl[j].others.qftime);
printf("%s\t",l.sl[j].others.artime);
printf("%s\t",l.sl[j].others.jixing);
printf("%d\t",l.sl[j].others.price);
}
}
if(m==0)
printf(" 对不起!无此航班信息! \n");
//return k;
}
void search(sllist l)
{ //查询菜单控制程序
keytype key[keylen];
int i=1,k;
while(i>=1&&i<=5)
{
putchar('\n');
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" $ 航班信息查询系统 $\n");
printf(" ………………………………………\n");
printf(" $ 1.航 班 号 $\n");
printf(" $ 2.起 点 站 $\n");
printf(" $ 3.终 点 站 $\n");
printf(" $ 4.起飞时间 $\n");
printf(" $ 5.到达时间 $\n");
printf(" $ 6.退出系统 $\n");
printf(" ………………………………………\n");
printf(" 请输入您的选择:");
scanf("%d",&i);
printf("\n");
switch(i)
{
if(k==6)
printf("% 对不起!无此航班信息! %\n");
else
{
printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");
printf("%s\t\t",l.sl[k].keys);
printf("%s\t\t",l.sl[k].others.qdz);
printf("%s\t\t",l.sl[k].others.zdz);
printf("%s\t\t",l.sl[k].others.bq);
printf("%s\t\t",l.sl[k].others.qftime);
printf("%s\t\t",l.sl[k].others.artime);
printf("%s\t\t",l.sl[k].others.jixing);
printf("%d\t\t",l.sl[k].others.price);
printf("\n");
}break;
case 1:printf("输入要查询的航班号:");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 2:printf("输入要查询的航班起点站名:");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 3:printf("输入要查询的航班终点站名:");
scanf("%s",key); Seqsearch(l,key,i);break;
case 4:printf("输入要查询的航班:起飞时间");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 5:printf("输入要查询的航班到达时间:");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 0:printf("谢谢使用!\n");
}
}
(二)输入函数
输入您所要输入的数据,该函数的流程图如下图3所示。
开始
输入信息
结束
图3 输入函数流程图
该模块的具体代码如下所示:
void shuru(sllist &k)
{ int i=1; //输入航班记录函数
char ch='y';
printf("请输入航班信息!\n");
while(ch=='y'||ch=='Y')
{
printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");
scanf("%s%s%s%s%s%s%s%d",k.sl[i].keys,k.sl[i].others.qdz,k.sl[i].others.zdz,k.sl[i].others.bq,k.sl[i].others.qftime,k.sl[i].others.artime,k.sl[i].others.jixing,&k.sl[i].others.price);
i++;
getchar();
printf("需要继续输入吗?\n");
printf("y代表继续输入/n代表结束输入!\n");
printf("请输入y或n\n");
scanf("%c",&ch);
}
/k.length=i-1;
}
四、系统测试
(一)测试main()函数
图4 输入数据
图5 查询信息
图6 查询信息
图7 查询信息显示
(二)测试查询函数
图8 查询信息
图9 查询信息
图10 查询信息
(三)测试输入函数
测试数据:
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
图11 输入信息
五、总结
该课程设计实现了根据航班号,起飞地点,到达地点,起飞时间,到达时间对该趟航班进行查询的功能。在编写过程中,运用了对航班数据的排序和查找,冒泡排序和顺序查找等知识,还有建立静态链表等。
系统在此次运行过程中,刚开始没有办法输入,之后输入可以实现但又无法正确查询,查询出来的都是错的,而且现实的结果和我编写的不相符。对冒泡排序的运用,理解不熟,无法书写出满足实验需求的程序代码。对冒泡排序在不同情况下的区别没有掌握。
本次的课程设计没有实现对班期,价格,航班号这三项对该趟航班的查询。也没有运用二分查找,基数排序等操作。
通过这次课程设计,使我对C语言编程有了新的认识。以前编程只是注重如何编写函数能够完成所需要的功能,只是根据书上的算法敲打出一段程序。但是在做课程设计的过程中,对链表,指针的使用有了一定的提高。但是就指针的输入和输出还是存在比较大的问题。对什么时候要用地址符,什么时候不用不太清楚,再就是函数调用不太会。因此我觉得的,了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
六、附件(代码、部分图表)
# include <stdio.h>
# include <string.h>
# define Maxspace 100
# define keylen 6
typedef char keytype;
typedef struct
{
char qdz[6]; //起点
char zdz[6]; //终点
char bq[6]; //班期
char qftime[5]; //起飞时间
char artime[5]; //到达时间
char jixing[4]; //机型
int price; //票价
}infotype; //航班记录类型
typedef struct
{
keytype keys[keylen]; //关键字(航班号)
infotype others;
int next;
}slnode;
typedef struct
{
slnode sl[Maxspace];
int num; //记录当前关键字字符个数
int length; //当前表长
}sllist; //静态链表类型
void Bubble_Sort(sllist k)
//冒泡排序法(从第一个记录到第n个记录,对n-1对相邻的两个记录关键字进行比较,一趟之后,
//最大数沉底R[n],第二趟,次大数沉到R[n-1],...重复n-1次,在R[n]中,n个记录有序。
//排序按价格排序
{
int i,j;
int swap;
int tmp;
char tmp2[6];
//putchar('b');
for(i=1;i<k.length;i++)
{
//putchar('b');
swap=0;
for(j=1;j<=k.length-i;j++)
if(k.sl[j].others.price>k.sl[j+1].others.price)
{
tmp=k.sl[j].others.price;
k.sl[j].others.price=k.sl[j+1].others.price;
k.sl[j+1].others.price=tmp;
strcpy(tmp2,k.sl[j].others.artime);
strcpy(k.sl[j].others.artime,k.sl[j+1].others.artime);
strcpy(k.sl[j+1].others.artime,tmp2);
strcpy(tmp2,k.sl[j].others.bq);
strcpy(k.sl[j].others.bq,k.sl[j+1].others.bq);
strcpy(k.sl[j+1].others.bq,tmp2);
strcpy(tmp2,k.sl[j].others.jixing);
strcpy(k.sl[j].others.jixing,k.sl[j+1].others.jixing);
strcpy(k.sl[j+1].others.jixing,tmp2);
strcpy(tmp2,k.sl[j].others.qdz);
strcpy(k.sl[j].others.qdz,k.sl[j+1].others.qdz);
strcpy(k.sl[j+1].others.qdz,tmp2);
strcpy(tmp2,k.sl[j].others.qftime);
strcpy(k.sl[j].others.qftime,k.sl[j+1].others.qftime);
strcpy(k.sl[j+1].others.qftime,tmp2);
strcpy(tmp2,k.sl[j].others.zdz);
strcpy(k.sl[j].others.zdz,k.sl[j+1].others.zdz);
strcpy(k.sl[j+1].others.zdz,tmp2);
strcpy(tmp2,k.sl[j].keys);
strcpy(k.sl[j].keys,k.sl[j+1].keys);
strcpy(k.sl[j+1].keys,tmp2);
swap=1;
}
if(swap==0)
break;
}
for(i=1;i<=k.length;i++)
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",k.sl[i].keys,k.sl[i].others.qdz,k.sl[i].others.zdz,k.sl[i].others.qftime,k.sl[i].others.artime,k.sl[i].others.jixing,k.sl[i].others.bq,k.sl[i].others.price);
}
/*查找算法实现*/
void Seqsearch(sllist l,keytype key[],int i)
{ //顺序查找函数
int j,k,m=0;
printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *\n");
for(j=1;j<=l.length;j++)
{
switch(i)
{
case 1:k=strcmp(key,l.sl[j].keys);break;
case 2:k=strcmp(key,l.sl[j].others.qdz);break;
case 3:k=strcmp(key,l.sl[j].others.zdz);break;
case 4:k=strcmp(key,l.sl[j].others.qftime);break;
case 5:k=strcmp(key,l.sl[j].others.artime);break;
}
if(k==0)
{m=1;
printf("%s\t",l.sl[j].keys);
printf("%s\t",l.sl[j].others.qdz);
printf("%s\t",l.sl[j].others.zdz);
printf("%s\t",l.sl[j].others.bq);
printf("%s\t",l.sl[j].others.qftime);
printf("%s\t",l.sl[j].others.artime);
printf("%s\t",l.sl[j].others.jixing);
printf("%d\t",l.sl[j].others.price);
}
}
if(m==0)
printf(" 对不起!无此航班信息! \n");
//return k;
}
void search(sllist l)
{ //查询菜单控制程序
keytype key[keylen];
int i=1,k;
while(i>=1&&i<=5)
{
putchar('\n');
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" $ 航班信息查询系统 $\n");
printf(" ………………………………………\n");
printf(" $ 1.航 班 号 $\n");
printf(" $ 2.起 点 站 $\n");
printf(" $ 3.终 点 站 $\n");
printf(" $ 4.起飞时间 $\n");
printf(" $ 5.到达时间 $\n");
printf(" $ 6.退出系统 $\n");
printf(" ………………………………………\n");
printf(" 请输入您的选择:");
scanf("%d",&i);
printf("\n");
switch(i)
{
if(k==6)
printf("% 对不起!无此航班信息! %\n");
else
{
printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");
printf("%s\t\t",l.sl[k].keys);
printf("%s\t\t",l.sl[k].others.qdz);
printf("%s\t\t",l.sl[k].others.zdz);
printf("%s\t\t",l.sl[k].others.bq);
printf("%s\t\t",l.sl[k].others.qftime);
printf("%s\t\t",l.sl[k].others.artime);
printf("%s\t\t",l.sl[k].others.jixing);
printf("%d\t\t",l.sl[k].others.price);
printf("\n");
}break;
case 1:printf("输入要查询的航班号:");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 2:printf("输入要查询的航班起点站名:");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 3:printf("输入要查询的航班终点站名:");
scanf("%s",key); Seqsearch(l,key,i);break;
case 4:printf("输入要查询的航班:起飞时间");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 5:printf("输入要查询的航班到达时间:");
scanf("%s",key);
Seqsearch(l,key,i);break;
case 0:printf("谢谢使用!\n");
}
}
}
void shuru(sllist &k)
{ //输入航班记录函数
k.length+=1;
int i=k.length ;
char ch='y';
printf("请输入航班信息!\n");
while(ch=='y'||ch=='Y')
{
printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");
scanf("%s%s%s%s%s%s%s%d",k.sl[i].keys,k.sl[i].others.qdz,k.sl[i].others.zdz,k.sl[i].others.bq,k.sl[i].others.qftime,k.sl[i].others.artime,k.sl[i].others.jixing,&k.sl[i].others.price);
i++;
getchar();
printf("需要继续输入吗?\n");
printf("y代表继续输入/n代表结束输入!\n");
printf("请输入y或n\n");
scanf("%c",&ch);
}
k.length=i-1;
// printf("%d\n",k.length);
}
void main()
{
sllist l;
l.num=6;//初始化及输入数据
l.length=0;
shuru(l);//输入航班记录
//putchar('a');
Bubble_Sort(l);
search(l);//调用查询函数
return;
}
(2)结果截图
图12 输入信息
图13 查询信息
图14 查询信息
图15 查询信息
23
展开阅读全文