仲恺农业工程学院C语言程序设计报告航班信息管理系统课程名称C语言程序设计姓名XXX院(系)信息科学与技术学院专业班级网络工程XX学号201320XX指导教师XXX仲恺农业工程学院教务处制目录1 需求分析 (1)2 系统总框图和功能模块说明 (1)2.1 系统总框图 (1)2.2 功能模块说明 (2)3 系统设计 (3)3.1 主要结构体 (3)3.2主要功能函数 (3)3.3 关键函数的流程图 (4)4 系统调试 (5)5 总结 (7)6 源程序清单 (7)1 需求分析航班信息包括航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号、票价,八项信息。
试设计航班信息管理系统,使之能提供以下功能:●系统以菜单方式工作●航班信息录入功能(航班信息用文件保存)--输入●航班信息浏览功能--输出●航班信息查询功能-算法(其中查询方式可以按学历查询、按职工号查询等)●航班信息排序、筛选功能2 系统总框图和功能模块说明2.1 系统总框图图1 系统总框图2.2 功能模块说明输入航班信息模块,完成航班信息的录入。
航班信息的录入前,录入系统先完成新建文件,检测文件是否存在的功能。
检测完毕,采用循环的输入流程,以检测文件是否终止为循环的判定条件;输入信息时,以检测编号判断输入的信息与文件中的信息是否有冲突,防止输入的信息存在冲突;把航班信息一一输入后,判断其有没有存入文件中。
排序航班信息模块,完成航班信息中的价格排序,便于筛选信息结果的查看,排序是利用冒泡排序法,按照价格从高到低编排。
查询航班信息模块,根据输入的航班编号,查询航班编号的信息,。
其过程中,首先是对输入的信息判断,判断输入的信息无误后再查询。
筛选航班信息模块,筛选模板分为四种不同条件的筛选,分别是起点站、到达站、起点时间、到达时间。
利用字符串函数strcmp比较输入的筛选条件与文件中字符串是否一致为判断,利用循环结构把筛选条件与有效字符串一一作比较。
3 系统设计3.1 主要结构体航班编号、起飞点、到达点、班期、起飞时间、达到时间、型号、价格struct fly{int no; /*航班号*/char startpoint[M]; /*起飞点*/char finalpoint[M]; /*到达点*/int banqi; /*班期*/char startime[M]; /*起飞时机*/char finaltime[M]; /*到达时间*/char tipe[M]; /*型号*/float price; /*价格*/};3.2主要功能函数void in(); /*航班信息输入系统*/void order(); /*航班价格排序系统*/void search(); /*航班信息查询系统*/void menu(); /*信息展现函数*/void startpoint(); /*起点站筛选系统*/void finalpoint(); /*达到站筛选系统*/ void startime(); /*起点时间筛选系统*/void finaltime(); /*到达时间筛选系统*/ 3.3 关键函数的流程图4 系统调试1、航班信息的输入2、输入航班号,对航班信息进行查找3、输入到达站,对航班信息进行筛选5 总结在程序的编写中,导致程序出现逻辑错误,我个人经验不足,所以一旦出现错误就添加一些语句,比如添加printf("测试语句|\n");在程序中,断定其程序中哪一些地方出现错误,发现其中的错误,修改后再删除掉。
由于忘记了函数的调用方法,导致程序show无法调用,查看网上类似的程序,终于发现错误。
6 源程序清单#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define N 15#define M 20#define LEN sizeof(struct fly)typedef struct fly{int no;/*航班号*/char startpoint[M];char finalpoint[M];int banqi[M];char startime[M];char finaltime[M];char tipe[M];float price;};struct fly f[N];void in();void show(int i);void order(int); /*排序*/void search(); /*编号查询系统*/void menu();void startpoint(); /*起点站查询系统*/void finalpoint(); /*达到站查询系统*/void startime(); /*起点时间查询系统*/void finaltime(); /*到达时间查询系统*/void main(){int n;menu();scanf("%d",&n);while(n){switch(n){case 1:in();break;case 2:search();break;case 3:startpoint();break;case 4:finalpoint();break;case 5:startime();break;case 6:finaltime();break;default:break;}getch();menu();scanf("%d",&n);}}void menu(){system("cls");printf("\n\n\n\n\n");printf("\t\t|--------------航班信息查询系统----------------|\n");printf("\t\t| 0. 退出|\n");printf("\t\t| 1.录入记录|\n");printf("\t\t| 2.航班号查询|\n");printf("\t\t| 3.起点站查询|\n");printf("\t\t| 4.到达站查询|\n");printf("\t\t| 5.起飞时间查询|\n");printf("\t\t| 6.到达时间查询|\n");printf("\t\t|----------------------------------------------|\n\n ");printf("\t\t\t 选择(0-6):______");}void in(){int i,m=0;char ch[2];FILE *fp;if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))//feof()是文件结束检测函数,如果没有结束,返回值是0,结束了是1 {if(fread(&f[m],LEN,1,fp)==1)m++;}fclose(fp);if(m==0)printf("没有找到\n");else{system("cls");/*system就是调用DOS命令,CLS命令的意思是清除屏幕上所有的文字*/for(i=0;i<m;i++)show(i);}if((fp=fopen("data","wb"))==NULL){printf("不能打开文件\n ");return;}for(i=0;i<m;i++)fwrite(&f[i],LEN,1,fp);printf("是否输入?输入请按‘Y’否则按任意键----");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf("编号--------");scanf("%d",&f[m].no);for(i=0;i<m;i++)if(f[i].no==f[m].no){printf("该记录应经存在,请按任意键继续\n");getch();fclose(fp);return;}printf("起点站-----");scanf("%s",&f[m].startpoint);printf("终点站-----");scanf("%s",&f[m].finalpoint);printf("班期-------");scanf("%s",&f[m].banqi);printf("起飞时间---");scanf("%s",&f[m].startime);printf("到达时间---");scanf("%s",&f[m].finaltime);printf("飞机型号---");scanf("%s",&f[m].tipe);printf("价格-------");scanf("%f",&f[m].price);printf("是否保存?输入请按‘Y’否则按任意键----");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){if(fwrite(&f[m],LEN,1,fp)!=1){printf("不能保存\n");getch();}else{printf("编号为%d的航班信息已经保存\n",f[i].no);m++;}}printf("是否继续,继续请按--Y--,否则按任意键");scanf("%s",ch);}fclose(fp);printf("OK");}void search() /*编号查询系统*/{FILE *fp;int snum,i,m=0;char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&f[m],LEN,1,fp)==1);m++;fclose(fp);if(m==0){printf("没有记录");return;}printf("请输入编号----");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==f[i].no){printf("已经找到该记录,是否显示?显示请按—Y—");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){show(i);break;}elseprintf("没有相关的记录\n");return;}}void startpoint() /*起点站查询系统*/{FILE *fp;int i,m=0;char snum[M];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&f[m],LEN,1,fp)==1);m++;fclose(fp);if(m==0){printf("没有记录");return;}printf("请输入起点站----");scanf("%s",&snum);for(i=0;i<m;i++)if(strcmp(f[i].startpoint,snum)==0){show(i);continue;}elseprintf("没有相关的记录\n");return;}}void finalpoint() /*到达站查询系统*/{FILE *fp;int i,m=0;char snum[M];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&f[m],LEN,1,fp)==1);m++;fclose(fp);if(m==0){printf("没有记录");return;}printf("请输入到达站----");scanf("%s",&snum);for(i=0;i<m;i++)if(strcmp(f[i].finalpoint,snum)==0){show(i);continue;}elseprintf("没有相关的记录\n");return;}void startime() /*起点时间查询系统*/{int i,m=0;char snum[M];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&f[m],LEN,1,fp)==1);m++;fclose(fp);if(m==0){printf("没有记录");return;}printf("请输入起点时间----");scanf("%s",&snum);for(i=0;i<m;i++)if(strcmp(f[i].startime,snum)==0){show(i);continue;}elseprintf("没有相关的记录\n");return;}void finaltime() /*达到时间查询系统*/{FILE *fp;int i,m=0;char snum[M];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&f[m],LEN,1,fp)==1);m++;fclose(fp);if(m==0){printf("没有记录");return;}printf("请输入到达时间----");scanf("%s",&snum);for(i=0;i<m;i++)if(strcmp(f[i].finaltime,snum)==0){show(i);continue;}elseprintf("没有相关的记录\n");return;}void show(int i){printf("航班编号为%d的航班信息如下:\n",f[i].no);printf("起点站----------------%s \n",f[i].startpoint);printf("终点站----------------%s \n",f[i].finalpoint);printf("起飞时间--------------%s \n",f[i].startime);printf("到达时间--------------%s \n",f[i].finaltime);printf("班期------------------%s \n",f[i].banqi);printf("航班型号--------------%s \n",f[i].tipe);printf("价格------------------%5.2f \n",f[i].price);printf("\n\n\n\n");}void order(int i){int j;float temp;for(i=0;i<N-1;i++){for(j=i+1;j<N;j++)if(f[i].price<f[j].price){temp=f[i].price;f[i].price=f[j].price;f[j].price=temp;}}}。