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