《飞机订票系统课程设计报告讲解.doc》由会员分享,可在线阅读,更多相关《飞机订票系统课程设计报告讲解.doc(36页珍藏版)》请在三一办公上搜索。
1、内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 飞机订票系统学生姓名:XXX学 号:XXXX专 业:计算机科学与技术班 级:计2014-2指导教师:XXXX日 期: 2015 年 1 月 9日内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目飞机订票系统指导教师XXX时间2015.1.52015.1.9一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题
2、,独立完成,题目选定后不可更换。飞机订票系统设计假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。试设计一民航订票系统,使之能提供下列服务:v 航班信息录入功能(航班信息用文件保存)输入v 航班信息浏览功能输出v 查询航线:(至少两种查询方式)算法按航班号查询 按终点站查询v 承办订票和退票业务三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要
3、见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社目 录内蒙古科技大学课程设计任务书I目 录II第一章 需求分析31.1引言3
4、1.2任务概述41.3数据描述41.4功能需求41.5性能需求41.6运行需求41.7任务计划5第二章概要设计62.1总体设计62.2数据类型设计(或数据结构设计)62.3接口设计72.4运行界面设计7第三章详细设计103.1输入模块设计103.2输出模块设计113.3查找模块设计123.4排序模块设计143.5保存及读取模块设计15第四章测试分析174.1测试程序执行情况174.2测试结果及出现的问题和解决的方法17第五章课程设计总结22附录:程序代码23参考文献35鸣谢错误!未定义书签。第一章 需求分析1.1 引言随着时代的进步社会分工的不断细化,各个行业联系的不断密切,人们出行越来越多,
5、出行的方式也是百花齐放,作为空中重要的交通工具,飞机航空系统也在不断地得到优化,其中重要的一项就是飞机航空订票系统,因此好的订票系统关系着人们的日常出行方便与否,设计并编制出符合人们需要的航空订票系统是一项繁重而艰巨的任务。订票系统在现实生活中应用很广泛,通过这个系统可以使订票、退票等变得简便。与传统的人工用纸、笔来记录办理订票、退票等相比,使用这个系统也会增加工作效率随着科学技术的不断发展,计算机科学日渐成熟,其强大功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量各个国家科学化和现代化的重要标志,而交通方式的全面自动化、信息化则是
6、其中重要的组成部分,在很大程度上影响着企业的经济效益和社会效益。因此,本文所研究的航空订票系统具有一定的使用价值和现实意义。随着科技与经济的发展,越来越多的人选择乘飞机,这跟我国的经济增长有很大关系,人们在追求快节奏的生活方式,所以做飞机无疑成了首选。而且随着网络的盛行,航空订票系统就显得尤为重要,这个系统主要是为了方便大家,让大家能够快速、清晰、准确地了解航班信息,而不至于像以前那样排队等候,从而避免耽搁乘客大量的等待时间。完成此系统,需要综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发。通过课程设计,自己通过系统分析、系统
7、设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。1.2 任务概述假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。试设计一民航订票系统,使之能提供下列服务:v 航班信息录入功能(航班信息用文件保存)输入v 航班信息浏览功能输出v 查询航线:(至少两种查询方式)算法按航班号查 按终点站查询v 承办订票和退票业务1.3 数据描述航班管理系统有如下数据:(1班号(2.机票数(3.时间(4.起点站
8、(5.终点站(6.航线1.4 功能需求1. 新建文件,读取文件,保存到文件2. 添加3. 修改4. 查找5. 删除1.5 性能需求开发环境:PC机,windows系统使用软件:制 作 程 序:Microsoft Visual C+ 6.0硬件要求:1M以上扩充内存,10M以上的显示内存1.6 运行需求本文所采用的开发环境主要是基于VC6.0和基于面向对象程序设计的c+。VC是个平台开工具。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,软件环境:内置MS-DOS5.或者windows98及以上系统。且有中文平台,如:UCDOS等。1.7 任务计
9、划(1) 每条航线所涉及带的信息有:终点站名、航班号、飞行日期、余票量。(2)输出形式为:= 1.航班信息录入 2.航班信息浏览 3.查询航线(按航班号)4.查询航线(按终点站)5.查询航线(按起点站)6.航班排序(按航班号)7.订票业务 8.退票业务 0.退出 =(3)系统能实现的操作功能如下: 查询航线:根据旅客提出的终点站名输出下列信息:航班号、起点站、终点站、星期几飞行、余票额; 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班的票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; 承办退票业务:根据客户提
10、供的情况为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的需求,则为他办理订票手续,否则,依次询问其他排队候补客户。测试实例:例子某客户输入订票信息:北京到上海 ,星期一,所需票数3张;系统输出:航班号 余票该客户选择航班号为1000的航班;则该航班余票变为37张。第二章 概要设计2.1 总体设计飞机航班订票系统增加航班信息浏览航班信息航班排序模块退票系统增加机票保存查找函数排序函数查找函数减少机票数目查找函数增加机票数目查找航班信息订票系统输出函数2.2 数据类型设计(或数据结构设计)struct air /定义结构体数组 int num;cha
11、r start20;char over20;char time10;int count;sN;2.3 接口设计 表2.1:函数列表函数名函数格式 /即函数首部函数功能main()void主函数add()void声明增加航班信息print()void显示航班信息search()void查找航班信息(按航班号)search2()void查找航班信息(按终点站)search3()void查找航班信息(按起点站)dingpiao()void订票业务tuipiao()void退票read()void读取文件save()void保存文件output()void输出格式paixu()void航班排序chus
12、hihua()void系统初始化build()void建立数据文件paixu1();void按航班号从小到大排序paixu2();void从大到小2.4 运行界面设计1运行主菜单: printf(=n); printf(1.航班信息录入 n 2.航班信息浏览 n 3.查询航线(按航班号)n 4.查询航线(按终点站)n 5.查询航线(按起点站)n 6.航班排序(按航班号)n 7.订票业务 n 8.退票业务 n 0.退出 n); printf(=n); printf(请在0-8中选择以回车键结束: );界面如下:1子主菜单:printf(请依次输入航班信息(以回车键结束):n); printf(-
13、n);for(i=0;iN;i+)printf(请输入航班号: ); scanf(%d,&si.num);printf(请输入起始站: );scanf(%s,si.start);printf(请输入终点站: );scanf(%s,si.over);printf(请输入时间(星期几): );scanf(%s,si.time);printf(请输入机票数: );scanf(%d,&si.count);fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf(%s,ii); 2.航班显示菜单:void
14、 output()/定义输出格式函数printf(航班号tt起始站tt终点站tt时间tt机票数n); for(i=0;im;i+)printf(PRINT);/打印出信息第三章 详细设计3.1 输入模块设计输入模块1:void build()/定义建立数据文件函数FILE *fp;/定义文件指针if(fp=fopen(hangban.txt,wb)=NULL)/打开文件并判定是否出错 printf(创建文件失败! );getchar();return;printf(请依次输入航班信息(以回车键结束):n); printf(-n);for(i=0;iN;i+)printf(请输入航班号: );
15、scanf(%d,&si.num);printf(请输入起始站: );scanf(%s,si.start);printf(请输入终点站: );scanf(%s,si.over);printf(请输入时间(星期几): );scanf(%s,si.time);printf(请输入机票数: );scanf(%d,&si.count);fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf(%s,ii);if(strcmp(ii,y)!=0)/判断是否继续添加航班信息fclose(fp);/关闭文件r
16、eturn;输入模块2:void add()/定义增加航班信息函数char ch;doprintf(请依次输入您要增加的航班信息(以回车键结束): n); /打印提示信息printf(-n);printf(请输入航班号: ); scanf(%d,&sm.num);printf(请输入起始站: );scanf(%s,sm.start);printf(请输入终点站: );scanf(%s,sm.over);printf(请输入时间: );scanf(%s,sm.time);printf(请输入机票数: );scanf(%d,&sm.count);m+;printf(添加完毕,是否继续添加?请键入y
17、或n以回车键结束:);scanf( %c,&ch); /%前有一个空格while(ch=y|ch=Y);/判断是否继续添加3.2 输出模块设计输出模块1:输出格式函数void output()printf(航班号tt起始站tt终点站tt时间tt机票数n); for(i=0;im;i+)printf(PRINT);/打印出信息输出模块2:显示航班信息函数void print()printf(n目前我们有如下航班:n);output();/调用输出格式函数printf(n请按回车键返回上层菜单);getchar();3.3 查找模块设计查找模块(按航班号查询):查询函数void search()i
18、nt n;doprintf(n请输入航班号: );scanf(%d,&n);/输入查询的航班号for(i=0;im;i+) if(si.num=n)/按航班号判定输出条件 printf(n您所查找的航班信息为:n );printf(航班号tt起始站tt终点站tt时间tt机票数 nn);printf(PRINT);/显示信息 printf(n查询完毕,按回车键继续);getchar();getchar();return;printf(n对不起,没有您需要的信息!n );printf(是否重新查找?请键入y或n以回车键结束 );scanf(%s,ii);while(!strcmp(ii,y);/判
19、定是否重新查找 查找模块(按终点站查询):void search2()/定义查询函数char c20;doprintf(n请输入终点站: );scanf(%s,c);/输入查询的终点站for(i=0;im;i+) if(strcmp(si.over,c)=0)/按终点站判定输出条件 printf(n您所查找的航班信息为:n );printf(航班号tt起始站tt终点站tt时间tt机票数 nn);printf(PRINT);/显示信息 printf(n查询完毕,按回车键继续);getchar();getchar();return;printf( 对不起,没有您需要的信息!n );printf(是
20、否重新查找?请键入y或n以回车键结束 );scanf(%s,ii);while(!strcmp(ii,y);/判定是否重新查找查找模块(按起点站查询):void search3()/定义查询函数char c20;doprintf(n请输入起点站: );scanf(%s,c);/输入查询的起点站for(i=0;im;i+) if(strcmp(si.start,c)=0)/按终点站判定输出条件 printf(n您所查找的航班信息为:n );printf(航班号tt起始站tt终点站tt时间tt机票数 nn);printf(PRINT);/显示信息 printf(n查询完毕,按回车键继续);getc
21、har();getchar();return;printf( 对不起,没有您需要的信息!n );printf(是否重新查找?请键入y或n以回车键结束 );scanf(%s,ii);while(!strcmp(ii,y);/判定是否重新查找3.4 排序模块设计排序模块:void paixu()/定义排序函数int n;printf(n*n ); printf(1.按航班号从小到大排序n 2.按航班号从大到小排序n);printf(*n ); printf(请在1-2中选择以回车键结束: );scanf(%d,&n);switch(n)case 1:paixu1();/调用从小到大排序函数brea
22、k;case 2:paixu2();/调用从大到小排序函数break;printf(排序后的航班信息为:n);output();/显示排序后航班信息printf(n请按回车键返回上层菜单); getchar();从小到大排序函数void paixu1()int k,j;struct air t;for(i=0;im;i+)/选择法排序k=i;for(j=i+1;jsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;从大到小排序函数:void paixu2()int k,j;struct air t;for(i=0;im;i+)k=i;for(j=i+1;jm;j+)if(sk
23、.numsj.num)k=j;if(i!=k)t=sk;sk=si;si=t;3.5 保存及读取模块设计读取文件函数:void read()FILE *fp;if(fp=fopen(hangban.txt,r)=NULL)printf(创建文件失败! );getchar();return;i=0;while(!feof(fp)fread(&si,sizeof(struct air),1,fp);/逐块读取数据i+;m+;/计算存在航班数m-;fclose(fp);void save()/定义保存函数FILE *fp;if(fp=fopen(hangban.txt,wb)=NULL) print
24、f(创建文件失败! );getchar();return;for(i=0;im;i+)/逐块保存数据fwrite(&si,sizeof(struct air),1,fp);fclose(fp);保存函数void save()FILE *fp;if(fp=fopen(hangban.txt,wb)=NULL) printf(创建文件失败! );getchar();return;for(i=0;im;i+)/逐块保存数据fwrite(&si,sizeof(struct air),1,fp);fclose(fp);第四章 测试分析4.1 测试程序执行情况测试数据:航班号起始站终点站时间机票数370北
25、京上海星期二500747天津广州星期一600757包头南京星期五4004.2 测试结果及出现的问题和解决的方法1:软件运行界面在08中可选取需要的功能2:航班信息录入3:航班信息的浏览4:查询航线(按航班号)5:查询航线(按终点站)6:查询航线(按起点站)7:订票业务8:退票业务当输入不合法数据时会有下列情况:软件存在的问题:在数据初始化的时候未对数据按照一定的顺序存放,如果航线信息较多时将影响系统功能解决办法:输入多个航班是使用功能六对航班进行排序即可。第五章 课程设计总结这次序编制的过程中出现了很多问题,主要原因是自己以前接触的关于编制程序的知识的缺乏,通过飞机航班订票系统的开发让我知道了
26、自己的不足和缺点,写出一个好的程序需要合作精神,一个人的力量毕竟是有限的团队力量才是无穷的。一个好的程序员一定是从程序堆里走出来的,只有通过参与具体程序的开发才知道自己知识的有限,才会学会具体的分析问题,是自己的逻辑性和层次性得到良好的锻炼,在今后的工作、学习中我将认真总结经验教训,努力使自己成为一名技术过硬、工作严谨、思维活跃的工程人员,为提高人们的生活质量做出更大的贡献该统主要完成以下功能: 功能:此系统功能分为管理员模块和前台票务员模块;管理员模块主要负责航班信息管理,包括增加新航班、修改原有航班、删除航班的功能;前台票务员模块包括乘客信息管理、订票管理、航班查询的工能。 性能:能够高效
27、而且快速的管理航班信息及订票功能,航班查询可在较短时间内完成,数据能够实时反映到终端,以确保信息查询的准确性,方便乘客订票,减少系统错误。 课程设计是一门专业课,给我很多专业知识以及专业技能上了提升,同时又是一门思辨课,让我感触很深,是我对抽象的理论有了具体的认识,在这次课程设计中知道了以前没有接触过的很多函数,C语言中的文件部分因为种种原因都没有得到及时的学习,以前很多东西都没有学好,就像老师以前说的:“一天敲一个小时的键盘程序就能学好了。”现在开始相信了,在以后的学习中自己要加强程序的锻炼,多参考好的程序和各种各样的函数,建立起自己的函数库,为以后学习打下良好的基础。附录:程序代码#inc
28、lude#include#include#include#define N 9999/定义最多的航班数#define PRINT %dtt%stt%stt星期%stt%dn ,si.num,si.start,si.over,si.time,si.count /宏定义输出格式struct air /定义结构体数组 int num;char start20;char over20;char time10;int count;sN;int i,m=0; /定义全局变量char ii10;void add(); /函数声明增加航班信息函数void print(); /显示航班信息void search
29、();/查找航班信息(按航班号)void search2(); /查找航班信息(按终点站)void search3(); /查找航班信息(按起点站)void dingpiao();/订票业务void tuipiao();/退票void read();/读取文件void save();/保存文件void output();/输出格式void paixu();/航班排序void chushihua();/系统初始化void build();/建立数据文件void paixu1();/按航班号从小到大排序void paixu2();/从大到小void main() /主函数int j; chushi
30、hua();/系统初始化判断是否存在原始数据文件printf( 欢迎使用飞机订票系统n);printf( 该系统有以下功能n);do printf(=n); printf(1.航班信息录入 n 2.航班信息浏览 n 3.查询航线(按航班号)n 4.查询航线(按终点站)n 5.查询航线(按起点站)n 6.航班排序(按航班号)n 7.订票业务 n 8.退票业务 n 0.退出 n); printf(=n); printf(请在0-8中选择以回车键结束: );scanf(%d,&j);fflush(stdin);switch(j)case 1: add();break;case 2:print();b
31、reak;case 3:search();break; case 4:search2();break;case 5:search3();break;case 6:paixu();break;case 7:dingpiao();break;case 8:tuipiao();break; case 0:save();printf(谢谢使用,再见!);break;default:printf(您输入不合法,请按回车键继续); getchar(); while(j!=0);/判断是否调用其他函数 void chushihua()/定义系统初始化函数if(access(hangban.txt,0)bui
32、ld();elseread();void build()/定义建立数据文件函数FILE *fp;/定义文件指针if(fp=fopen(hangban.txt,wb)=NULL)/打开文件并判定是否出错 printf(创建文件失败! );getchar();return;printf(请依次输入航班信息(以回车键结束):n); printf(-n);for(i=0;iN;i+)printf(请输入航班号: ); scanf(%d,&si.num);printf(请输入起始站: );scanf(%s,si.start);printf(请输入终点站: );scanf(%s,si.over);prin
33、tf(请输入时间(星期几): );scanf(%s,si.time);printf(请输入机票数: );scanf(%d,&si.count);fwrite(&si,sizeof(struct air),1,fp);m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf(%s,ii);if(strcmp(ii,y)!=0)/判断是否继续添加航班信息fclose(fp);/关闭文件return;void read()/定义读取文件函数FILE *fp;if(fp=fopen(hangban.txt,r)=NULL)printf(创建文件失败! );getchar()
34、;return;i=0;while(!feof(fp)fread(&si,sizeof(struct air),1,fp);/逐块读取数据i+;m+;/计算存在航班数m-;fclose(fp);void save()/定义保存函数FILE *fp;if(fp=fopen(hangban.txt,wb)=NULL) printf(创建文件失败! );getchar();return;for(i=0;im;i+)/逐块保存数据fwrite(&si,sizeof(struct air),1,fp);fclose(fp);void add()/定义增加航班信息函数char ch;doprintf(请依
35、次输入您要增加的航班信息(以回车键结束): n); /打印提示信息printf(-n);printf(请输入航班号: ); scanf(%d,&sm.num);printf(请输入起始站: );scanf(%s,sm.start);printf(请输入终点站: );scanf(%s,sm.over);printf(请输入时间: );scanf(%s,sm.time);printf(请输入机票数: );scanf(%d,&sm.count);m+;printf(添加完毕,是否继续添加?请键入y或n以回车键结束:);scanf( %c,&ch); /%前有一个空格while(ch=y|ch=Y);/判断是否继续添加void output()/定义输出格式函数printf(航班号tt起始站tt终点站tt时间tt机票数n); for(i=0;im;i+)printf(PRINT);/打印出信息void print()/定义显示航班信息函数printf(n目前我们有如下航班:n);output();/调用输出格式函数printf(n请按回车键返回上层菜单);getchar(); void search()/定义查询函数int n;doprintf(n请输入航班号: );scanf(%