沈阳航空航天大学C语言课程设计火车站售票系统.docx
《沈阳航空航天大学C语言课程设计火车站售票系统.docx》由会员分享,可在线阅读,更多相关《沈阳航空航天大学C语言课程设计火车站售票系统.docx(16页珍藏版)》请在冰豆网上搜索。
沈阳航空航天大学C语言课程设计火车站售票系统
沈阳航空航天大学
课程设计
学号
班级
姓名
指导教师郭建新
2013年8月30日
沈阳航空航天大学
课程设计任务书
系:
材料科学与工程专业:
金属材料工程班级:
24110102
学号:
题目:
火车站售票系统
一、课程设计时间
2013~2014第1学期第1周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
每天“沈阳→大连”有5次的火车(假设),具体的数据如下:
班次发车时间载客量已售票数
D106:
405000
D209:
306000
A113:
008000
A216:
008000
L120:
005000
请你开发一个小程序,以完成每天的“沈阳→大连”的售票业务。
要求如下:
①能够售票和退票。
②某个车次已经过了开车时间,则该班次今天不再售票。
③可以随时显示售票现状,并以文件(myfile.txt)的形式保存当天各个车次的售票情况。
三、课程设计要求
程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”等项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是存储函数(save)、卖票函数、退票函数、定售总金额、退出。
1.增强了程序的实用性,使系统用户界面友好、功能明确、操作方便,应采取直接用printf函数的方式在界面上输出可供用户选择的菜单。
据此应该能够很好的完成要求
2.售票系统要求存储当天各个车次售票情况,所以程序需要定义结构体变量存储售票情况。
系统的整体功能通过记录当天各个车次了解售票情况。
编程时采取模块化设计思想,设计主函数,通过主函数中的switch分支选择调用各子函数以实现该系统的各种功能。
然后设计相应的子函数来执行系统的各种功能,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
二、程序流程图
1程序总体结构图
输入k
k=1?
真假
查询当前
售票情况
k=2?
真假
售票
k=3?
真假
退票
k=4?
真假
保存当前车次售票情况
k=0?
真假
退出
图1程序总体结构图
2函数功能图
(1)退票函数tuipiao
图2.退票函数结构图
(2)卖票函数sell
图3.售票函数结构图
三、主要界面截图
图4.主界面截图
图5.查询界面截图
图6.售票界面截图
图7.退票界面截图
图8.保存界面截图
图9.退出界面截图
四、关键技术分析
核心技术的实现方法和程序段:
本函数由六个自定义函数和一个主函数组成,其中主函数以菜单形式调用其他函数来实现要求的所有功能。
主函数分别调用保存函数(save)、读取函数、卖票函数、退票函数、订票总金额、退出。
程序中较为核心的部分,具体分析如下:
1保存函数
通过使用fopen函数和fprintf函数进行文件的打开与数据的输入。
voidsave()//向文件里存
{
FILE*fp;
inti;
if((fp=fopen("d:
\\myfile.txt","w+"))==NULL)
{
printf("cannotopenthisfile\n");
return;
}
for(i=0;ifprintf(fp,"%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
fclose(fp);
printf("\n");
printf("******数据保存成功!
******\n");
printf("请输入相应的数字继续操作\n");
}
2查询函数
通过比较函数strcmp进行班次的选择,在通过for函数与printf函数来实现结果的输出。
voidchecheng()//查询售票情况
{
inti;
chara[50];
printf("请输入所需查询的班次\n");
scanf("%s",a);
for(i=0;i{if(strcmp(stu[i].banci,a)==NULL)
{printf("\n******查询售票结果******\n");
printf("班次发车时间载客量已售票数余票\n");
printf("%2s%5s\t%3s%3d\t\t%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
}
}
3售票系统:
定义数组存储从获得的数字,为了能够多次输入,我们可以构造像for(i=0;i本函数结束,退出。
voidsell()//售票fprintf()fscanf()
{
inti,n;
chara[50];
{
inti;
{
printf("\n******沈阳-大连火车售票系统******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
}
printf("请输入您要购买的班次\n");
scanf("%s",a);
printf("请输入您要购买的票数\n");
scanf("%d",&n);
for(i=0;iif(strcmp(stu[i].banci,a)==NULL)
{stu[i].shoupiao=stu[i].shoupiao+n;
stu[i].yupiao=stu[i].yupiao-n;
printf("******购票成功******\n");
{printf("\n******沈阳-大连火车售票系统******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
save();
}
}
4退票系统
退票功能的实现与购票功能的原理相同。
5.读取文件
通过fopen函数和指针的运用来实现文件的读取。
voidread()
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\myfile.txt","w+"))==NULL)
{
printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;!
feof(fp);i++)
fread(&stu[i],sizeof(structstud),1,fp);
}
fclose(fp);
}
五、个人总结
这是我大学以来第一次的课设,通过这次课设,更加锻炼了我的能力,也使我对C语言有了更加深刻的理解。
在这五天中,拿着课题的我,不断思考着,要通过怎样的方法去实现它的功能。
通过不断的查阅资料,使我更加开阔了我的眼界,在编译过程中,问题不断的出现,每一个细节问题,都将成为成功的绊脚石,每一次的修改过后新的问题又不断的出现,通过这次课设使我了解了细节决定成败,C语言的编译过程中需要大量的细心和耐心。
希望在以后的生活中,对待每一件事情,都像在做课设过程中那样要有细心和耐心。
六、参考文献
谭浩强.C程序设计.北京:
清华大学出版社,2005
七、源程序
#include//声明需要的库文件
#include
#include
#include
#include
#defineSIZE5//符号常量。
voidchecheng();//这里对所有定义的函数进行申明
voidsave();
voidsell();
voidtuipiao();
voidtopic();
voidmenu();
voidread();
structstud//这里定义结构体类型和变量,用于存放信息
{
charbanci[30];
chartime[30];
charchengzailiang[30];
intshoupiao;
intyupiao;
}
stu[SIZE]={
{"D1","06:
40","500",0,500},
{"D2","09:
30","600",0,600},
{"A1","13:
00","800",0,800},
{"A2","16:
00","800",0,800},
{"L1","20:
00","500",0,500}
};
voidmain()
{
intk;
topic();
getchar();
while
(1)
{
menu();
scanf("%d",&k);
switch(k)
{
case1:
checheng();break;
case2:
sell();break;
case3:
tuipiao();break;
case4:
save();break;
case0:
return;
}
}
}
voidtopic()
{
printf("****************************************************\n");
printf("**********************************************\n");
printf("****\n");
printf("**HUOCHEZHANSHOUPIAOXITONG**\n");
printf("**HUANYINGJIRU**\n");
printf("****\n");
printf("**********************************************\n");
printf("****************************************************\n");
printf("Allrightsarepro.byWQ.,2013.8.27\n");
printf("****************************************************\n");
}
voidmenu()
{
printf("*****************************************************");
printf("\n1查询当前售票情况");
printf("\n2购票");
printf("\n3退票");
printf("\n4保存数据");
printf("\n0退出");
printf("\n选择0~5继续");
}
voidchecheng()//查询售票情况
{
inti;
chara[50];
printf("请输入所需查询的班次\n");
scanf("%s",a);
for(i=0;i{if(strcmp(stu[i].banci,a)==NULL)
{printf("\n******查询售票结果******\n");
printf("班次发车时间载客量已售票数余票\n");
printf("%2s%5s\t%3s%3d\t\t%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
}
}
voidsave()//向文件里存
{
FILE*fp;
inti;
if((fp=fopen("d:
\\myfile.txt","w+"))==NULL)
{
printf("cannotopenthisfile\n");
return;
}
for(i=0;ifprintf(fp,"%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
fclose(fp);
printf("\n");
printf("******数据保存成功!
******\n");
printf("请输入相应的数字继续操作\n");
}
voidsell()//售票fprintf()fscanf()
{
inti,n;
chara[50];
{
inti;
{
printf("\n******沈阳-大连火车售票系统******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
}
printf("请输入您要购买的班次\n");
scanf("%s",a);
printf("请输入您要购买的票数\n");
scanf("%d",&n);
for(i=0;iif(strcmp(stu[i].banci,a)==NULL)
{stu[i].shoupiao=stu[i].shoupiao+n;
stu[i].yupiao=stu[i].yupiao-n;
printf("******购票成功******\n");
{printf("\n******沈阳-大连火车售票系统******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
save();
}
}
voidtuipiao()//退票
{
inti,n;
chara[50];
{
printf("\n******沈阳-大连火车售票系统******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%2s%5s%3s%3d%3d\n",stu[i].banci,stu[i].time,stu[i].chengzailiang,stu[i].shoupiao,stu[i].yupiao);
}
printf("请输入您要退的班次\n");
scanf("%s",a);
printf("请输入您要退的票数\n");
scanf("%d",&n);
for(i=0;iif(strcmp(stu[i].banci,a)==NULL)
{stu[i].shoupiao=stu[i].shoupiao-n;
stu[i].yupiao=stu[i].yupiao+n;