C课程设计说明书.doc_第1页
C课程设计说明书.doc_第2页
C课程设计说明书.doc_第3页
C课程设计说明书.doc_第4页
C课程设计说明书.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中北大学数 据 结 构课 程 设 计 说 明 书学生姓名:杨博元学 号:0921040258学 院:软件学院专 业:软件工程题 目:飞机订票系统成绩指导教师杨顺民一、设计目的假定民航机场共有n个航班,每个航班有一航班号,确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员定额,设计一民航订票系统,使之能提供下列服务:1:航班信息录入功能(航班信息用文件保存)2:航班信息浏览功能3:查询航班(至少一种查询方式): a:按航班号查询 b:按起点站查询 c:按终点站查询 d:按飞行时间查询提示:(1)需求分析: 航班信息用文件保存;航班信息浏览功能需要提供显示操作;要查询航线需 要提供查找功能,可提供按上述四种方式查询;另外要提供键盘式选择菜单 以实现功能选择。 (2)建立航班结构体,结构体成员包括航班号、起始站、终点站、飞行时间(星 期几)、预售票总数、已售票数。2.设计内容和要求要求:假定民航机场共有n个航班,每个航班有一航班号,确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员定额,设计一民航订票系统,使之能提供下列服务:1:航班信息录入功能(航班信息用文件保存)2:航班信息浏览功能3:查询航班(至少一种查询方式): a:按航班号查询 b:按起点站查询 c:按终点站查询 d:按飞行时间查询3. 本设计所采用的数据结构根据题目要求和提示,首先是建立航班结构体,结构体名称为flight_type,由于航班的数目不止一个,所以要将变量名定义成数组,为flightN,然后定义结构体成员:char flight_num20; /*航班号*/char start_add20; /*起始站*/char end_add20; /*终点站*/int week_day; /*飞行时间*/int All_amount; /*预售票数*/int Free_amount; /*已售票数*/下面是各个函数的数据结构:第一个是input函数。由于要设置密码保护,所以定义一个字符数组并初始化, 内容由用户自己设定,作为密码;再预设一个长度为20个字符的字符数组,供用户录入密码。经判断,密码正确程序才继续运行;否则提示用户继续还是退出。定义三个整型变量,一个用来控制循环,第二个的作用是当用户输入的星期超出范围时控制内嵌dowhile循环让用户重新输入,第三个用来供用户输入选择继续运行程序还是退出。第二个是save函数,首先定义一个整型变量控制循环,然后定义文件指针(FILE *fp),最后创建文件message保存录入的航班信息即可。第三个是scan函数,定义两个整型变量,一个用来控制输出循环,第二个的作用是在完成此项功能后供用户选择接下来要做什么时输入。由于要浏览文件message中的信息,所以要定义文件指针*fp。最后是打开文件,把文件里包含的所有信息显示到屏幕上面。下一个是search函数,由于用户要选择查询方式,所以要设计一个菜单供用户选择。定义三个整型变量,第一个是供用户选择查询方式时输入,第二个是当用户输入的数字超出范围时控制一个dowhile循环让用户重新输入,第三个的作用是在完成此项功能后供用户选择接下来要做什么时输入。下面四个函数(flight_search函数(即按航班号查询函数)、start函数(即按起始站查询函数)、end函数(即按终点站查询函数)、time函数(即按飞行时间查询函数)的数据结构基本相同。定义两个整型变量,一个用来控制输出循环,另一个的作用是完成此项功能后供用户选择接下来要做什么时输入。还要定义两个数组,一个是长度为20的字符数组,供用户查询信息的时候输入航班号;另外一个数组的作用是在浏览航班信息时将其赋值。如果信息库中有用户所需要的航班信息,则在读文件时,读到与用户所需要的信息不相符的时候就将此数组的那一个元素赋值为0。如果是客户所需要的信息,则不赋值。这样,读完信息以后,将此数组中所有元素的值相加,如果为0,则说明信息库中没有用户所需要的信息,就输出“对不起,无此航班!”。所以还要多定义一个整型变量,以便将数组中元素的和赋给它。所以共定义了三个整型变量。另外还要定义文件指针*fp,然后打开文件,如果文件里面有用户需要的信息,则将其显示到屏幕上面;如果没有则显示无此信息,然后让用户选择接下来要做什么。其中的time函数有两点不同,第一个就是当用户输入的星期超出范围时,要让用户重新输入,所以需要多定义一个整型变量,控制一个dowhile循环让用户重新输入。第二个就是time函数里面不需要定义数组,因为它的输入是星期几,所以只需要再多定义一个整型变量。下面一个是menu函数,menu函数的作用就是为显示一个菜单供用户选择自己需要的功能,所以定义两个整型变量,一个是供用户输入选择功能,另一个是在用户输入的数字超出范围时控制一个dowhile循环让用户重新输入。最后一个是main函数。这个函数比较简单,直接调用menu函数即可,所以不需要定义任何数据类型。这就是整个程序的数据结构设计。4.功能模块详细设计4.1 详细设计思想实际上,在上面设计算法和数据结构时模块设计就包括在里面了。整个程序大体上分为以下几个模块。第一个是信息录入模块。此模块包含了两个函数,一个是input函数,供用户录入信息;第二个是save函数,用来保存用户录入的信息。第二个是信息浏览模块。此模块比较简单,只有一个scan函数。第三个是信息查询模块。此模块包含了五个函数:search函数、flight_search函数、start函数、end函数和time函数. search函数提供选择菜单供用户选择查询方式,后面四个函数分别提供了四种不同的信息查询方式。第四个模块是设计菜单模块。这个模块也只有一个函数,即menu函数。第五个模块是程序中不可缺少的,即main函数。这个模块最简单,是直接调用menu函数。4.2 核心代码#includestdio.h#include string.h#define N 4void save();void search();void input();void scan();void flight_search();void start();void end();void time();int menu();struct flight_type /*建立航班结构体*/ char flight_num20; /*航班号*/ char start_add20; /*起始站*/ char end_add20; /*终点站*/ int week_day; /*飞行时间*/ int All_amount; /*预售票数*/ int Free_amount; /*已售票数*/ flightN; void input() /*录入航班信息函数*/ int a,j,w; char b10; char u10=liuyf; printf(请输入密码:); scanf(%s,b); if(strcmp(b,u)=0) for(j=0;jN;j+) printf(请输入航班号:); scanf(%s,flightj.flight_num); printf(请输入起始站(如:beijing):); scanf(%s,flightj.start_add); printf(请输入终点站(如:wuhan):); scanf(%s,flightj.end_add); printf(请输入飞行时间(17):); do scanf(%d,&flightj.week_day); if(flightj.week_day7) w=1;printf(n对不起!您输入的飞行时间超出范围,请重新输入!nn);printf(注意范围(17之间):); else w=0; while(w = 1); printf(请输入预售票数:); scanf(%d,&flightj.All_amount); printf(请输入已售票数:); scanf(%d,&flightj.Free_amount); save(); /*调用保存航班信息函数*/ printf(nn信息已录入并保存!nnn现在您想做什么?n1:退出n2:返回主菜单n); printf(n请输入:); scanf(%d,&a); if(a=1)exit(0); else menu(); /*调用选择菜单函数*/ else printf(n对不起,您无权使用此功能!nnn); printf(现在您想做什么?nn1:退出nn2:返回主菜单nn); printf(请输入:); scanf(%d,&a); if(a=1) printf(n谢谢使用!n); exit(0); else menu(); /*调用选择菜单函数*/ void save() /*保存航班信息函数*/FILE *fp;int i; if(fp=fopen(message,wb)=NULL)printf(无法打开文件!n);return;for(i=0;iN;i+) if(fwrite(&flighti,sizeof(struct flight_type),1,fp)!=1) printf(文件打开出错!n);fclose(fp); void scan() /*浏览航班信息函数*/ int a,c; FILE *fp; if(fp=fopen(message,rb)=NULL) printf(无法打开文件!n); menu(); printf(n航班号 起始站 终点站 飞行时间 预售票数 已售票数nn); for(c=0;cN;c+) fread(&flightc,sizeof(struct flight_type),1,fp); printf(n); printf(%-5s %-8s %-8s %-d %-3d %-3dnn,flightc.flight_num,flightc.start_add,flightc.end_add,flightc.week_day,flightc.All_amount,flightc.Free_amount); 注意:原程序中此处是一行 fclose(fp); printf(nn信息库中所有航班信息已输出!nnn现在您想做什么?nn 1:退出nn 2:返回主菜单nn); printf(n请输入:); scanf(%d,&a); if(a=1) printf(n谢谢使用!n); exit(0); else menu(); void search() /*查询航班信息函数*/ int d,w; printf( *查询方式* n);注意:原程序中此处是一行 printf( 1:按航班号查询n); printf( 2:按起始站查询n); printf( 3:按终点站查询n); printf( 4:按飞行时间查询nn); printf( * n);注意:原程序中此处是一行 printf(n请选择(14):); do scanf(%d,&d); if(d4) w=1; printf(n对不起!您的输入超出范围,请重新输入!n);printf(n注意范围(14):); else w=0;while(w = 1);switch(d) case 1:flight_search();break; /*调用按航班号查询函数*/ case 2:start(); break; /*调用按起始站查询函数*/ case 3:end(); break; /*调用按终点站查询函数*/ case 4:time();break; /*调用按飞行时间查询函数*/ void flight_search() /*按航班号查询航班信息函数*/ FILE *fp; int a,f,AN,m=0; char e20; printf(请输入您要查询的航班号(如CA1826):); scanf(%s,e); if(fp=fopen(message,rb)=NULL) printf(无法打开文件!n); menu(); for(f=0;fN;f+) fread(&flightf,sizeof(struct flight_type),1,fp); if(strcmp(flightf.flight_num,e)!=0)Af=0; else Af=1; for(f=0;fN;f+)m+=Af; if(m=0)printf(nn对不起!无此航班!n); else printf(n航班号 起始站 终点站 飞行时间 预售票数 已售票数nn); for(f=0;fN;f+) fread(&flightf,sizeof(struct flight_type),1,fp); if(strcmp(flightf.flight_num,e)=0) printf(%-5s %-8s %-8s %-d %-3d %-3dnn,flightf.flight_num,flightf.start_add,flightf.end_add,flightf.week_day,flightf.All_amount,flightf.Free_amount); 注意:原程序中此处是一行 fclose(fp); printf(nn现在您想做什么?nn 1:退出nn 2:返回查询菜单nn 3:返回主菜单nn); printf(请输入:); scanf(%d,&a); if(a=1) printf(n谢谢使用!n); exit(0); if(a=2)search(); else menu(); void start() /*按起点站查询航班信息函数*/ int a,h,BN,x=0; char g8; FILE *fp; printf(请输入起始城市(城市的全拼):); scanf(%s,g); if(fp=fopen(message,rb)=NULL) printf(无法打开文件!n); menu(); for(h=0;hN;h+) fread(&flighth,sizeof(struct flight_type),1,fp); if(strcmp(flighth.start_add,g)!=0)Bh=0; else Bh=1; for(h=0;hN;h+)x+=Bh; if(x=0)printf(nn对不起!无此航班!n); else printf(n航班号 起始站 终点站 飞行时间 预售票数 已售票数nn); for(h=0;hN;h+) fread(&flighth,sizeof(struct flight_type),1,fp); if(strcmp(flighth.start_add,g)=0) printf(%-5s %-8s %-8s %-d %-3d %-3dnn,flighth.flight_num,flighth.start_add,flighth.end_add,flighth.week_day,flighth.All_amount,flighth.Free_amount); 注意:原程序中此处是一行 fclose(fp); printf(nn现在您想做什么?nn 1:退出nn 2:返回查询菜单nn 3:返回主菜单nn); printf(请输入:); scanf(%d,&a); if(a=1) printf(n谢谢使用!n); exit(0); if(a=2)search(); else menu(); void end() /*按终点站查询航班信息函数*/ int a,n,CN,y=0; char m8; FILE *fp; printf(请输入终点城市(城市的全拼):); scanf(%s,m); if(fp=fopen(message,rb)=NULL) printf(无法打开文件!n); menu(); for(n=0;nN;n+) fread(&flightn,sizeof(struct flight_type),1,fp); if(strcmp(flightn.end_add,m)!=0)Cn=0; else Cn=1; for(n=0;nN;n+)y+=Cn; if(y=0)printf(nn对不起!无此航班!n); else printf(n航班号 起始站 终点站 飞行时间 预售票数 已售票数nn); for(n=0;nN;n+) fread(&flightn,sizeof(struct flight_type),1,fp); if(strcmp(flightn.end_add,m)=0) printf(%-5s %-8s %-8s %-d %-3d %-3dnn,flightn.flight_num,flightn.start_add,flightn.end_add,flightn.week_day,flightn.All_amount,flightn.Free_amount); 注意:原程序中此处是一行 fclose(fp); printf(nn现在您想做什么?nn 1:退出nn 2:返回查询菜单nn 3:返回主菜单nn); printf(请输入:); scanf(%d,&a); if(a=1) printf(n谢谢使用!n); exit(0); if(a=2)search(); else menu(); void time() /*按飞行时间查询航班信息函数*/ int s,t,w,a,DN,z=0; FILE *fp; printf(请输入日期(星期几)(17之间)!n); printf(星期); do scanf(%d,&s); if(s7) w=1; printf(n对不起!您输入的飞行时间超出范围,请重新输入!n); printf(n注意范围(17之间):); else w=0; while(w=1);if(fp=fopen(message,rb)=NULL) printf(无法打开文件!n); menu(); for(t=0;tN;t+) fread(&flightt,sizeof(struct flight_type),1,fp); if(s!=flightt.week_day)Dt=0; else Dt=1; for(t=0;tN;t+)z+=Dt; if(z=0)printf(nn对不起!无此航班!n); else printf(n航班号 起始站 终点站 飞行时间 预售票数 已售票数nn); for(t=0;tN;t+) fread(&flightt,sizeof(struct flight_type),1,fp); if(s=flightt.week_day) printf(%-5s %-8s %-8s %-d %-3d %-3dnn,flightt.flight_num,flightt.start_add,flightt.end_add,flightt.week_day,flightt.All_amount,flightt.Free_amount); 注意:原程序中此处是一行 fclose(fp); printf(nn现在您想做什么?nn 1:退出nn 2:返回查询菜单nn 3:返回主菜单nn); printf(请输入:); scanf(%d,&a); if(a=1) printf(n谢谢使用!n); exit(0); if(a=2)search(); else menu(); int menu() /*键盘式选择菜单*/int k,w; doprintf(nn);printf( *MENU* n);注意:原程序中此处是一行!printf( 1.录入航班信息!n);printf( 2.浏览航班信息!n);printf( 3.查询航班信息!n);printf( 4.退出!nn);printf( * n);注意:原程序中此处是一行printf(请选择(14):);scanf(%d, &k); if(k4) w=1; printf(n对不起!您的输入超出范围,请重新输入!n);printf(n注意范围(14):); else w=0;while(w=1);switch(k)case 1:input();break; /*调用录入函数*/case 2:scan(); break; /*调用浏览函数*/case 3:search(); break; /*调用查询函数*/case 4:exit(0); /*退出*/return 0; main() /*主函数*/ menu(); /*调用选择菜单函数*/六:结果分析设计时我预先设定只录入四个航班信息。A1001beijingwuhan16030A1001Wuhanbeijing16020A1002shenzhentianjin25020A1003jinanbeijing35040程序运行过程为首先显示menu菜单,选择“1:录入航班信息”,提示输入密码,如果随便输入一串字符或数字,则会弹出提示对不起,您无权使用此功能!现在您想做什么? 1:退出 2:返回主菜单选择“2:返回主菜单”,再选择“1:录入航班信息”,提示输入密码,按预设密码“liuyf”输入,接下来便是输入整个航班信息。请输入航班号:A1001请输入起始站:beijing请输入终点站:wuhan请输入飞行时间:1请输入预售票数:60请输入已售票数:30请输入航班号:A1001请输入起始站:wuhan请输入终点站:beijing请输入飞行时间:此处如果输入的飞行时间并不在17之间,比如8,则会弹出提示对不起,您输入的飞行时间超出范围,请重新输入!注意范围(17之间):1请输入预售票数:60请输入已售票数:20请输入航班号:A1002请输入起始站:shenzhen请输入终点站:tianjin请输入飞行时间:2请输入预售票数:50请输入已售票数:20请输入航班号:A1003请输入起始站:jinan请输入终点站:beijing请输入飞行时间:3请输入预售票数:50请输入已售票数:40输入到这里,再按Enter键,会弹出提示:信息已录入并保存,现在你想做什么?1:退出; 2:返回主菜单.请输入:输入数字“2”,返回主菜单,再选择“2:浏览航班信息”,则输出结果为航班号 起始站 终点站 飞行时间 预售票数 已售票数A1001 beijing wuhan 1 60 30航班号 起始站 终点站 飞行时间 预售票数 已售票数A1001 wuhan beijing 1 60 20航班号 起始站 终点站 飞行时间 预售票数 已售票数A1002 shenzhen tianjin 2 50 20航班号 起始站 终点站 飞行时间 预售票数 已售票数A1003 jinan beijing 3 50 40现在您想做什么?1:退出; 2:返回主菜单.请输入:输入数字“2”,返回主菜单,再选择“3:查询航班信息”,则接下来又出现一个菜单,供选择查询方式。选择“1:按航班号查询”,提示输入航班号,输入“A1001”,输出结果为航班号 起始站 终点站 飞行时间 预售票数 已售票数A1001 beijing wuhan 1 60 30航班号 起始站 终点站 飞行时间 预售票数 已售票数A1001 wuhan beijing 1 60 20现在你想做什么? 1:退出; 2:返回查询菜单; 3:返回主菜

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论