04033014简单的汽车站售票系统.docx
《04033014简单的汽车站售票系统.docx》由会员分享,可在线阅读,更多相关《04033014简单的汽车站售票系统.docx(16页珍藏版)》请在冰点文库上搜索。
04033014简单的汽车站售票系统
沈阳航空工业学院
课程设计
学号_200704033014
班级_7403301_____
姓名_李振达____
指导教师___王晓岩_____
2009年3月6日
沈阳航空工业学院
课程设计任务书
院系:
航空宇航工程学院专业:
飞行器设计与工程班级:
7403301
学号:
200704033014题目:
简单的汽车站售票系统
一、课程设计时间
2008~09第2学期第1周,共计1周,20学时。
二、课程设计内容
用C语言编写程序完成以下任务:
每天“沈阳→植物园”有5个班次的汽车(假设),具体的数据如下:
班次发车时间载客量已售票数
106:
40500
209:
30400
313:
00400
416:
00400
520:
00500
请你为售票员开发一个小程序,以完成每天的“沈阳→植物园”的售票业务。
要求如下:
(1)售票:
应能够控制每人只允许买5张票,且不能购买已经发车的车票(取当前时间函数由老师提供)。
(2)退票:
已经发车的车票不能退(取当前时间函数由老师提供)。
(3)可以随时显示售票现状,并以文件(myfile.txt)形式保存当天各个车次的售票情况。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
1
二、程序流程图。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
2
三、核心技术的相关说明及相应程序段。
。
。
。
5
四、参考文献。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
6
五、个人总结。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
6
六、源程序。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
7
一、需求分析
通过对任务书内容的详细了解和深入的思考得知,整个程序可以分为三大部分.定义变量,输入数据,输出数据。
在整个程序的执行过程当中,随处都体现了方便乘客购票、退票、查询售票与车次的思想,并且结合结构体与文件的读写来储存数据,以实现售票的数据化管理。
用户界面友好,功能明确,操作方便。
信息表达清楚明确。
1.定义变量:
声明结构体,定义变量,为变量赋初值,为下一步工作做好准备。
2.输入数据:
用户可以按自己意愿输入车次进行查询,进而根据售票情况进行自主的选择够票。
3.输出数据:
根据用户的需要输出车次、时间、售票情况等数据,以方便用户了解情况。
程序结束后还有退出功能,增加了程序的可操控性。
二、程序流程图
1、程序总体结构图
功能菜单
真输入1假
真输入2假
search输入3
查寻local真假
times
函数真输入4假
当地sell
时间输入5
买票return真假
函数退票save输入6
函数储存真假
函数exit
图1程序总体结构图
2、售票函数sell()结构图
显示所有车次的售票情况
输入车次scanf(“%s”,a)
输入买票数目scanf(“%d”,&m)
for(i=0;iif(strcmp(ST[i].NO,a)==0)
真判断车次是否符合假
时间是否符合
真假
输出购买情况
再次显示售票情况
储存函数save()
图2售票函数sell结构图
3、退票函数leave()结构图
显示当前售票情况
输入车次scanf(“%s”,a)
输入退票数目scanf(“%d”,&m)
for(i=0;iif(strcmp(ST[i].NO,a)==0)能否退票
真判断车次是否符合假
退票成功输入错误
显示退票结果
储存函数save()
图3退票函数leave结构图
4、储存函数save()结构图
fp=fopen(“myfile.txt”,"w+"))==NULL
真假
文件无法读取for(i=0;i
输入数据
返回return
关闭文件
储存成功
图4储存函数save结构图
三、核心技术的实现说明及相应程序段
下面对程序做以详细介绍:
(1)structbuses/*定义结构体*/
{
charnumber[10];/*各结构体名称*/
charstarttime[20];
charzaikeliang[20];
intsold;
intremainder;
}buses[N]={{"01","06:
40","50",0,50},/*对结构体输入数据*/
{"02","09:
30","40",0,40},
{"03","13:
00","40",0,40},
{"04","16:
00","40",0,40},
{"05","20:
00","50",0,50}
};
关于结构体:
在我的程序中需要使用结构体,将不同类型的数据(车次,发车时间,载客量,售出票和剩余车票)组合成一个有机的整体,以便于引用上面的程序中,指定了一个结构体structbuses,它向编译系统生命这是一个“结构体类型,它包括number,starttime,zaikeliang,sold,remainder”等不同类型的数据项。
(2)voidsave()/*存储函数*/
{
FILE*fp;
inti;
if((fp=fopen("myfile.txt","w+"))==NULL)/*fopen—文件打开*/
{printf("cannotopeninfile\n");
exit(0);
}
for(i=0;ifwrite(&buses[i],sizeof(buses),1,fp);/*fwrite—把数据项写到指定文件*/
fclose(fp);/*fclose—文件关闭*/
printf("\n");
printf("||||***存储成功!
***||||\n");
printf("请选择相应的数字进行下一步操作!
\n");
}
用fopen()函数来实现打开文件,fopen函数的调用方式通常为:
FILE*fp;
fp=fopen(文件名,使用文件方式);
如上面的程序中:
fp=fopen("myfile.txt","w+");
在打开文件是,通知编译系统以下3个信息:
(1)要打开的文件名,
(2)使用文件的方式(这里为写);(3)让哪一个指针变量指向被打开的文件。
常用下面的方式打开一个文件:
if((fp=fopen("myfile.txt","w+"))==NULL)
{printf("cannotopeninfile\n");
exit(0);
}
四、参考文献
C程序设计(第三版)--谭浩强著清华大学出版社
五、个人总结
通过一周的C语言课设,我进一步熟悉了C语言的一些函数的使用,能够通过看书懂得用文件的打开和关闭函数。
另外,也学会用结构体解决一些分块儿完成的题目要求。
也知道了一些以前都不知道的函数,可以说是拓宽了我的知识面。
虽然在这期间遇到了一些问题(比如,不会使用文件指针等),不过,在上网查询和请教同学之后都解决了,总的来说在这一周的时间里我也学到了不少的东西。
六、源程序
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#include"time.h"
#defineN5
structbuses/*定义结构体*/
{
charnumber[10];
charstarttime[20];
charzaikeliang[20];
intsold;
intremainder;
}buses[N]={{"01","06:
40","50",0,50},
{"02","09:
30","40",0,40},
{"03","13:
00","40",0,40},
{"04","16:
00","40",0,40},
{"05","20:
00","50",0,50}
};
/*声明各函数*/
voidsearch();
voidsave();
voidsell();
voidlocaltimes();
voidtuipiao();
intmenu();
intmenu()/*定义菜单*/
{intc;
printf("1.查询显示当前售票情况.\n");
printf("2.显示当前时间.\n");
printf("3.买票.\n");
printf("4.退票.\n");
printf("5.储存数据.\n");
printf("6.退出售票系统.\n");
do{
printf("\n请选择(1-6)继续:
");
scanf("%d",&c);
}while(c<1||c>6);
return(c);
}
voidsearch()/*查询函数*/
{inti;printf("请输入要查询的班次\n");
scanf("%d",&i);
i=i-1;
{
printf("\n\n***-------查询结果--------******\n");
printf("班次发车时间载客量已售票数余票\n");
printf("%3s%10s%10s%8d%8d\n",buses[i].number,buses[i].starttime,buses[i].zaikeliang,buses[i].sold,buses[i].remainder);
}
}
voidsell()/*售票*/
{
inti,m;
charb[15];
{
inti;
{
printf("\n\n***-------售票情况--------******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%3s%10s%10s%8d%8d\n",buses[i].number,buses[i].starttime,buses[i].zaikeliang,buses[i].sold,buses[i].remainder);
}
}
printf("请输入您要购买的班次(格式如:
02):
\n");
scanf("%s",b);
printf("请输入您要购买的票数(格式如:
5):
\n");
scanf("%d",&m);
for(i=0;iif(strcmp(buses[i].number,b)==0)/*判断班次是否符合*/
{
buses[i].sold=buses[i].sold+m;
buses[i].remainder=buses[i].remainder-m;
printf("***---购买成功---***");
{
printf("\n\n***-------售票情况--------******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%3s%10s%10s%8d%8d\n",buses[i].number,buses[i].starttime,buses[i].zaikeliang,buses[i].sold,buses[i].remainder);
}
save();
}
}
voidtuipiao()/*退票*/
{
inti,m;
charb[15];
{
printf("\n\n***-------当前情况--------******\n");
printf("班次发车时间载客量已售票数余票\n");
for(i=0;iprintf("%3s%10s%10s%8d%8d\n",buses[i].number,buses[i].starttime,buses[i].zaikeliang,buses[i].sold,buses[i].remainder);
}
printf("请输入您要退的班次(格式如:
02):
\n");
scanf("%s",b);
printf("请输入您要退的张数(格式如:
3):
\n");
scanf("%d",&m);
for(i=0;iif(strcmp(buses[i].number,b)==0)
if(buses[i].sold-m>=0)
{
buses[i].sold=buses[i].sold-m;
buses[i].remainder=buses[i].remainder+m;
printf("退票成功!
!
");
printf("\n\n***---------退票结果-----------******\n");
printf("班次||发车时间||载客量||已售票数||余票\n");
for(i=0;iprintf("%4s%10s%7s%8d%8d\n",buses[i].number,buses[i].starttime,buses[i].zaikeliang,buses[i].sold,buses[i].remainder);
save();
}
}
voidlocaltimes()/*提取当地时间*/
{
structtm*p;
time_tt;
t=time(NULL);
p=localtime(&t);
printf(asctime(p));
}
voidsave()/*存储函数*/
{
FILE*fp;
inti;
if((fp=fopen("myfile.txt","w+"))==NULL)/*fopen—文件打开*/
{printf("cannotopeninfile\n");
exit(0);
}
for(i=0;ifwrite(&buses[i],sizeof(buses),1,fp);/*fwrite—把数据项写到指定文件*/
fclose(fp);/*fclose—文件关闭*/
printf("\n");
printf("||||***存储成功!
***||||\n");
printf("请选择相应的数字进行下一步操作!
\n");
}
voidmain()
{for(;;)
{
switch(menu())
{
case1:
search();break;
case2:
localtimes();break;
case3:
sell();break;
case4:
tuipiao();break;
case5:
save();break;
case6:
exit(0);/*打开文件失败返回*/
}
}
}