高级语言程序设计课程设计报告题目:飞机订票系统程序设计1、程序基本功能要求本程序首先输入用户名、密码进入系统;从菜单中选择可以输入机票信息对机票信息进行浏览、修改、查询、退订票等功能并可以通过其内部各类方式或菜单内选项了解航班更细的信息。
(1)航班信息用文件保存,因而要提供文件的输入输出操作。
(2)航班信息的录入,其中包括了航班信息中的航班号、起始站、终点站、预售机票数、已售机票数。
(3)航班信息浏览功能且提供显示操作。
(4)可以查询航线,查询方式有按航班号查询、按起点站查询、按终点站查询按航线查询、按飞行时间查询五种,可从各个方面进行查询,方便快捷。
(5)承办订票和退票业务,可显示剩余票数和已买票数。
当票数被订或被退时票数会随之变化,统计较为灵活。
(6)提供键盘式选择菜单以实现功能选择。
2、总体设计.览、修改、查询以及订票、退票的功能。
根据课程设计要求和本组人员的增补,首先要通过一个用户登录界面进入系统,其次要制作一个主菜单显示出各个操作的提示可供用户选择进而一步步地深入操作。
根据主菜单的内容再进一步编制具体操作的函数,各个功能均用专门编制的函数来完成。
因为飞机订票系统含有各定用刚学不久的结构体数组来存放航班的各项信息,这就是看到题目后的最初的思路。
在整个程序中,含有多种类型的头文件,包括了标准输入、输出头文件、字符串函数处理头文件、动态存储与释放函数头文件;在结构体数组中也对不同类型的数组进行不同的定义,例如: int flightno、int totalticket、char start[10]等;在各类信息的显示操作中,本系统在执行浏览、查询和退订票是充分利用函数的调用,利用switch()语句进行,简便实用;在此系统中,函数相互嵌套,形成了一个完整的系统。
本次设计需要编制初始化、建立数据文件、数据文件保存、增加航班信息、订票、退票业务等内容。
首先需要设立一个初始化函数来得到航班信息。
具体设计是第一次运行程序时自动生成保存航班信息的文件,并输入初始航班信息,待第二次开始就可以直接读取该文件获得已有的航班信息并可直接使用。
运用了access函数判断文件是否存在。
系统初始化后,没有寻找到数据文件则进行新建数据文件。
此函数的作用就是进行新建文件数据的录入,运用到了文件指针的定义FILE *fp fopen和关闭fclose、成块读写函数中的fwrite for循环进行各组数据的输入,用m++记录下输入的航班数量并运用if 语句判断是否输入下一条航班信息,个函数来使用。
在该函数中同样运用到了文件指针FILE *fp、文件的打开fopen 和关闭fclose、成块读写函数中的fread、文件结束检测函数feof同时配合while语句控制文件的读取,m++记录下读取到的航班数量等。
因为在飞机订票系统中涉及到飞机的订票和退票业务还有按航班号的排序功能,所以我就定义了这个保存函数来保存下每次运行系统后对整个订票系统涉及到的资料的修改。
为出系统的时候进行一次保存将此次对文件修改的所有新信息都一次保存下来。
这样就实现了整个系统运行时进行一次读取,推出时一次保存的设计大大简便了文件的调用和读取。
保存函数运用到的知识点与读取函数大致相同。
在这个函数中首先调用了search函数查找需要订票的航班。
运用if语句实现订票时的多种情况,订票数输入不正确、飞机票数不足等情况。
订票成功时运用s[i].totalticket=s[i].totalticket-n,s[i].sellticket=s[i].sellticket+n 将已被订的机票数减去以显示新的即时航班信息。
与订票函数相类似s[i].totalticket=s[i].totalticket+n,s[i].sellticket=s[i].sellticket-n。
只做稍稍修改就行退票成功是用.。
将航班的剩余票数加上去以显示即时航班信息。
模块分工:进入系统菜单、输出航班信息、订票信息由刘妍负责输入航班信息、保存航班信息、读取航班信息由龚媛负责查询航班信息、退票信息、修改信息部分由郭勇艳负责3、详细设计系统程序结构(流程图)录入信息系统流程图航班信息浏览函数:[流程图]显示信息查询模块:[流程图]..4、程序运行结果(截图)登陆系统时需输入用户信息图1进入系统后出现菜单供选择,选择需要进入的窗口图2航班信息的录入图3 浏览航班信息图4 航班信息的修改图5查询菜单图6 通过航班号和时间进行查询图7系统订票图8 退票系统图9 退出系统图105、源程序代码(代码中注明每段代码的完成人)/*用户名:dianke 密码:12345*/#include<stdio.h> //标准输入、输出头文件#include<string.h> //包含字符串函数处理头文件#include<stdlib.h> //包含动态存储与释放函数头文件#include<conio.h> //包含字符串的输入、输出头文件#define N 10000struct flight //定义结构体数组{int flightno;char start[10];char end[10];char day[10];int totalticket;int sellticket;}s[N];int i;int m=0;#define PRINT "%-d%14s%13s%12s%12d%16d\n",s[i].flightno,s[i].start,s[i].end,s[i].da y,s[i].totalticket,s[i].sellticket //定义输出格式void menu(); //进入系统菜单void print(); //输出航班信息void booking(); //订票信息void input(); //输入航班信息void save(); //保存航班信息void read(); //读取航班信息void search(); //查询航班信息void back(); //退票信息void correct(); //修改信息void menu(){int j;printf(" 欢迎进入飞机订票管理系统!\n");printf("======================================================================\n");do{printf(" 1.录入航班信息 \n");printf(" 2.浏览航班信息 \n");printf(" 3.修改航班信息 \n");printf(" 4.查询航班信息 \n");printf(" 5.订票信息 \n");printf(" 6.退票信息 \n");printf(" 0.退出航班信息管理系统 \n");printf("======================================================================\n");printf("请在0-6中选择以回车键结束:\n");scanf("%d",&j);switch(j){case 1: input(); //调用输入模块break;case 2:print(); //调用打印模块break;case 3:correct(); //调用修改模块break;case 4:search(); //调用查询模块break;case 5:booking(); //调用订票模块break;case 6:back(); //调用退票模块break;case 0:;break;}}while(j!=0); //判断结束printf("谢谢使用,再见!\n");} //主函数结束void main() //打印主函数程序信息{int i,k,part1,part2;char name[10]="dianke",password[10]={"\0"};char person[10], c[10]="12345";printf ("\t\t ********** 欢迎进入飞机订票管理系统!**********\n\n"); //打印提示信息printf ("\t\t ~本系统由、、编写完成~ \n\n");printf ("\t\t ~(*^__^*)~ \n\n");printf ("\t\t\t 用户登录\n\n");for(k=0;k!=3;)//打开文件并判断{printf("\t\t\t\t 用户名:"); //打印用户名gets(person);part1=strcmp(person,name);printf("\t\t\t\t 密码:"); //打印密码for(i=0;i<5;i++){c[i]=getch();printf("*");}gets(c);part2=strcmp(c,password);if(part1==0 && part2==0){printf("\t\t\t\t 登陆成功!\n\n");menu();break;}else{printf ("\t\t\t 用户名或密码错误!\n\n");printf ("\t\t\t 请注意:您还剩%d次机会!\n\n",2-k);k++;}}if (k=3)printf ("对不起,由于您输入的用户名或密码3次有误,已被强制退出。
\n");}void input() //打印模块程序{int y;printf("请依次输入航班信息:\n"); //打印提示信息printf("完成输入信息请键入w以回车键结束\n");printf("--------------------------------------------------------------------------\n");for(i=0;i<N;i++){printf("请输入航班号:\n");scanf("%d",&s[i].flightno); //读取航班号 printf("请输入起始站:\n");scanf("%s",s[i].start); //读取起始站 printf("请输入终点站:\n");scanf("%s",s[i].end); //读取终点站 printf("请输入时间:\n");scanf("%s",s[i].day); //读取时间 printf("请输入预售票总数:\n");scanf("%d",&s[i].totalticket); //读取预售票数printf("请输入已售票总数:\n",m);scanf("%d",&s[i].sellticket); //读取已售票总数 m++;printf("第%d个信息已经输完是否继续?按任意数字键继续,按0结束",m);scanf("%d",&y);if(y==0){save(); //将结构体信息存盘 print(); //输出输入的航班信息 break;}}}void save() //保存模块程序{FILE *fp,*fp1; //定义文件指针 if((fp=fopen("chen.dat","wb"))==NULL) //打开文件并判断是否出错{printf("创建文件失败!\n\n"); //打印出错提示getchar();return;}if((fp1=fopen("hao.dat","wb"))==NULL) //打开文件并判断是否出错{printf("创建文件失败!\n\n"); //打印出错提示getchar();return;}for(i=0;i<m;i++)if(fwrite(&s[i],sizeof(struct flight),1,fp)==0) //向文件写入数据,并判断是否出错printf("向文件输入数据失败!\n\n");fprintf(fp1,"%d",m);fclose(fp); //关闭文件fclose(fp1); //关闭文件}void read() //从文件读取信息模块{FILE *fp,*fp1; //定义文件指针 if((fp=fopen("chen.dat","rb"))==NULL) //打开文件,并判断是否出错 {printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示getchar();}if((fp1=fopen("hao.dat","rb"))==NULL) //打开文件并判断是否出错 {printf("创建文件失败!\n\n"); //打印出错提示 getchar();return;}fscanf(fp1,"%d",&m);fclose(fp1); //关闭文件for(i=0;i<m;i++){fread(&s[i],sizeof(flight),1,fp); //从文件中读取信息 }fclose(fp); //关闭文件}void print() //打印模块{char w[10];read(); //调用读取文件函数printf("航班号起始站终点站时间预售票总数已售票总数\n");for(i=0;i<m;i++){printf(PRINT); //打印信息}printf("请按任意键回车键结束返回上层菜单以:\n");scanf("%s",w);}void search() //查询模块{char startname[10];char endname[10];char day[10];char p[10];int n,no;do{printf("请选择查询方式:\n"); //打印查询方式菜单 printf("1.按航班号查询\n");printf("2.按起点站查询\n");printf("3.按终点站查询\n");printf("4.按航线查询\n");printf("5.按飞行时间查询\n");printf("0.返回\n");printf("请在0-5中选择:\n");printf("按其他键以回车键结束返回主菜单:\n");scanf("%d",&n); //读取查找方式 if(n==0)break;switch(n){case 1:printf("请输入航班号:\n");scanf("%d",&no); //航班号 break;case 2:printf("请输入起点站名称:\n");scanf("%s",&startname);break;case 3:printf("请输入终点站名称:\n");scanf("%s",endname); //读取终点站break;case 4:printf("请输入起始站名称:\n");scanf("%s",startname); //读取起始站 printf("请输入终点站名称:\n");scanf("%s",endname); //终点站break;case 5:printf("请输入飞行时间:\n");scanf("%s",&day);break;}read(); //调用读取函数 for(i=0;i<m;i++){if(strcmp(s[i].end,startname)==0||strcmp(s[i].end,endname)==0)//按终点站起始站判断输出条件{printf("\n查询航班信息成功!\n");printf("航班号起始站终点站时间预售票总数已售票总数\n");printf(PRINT); //打印信息 break;}if(s[i].flightno==no) //按航班号判断输出条件{printf("\n查询航班信息成功!\n");printf("航班号起始站终点站时间预售票总数已售票总数\n");printf(PRINT); //打印信息 break;}if(strcmp(s[i].day,day)==0){printf("\n查询航班信息成功!");printf("\n航班号起始站终点站时间剩余机票数预售机票数\n");printf(PRINT);//打印信息break;}}no=0; //将航班号赋值为0 printf("没有您需要的信息或查找完毕:\n\n""是否继续查找?请键入yes或no以回车键结束\n");scanf("%s",p);}while(strcmp(p,"yes")==0); //判断结束}void booking() //订票模块{int n;char f[10];do{search(); //调用查询模块 printf("请输入您要订的机票数以回车键结束:\n");scanf("%d",&n); //读取所订机票数 if(n<0){printf("请输入有效的机票数!\n"); //判断机票数是否出错 break;}if(s[i].totalticket!=0&&s[i].totalticket>=n) //判断是否出错{s[i].totalticket=s[i].totalticket-n;s[i].sellticket=s[i].sellticket+n;save(); //调用保存函数 printf("订票成功!\n\n");break;}if(s[i].totalticket<n) //判断是否出错{printf("请输入有效的机票数:\n");break;}printf("是否继续?请输入yes或no以回车键结束:\n"); //判断是否继续订票scanf("%s",f);}while(!strcmp(f,"yes")); //判断结束}void back() //退票模块{int n;char f[10];do{search(); //调用查询模块 printf("请输入您要退的机票数目:\n");scanf("%d",&n); //输入所退票数 if(n<0) //判断票数是否有效 printf("请输入有效的机票数!\n");s[i].totalticket=s[i].totalticket+n;s[i].sellticket=s[i].sellticket-n;save(); //调用保存模块 printf("退票成功!\n\n");printf("是否继续?请键入yes或no以回车键结束:\n\n");//判断是否继续退票scanf("%s",f);}while(!strcmp(f,"yes")); //判断并跳出循环 getchar();}void correct() //修改模块{struct cor //定义结构体{int no;char startname[10];char endname[10];char day[10];int totalticket;int sellticket;}x[1];char j[10];int n;{read(); //调用读取模块 do{printf( "请选择修改方式:\n");printf( "*1,按航班号修改:\n");printf( "*2,按航线修改: \n");printf("请在1---2中修改以回车键结束:\n");scanf("%d",&n); //读取修改方式 switch(n){case 1:printf("请输入航班号:\n");scanf("%d",&x[0].no); //读取航班号break;case 2:printf("请输入起始站:\n");scanf("%s",x[0].startname); //读取起始站 printf("请输入终点站:\n");scanf("%s",x[0].endname); //读取终点站 break;}for(i=0;i<m;i++){if(strcmp(s[i].end,x[0].startname)==0&&strcmp(s[i].end,x[0].endname)= =0) //判断输出条件{printf("航班号起始站终点站时间预售票总数已售票总数\n");printf(PRINT);break;}if(s[i].flightno==x[0].no) //判断输出条件{printf("航班号起始站终点站时间预售票总数已售票总数\n");printf(PRINT);break;}}x[0].no=0; //将结构体中的号为零 printf("请输入新航班号、起始站、终点站、时间(星期几)、预售票总数、已售票总数:\n");scanf("%d%s%s%s%d%d",&x[0].no,x[0].startname,x[0].endname,x[0].day,&x [0].totalticket,&x[0].sellticket); //定义输入格式s[i].flightno=x[0].no; //替换航班号 strcpy(s[i].start,x[0].startname); //替换其始站 strcpy(s[i].end,x[0].endname); //替换终点站 strcpy(s[i].day,x[0].day); //替换时间 s[i].totalticket=x[0].totalticket; //替换预售票总数s[i].sellticket=x[0].sellticket; //替换已售票总数 save(); //调用保存模块 printf("是否继续?请键入yes或no以回车键结束:\n\n");scanf("%s",j);}while(strcmp(j,"yes")==0); //判断结束}}6、个人体会历经整整一个星期的课程设计终于结束了,在这一个星期内,我们小组三个同学从最开始的空白到现在的程序运行成功。