2023
武汉
科技大学
语言
课程设计
武汉科技大学
课程设计
学 号_
班 级 _
姓 名 _
指导教师:张雄希
20232年 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("xxx---购置成功---xxx");
储存Save()
储存Save()
printf("xxx---退票成功---xxx");
输出退票情况
否
是
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 /x定义结构体x/
{
char banci[10]; /x各结构体名称x/
char facheshijian[20];
char zaikeliang[20];
int maipiao;
int yupiao;
}ST[N]={{"01","06:40","50",0,50}, /x对结构体输入数据x/
{"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() /x退票x/
{
int i,m;
char b[15];
{
printf("\n\nxxx-------当前情况--------xxxxxx\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) /x判断售票数x/
{
ST[i].maipiao=ST[i].maipiao-m;
ST[i].yupiao=ST[i].yupiao+m;
printf("退票成功!!");
printf("\n\nxxx---------退票结果-----------xxxxxx\n");
printf("班次 ||发车时间 ||载客量 ||已售票数 ||余票\n"); /x显示售票情况x/
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(); /x保存x/
}
〔3〕
void sell() /x售票x/
{
int i,m;
char b[15];
{
int i;
{
printf("\n\nxxx-------售票情况--------xxxxxx\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) /x判断班次是否符合x/
{
ST[i].maipiao=ST[i].maipiao+m;
ST[i].yupiao=ST[i].yupiao-m;
printf("xxx---购置成功---xxx");
{
printf("\n\nxxx-------售票情况--------xxxxxx\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);
/x}x/
}
save();
}
}
四、个人总结
经过了短短的一周的C语言课程设计,我对C语言有了更进一步的了解。懂得了将C程序模块的好处。用主函数调用子函数的方法,这样一来就把一个大的程序分成了几个小的程序,这样不仅降低了程序的难度还使程序的编辑思路更加清晰明了。在编制程序的过程中,我也遇到了许多较难解决的问题,例如:文件数据的读取,语法错误的查找,算法错误的查找以及文件的存储等问题。不过在老师的帮助和指导下,让我学到了程序的单步运行,和监视断点等方法来解决一些算法的错误。总的来说,C语言课程设计的综合训练就是让我把以前学到的理论知识应用与在实际生活的到了应用。
五、参考文献
谭浩强.C程序设计.北京:清华大学出版社,2023
六、源程序
##include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "time.h"
#define N 5
struct student /x定义结构体x/
{
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}
};
/x声明各函数x/
void search();
void save();
void sell();
void localtimes();
void tuipiao();
int menu();
int menu() /x定义菜单x/
{ 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