火车售票排队系统 c语言,【C语言】实现12306火车售票系统!【附源码】

本文介绍了一个使用C语言编写的火车售票系统的实现,包括录入班次信息、浏览、查询、售票、退票、更新等功能。系统通过判断发车时间与当前时间的关系来确定火车状态,如未发车、停止退票等。程序将班次信息存储在.number.dat文件中,排序后保存在.sort.dat文件中。
摘要由CSDN通过智能技术生成

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

● 录入班次信息

● 浏览班次信息

● 按班次号查询

● 按终点站查询

● 按余票数量排序保存

● 售票

● 退票

● 更新班次信息

● 退出系统

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

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

1、未发车

2、已发车

3、停止检票

4、停止退票

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

7401dbac79bf

在判断退票时如果两个时间的小时数是一样的,则它们的分钟数如果相差在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);//重定位文件内部位置指针

/* int fseek( FILE *stream, long offset, int origin );

第一个参数stream为文件指针

第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移

第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_SET: 文件开头

SEEK_CUR: 当前位置

SEEK_END: 文件结尾

其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.

简言之:

fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;

fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;

fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。 */

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

/*ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数

也就是得到文件所包含的字节数,如果大于0,则代表文件非空*/

{

//文件位置指针移动到文件开始

rewind(fp);

char buff[10]={0};

for (cbNum=0;!feof(fp) && fread(&cBList[cbNum],sizeof(CardBase),1,fp);cbNum++)

/*对于feof函数,如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。

即如果文件结束,!feof(fp)为0,跳出循环

对于fread函数,是从一个文件流中读数据,如果调用成功返回实际读取到的项个数,

如果不成功或读到文件末尾返回 0*/

fgets(buff,10,fp);

/*char *fgets(char *buf, int bufsize, FILE *stream);

从文件结构体指针stream中读取数据&#

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值