当前位置:文档之家› c语言课程设计-汽车售票系统

c语言课程设计-汽车售票系统

///汽车售票系统
///第3次修改
#include "windows.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"

//关于所有函数的声明
void UI(); //用户主界面
void ShowTime(); //显示时间
void Show(); //显示当前售票情况
void BuyTick(); //买票函数
void ReTick(); //退票函数
void Save(); //保存数据到文件中,以防止信息丢失
void SaveTxt(); //保存成日志文件
void History(); //可以
void About(); //关于
void Init(); //在没有文件时初始化结构体数组

//结构体管理五辆车
struct BusTicket
{
int seat; //已售票数
int max; //最大座位数
int hour;
int min; //时间
}bus[5];

//全局变量
time_t t; //时间
FILE*fp; //文件指针
struct tm *date; //本地时间

int main()
{
system("title 汽车售票系统 V0.9Beta build0250"); //改变窗口标题
printf("正在进入系统,请稍等");
int i;
for(i=0;i<5;i++)
{
printf(".");
Sleep(200);
}

//确定filename名称,用日期作为标志方便History()函数
t=time(0);
date=localtime(&t);
int a=date->tm_year+1900,b=date->tm_mon+1,c=date->tm_mday;
char filename[10];char temp[3];
itoa(a,filename,10);strcat(filename,"-");
itoa(b,temp,10);strcat(filename,temp);strcat(filename,"-");
itoa(c,temp,10);strcat(filename,temp);

//读取数据;若文件不存在,新建数据文件
if((fp=fopen(filename,"r"))==NULL)
{
Init();
fp=fopen(filename,"w");
}
else
for(i=0;i<5;i++)
fread(&bus[i],sizeof(struct BusTicket),1,fp);
fclose(fp);

//进入用户界面 无限循环直到exit(0)结束程序
while(true) UI();
return 0;
}

void Init()
{
//初始化每辆车的数据
bus[0].hour=6,bus[0].min=40,bus[0].max=50;
bus[1].hour=9,bus[1].min=30,bus[1].max=40;
bus[2].hour=12,bus[2].min=0,bus[2].max=40;
bus[3].hour=16,bus[3].min=30,bus[3].max=40;
bus[4].hour=20,bus[4].min=0,bus[4].max=50;
return;
}


void UI()
{
system("cls");

printf(" 汽车售票系统(火车站--->植物园)\n\n");
ShowTime();
printf("\n您好,欢迎使用本系统\n");
printf("┏━━━━━━━━━━━━━┓\n");
printf("┃ 1.售票\n");
printf("┃ 2.退票\n");
printf("┃ 3.显示当前售票情况\n");
printf("┃ 4.保存当前数据为txt日志\n");
printf("┃ 5.查询历史记录\n");
printf("┃ 6.关于\n");
printf("┃ 0.退出\n");
printf("┗━━━━━━━━━━━━━┛\n");
printf("请输入您的选择: ");
int ch;
scanf("%d",&ch);
if(getchar()!='\n')
return;
system("cls"); //清屏

//使用switch进入相应的功能模块
switch(ch)
{
case 1:BuyTick();return;
case 2:ReTick();ret

urn;
case 3:Show();return;
case 4:SaveTxt();return;
case 5:History();return;
case 6:About();return;
case 0:exit(0);return;
default:return;
}
}

void ShowTime()
{
t=time(0);
date=localtime(&t);
printf("当前时间 %02d:%02d",date->tm_hour,date->tm_min);
}

//防止系统异常退出造成数据丢失
void Save()
{
//用日期作为文件名
t=time(0);
date=localtime(&t);
int a=date->tm_year+1900,b=date->tm_mon+1,c=date->tm_mday;
char filename[10],temp[3];
itoa(a,filename,10);strcat(filename,"-");
itoa(b,temp,10);strcat(filename,temp);strcat(filename,"-");
itoa(c,temp,10);strcat(filename,temp);
//开始写入数据
fp=fopen(filename,"w");
for(int i=0;i<5;i++)
fwrite(&bus[i],sizeof(struct BusTicket),1,fp);
fclose(fp);
return;
}
void BuyTick()
{
//得到当前时间
t=time(0);
date=localtime(&t);

printf("当前时间 %02d:%02d\n\n",date->tm_hour,date->tm_min);
printf("您可以购买以下车次票:\n");
printf("━━━━━━━━━━━━━━━━━━━\n");
printf("班次 发车时间 载客量 已售票数\n");
int j=0,sign[5]; //数组sign是用来记录哪几辆车还有剩票 用j作为是否有剩票的标志
for(int n=0;n<5;sign[n]=5,n++);
for(int i=0;i<5;i++)
{
//由时间和已售票数来确定余车票情况
if(bus[i].hour*60+bus[i].mintm_hour*60+date->tm_min) continue;
if(bus[i].seat==bus[i].max) continue;
printf(" %2d\t %02d:%02d%10d%10d\n",i+1,bus[i].hour,bus[i].min,bus[i].max,bus[i].seat);
j++;
sign[i]=i;
}
printf("━━━━━━━━━━━━━━━━━━━\n");
if(j==0) //如果剩票的情况
{
system("cls");
printf("\n\n今天已经没有车了,明天再买吧!\n\n");
system("pause");
return;
}

printf("\n输入您需要的班次,按0则返回上级菜单");
printf("\n\n请选择:");
int num;
do{
scanf("%d",&num);
if(getchar()!='\n')
{
system("cls");
BuyTick();
return;
}
if(num==0) return;
num--;
if(num==5||num!=sign[0]&&num!=sign[1]&&num!=sign[2]&&num!=sign[3]&&num!=sign[4])
printf("您不能购买此班次票 \n请重新选择:");
else break;
}while(1);
printf("您已购买班次%d汽车票\n\n",num+1);
bus[num].seat++; //把该班次车已售票数加一
Save(); //把数据保存到文件
system("pause");
return;
}

