栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

基于C语言实现简单的12306火车售票系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于C语言实现简单的12306火车售票系统

程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为:

录入班次信息

浏览班次信息

按班次号查询

按终点站查询

按余票数量排序保存

售票

退票

更新班次信息

退出系统

所有的班次信息保存在number.dat文件中,排序过后的保存在sort.dat中(.dat是一种二进制文件)。

在编写的过程中我觉得在判断火车的状态比较值得深究。这里假设火车主要有四种状态:

1.未发车

2.已发车

3.停止检票

4.停止退票

在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进行大小比较,主要采用if判断各种情况。其中atime代表的是发车时间的整型数,btime代表的是系统时间的整型数,具体实现如下:

if(atime<=btime) //已经发车
return 1;
if(((atime-btime<=30)&&(atime-btime>5)&&(atime/100==btime/100))||(((atime%100+(60-btime%100))<=30)&&(atime%100+(60-btime%100))>5&&(atime/100-btime/100==1))) //距发车半小时以内,停止退票,%表示取余
return 2;
if(((atime-btime<=5)&&(atime/100==btime/100))||((atime%100+(60-btime%100)&&(atime/100-btime/100==1))<=5)) //距发车前五分钟内停止检票
return 3;
return 0; //可以办理购退票

在判断退票时如果两个时间的小时数是一样的,则它们的分钟数如果相差在30之内即半小时之内或者发车时间的小时和系统时间的小时相差一个1,并且发车时间的分钟数小于30,系统时间的分钟大于30,则它们之间也就相差在30之内,此时代表停止退票。

判断检票和上面思想大致相同。

为了参考研究,贴上代码:

#include
#include
#include
#include
#include "time.h"
//班次信息表
#define SIZELIMIT 10 //每班次的具体信息的字符个数限制在10以内
#define MAXNUM 1000 //设定最多只能录入1000个车次信息
typedef struct cardbase //定义一个关于班次信息的结构体,取名为Cardbase
{
char C_ID[SIZELIMIT];//班次
char C_TIME[SIZELIMIT];//发车时间
char C_ANAME[SIZELIMIT];//起点站
char C_BNAME[SIZELIMIT];//终点站
char C_USETIME[SIZELIMIT];//行车时间
char C_MAXNUM[SIZELIMIT];//额定载量
char C_REMAINNUM[SIZELIMIT];//余票数量
}Cardbase;
int cbNum=0;//记录班次数
Cardbase cBList[MAXNUM];//班次列表
//读取班次信息
void readcardbasefile()
{
FILE *fp;
//打开文件失败则创建文件
if((fp=fopen("./number.dat","r"))==NULL)
{
//初次运行创建文件
if ((fp=fopen("./number.dat","w"))==NULL)
{
exit(0); //返回
}
else
{
fclose(fp);
}
return ;
}

fseek(fp,0,2);//重定位文件内部位置指针

if (ftell(fp)>0)//文件不为空

{
//文件位置指针移动到文件开始
rewind(fp);
char buff[10]={0};
for (cbNum=0;!feof(fp) && fread(&cBList[cbNum],sizeof(Cardbase),1,fp);cbNum++)

fgets(buff,10,fp);

fclose(fp);
}
else
{
fclose(fp);
}
return;
}
//保存班次信息
void writecardbasefile()
{
int i;
FILE *fp;
if ((fp=fopen("./number.dat","w"))==NULL)
{
printf("系统错误");
}
char buff[10]={0};
strcpy(buff,"rn");
for (i=0;i5)&&(atime/100==btime/100))||(((atime%100+(60-btime%100))<=30)&&(atime%100+(60-btime%100))>5&&(atime/100-btime/100==1))) //距发车半小时以内,停止退票,%表示取余
return 2;
if(((atime-btime<=5)&&(atime/100==btime/100))||((atime%100+(60-btime%100)&&(atime/100-btime/100==1))<=5)) //距发车前五分钟内停止检票
return 3;
return 0; //可以办理购退票
}
//浏览所有班次
void queryallinfo()
{
printf("班次信息n");
printf("班次 发车时间 起点站 终点站 行车时间 额定载量 余票数量 状态n");
int i;
for(i=0;i

程序中肯定还存在很多问题,自己对调用系统函数方面还有很多需要学习,文件的操作也不是很熟练,欢迎大家一起探讨交流。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/64147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号