《飞机订票系统程序设计_课程设计.docx》由会员分享,可在线阅读,更多相关《飞机订票系统程序设计_课程设计.docx(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、山东工商学院信电学院高级语言程序设计课程设计报告高级语言程序设计课程设计报告题目:飞机订票系统程序设计专业:班级:学号:姓名:指导教师: 日期:山东工商学院信电学院1、程序基本功能要求本程序首先输入用户名、密码进入系统;从菜单中选择可以输入机票信息对机票信息进行浏览、修改、查询、退订票等功能并可以通过其内部各类方式或菜单内选项了解航班更细的信息。(1) 航班信息用文件保存,因而要提供文件的输入输出操作。(2) 航班信息的录入,其中包括了航班信息中的航班号、起始站、终点站、预售机票数 、已售机票数。(3) 航班信息浏览功能且提供显示操作。(4) 可以查询航线,查询方式有按航班号查询、按起点站查询
2、、按终点站查询按航线查询、按飞行时间查询五种,可从各个方面进行查询,方便快捷。(5) 承办订票和退票业务,可显示剩余票数和已买票数。当票数被订或被退时票数会随之变化,统计较为灵活。(6) 提供键盘式选择菜单以实现功能选择。2、总体设计.编写一个飞机订票系统的程序使该系统能够实现对航班信息的录入、浏览、修改、查询以及订票、退票的功能。根据课程设计要求和本组人员的增补, 首先要通过一个用户登录界面进入系统,其次要制作一个主菜单显示出各个操作的提示可供用户选择进而一步步地深入操作。根据主菜单的内容再进一步编制具体操作的函数,各个功能均用专门编制的函数来完成。因为飞机订票系统含有各航班的各项信息如航班
3、号、航线、飞行时间、机票数目等必要信息所以就决定用刚学不久的结构体数组来存放航班的各项信息,这就是看到题目后的最初的思路。在整个程序中,含有多种类型的头文件,包括了标准输入、输出头文件、字符串函数处理头文件、动态存储与释放函数头文件;在结构体数组中也对不同类型的数组进行不同的定义,例如: int flightno、int totalticket、char start10 等;在各类信息的显示操作中,本系统在执行浏览、查询和退订票是充分利用函数的调用,利用 switch()语句进行,简便实用;在此系统中,函数相互嵌套, 形成了一个完整的系统。本次设计需要编制初始化、建立数据文件、数据文件保存、增
4、加航班信息、订票、退票业务等内容。首先需要设立一个初始化函数来得到航班信息。具体设计是第一次运行程序时自动生成保存航班信息的文件,并输入初始航班信息,待第二次开始就可以直接读取该文件获得已有的航班信息并可直接使用。运用了access 函数判断文件是否存在。系统初始化后,没有寻找到数据文件则进行新建数据文件。此函数的作用就是进行新建文件数据的录入,运用到了文件指针的定义 FILE *fp文件的打开 fopen 和关闭 fclose、成块读写函数中的 fwrite运用 for 循环进行各组数据的输入,用 m+记录下输入的航班数量并运用 if 语句判断是否输入下一条航班信息,若不继续则返回主界面。系
5、统初始化之后 若原始数据文件存在则进行文件内航班信息的读取以供接下来程序中的各个函数来使用。在该函数中同样运用到了文件指针FILE *fp、文件的打开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
7、-n。只做稍稍修改就行退票成功是用.。将航班的剩余票数加上去以显示即时航班信息。模块分工:进入系统菜单 、输出航班信息、订票信息由刘妍负责输入航班信息、保存航班信息、读取航班信息由龚媛负责查询航班信息、退票信息、修改信息部分由郭勇艳负责3、详细设计系统程序结构(流程图)开始系统初始化修改航班信息航 班信 息订票业务退票业务退 出并 保浏览查航找班信息存建立新数据文件从已有的数据文件读取输的类息入各信按航班号、起始站、时间、航线查找录入信息系统流程图开始文 件 打 开否输入信息输出错误信息将信息输 出到磁是 否 继续利用 frferaeda(d&(s&sii,s,isziezoefo(ff(lf
8、ilgihgth)t,)1,1f,pf)p读取信息结束航班信息浏览函数:流程图显示信息开始文件打开输 出 错 误 信息查找航班信息是 否 查 找到删除操作输入信息是否继续结束查询模块:流程图.开始文件打开输出错误信息查询方式航班号起点站终 点站路线飞行时间是否继续结束4、程序运行结果(截图)登陆系统时需输入用户信息图 1进入系统后出现菜单供选择,选择需要进入的窗口妇胪井,;,飞机订栗管理系统?=压!1 录,i航 员, 1 兰自航2 浏览 i,1f1詈 首,航3 -1恪古i.,1 ,f1百巴,4 查询航王丹信巴5 订罕信息,6 退罕信息8 挹出航珀信患管平理统,I.青在0 - 6 中选择 l.I
9、 ,回车键结束:青i1,f1 1., 农1 次;:面 ,i l ,舟Ji P.言勹:il,冗 哎辄, ,I I ,信自清 键, ,l ,回 车键结亩图 2航班信息的录入=,中选清芢0 - 6择., l.1 回 车遣结束:轴1 1青,完 农吹 ;钳积,II信息 :ii ,l.碍 伴l , Ill ,信 息诸链,I l , u:一l1 回 车键结束1,;请楠,,11 ,航 刊I号:123 啃楠;起治站:yantaiqin,一aoi,.主:十: g目 寸甘l |-1清辄,:;,终点站:1,., 1 ,廿寸 司:7.1 ;,I请奇,前: ,,一节售幸,巴,数:234 ,清辅i,_.)已一23 售苹巴数
10、 :草, 1 个信自已经辄气 呈否细续?才专任营数字键址续, 拧0 结束3请输;,1,,航 !.,III号:234 ,清输;,1,起一怡站:yantai清输,;终点站:J 1.nan清输,;,一旷闭:屈?.2 I,咱 ;1l,义预售罕思数:;:1,342 I,清轴,:已售罕总数:续拧0 结束0沪笸華,巴,古?234342. E.如 i 信自已经输气巨一百维续?护任音护字键细,灯婓華售323已航!,任号起怡护点站时间123yantaiqingdao7.1jinan234yantai浏览航班信息7.2图 3酮图 4在已i .Ei售43售页2航班信息的修改1 -2请1清柄;,衍123 航P.I号I
11、i.J千l,II 号:起恬站终点站B寸可势草卞J123yantai,i请年前,新航刊I号、起怡站疆124 qingdao7.1、. 佳西口数票已终点站、时间可却.T. 方, .丘一,一一、54是否继芸?请市建:;,.y e s 武no口回车遴 结束:口图 5查询菜单1 寻;,,,,义航班信息2王一浏览航刊 1 吕自,3 _修严利瓦i.,1II i言,息,4 一 查询航班信息 -i.丁竺11 芒自心向信心o思 出航班信患管理卒统=择l.芍起点中选 ,回 车遴结束0 - 6青在:青老择桽找古式: 卢 贮!:,I f号互找:互芦艺一扫飞行时团查询寸 5回站查询售五o - 5匿图 6通过航班号和时间进
12、行查询键;,1,,是否组奀直扛?请 ,-yes 请洗桯杳找卞式:1 梪箭预号查找2 扛 起点站查询3 椤竺气峈查找飞4 荨芦立5 ,心托iT廿寸闲查询心匕匝清存0- 5 中洗i圣:y e s或no l 1 ,回车键结束,拧 且,他键l,I.I,回车翌结亩西回王茎羊:5 时1请,奇前;,飞行目 :7.1 王米,亡查找箭1,lf信启,成,功?航刊干巨起怡呫莘勹示124.: 终占呫,yantaiqingda.o没有包需要引信息或查找完毕:甘十百剖字机草数陌售机? 132454 图 7系统订票图 8退票系统1玉枉录,i ,人利.J1 .王l ,片,言皂 - 12 . ;刘陷航, ,三自 3 -1 亏舌
13、饥刊I 信息I千1询航:1,, 幸 信 , 荨4 查言患5. i-T,6一手军1芒巨心卫正底衬信息营理孚统=l_1音在0- 6 中选择, 1 回 车 键结束:节选择查找下式:芍肮玉, 1, 于号亘拉一节起点站五询芍终占差宜栈飞1五飞三t一节 ,丁 旷闱杳向五回盲有05囡晒尸 他主建回车链结束亡回王菜单:l.,宜没有 肛需耍的信息或 t凸亢毕:砉fl .T!/ es亘一不进综杏廿外 ,丰:,1 或n o ,回牛遵结丰嘉箭卢,气3日 的机益如目:退草成功?诸但 ,沪写或II U l.,.回土键绪束;邮退出系统图 9珩肉肾航1 录 ;,1,飞利酥归信息信因航卫1 信 息,2 . 1言息3 订莘1 亡
14、自. 1尸莘 1 它51 = 1.!.a,退出航员王信息管理牛铣6勹口,自心立.: 4 . 窒询航钊于信息0.音在0 - 6 中选择 :1): 一,回车呾结束:;1卫杻玉I甘11:自杻2 浏览航, 1:1 寻 ,,什兀 兰3 修严航卫 1舌巴,4 . 查询航!:!.信II 息5 叮幸信息1 6 7启 菩 古自 .上示 口 1土 ,0 书出航王扞信息管理系统.,.=青在8 - 6 中选择 l 11 回 车键芜丰:围一皿图 105、源程序代码(代码中注明每段代码的完成人)/*用户名:dianke密码:12345*/#include/标准输入、输出头文件#include/包含字符串函数处理头文件#i
15、nclude/包含动态存储与释放函数头文件#include/包含字符串的输入、输出头文件#define N 10000struct flight/定义结构体数组int flightno; char start10; char end10; char day10; int totalticket; int sellticket;sN;int i; int m=0;#definePRINT%-d%14s%13s%12s%12d%16dn,si.flightno,si.start,si.end,si.da y,si.totalticket,si.sellticket/定义输出格式void menu(
16、);/进入系统菜单void print();/输出航班信息void booking();/订票信息void input();/输入航班信息void save();/保存航班信息void read();/读取航班信息void search();/查询航班信息void back();/退票信息void correct();/修改信息void menu()intj;printf(欢迎进入飞机订票管理系统!n); printf(=n);doprintf(printf( printf( printf(1. 录入航班信息2. 浏览航班信息3. 修改航班信息4. 查询航班信息n);n);n);n);prin
17、tf(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;w
18、hile(j!=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用户名:);/打印用户名gets(perso
19、n); 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;elseprintf (ttt用户名或密码错误!nn);printf (ttt请注意:您还剩%d 次机会!nn,2-k); k+;if (k=3)printf (对不起,由于您输入的用户名或密码 3 次有误,已被强制退出。n);void input
20、()/打印模块程序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);/读取时间printf(请输入预售票总数:n);scanf(%d,&si.totalti
21、cket);/读取预售票数printf(请输入已售票总数:n,m);scanf(%d,&si.sellticket);/读取已售票总数m+;结束,m);printf(第%d 个信息已经输完是否继续?按任意数字键继续,按 0scanf(%d,&y); if(y=0)save();/将结构体信息存盘print();/输出输入的航班信息break;void save()/保存模块程序FILE *fp,*fp1;/定义文件指针if(fp=fopen(chen.dat,wb)=NULL)/打开文件并判断是否出错printf(创建文件失败!nn);/打印出错提示getchar();return;if(fp
22、1=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);/关闭文件void read()/从文件读取信息模块FILE *fp,*fp1;/定义文件指针if(fp=fopen(chen.dat,rb)=NULL)
23、/打开文件,并判断是否出错出错提示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(flight),1,fp);/从文件中读取信息fclose(fp);/关闭文件void print()/打印模块char w10;read();/调用读取文件函数printf(航
24、班号起始站终点站时间预售票总数已售票总数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; doprintf(请选择查询方式:n);/打印查询方式菜单printf(1.按航班号查询n);printf(2.按起点站查询n); printf(3.按终点站查询n); printf(4.按航线查询n); printf(5.按飞行时间查询n
25、); 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( 请 输 入 起 始 站 名 称
26、: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,startname)=0|strcmp(si.end,endname)=0)/ 按 终点站起始站判断输出条件printf(n 查询航班信息成功!n);预售票总数printf(航班号已售票总数n);起始站终点站时间printf(PRINT);/打印信息break
27、;if(si.flightno=no)/按航班号判断输出条件printf(n 查询航班信息成功!n);printf( 航班号预售票总数已售票总数n);起始站终点站时间printf(PRINT);/打印信息break;if(strcmp(si.day,day)=0)printf(n 查询航班信息成功!);printf(n 航班号起始站终点站时间剩余机票数预售机票数n);printf(PRINT);/打印信息break;no=0;/将航班号赋值为 0printf(没有您需要的信息或查找完毕:nn是否继续查找?请键入 yes 或 no 以回车键结束n); scanf(%s,p);while(strc
28、mp(p,yes)=0);/判断结束void booking()/订票模块int n;char f10; dosearch();/调用查询模块printf(请输入您要订的机票数以回车键结束:n); scanf(%d,&n);/读取所订机票数if(n=n)/判断是否出错si.totalticket=si.totalticket-n; si.sellticket=si.sellticket+n;save();/调用保存函数printf(订票成功!nn); break;if(si.totalticketn)/判断是否出错printf(请输入有效的机票数:n); break;printf(是否继续?
29、请输入yes 或no 以回车键结束:n);/判断是否继续订票scanf(%s,f);while(!strcmp(f,yes);/判断结束void back()/退票模块int n;char f10;dosearch();/调用查询模块printf(请输入您要退的机票数目:n);scanf(%d,&n);/输入所退票数if(n0)/判断票数是否有效printf(请输入有效的机票数!n); si.totalticket=si.totalticket+n; si.sellticket=si.sellticket-n;save();/调用保存模块printf(退票成功!nn);printf(是否继续?
30、 请键入yes 或no 以回车键结束:nn);/判断是否继续退票scanf(%s,f);while(!strcmp(f,yes);/判断并跳出循环getchar();void correct()/修改模块struct cor/定义结构体int no;char startname10; char endname10; char day10;int totalticket; int sellticket;x1;char j10; int n;read();/调用读取模块doprintf( 请选择修改方式:n); printf( *1,按航班号修改:n);printf( *2,按航线修改: n);p
31、rintf( 请 在 1-2 中 修 改 以 回 车 键 结 束 :n); scanf(%d,&n);/读取修改方式switch(n)case 1:printf( 请 输 入 航 班 号 :n); scanf(%d,&x0.no);/读取航班号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
32、(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,&x0.no,x0.startname,x0.endname,x0.day,&x 0.totalticket,&x
33、0.sellticket); /定义输入格式si.flightno=x0.no;/替换航班号strcpy(si.start,x0.startname);/替换其始站strcpy(si.end,x0.endname);/替换终点站strcpy(si.day,x0.day);/替换时间si.totalticket=x0.totalticket; /替换预售票总数si.sellticket=x0.sellticket;/替换已售票总数save();/调用保存模块printf(是否继续?请键入 yes 或 no 以回车键结束:nn); scanf(%s,j);while(strcmp(j,yes)=0
34、);/判断结束6、个人体会历经整整一个星期的课程设计终于结束了,在这一个星期内,我们小组三个同学从最开始的空白到现在的程序运行成功。整个过程中,我领会了很多, 也学到了很多,我了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。通过这次课程设计使我明白了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的大部分知识重新温故,巩固了所学的知识。整个过程中,我们对程序输入、浏览、功能排版、菜单显示等各个功能进行了编写,用了很多方法找可用的资料 ,将找到的资料进行整合嵌套。由于对程序的不熟悉和知识的局限性,刚开始将各功能整合时错误百出,各种修改最后也运行不了,当时的心情十分沉闷,总会想到要放弃,经过同学的鼓励和帮助,最终我们小组的程序终于运行成功。此次程序能运行成功的很大原因是小组同学的合作,大家分工合作,效率很快,准确率也很高。所以我觉得此次程序设计很成功,在能力、知识、复习等各个方面都有涉及,收获颇丰。7、指导教师评语课程设计成绩: 指导教师签字: