c语言课程设计飞机订票系统.docx
《c语言课程设计飞机订票系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计飞机订票系统.docx(24页珍藏版)》请在冰点文库上搜索。
c语言课程设计飞机订票系统
《程序设计基础》
课程设计报告
课程设计题目
飞机订票系统
*******
班级:
1103班
学号:
xxx
完成日期:
2012-09-22
Xx
一.课程设计目的-----------------------------------------------------------------3
二.课程设计方案-----------------------------------------------------------------3
总体思路………………………………………………………………………………………3
课程设计内容…………………………………………………………………………………3
项目需求了解…………………………………………………………………………………3
软件总体模块设计……………………………………………………………………………3
三.课程设计内容-----------------------------------------------------------------4
课程设计的实验环境…………………………………………………………………………4
课程设计的预备知识…………………………………………………………………………4
四.课程设计步骤-----------------------------------------------------------------4
系统结构分析…………………………………………………………………………………4
软件设计阶段…………………………………………………………………………………8
软件测试以及维护阶段……………………………………………………………………..8
源代码附录…………………………………………………………………….….…………8
结束语………………………………………………………………………………………..30
课程设计目的:
假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。
要求学生根据所学的程序设计基础原理与程序设计的知识,能够针对一个小型的程序设计基础管理系统,进行系统的需求分析,系统设计,程序设计基础设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型系统程序设计的目的。
课程设计方案:
1.总体思路:
利用学到的C语言编程知识和编程技巧,完成一个小型管理信息系统的开发,帮助学生熟悉开发一个系统的整个过程:
系统分析、程序的设计、编写与调试等过程。
2.课程设计内容:
1.航班信息录入功能(航班信息用文件保存)
2.航班信息浏览功能
3.查询航线
(1)按航班号查询
(2)按终点站查询
注:
查询结果用链表的形式保存并输出
4.承办订票和退票业务
课程设计条件:
1.课程设计的实验环境:
硬件要求能运行WindowsXP操作系统,开发工具可采用MicrosoftVisualC++6.0。
2.课程设计的预备知识
熟悉C语言编程知识和编程技巧,熟练运用C语言编程系统,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题以及提高实际编程的能力。
参考文献
王曙燕《C语言程序设计》
李丽娟《C语言程序设计》等
课程设计步骤
1.系统结构分析
1.每条航线所涉及的信息有:
起终点站名、航班号、飞行时间、乘员定额、票价、售出票数
2.系统能实现的操作和功能如下:
a)查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、时间、起终点站
b)承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,
c)退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续。
本系统性能力求易于使用,并且具有一定的稳定性。
系统的功能结构关系图及系统结构连接图如下
软件设计阶段
在系统中包括以下几个功能:
基本信息录入、浏览、查询、修改、删除。
(1)登陆界面的设计:
功能:
登陆者可以选择自己将要使用的功能,选择不同的序号可进入为自己服务的界面。
(2)信息录入界面:
可以录入最多1000航班
(3)航班的浏览界面
(4)航班的订票界面
(6)航班的退票界面:
(7)航班的操作界面
(8)航班的退出
软件测试阶段及维护:
在订票系统中我们发现,在订票时我们的把机票信息中的剩余票数要减少一个,而在退票时我们的把剩余票数加以个,由于在文件的定义时不好把机票信息文件和旅客信息文件放一起,所以在修改机票剩余票数的是侯的打开两个文件然后得对两个文件进行修改。
再保存模块得把机票的信息录入进去,所以有很多不分都得写,像机票信息的录入,修改,删除,这样一来就像是写一个机票信息管理系统一样,这样一来导致这个文件会很大,很繁琐。
但是还好c语言是面向过程的导致很多的程序代码重复,这样就在写好一部分代码以后就可以进行复制,然后进行修改就行,总体来说工作量还不是很大。
源代码:
#include
#include
#include
#defineN1000
typedefstructplane
{
charID[10];/*航班代号*/
charBePlace[10];/*飞机起飞地点*/
charEnPlace[10];/*飞机降落终点*/
chardata[15];/*飞机起飞时间*/
intmax;/*飞机最大乘客人数*/
intprice;/*飞机票价*/
intnum;/*飞机已售票数*/
}PLANE;
PLANEti[N];
intn;/*当前的航班数目*/
voidmenu();
voidmenu1();
voidinput(inti)
{
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;
}
voidenter()
{
inti;
system("cls");
printf("请输入航班的数目(0-%d)?
:
",N);
scanf("%d",&n);/*要输入的记录个数*/
printf("\n请输入数据\n\n");
for(i=0;i{
printf("\n请输入第%d航班记录.\n",i+1);
input(i);/*调用输入函数*/
}
getchar();
menu();
}
voidprintf_one(inti)/*显示一个记录的函数*/
{
printf("%11s%6s%10s%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);
}
voidbrowse()
{
inti;
system("cls");
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
printf_one(i);
printf("\n");
}
getchar();
getchar();
menu();
}
voidorder()/*排序模块(按平均成绩)*/
{
inti,j;
structplanes;
system("cls");
for(i=0;i{
for(j=i+1;jif(strcmp(ti[i].data,ti[j].data)>0)
{
s=ti[i];
ti[i]=ti[j];
ti[j]=s;}
}
browse();
}
voidsearch_time()
{
inti,m=0;
structplanes;
system("cls");
printf("\n\nEnterthetime:
");
scanf("%s",s.data);/*输入出发的时间*/
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
if(strcmp(s.data,ti[i].data)==0)
{
m++;
if((m!
=0)&&(m%10==0))/*目的是分屏显示*/
{
printf("\n\nPressanykeytocontiune...");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n--------------------------------------------------------------------");
getchar();/*按任意健*/
getchar();
menu1();
}
voidserch_end()
{
inti,m=0;
structplanes;
system("cls");
printf("\n\nEntertheendPlace:
");
scanf("%s",s.EnPlace);/*输入要到达的地方*/
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
if(strcmp(ti[i].EnPlace,s.EnPlace)==0)
{
m++;
if((m!
=0)&&(m%10==0))/*目的是分屏显示*/
{
printf("\n\nPressanykeytocontiune...");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n--------------------------------------------------------------------");
getchar();/*按任意健*/
getchar();
menu1();
}
voidmenu1()
{
intn,w1;
do
{
system("cls");/*清屏*/
puts("\t\t\t\t飞机售票操作!
\n\n");
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.按照时间排序");
puts("\t\t\t\t2.按照时间查找航班");
puts("\t\t\t\t3.按照地点查找航班");
puts("\t\t\t\t4.返回主菜单");
puts("\n\n\t\t**********************************************\n");
printf("Choiceyournumber(1-4):
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)/*对选择的数字作判断*/
{
w1=1;
printf("yourchoiceisnotbetween1and4,Pleaseinputagain:
");
getchar();
getchar();
}
elsew1=0;
}while(w1==1);
/*选择功能*/
switch(n)
{
case1:
order();break;
case2:
search_time();break;
case3:
serch_end();break;
case4:
menu();break;
}
}
intsearch()/*查找模块*/
{
inti,k;
structplanes;
k=-1;
system("cls");
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{
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\nNOexist!
");
return-1;
}
else
returnk;
}
voidbook()
{
inti;
system("cls");
printf("欢迎进入售票窗口!
\n");
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();
}
voidback()
{
inti,k=-1;
structplanes;
system("cls");
printf("欢迎进入退票窗口!
\n");
printf("\n\n输入航班代号:
");
scanf("%s",s.ID);/*输入要到达的地方*/
for(i=0;i{
if(strcmp(s.ID,ti[i].ID)==0)
{
k=i;/*找到要修改的记录*/
printf_one(k);
break;/*调用显示一个记录的函数*/
}
}
if(k==-1)
{
printf("\n\nNOexist!
");
}
else
{
ti[i].num--;
printf("\n退票成功!
\n");
}
getchar();/*按任意健*/
getchar();/*按任意健*/
menu();
}
voidsave()
{
intw=1;
FILE*fp;
inti;
system("cls");
if((fp=fopen("\\ticket.txt","wt"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/
{
printf("\nCannotopenfile\n");
return;
}
for(i=0;iif(fwrite(&ti[i],sizeof(structplane),1,fp)!
=1)
{
printf("filewriteerror\n");
w=0;
}
if(w==1)
{
printf("filesaveok!
\n");
}
fclose(fp);
getchar();
getchar();
menu();
}
voidload()
{
FILE*fp;
inti,w;
w=1;
system("cls");
if((fp=fopen("\\ticket.txt","rt"))==NULL)
{
printf("\nCannotopenfile\n");
w=0;
return;
}
n=0;
for(i=0;!
feof(fp);i++)
{
fread(&ti[i],sizeof(structplane),1,fp);
n++;
}
n=n-1;
fclose(fp);
if(w==1)
printf("Loadfileok!
");
getchar();
getchar();
menu();
}
voidmenu()
{
intn,w1;
do
{
system("cls");/*清屏*//*清屏*/
puts("\t\t\t\t飞机售票管理系统!
\n\n");
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.输入新航班");
puts("\t\t\t\t2.浏览");
puts("\t\t\t\t3.航班操作");
puts("\t\t\t\t4.订票");
puts("\t\t\t\t5.退票");
puts("\t\t\t\t6.保存");
puts("\t\t\t\t7.载入");
puts("\t\t\t\t8.退出");
puts("\n\n\t\t**********************************************\n");
printf("Choiceyournumber(1-8):
[]\b\b");
scanf("%d",&n);
if(n<1||n>8)/*对选择的数字作判断*/
{
w1=1;
printf("yourchoiceisnotbetween1and8,Pleaseinputentertochoiceagain:
");
getchar();
getchar();
}
elsew1=0;
}while(w1==1);
/*选择功能*/
switch(n)
{
case1:
enter();break;/*输入模块*/
case2:
browse();break;/*浏览模块*/
case3:
menu1();break;/*查找模块*/
case4:
book();break;/*订票模块*/
case5:
back();break;/*退票模块*/
case6:
save();break;/*保存模块*/
case7:
load();break;/*加载模块*/
case8:
exit(0);
}
}
voidmain()
{
menu();
}
结束语:
作为计算机专业的学生,通过一年的学习,我们逐渐了解很多关于本专业的知识,这次的课程设计,通过小组编写这个程序,让我们熟悉了很多在课程中没有注意到的问题,同时加深了对c语言的理解。
在假期里,我们各自通过学习以及编写,完成了这次的飞机订票系统。
同时这次课程设计为我们今后从事计算机的开发打下了坚实的基础。
在这次课程设计中,我们也遇到了很多困难和问题,比如由于自己的输入不当,而导致程序无法编译,或者由于对一个知识的不理解或者认识错误,而对某个模块设计不成功。
有的可能就是一个标点符号的问题,却让自己白白忙活一个小时。
这主要是没有这方面经验,所以出现了各种问题。
不过就是在这种发现问题与解决问题中,我们学到了知识,并且能够自己或者合作解决这些问题。
同样考虑到具体程序操作,我们也修改了不少的代码,但是老师的检测过程中,还是出现了很多的不足之处,这些都是要在今后的工作重要努力改进和完善的。
在这次学习中我们认识到,程序设要求有一定的基础是必须的,但是更多的是无论你设计什么程序,在设计前一定要有自己的设计理念、设计思想,也可以说是中心思想。
否则在做程序的时候,请教一个高手,就有一种不同的方法。
结果最终的程序不伦不类,设计完后会发现会有不同的漏洞。
在设计过程中要大胆的发挥自己的想象力,要敢于不断的创新,要敢于尝试,我认为这也是一种进步的好方法。
总体来说这次程序设计还是比较成功的。
这得益于我们大家的努力和老师的辛勤指导。
致谢
感谢我的组员和指导老师,由于是第一次用c语言编的比较大的程序,肯定会有经验上的不足,失误之处在所难免,敬请各位老师,领导批评的指正。