二○一○~二○一一学年第二学期信息科学与工程学院课程设计报告书
课程名称:
班级:
学号:
姓名:
指导教师:
二○一○年九月
C语言课程设计
题目:汽车售票系统
任务:自学C语言中相关知识,设计出汽车售票系统。要求如下所述:
每天“火车站→植物园”有5个班次的汽车(假设),具体的数据格式如下:班次发车时间载客量已售票数
1 06:40 50 0
2 09:30 40 0
3 12:00 40 0
4 14:30 40 0
5 16:00 50 0
为售票员开发一个小程序,以完成每天的“火车站→植物园”的售票业务。要求如下:
1. 能够售票和退票。以文件(myfile.txt)的形式保存当天各个车次的售退票情况。
◆售票功能
当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。
◆退票功能
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
2. 查询显示功能。可以随时显示当前售票现状(如:班次发车时间载客量已售票数余票等信息)。
3. 用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项。可适当增加其他附加功能。
主程序流程图:
订票程序流程图:
退票程序流程图:
系统功能模块图:
程序概述:主函数菜单包括订票,退票,查看,保存的菜单.由相应函数调用可以实现相关功能模块.订票退票功能基本是一样的,需要分别输出购票车次及张数.查看功能只是把数据输出界面.退出功能是调用系统退出函数来终止程序的运行.函数程序首先要读入文件myfile.txt,获取已订票数的数据,如果没有文件,则会提示打不开文件.英雌运行程序之前请在C盘建立一个TXT文件,名为:myfile.txt.里面的内容不做任何修改,让其保留空白.默认购票数全部为0.
主要源程序代码:
#include
#include
int menu() /*主菜单*/
{
int a;
printf("****************************\n");
printf("*1、订票*\n");
printf("*2、退票*\n");
printf("*3、显示订票情况*\n");
printf("*4、保存当天数据*\n");
printf("*5、退出(请先保存) *\n");
printf("****************************\n");
printf("******请选择操作*********\n");
scanf("%d",&a);
return a;
}
void esc()
{exit (0);}
void check(int*bus) /*查看车次售票情况的程序*/
{
printf("车次发车时间载客量已售票\n");
printf("1、06:40 50 %d\n",*bus); printf("2、09:30 40 %d\n",*(bus+1)); printf("3、13:00 40 %d\n",*(bus+2)); printf("4、16:00 40 %d\n",*(bus+3)); printf("5、20:50 50 %d\n",*(bus+4)); }
void order(int*bus) /*订票功能程序*/
{
int a,b;
int capacity[5]={50,40,40,40,50};
check(bus);
printf("请选择要订的车次\n");
scanf("%d",&a);
if(a>5||a<1)
printf("你选择了错误的序号\n");
else printf("请选择要订票的张数\n");
scanf("%d",&b);
if(b>capacity[a-1]-*(bus+a-1))
printf("你定票的张数超过剩余张数\n");
else
{
*(bus+a-1)+=b;
printf("订票成功\n");
}
}
void cancel(int*bus) /*退票功能程序*/
{
int a,b;
check(bus);
printf("请选择要取消订票的车次\n");
scanf("%d",&a);
if(a>5||a<1)
printf("你选择了错误的序号\n");
else
printf("请选择要退票的张数\n");
scanf("%d",&b);
if(b>*(bus+a-1))
printf("你退票的张数已超过订票的张数\n");
else
{
*(bus+a-1)-=b;
printf("退票成功\n");
}
}
void write(int*bus) /*写入已存数据的程序*/ {
FILE *fp;
if((fp=fopen("C:\\myfile.txt","wb"))==0)
{
printf("打不开文件\n");
exit(0);
}
fwrite(bus,1,1,fp);
printf("保存成功\n");
fclose(fp);
}
void read(int*bus) /*读入已存数据的程序*/
{
int i;
FILE *fp;
if((fp=fopen("C:\\myfile.txt","rb"))==0)
{
printf("打不开文件\n");
exit(0);
}
for(i=0;i<5;i++)
{
if(!feof(fp)) /*测试fp所指向的文件当前状态是否"文件结束"*/ fread(bus+i,1,1,fp);
}
fclose(fp);
}
void main() /*主函数*/
{
int bus[5]={0,0,0,0,0};
int a;
read(bus);
a=menu(); /*显示主菜单*/
while(a<6)
{
switch(a)
{
case 1:order(bus);break;
case 2:cancel(bus);break;
case 3:check(bus);break;
case 4:write(bus);break;
case 5:esc();break;
default:printf("你选择了错误的序号\n");break;
}
a=menu();
}
write(bus);
}
调试分析过程:对于购票子程序中,原来没有对购退票的张数与所剩张数做比较,加了相应代码,可以实现相应的错误提醒,然后返回主菜单,重新开始.对于退出函数,是查相应资料,通过调用系统退出函数来实现退出程序.
存在问题及思考:在购退票输入要选择的车次的时候,如果输入错误的车次,则会提示”你选择了错误的序号”.但是不会返回上级菜单或主菜单.这个问题还没有解决.尝试过用return函数使其返回,但是反而会引起其他的错误,暂不知如何修改.
课程设计小结:C语言是所有现在流行的编程语言的基础.学好C语言,有助于其他的语言的理解及学习.C程序中,核心是算法,只有先写出算法,然后对细节慢慢修改,写程序也应该有个相应的分块,不能就从头开始往下写,而应该先分成相应子块,写出主程序把其他子程序连接起来.然后开始子程序块的编写代码.
刚编写成功的程序,肯定是有很多问题的,特别是联系实际情况的,问题就更多了,这就要求我们有很大的耐心来修改程序,并联系实际情况.
学好C语言能培养我们的耐心,严谨,的态度,并有良好的基础,为以后的计算机方面的学习提供一定的帮助.我们应该学好C语言.