课 程 设 计 报 告
课程名称 C语言程序设计 课题名称
专 业
班 级 3班
学 号
姓 名 指导教师
20xx年12月25日
湖南工程学院
课 程 设 计 任 务 书
课程名称 C程序设计 课 题 飞机订票系统
专业班级 学生姓名 学 号 指导老师 审 批
任务书下达日期 20xx年12月 25 日 任务完成日期 20xx年 1 月 3日
一、设计内容与设计要求
1.设计内容:
见附录
2.设计要求:
1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
5).上机演示。
二、进度安排
第一周 星期四: 课题讲解,查阅资料
第二周 星期一: 总体设计,详细设计
星期二: 编程,上机调试、修改程序
星期三:上机调试、完善程序
星期四:上机调试、完善程序
星期五: 答辩
星期六-星期天:撰写课程设计报告
课程设计报告规范
一、 需求分析
1、程序的功能。
2、输入输出的要求。
二、 概要设计
1、程序由哪些模块组成以及一个模块之间的层次结构、模块的调用关系;每个模块的
功能。
2、课题的总体数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,
它们之间有什么关系等。
三、 详细设计
1、采用C语言定义相关的数据类型。
2、写出各模块的类C码算法。
3、画出函数的调用关系图。
四、 调试分析以及设计体会
1、测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。
2、程序调试中遇到的问题以及解决问题的方法。
3、课程设计过程经验教训、心得体会。
五、 使用说明
用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。
六、 书写格式
1、设计报告要求用A4纸打印成册:
2、一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
3、封面格式如下页。
七、 附录
1、参考书目
2、源程序清单(带注释)
课程设计报告装订顺序:封面、任务书、目录、正文、评分(A4大小的图纸及程序清单)。 正文的格式:一级标题用2号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的源代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序源代码)。
C程序课程设计任务书
一、设计内容与设计要求
1、设计内容
(1)、问题描述:
假设某航空公司一天有M个航班飞行,通过该系统供不同旅客选择不同的航班以及机票出
售等问题。
(2)、功能要求:
①.本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:航班代
号、起飞地、目的地、座次定出与否标记、起飞时间等
②.本系统显示这样的菜单:
⑴输入新航班信息⑵浏览航班信息
⑶查找航班信息
a、按时间查询
b、按地点查询
c、返回主菜单
⑷订票预约 ⑸退票要求 ⑹保存信息
〔7〕退出系统
③.本系统成功执行菜单的每个信息,选项⑷和⑸将要求额外的输入,并且它
们都允许用户收回其输入。
④.查找航班信息既可按时间查,也可按目的地查。
⑤.在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,
它首先从该文件读入数据。
3.算法提示:①.数据结构:结构体类型数组
②.数据库结构:下表构成该系统的基本数据库。
4.测试数据:有航班数目M=2
目录
课 程 设 计 文 档 .....................................
一、课程设计题目:飞机订票系统; ............................ 7
二、内容摘要: .............................................. 7
三、总体方案的选定:........................................7
<1>:概要设计:...............................................7
<2>:详细设计: .............................................. 8
四、主流程图: .............................................. 10
五、模块流程图:............................................11
六、使用说明: ............................................. 13
七、调试分析: ............................................. 14
八、心得体会: ............................................. 15
九、附录(源程序清单): ................................... 16
课程设计文档
一、课程设计题目:飞机订票系统;
二、内容摘要:
本系统设计主要是根据售票业务的基本流程进行的,一般地说,售票业务包括:
显示子系统、保存子系统、订票子系统、查询子系统、退票子系统等五个方面。该系统是一个简单的飞机订票系统,能够方便地查询所需信息。其功能包括:信息录入、信息显示、信息浏览、信息保存及查询等。
三、总体方案的选定:
在了解该系统的功能后,可以通过运用函数、编译语句、数据类型来实现。由于
数据多,数据结构相似的特点,自然地想到用数组实现数据的存储,且总体数据结构应用文件类型的数据。文件类型为结构体数据,数据库结构用文件来实现。
【概要设计】
一.程序的模块组成及各个函数的功能:
1)程序的模块组成:
主函数:main();
输出数据函数:printf();
读取数据函数:scanf();
菜单显示函数:menu();
1)订票函数:void book();
2)退票函数:void back();
3)查询数据函数:search();
自定义清屏函数:system(“cls”);
自定义输入函数:input();
自定义显示记录函数:void printf_one();
字符输入函数:getchar();
2) 各函数的主要功能:
输出数据函数:随时输出数据;
读取数据函数:读取输入的数据信息;
显示菜单函数:显示可供选择的主菜单;
订票函数:供乘客定飞机票,显示航班票是否售完择; 退票函数:满足乘客的退票要求
查询数据函数:显示所有输入的航班信息;
输入数据函数:随时保存输入的数据;
自定义清屏函数:清除前面运行留下的信息;
自定义显示记录函数:查询时显示前面输入的信息; 字符输入函数:从终端输入一个字符,遇车键返回;
二.程序中的抽象数据类型的定义:
机票的状态结构
机票
{
机票票价
机票数目;
航班信息;
航线信息;
使用时间;
}
【详细设计】
一.相关的数据类型:
机票管理结构数组 : typedef struct plane {
char ID[10]; /*航班代号*/
char BePlace[10];/*飞机起飞地点*/
char EnPlace[10];/*飞机降落终点*/
char data[15];/*飞机起飞时间*/
int max;/*飞机最大乘客人数*/
int price;/*飞机票价*/
int num;/*飞机已售票数*/
二.函数间的调用关系图如下:
Main函数的下属子功能函数及其调用示意图:
四、主流程图:
五、模块流程图
六、使用说明:
总结构功能图:
输入源程序之后显示主菜单包含:输入模块,浏览模块,查找模块,订票,退票,保存,返回七个选项。选择1输入新航班数目N及每个航班的航班代号,起飞地点,降落地点,起飞时间的基本信息,详细情况见输入模块及input函数;回车返回主菜单选择6保存输入的航班信息;回车返回主菜单,选择2,显示前面输入的所有航班信息供乘客浏览选择;回车返回,选择3进入查找模块出现子菜单(按时间查询,按地点查询,返回主菜单),输入时间或地点,系统将自动找出乘客所要求的航班信息;回车返回,选择4进入订票模块,详情见void book函数和流程图;回车返回,选择5进入退票系统,输入航班代号系统将自动满足乘客退票要求。这是简单的流程使用说明,详细情况见各模块函数和各模块流程图。
七、调试分析:
在程序源代码编辑好之后,开始调试出现很多的问题,其中包含格式,定义,输出等等问题,通过提示对程序进行逐一修改完善,在修改的过程中发现许多问题,查阅了课本及其它相关资料,现在举一个在输出时碰到的问题:printf("Choice your number(1-3): [ ]");
程序运行到menu1时,在运行查询模块时,输入子菜单中的选项,数字未出现在预定的括号中,运行如下图所示,2出现在括号外面
要解决此问题,先观察子菜单程序printf("Choice your number(1-3): [ ]");注意到若
要使输入的数字输出在指定的括号里面则必须加上两个转义字符\b\b.
转义字符\b的功能就是退格,将当前位置退到前一列。要特别注意与转移字符\t的区别,\t是水平制表即跳到下一个制表位置。所以修改成printf("Choice your number(1-3):
[ ]\b\b");结果如下图所:
八、心得体会:
我这次在C语言程序设计课程中,做的是“飞机订票系统”。这次设计的课题是飞机订票系统,对我是一次尝试和创新的过程。开始阶段,根本无从下手,在两位老师和同学的悉心帮助下我渐渐有了点思绪,并能成功完成整个程序的设计。通过近一周的上机操作,充分应用了所学的C语言的知识,粗略设计出并成功的运行起该系统。
这说明我这次的课程设计是成功,但更为重要的我又进一步了解了C语言,加深了对C语言的认识,充分的将课本知识进行梳理、整合、融会贯通之后应用到了实际的工作需要中。我对使用结构、数组、链表等数据结构有了更加进一步的理解并且了解了系统的开发流程,这在以后的学习和工作中将会非常重要.更重要的是,这次课程设计虽然花了我不少时间,但正是这些时间,让我见识到了C语言的重要性。这个学生成绩管理系统都是在自己知识范围内完成的,所以界面清晰简单,可能不是很好看,但绝对实用!以实现学以致用,学有所用。同时也增加了我对C语言的兴趣,激起了学习的热情。同时也让我了解了编程的辛苦,只有平时多努力, 才能很好进行编程.虽然编程是一件很辛苦的事,但是在编程的过程中让我深深的体会到那些编程人员的伟大. 同时也让我想到我们平时用的程序是多么来之不易,我们应该感谢他们,是他们在背后默默的奉献,才换来我们生活的轻松. 从这里我也得到一个体会,做一个程序,或者开发一个软件应该着重从它的后台制作入手,不能做出一个中看不中用的程序或者软件。
当然,由于学艺不精,在课程设计的过程也碰到的一些问题。其中,不乏一些简单的基础性的错误,如经常输入错误的字母,使程序无法运行,但通过这次专业性的练习,相信在以后会有所减少。而关键性问题经常出现在一些函数的使用上,由于对一些函数调用的正确使用不够熟悉,往往也会造成程序无法运行,出现错误。如:清屏函数clrscr(),按任意键可以插入getch(),主函数void main()的用法,C语言的一些标准库函数的应用。然而这一切,通过老师的指导与帮助,自己的查阅资料,也都一一解决了。在编程的过程中,让我明白了自己在C语言这门课是学的多么不好.通过这次编程,让我明白了,还应该更加努力去弥补自己在这方面的不足.当然在自己有了很好的理论知识后,还应该积极的进行实践活动,只有理论加实践才能将这门课学好。
当然我这次飞机订票系统的设计和现实中的飞机管理系统相比还存在许多不足,仅仅是一个简单的订票系统。 我们以后定将继续努力,争取以后更大的成功。
书本知识固然重要,但我们更要学会将书本知识应用到实际的工作中。实践中才会发现错误,也才能改进,才能达到学习的最终目的。这些就是我在这个设计中所得到的体会。
九、附录
1、参考书目:《C语言课程设计案例精编》,《C程序设计》。 2、 源程序清单:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
typedef struct plane
{
char ID[10]; /*航班代号*/
char BePlace[10];/*飞机起飞地点*/
char EnPlace[10];/*飞机降落终点*/
char data[15];/*飞机起飞时间*/
int max;/*飞机最大乘客人数*/
int price;/*飞机票价*/
int num;/*飞机已售票数*/
}PLANE;
PLANE ti[N];
int n;/*当前的航班数目*/
void menu();
void menu1();
void input(int i)
{
printf("请输入航班代号:\n");
scanf("%s",ti[i].ID);
printf("请输入起飞地点:\n");
scanf("%s",ti[i].BePlace);
printf("请输入降落地点:\n");
scanf("%s",ti[i].EnPlace);
printf("请输入起飞时间:\n");
scanf("%s",ti[i].data);
printf("请输入航班的最大载客人数:\n");
scanf("%d",&ti[i].max);
printf("请输入航班的票价:\n");
scanf("%d",&ti[i].price);
ti[i].num=0;
}
void enter()
{
int i;
system( "cls" );
printf("请输入航班的数目(0-%d)?:",N);
scanf("%d",&n); /*要输入的记录个数*/
printf("\n请输入数据\n");
for(i=0;i<n;i++)
{
printf("\n请输入第 %d 航班记录.\n",i+1);
input(i); /*调用输入函数*/
}
getchar();
menu();
}
void printf_one(int i) /*显示一个记录的函数*/ {
printf("%11s %10s %6s %6s %6d %6d %6d",ti[i].ID,ti[i].BePlace,ti[i].EnPlace,ti[i].data,ti[i].price,ti[i].max,ti[i].num);
}
void browse()
{
int i;
system( "cls" );
puts("\n---------------------------------------------------------------------------------");
printf("\n 航班代号 起飞地点 降落地点 起飞时间 票价 最大乘客 已售票数\n");
for(i=0;i<n;i++)
{
printf_one(i);
printf("\n");
}
getchar();
getchar();
menu();
}
void search_time()
{
int i,m=0;
struct plane s;
system( "cls" );
printf("\n\nEnter the time:");
scanf("%s",s.data); /*输入出发的时间*/
puts("\n--------------------------------------------------------------------");
printf("\n 航班代号 起飞地点 降落地点 起飞时间 票价 最大乘客 已售票数\n");
for(i=0;i<n;i++)
{
if(strcmp(s.data,ti[i].data)==0)
{
m++;
if((m!=0)&&(m%10==0)) /*目的是分屏显示*/
{
printf("\n\nPress any key to contiune . . .");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n--------------------------------------------------------------------");
getchar(); /*按任意健*/
getchar();
menu1();
}
void serch_end()
{
int i,m=0;
struct plane s;
system( "cls" );
printf("\n\nEnter the end Place:");
scanf("%s",s.EnPlace); /*输入要到达的地方*/
puts("\n--------------------------------------------------------------------");
printf("\n 航班代号 起飞地点 降落地点 起飞时间 票价 最大乘客 已售票数\n");
for(i=0;i<n;i++)
{
if(strcmp(ti[i].EnPlace,s.EnPlace)==0)
{
m++;
if((m!=0)&&(m%10==0)) /*目的是分屏显示*/
{
printf("\n\nPress any key to contiune . . .");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n--------------------------------------------------------------------");
getchar(); /*按任意健*/
getchar();
menu1();
}
void menu1()
{
int n,w1;
do
{
system( "cls" ); /*清屏*/
puts("\t\t\t\t 飞机售票操作!\n\n");
puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.按照时间查找航班\n");
puts("\t\t\t\t2.按照地点查找航班\n");
puts("\t\t\t\t3.返回主菜单\n");
puts("\n\n\t\t**********************************************\n"); printf("Choice your number(1-3): [ ]");
scanf("%d",&n);
if(n<0||n>3) /*对选择的数字作判断*/ {
w1=1;
printf("your choice is not between 1 and 3,Please input again:"); getchar();
}
else w1=0;
} while(w1==1);
/*选择功能*/
switch(n)
{
case 1:search_time();break;
case 2:serch_end();break;
case 3:menu();break;
}
}
int search() /*查找模块*/
{
int i,k;
struct plane s;
k=-1;
system( "cls" );
printf("欢迎进入售票窗口!\n");
printf("\n请输入要订票的起飞地点:\n");
scanf("%s",s.BePlace); /*输入要到达的地方*/
printf("\n请输入要订票的降落地点:\n");
scanf("%s",s.EnPlace);
printf("\n请输入要订票的起飞时间:\n");
scanf("%s",s.data); /*输入出发的时间*/
for(i=0;i<n;i++) /*查找要修改的数据*/
{
if(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnPlace)==0&&strcmp(s.data,ti[i].data)==0)
{
k=i; /*找到要修改的记录*/
printf_one(k);
break; /*调用显示一个记录的函数*/
}
}
if(k==-1)
{
printf("\n\nNO exist!");
return -1;
}
else
return k;
}
void book()
{
int i;
system( "cls" );
i=search();
if(i!=-1)
{
if(ti[i].num>=ti[i].max)
{
printf("\n该趟航班票已售完!");
}
else
{
ti[i].num++;
printf("\n订票成功!\n");
}
}
else
printf("\n该航班不存在!");
getchar();
getchar(); /*按任意健*/ menu();
}
void back()
{
int i,k=-1;
struct plane s;
system( "cls" );
printf("欢迎进入退票窗口!\n");
printf("\n\n输入航班代号:");
scanf("%s",s.ID);
for(i=0;i<n;i++)
{
if(strcmp(s.ID,ti[i].ID)==0)
{
k=i;
printf_one(k);
break;
}
}
if(k==-1)
{
printf("\n\nNO exist!");
}
else
{
ti[i].num--;
printf("\n退票成功!\n");
}
getchar();
getchar();
menu();
}
void save()
{
int i,w=1;
FILE *fp;
system( "cls" );
if((fp=fopen("ticket.txt","wt"))==NULL)
{
printf("\nCannot open file\n");
return ;
}
for(i=0;i<n;i++)
if(fwrite(&ti[i],sizeof(struct plane),1,fp)!=1)
{
printf("file write error\n");
w=0;
}
if(w==1)
{
printf("file save ok!\n");
}
fclose(fp);
getchar();
getchar();
menu();
}
void menu()
{
int n,w1;
do
{
system( "cls" ); /*清屏*/
puts("\t\t\t\t欢迎使用飞机售票管理系统!\n");
puts("\t\t*********************主菜单*********************\n"); puts("\t\t\t\t1.输入新航班\n");
puts("\t\t\t\t2.浏览航班\n");
puts("\t\t\t\t3.航班查询\n");
puts("\t\t\t\t4.订票\n");
puts("\t\t\t\t5.退票\n");
puts("\t\t\t\t6.保存\n");
puts("\t\t\t\t7.退出\n");
puts("\t\t**********************************************\n");
printf("请选择数字(1-7): [ ]\b\b");
scanf("%d",&n);
if(n<1||n>7) /*对选择的数字作判断*/ {
w1=1;
printf("your choice is not between 1 and 7,Please input enter to choice again:");
getchar();
getchar(); }
else w1=0; } while(w1==1); /*选择功能*/ switch(n) {
case 1:enter();break; /*输入模块*/ case 2:browse();break; /*浏览模块*/ case 3:menu1();break; /*查找模块*/ case 4:book();break; /* case 5:back();break; /* case 6:save();break; /* case 7:exit(0); } }
void main() {
menu(); }
订票模块*/ 退票模块*/ 保存模块*/
计算机与通信学院课程设计评分表
课题名称: 飞机订票系统
教师签名: 日 期:
(注:1.此页附在课程设计报告最后一页;2.综合成绩按优、良、中、及格和不及格五级评定。)