目录
一、系统开发的背景 (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 查询信息(三)测试输入函数
测试数据:
图11 输入信息
五、总结
该课程设计实现了根据航班号,起飞地点,到达地点,起飞时间,到达时间对该趟航班进行查询的功能。在编写过程中,运用了对航班数据的排序和查找,冒泡排序和顺序查找等知识,还有建立静态链表等。
系统在此次运行过程中,刚开始没有办法输入,之后输入可以实现但又无法正确查询,查询出来的都是错的,而且现实的结果和我编写的不相符。对冒泡排序的运用,理解不熟,无法书写出满足实验需求的程序代码。对冒泡排序在不同情况下的区别没有掌握。
本次的课程设计没有实现对班期,价格,航班号这三项对该趟航班的
查询。也没有运用二分查找,基数排序等操作。
通过这次课程设计,使我对C语言编程有了新的认识。以前编程只是注重如何编写函数能够完成所需要的功能,只是根据书上的算法敲打出一段程序。但是在做课程设计的过程中,对链表,指针的使用有了一定的提高。但是就指针的输入和输出还是存在比较大的问题。对什么时候要用地址符,什么时候不用不太清楚,再就是函数调用不太会。因此我觉得的,了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
六、附件(代码、部分图表)
# include
# include
# 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 { //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].othe rs.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);