、需求分析 航班信息用文件保存,因而要提供文件的输入输出操作;航班信息浏览功能需要提供显示操作;要查询航线需要提供查找功能;另外要提供键盘式选择菜单以实现功能选择。 2、总体设计 该系统设计为航班信息输入模块、航班信息浏览模块和航线查询模块。 3、详细设计 数据结构采用结构体数组,设计航班结构体如下: Struct { Char flightNo[10]; //航班号 Char start[10]; //起始站 Char end[10]; //终点站 Float day; //飞行时间 Int totalTicket; //预售票总数 Int sellTicket; //已售票总数 }Flight[N]; //航班结构体 (1)航班信息输入模块 采用fwrite或fprintf把航班信息写入航班信息文件。 (2)航班信息浏览模块 分屏显示航班信息,每屏10条记录,按任意键显示下一屏。读文件然后显示即可。 (3)航线查询模块 通过菜单选择查询方式,提供按照航班号、起点站、 终点站和飞行时间查询。采用基本查找算法即可。
时间: 2024-04-21 09:26:40 浏览: 83
根据需求分析,该航班信息系统主要包括航班信息输入模块、航班信息浏览模块和航线查询模块。以下是详细设计:
1. 航班信息输入模块
该模块的功能是将航班信息写入航班信息文件中。设计如下:
1.1 定义航班结构体
struct Flight{
char flightNo[10]; //航班号
char start[10]; //起始站
char end[10]; //终点站
float day; //飞行时间
int totalTicket; //预售票总数
int sellTicket; //已售票总数
};
1.2 打开航班信息文件
FILE *fp;
fp = fopen("flight.dat", "ab");
1.3 输入航班信息
struct Flight f;
printf("请输入航班号:");
scanf("%s", f.flightNo);
printf("请输入起始站:");
scanf("%s", f.start);
printf("请输入终点站:");
scanf("%s", f.end);
printf("请输入飞行时间:");
scanf("%f", &f.day);
printf("请输入预售票总数:");
scanf("%d", &f.totalTicket);
f.sellTicket = 0;
1.4 将航班信息写入文件
fwrite(&f, sizeof(struct Flight), 1, fp);
1.5 关闭文件
fclose(fp);
2. 航班信息浏览模块
该模块的功能是分屏显示航班信息,每屏10条记录,按任意键显示下一屏。设计如下:
2.1 打开航班信息文件
FILE *fp;
fp = fopen("flight.dat", "rb");
2.2 定义航班结构体数组
struct Flight f[100];
2.3 读取航班信息
int i = 0;
while(fread(&f[i], sizeof(struct Flight), 1, fp) == 1){
i++;
}
2.4 分屏显示航班信息
int page = 0;
int pageSize = 10;
char ch;
while(1){
system("cls");
printf("航班号\t起始站\t终点站\t飞行时间\t预售票总数\t已售票总数\n");
for(int j = page * pageSize; j < (page + 1) * pageSize && j < i; j++){
printf("%s\t%s\t%s\t%.1f\t%d\t%d\n", f[j].flightNo, f[j].start, f[j].end, f[j].day, f[j].totalTicket, f[j].sellTicket);
}
printf("\n\n按任意键显示下一页,按q退出...");
ch = getch();
if(ch == 'q'){
break;
}
page++;
}
2.5 关闭文件
fclose(fp);
3. 航线查询模块
该模块的功能是提供按照航班号、起点站、终点站和飞行时间查询。设计如下:
3.1 打开航班信息文件
FILE *fp;
fp = fopen("flight.dat", "rb");
3.2 定义航班结构体数组
struct Flight f[100];
3.3 读取航班信息
int i = 0;
while(fread(&f[i], sizeof(struct Flight), 1, fp) == 1){
i++;
}
3.4 菜单选择查询方式
char ch;
while(1){
system("cls");
printf("请选择查询方式:\n");
printf("1.按照航班号查询\n");
printf("2.按照起点站查询\n");
printf("3.按照终点站查询\n");
printf("4.按照飞行时间查询\n");
printf("5.退出\n");
ch = getch();
switch(ch){
case '1':
//按照航班号查询
char flightNo[10];
printf("\n请输入航班号:");
scanf("%s", flightNo);
for(int j = 0; j < i; j++){
if(strcmp(f[j].flightNo, flightNo) == 0){
printf("\n航班号\t起始站\t终点站\t飞行时间\t预售票总数\t已售票总数\n");
printf("%s\t%s\t%s\t%.1f\t%d\t%d\n", f[j].flightNo, f[j].start, f[j].end, f[j].day, f[j].totalTicket, f[j].sellTicket);
}
}
printf("\n按任意键返回...");
getch();
break;
case '2':
//按照起点站查询
char start[10];
printf("\n请输入起点站:");
scanf("%s", start);
for(int j = 0; j < i; j++){
if(strcmp(f[j].start, start) == 0){
printf("\n航班号\t起始站\t终点站\t飞行时间\t预售票总数\t已售票总数\n");
printf("%s\t%s\t%s\t%.1f\t%d\t%d\n", f[j].flightNo, f[j].start, f[j].end, f[j].day, f[j].totalTicket, f[j].sellTicket);
}
}
printf("\n按任意键返回...");
getch();
break;
case '3':
//按照终点站查询
char end[10];
printf("\n请输入终点站:");
scanf("%s", end);
for(int j = 0; j < i; j++){
if(strcmp(f[j].end, end) == 0){
printf("\n航班号\t起始站\t终点站\t飞行时间\t预售票总数\t已售票总数\n");
printf("%s\t%s\t%s\t%.1f\t%d\t%d\n", f[j].flightNo, f[j].start, f[j].end, f[j].day, f[j].totalTicket, f[j].sellTicket);
}
}
printf("\n按任意键返回...");
getch();
break;
case '4':
//按照飞行时间查询
float day;
printf("\n请输入飞行时间:");
scanf("%f", &day);
for(int j = 0; j < i; j++){
if(f[j].day == day){
printf("\n航班号\t起始站\t终点站\t飞行时间\t预售票总数\t已售票总数\n");
printf("%s\t%s\t%s\t%.1f\t%d\t%d\n", f[j].flightNo, f[j].start, f[j].end, f[j].day, f[j].totalTicket, f[j].sellTicket);
}
}
printf("\n按任意键返回...");
getch();
break;
case '5':
//退出
return 0;
default:
break;
}
}
3.5 关闭文件
fclose(fp);
综上所述,航班信息系统的总体设计包括航班信息输入模块、航班信息浏览模块和航线查询模块,具体实现过程需要根据实际情况进行调试和修改。
阅读全文