资源描述
武汉科技大学
课程设计
学 号_
班 级 _
姓 名 _
指导教师:张雄希
20012年 9月 5日
武汉科技大学
课程设计
信息科学与技学院 自动化 学号
一、课程设计题目:汽车站售票系统
二、课程设计内容:
每天“火车站→植物园”有5个班次的汽车(假设),具体的数据如下:
班次 发车时间 载客量 已售票数
01 06:40 50 0
02 09:30 40 0
03 13:00 40 0
04 16:00 40 0
05 20:00 50 0
为售票员开发一个小程序,以完成每天的“火车站→植物园”的售票业务。要求如下:
①能够售票和退票。
②某个班次已经过了开车时间,则该班次今天不再售票。
③可以随时显示售票现状,并以文件(myfile.txt)的形式保存当天各个车次的售票情况。
三、课程设计要求:
程序质量:
①贯彻模块化的程序设计思想,以主函数调用各个功能模块。
②用户界面友好,功能明确,操作方便。
③用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项。
目录
一、需求分析 1
二、程序流程图 2
三、核心技术的实现说明及相应程序段 3
四、个人总结 5
五、参考文献 5
六、源程序 5
一、需求分析
通过对任务书内容的详细了解和深入的思考得知,整个程序可以分为三大部分.定义变量,输入数据,输出数据.但是在整个程序的执行过程当中,随处都体现了方便乘客购票、退票、查询售票与车次的思想,并且结合结构体与文件的读写来储存数据,以实现售票的数据化管理. 用户界面友好,功能明确,操作方便。信息表达清楚明确。
1. 定义变量:
声明结构体,定义变量,为变量赋初值,为下一步工作做好准备。
2.输入数据:
用户可以按自己意愿输入车次进行查询,进而根据售票情况进行自主的选择够票。
3.输出数据:
根据用户的需要输出车次、时间、售票情况等数据,以方便用户了解情况。程序结束后还有推出功能,增加了程序的可操控性。
二、程序流程图
定义变量,结构体
定义变量,结构体指针
输入车次scanf("%s",b)
for(i=0;i<N;i++)
输入买票数目scanf("%d",&m)
if(strcmp(ST[i].banci,b)==0)
是 判断车次是否相同 否
是 否 否
输出购买情况
printf("***---购买成功---***");
储存Save()
储存Save()
printf("***---退票成功---***");
输出退票情况
否
是
if(strcmp(ST[i].banci,b)==0)判断车次是否相同
for(i=0;i<N;i++)
输入退票数目scanf("%d",&m)scanf("%d",&m)scanf("%d",&m)scanf("%d",&m)
输入车次scanf("%s",b)
定义变量,结构体
三、核心技术的实现说明及相应程序段
下面对程序做以详细介绍:
(1)struct student /*定义结构体*/
{
char banci[10]; /*各结构体名称*/
char facheshijian[20];
char zaikeliang[20];
int maipiao;
int yupiao;
}ST[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}
};
(2)
void tuipiao() /*退票*/
{
int i,m;
char b[15];
{
printf("\n\n***-------当前情况--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
printf("请输入您要退的班次(格式如:02):\n");
scanf("%s",b);
printf("请输入您要退的张数(格式如:3):\n");
scanf("%d",&m);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,b)==0)
if(ST[i].maipiao-m>=0) /*判断售票数*/
{
ST[i].maipiao=ST[i].maipiao-m;
ST[i].yupiao=ST[i].yupiao+m;
printf("退票成功!!");
printf("\n\n***---------退票结果-----------******\n");
printf("班次 ||发车时间 ||载客量 ||已售票数 ||余票\n"); /*显示售票情况*/
for(i=0;i<N;i++)
printf("%4s %10s %7s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
save(); /*保存*/
}
(3)
void sell() /*售票*/
{
int i,m;
char b[15];
{
int i;
{
printf("\n\n***-------售票情况--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
}
printf("请输入您要购买的班次(格式如:02):\n");
scanf("%s",b);
printf("请输入您要购买的票数(格式如:5):\n");
scanf("%d",&m);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,b)==0) /*判断班次是否符合*/
{
ST[i].maipiao=ST[i].maipiao+m;
ST[i].yupiao=ST[i].yupiao-m;
printf("***---购买成功---***");
{
printf("\n\n***-------售票情况--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
/*}*/
}
save();
}
}
四、个人总结
经过了短短的一周的C语言课程设计,我对C语言有了更进一步的了解。懂得了将C程序模块的好处。用主函数调用子函数的方法,这样一来就把一个大的程序分成了几个小的程序,这样不仅降低了程序的难度还使程序的编辑思路更加清晰明了。在编制程序的过程中,我也遇到了许多较难解决的问题,例如:文件数据的读取,语法错误的查找,算法错误的查找以及文件的存储等问题。不过在老师的帮助和指导下,让我学到了程序的单步运行,和监视断点等方法来解决一些算法的错误。总的来说,C语言课程设计的综合训练就是让我把以前学到的理论知识应用与在实际生活的到了应用。
五、参考文献
谭浩强.C程序设计.北京:清华大学出版社,2005
六、源程序
##include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "time.h"
#define N 5
struct student /*定义结构体*/
{
char banci[10];
char facheshijian[20];
char zaikeliang[20];
int maipiao;
int yupiao;
}ST[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}
};
/*声明各函数*/
void search();
void save();
void sell();
void localtimes();
void tuipiao();
int menu();
int menu() /*定义菜单*/
{ int c;
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);
}
void search() /*查询函数*/
{int i;printf("请输入要查询的班次\n");
scanf("%d",&i);
i=i-1;
{
printf("\n\n***-------查询结果--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
}
void sell() /*售票*/
{
int i,m;
char b[15];
{
int i;
{
printf("\n\n***-------售票情况--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
}
printf("请输入您要购买的班次(格式如:02):\n");
scanf("%s",b);
printf("请输入您要购买的票数(格式如:5):\n");
scanf("%d",&m);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,b)==0) /*判断班次是否符合*/
{
ST[i].maipiao=ST[i].maipiao+m;
ST[i].yupiao=ST[i].yupiao-m;
printf("***---购买成功---***");
{
printf("\n\n***-------售票情况--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
/*}*/
}
save();
}
}
void tuipiao() /*退票*/
{
int i,m;
char b[15];
{
printf("\n\n***-------当前情况--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
printf("请输入您要退的班次(格式如:02):\n");
scanf("%s",b);
printf("请输入您要退的张数(格式如:3):\n");
scanf("%d",&m);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,b)==0)
if(ST[i].maipiao-m>=0)
{
ST[i].maipiao=ST[i].maipiao-m;
ST[i].yupiao=ST[i].yupiao+m;
printf("退票成功!!");
printf("\n\n***---------退票结果-----------******\n");
printf("班次 ||发车时间 ||载客量 ||已售票数 ||余票\n");
for(i=0;i<N;i++)
printf("%4s %10s %7s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
save();
}
}
void localtimes() /*提取当地时间*/
{
struct tm *p;
time_t t;
t=time(NULL);
p=localtime(&t);
printf(asctime(p));
}
void save() /*存储函数*/
{
FILE *fp;
int i;
if((fp=fopen("myfile.txt","w+"))==NULL)
{printf("cannot open infile\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&ST[i],sizeof(ST),1,fp);
fclose(fp);
printf("\n");
printf("||||***存储成功!***||||\n");
printf(" 请选择相应的数字进行下一步操作!\n");
}
main()
{for(;;)
{
switch(menu())
{
case 1:search();break;
case 2:localtimes();break;
case 3:sell(); break;
case 4:tuipiao();break;
case 5:save();break;
case 6:exit(0);
}
}
}
展开阅读全文