void ReTick()
{
//获取当前时间
t=time(0);
date=localtime(&t);

//用时间来判断哪些车可以退票
printf("当前时间 %02d:%02d\n\n",date->tm_hour,date->tm_min);
printf("现在只有以

下车次才能退票:\n");
printf("━━━━━━━━━━━━━━━━━━━\n");
printf("班次 发车时间 载客量 已售票数\n");
int j=0,sign[5]; //同样用a和j作为标志
for(int n=0;n<5;sign[n]=5,n++);
for(int i=0;i<5;i++)
{
if(bus[i].hour*60+bus[i].mintm_hour*60+date->tm_min) continue;
if(bus[i].seat==0) continue;
printf(" %2d\t %02d:%02d%10d%10d\n",i+1,bus[i].hour,bus[i].min,bus[i].max,bus[i].seat);
j++;
sign[i]=i;
}
printf("━━━━━━━━━━━━━━━━━━━\n");
if(j==0) //没有可退车票情况
{
system("cls");
printf("\n\n目前没有任何可退的车票\n\n");
system("pause");
return;
}


printf("\n请输入您要退票的班次,按0返回主菜单\n\n");
printf("请选择:");
int num;
do{
scanf("%d",&num);
if(getchar()!='\n')
{
system("cls");
BuyTick();
return;
}
if(num==0) return;
num--;
if(num==5||num!=sign[0]&&num!=sign[1]&&num!=sign[2]&&num!=sign[3]&&num!=sign[4])
printf("您不能退回此车次票 \n请重新选择:");
else break;
}while(true);
printf("您已成功退了班次%d汽车票\n\n",num+1);
bus[num].seat--; //该班次车已售票数减一
Save(); //保存数据写入到文件
system("pause");
return;
}
void History()
{
system("cls");
struct BusTicket find[5];
printf("请输入您想查看数据的日期\n(输入0返回上级菜单)\n(yyyy-mm-dd):");
int a,b,c,i;
scanf("%d-%d-%d",&a,&b,&c);
if(a==0)
return;

//确保用户标准日期格式
if(b<1||b>12||c>31||c<1)
{
History();
return;
}
//产生所查当天日期的文件名字符串
char fname[10],temp[3];
itoa(a,fname,10);strcat(fname,"-");
itoa(b,temp,10);strcat(fname,temp);strcat(fname,"-");
itoa(c,temp,10);strcat(fname,temp);

//核对是否有当天的文件记录
if(!(fp=fopen(fname,"r")))
{
printf("没有所杳当天记录\n\n");
system("pause");
return;
}
//读取当天文件数据
for(i=0;i<5;i++)
fread(&find[i],sizeof(struct BusTicket),1,fp);
fclose(fp);

//在屏幕上打印出历史记录
printf("%s那天情况如下\n",fname);
printf("━━━━━━━━━━━━━━━━━━━\n");
printf("班次 发车时间 载客量 已售票数\n");
for(i=0;i<5;i++)
printf(" %2d\t %02d:%02d%10d%10d\n",i+1,find[i].hour,find[i].min,find[i].max,find[i].seat);
printf("━━━━━━━━━━━━━━━━━━━\n");
printf("\n");
system("pause");

return;
}
v

oid SaveTxt()
{
FILE*fp=fopen("myfile.txt","a");
t=time(0);
date=localtime(&t);
fprintf(fp,asctime(date));
fprintf(fp,"售票情况:\n");
fprintf(fp,"━━━━━━━━━━━━━━━━━━━\n");
fprintf(fp,"班次 发车时间 载客量 已售票数\n");
for(int i=0;i<5;i++)
fprintf(fp," %2d\t %02d:%02d%10d%10d\n",i+1,bus[i].hour,bus[i].min,bus[i].max,bus[i].seat);
fprintf(fp,"━━━━━━━━━━━━━━━━━━━\n\n\n");
fclose(fp);
printf("已成功保存到myfile.txt文件\n\n");
system("pause");
return;
}
void About()
{
system("cls");
printf("汽车售票系统\n");
printf("版本 V0.9Beta Build0250\n");
printf("(C) 2010 Leadger Corporation\n");
printf("保留所有权利。\n\n\n");
printf("\t┏━━━━━━━━━┓\n");
printf("\t┃版权所有,盗版必究┃\n");
printf("\t┗━━━━━━━━━┛\n\t");
for(int i=0;i<6;i++)
{
Sleep(1000);
printf("%d\b",5-i);
}
return;
}

void Show()
{
ShowTime(); //显示当前时间

//打印数据
printf("\n目前售票情况:\n");
printf("━━━━━━━━━━━━━━━━━━━\n");
printf("班次 发车时间 载客量 已售票数\n");
for(int i=0;i<5;i++)
printf(" %2d\t %02d:%02d%10d%10d\n",i+1,bus[i].hour,bus[i].min,bus[i].max,bus[i].seat);
printf("━━━━━━━━━━━━━━━━━━━\n");
printf("\n");
system("pause");
return;
}


相关主题
文本预览
相关文档 最新文档