⽕车售票排队系统c语⾔,【C语⾔】实现12306⽕车售票系
统!【附源码】
程序设计要求⽤C语⾔写⼀个简单的⽕车售票系统,主要实现的功能为:
● 录⼊班次信息
● 浏览班次信息
● 按班次号查询
● 按终点站查询
● 按余票数量排序保存
● 售票
● 退票
● 更新班次信息
● 退出系统
所有的班次信息保存在number.dat⽂件中,排序过后的保存在sort.dat中(.dat是⼀种⼆进制⽂件)。
在编写的过程中我觉得在判断⽕车的状态⽐较值得深究。这⾥假设⽕车主要有四种状态:
有没有java培训机构1、未发车
2、已发车
3、停⽌检票
4、停⽌退票
在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进⾏⼤⼩⽐较,主要采⽤if判断各种情况。其中atime代表的是发车时间的整型数,btime代表的是系统时间的整型数,具体实现如下:
在判断退票时如果两个时间的⼩时数是⼀样的,则它们的分钟数如果相差在30之内即半⼩时之内或者
发车时间的⼩时和系统时间的⼩时相差⼀个1,并且发车时间的分钟数⼩于30,系统时间的分钟⼤于30,则它们之间也就相差在30之内,此时代表停⽌退票。
判断检票和上⾯思想⼤致相同。
为了参考研究,贴上代码:
#include
#include
#include
#include
#include "time.h"
//班次信息表
#define SIZELIMIT 10 //每班次的具体信息的字符个数限制在10以内
#define MAXNUM 1000 //设定最多只能录⼊1000个车次信息
{
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为⽂件指针
冒泡排序代码c语言第三个参数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中读取数据,每次读取⼀⾏。读取的数据保存在buf指向的字符数组中,
每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果⽂件中的该⾏,不⾜bufsize个字符,
则读完该⾏就结束。如若该⾏(包括最后⼀个换⾏符)的字符数超过bufsize-1,则fgets只返回⼀个不完整的⾏,
但是,缓冲区总是以NULL字符结尾,对fgets的下⼀次调⽤会继续读该⾏。函数成功将返回buf,失败或读到⽂件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错⽽终⽌的,应该借助feof函数或者ferror函数来判断。二维数组注意事项
*/
fclose(fp);
}
else
{
}
return;
}
//保存班次信息
void writecardbasefile()
{
int i;
FILE *fp;
if ((fp=fopen("./number.dat","w"))==NULL)
{
printf("系统错误");
}
char buff[10]={0};
strcpy(buff,"\r\n");
for (i=0;i
{
if (fwrite(&cBList[i],sizeof(CardBase),1,fp)!=1) {
printf("系统错误");
}
if (fwrite(buff,2,1,fp)!=1)
{
printf("系统错误");
}
}
fclose(fp);
}
//保存排序信息
void writesortfile()
{
int i;
FILE *fp;
if ((fp=fopen("./sort.dat","w"))==NULL)
printf("系统错误");
}
char buff[10]={0};
strcpy(buff,"\r\n");
for (i=0;i
{
if (fwrite(&cBList[i],sizeof(CardBase),1,fp)!=1)
{
printf("系统错误");
}
if (fwrite(buff,2,1,fp)!=1)
{
printf("系统错误");
}
}
fclose(fp);
}
//打印并输⼊后返回
void printReturn(char *info)
{
java环境变量怎么配置csdnprintf("\n\n\t %s",info);
fflush(stdin);//清空输⼊缓冲区,通常是为了确保不影响后⾯的数据读取. getchar();
}
/
/输⼊信息
void setInfo(char pinfo[1024],char desinfo[])
{
printf("\n\t%s:",pinfo);
fflush(stdin);
scanf("%s",desinfo);
软件代码怎么写}
//系统初始化
void initsystem()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论