|
|
#include <stdio.h>
|
|
|
#include <stdlib.h>
|
|
|
#include <string.h>
|
|
|
#include <time.h>
|
|
|
/*主要函数*/
|
|
|
int MENU(); //菜单
|
|
|
void INPUT(); //输入
|
|
|
void ADD(); //添加
|
|
|
void READ(); //读取
|
|
|
void PRINT(); //打印车票
|
|
|
void SEARCHSELL(); //查询及买票
|
|
|
void MAI(); //买票
|
|
|
void TUI(); //退票
|
|
|
void BREAK(); //退出
|
|
|
void WRONG(); //纠错
|
|
|
|
|
|
/* 宏定义 */
|
|
|
#define GeShi "\n 车次号 发车时间 起始站一终点站 行车时间 总票量 已定票人数\n" //输出表头
|
|
|
#define Print " %10s%9d:%d%10s%6s%9d%10d%10d \n\n",T[i].hao,T[i].s,T[i].f,T[i].first,T[i].final,T[i].time,T[i].all,T[i].now //输出记录格式
|
|
|
#define Print2 " %10s 此班已发出%10s%6s%9d%10d%10d \n\n",T[i].hao,T[i].first,T[i].final,T[i].time,T[i].all,T[i].now
|
|
|
#define N 1000 //最大列车数
|
|
|
/*结构体*/
|
|
|
struct Train
|
|
|
{
|
|
|
char hao[10];
|
|
|
int s,f;
|
|
|
int time;
|
|
|
char first[20];
|
|
|
char final[20];
|
|
|
int now;
|
|
|
int all;
|
|
|
|
|
|
}T[N];
|
|
|
|
|
|
int i=0; //计数
|
|
|
int n=0; //总量
|
|
|
int z; //购票量
|
|
|
char l[20]; //纠错
|
|
|
|
|
|
int main()
|
|
|
{
|
|
|
int x;
|
|
|
do
|
|
|
{
|
|
|
x=MENU();
|
|
|
switch(x)
|
|
|
{
|
|
|
case 1:INPUT(); break;
|
|
|
case 2:SEARCHSELL(); break;
|
|
|
case 3:TUI(); break;
|
|
|
case 4:BREAK();break;
|
|
|
default:WRONG();
|
|
|
break;
|
|
|
}
|
|
|
}while(x!=4);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
int MENU() //菜单
|
|
|
{
|
|
|
int choise;
|
|
|
system("cls");
|
|
|
printf("***************************************************\n");
|
|
|
printf("**** 车票管理系统 ****\n");
|
|
|
printf("**** 1、添加车次信息 ****\n");
|
|
|
printf("**** 2、查询车次信息及买票 ****\n");
|
|
|
printf("**** 3、退票 ****\n");
|
|
|
printf("**** 4、退出 ****\n");
|
|
|
printf("***************************************************\n");
|
|
|
printf("请选择:");
|
|
|
scanf("%d",&choise);
|
|
|
gets(l);
|
|
|
return choise;
|
|
|
}
|
|
|
|
|
|
void INPUT() //输入数据
|
|
|
{
|
|
|
char ch;
|
|
|
do {
|
|
|
system("cls");
|
|
|
printf("\n******** 添加车次模块界面 *****\n");
|
|
|
|
|
|
printf("**班次**\n");
|
|
|
scanf("%s",&T[i].hao);
|
|
|
printf("**发车时间的时**\n");
|
|
|
scanf("%d",&T[i].s);
|
|
|
printf("**发车时间的分**\n");
|
|
|
scanf("%d",&T[i].f);
|
|
|
printf("**起始站**\n");
|
|
|
scanf("%s",&T[i].first);
|
|
|
printf("**终点站**\n");
|
|
|
scanf("%s",&T[i].final);
|
|
|
printf("**行车时间**\n");
|
|
|
scanf("%d",&T[i].time);
|
|
|
printf("**总票量**\n");
|
|
|
scanf("%d",&T[i].all);
|
|
|
printf("**已订票人数**\n");
|
|
|
scanf("%d",&T[i].now);
|
|
|
n++;
|
|
|
i++;
|
|
|
printf("\n");
|
|
|
printf("\n该信息已保存!!!\n");
|
|
|
printf(" \n是否继续新建车次信息(y/n)\n");
|
|
|
do
|
|
|
{
|
|
|
ch=getchar();
|
|
|
if(ch=='n')
|
|
|
break;
|
|
|
}while(ch!='y'&&ch!='n');
|
|
|
if(ch=='n')
|
|
|
break;
|
|
|
}while(i<N);
|
|
|
ADD();
|
|
|
printf("\n\n*****系统计入的列车信息如下*****\n\n");
|
|
|
PRINT();
|
|
|
}
|
|
|
void ADD()//输入文件
|
|
|
{
|
|
|
FILE *fp,*fp1;
|
|
|
if((fp=fopen("train.txt","w"))==NULL)
|
|
|
{
|
|
|
printf("无法创建文件!\n\n");
|
|
|
getchar();
|
|
|
return;
|
|
|
}
|
|
|
if((fp1=fopen("列车数量.txt","w"))==NULL)//记录共几趟车
|
|
|
{
|
|
|
printf("无法创建文件!\n");
|
|
|
getchar();
|
|
|
return;
|
|
|
}
|
|
|
for(i=0;i<n;i++)
|
|
|
if(fwrite(&T[i],sizeof(struct Train),1,fp)==0)
|
|
|
printf("写入数据失败!\n\n");
|
|
|
fprintf(fp1,"%d",n);
|
|
|
fclose(fp);
|
|
|
fclose(fp1);
|
|
|
}
|
|
|
|
|
|
void READ()//读取文件
|
|
|
{
|
|
|
FILE *fp,*fp1;
|
|
|
if((fp=fopen("train.txt","r"))==NULL)
|
|
|
{
|
|
|
printf("文件打开失败!\n\n");
|
|
|
getchar();
|
|
|
return;
|
|
|
}
|
|
|
if((fp1=fopen("列车数量.txt","r"))==NULL)
|
|
|
{
|
|
|
printf("文件打开失败!\n\n");
|
|
|
getchar();
|
|
|
return;
|
|
|
}
|
|
|
fscanf(fp1,"%d",&n);
|
|
|
fclose(fp1);
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
fread(&T[i],sizeof(struct Train),1,fp);
|
|
|
}
|
|
|
fclose(fp);
|
|
|
}
|
|
|
|
|
|
void PRINT() //打印车票信息
|
|
|
{
|
|
|
time_t t;
|
|
|
struct tm * lt;
|
|
|
time (&t);
|
|
|
lt = localtime(&t);
|
|
|
char ch[10];
|
|
|
READ();
|
|
|
printf("\n *****************************************************************\n");
|
|
|
printf(GeShi);
|
|
|
for(i=0;i<n;i++)
|
|
|
{ if((T[i].s>lt->tm_hour)||(T[i].s=lt->tm_hour&&T[i].f>lt->tm_min))
|
|
|
printf(Print);
|
|
|
else
|
|
|
printf(Print2); }
|
|
|
printf(" *********************************************************\n");
|
|
|
printf("\n 按任意键返回上级菜单: ");
|
|
|
gets(ch);
|
|
|
}
|
|
|
|
|
|
void SEARCHSELL()//查询并购票
|
|
|
{
|
|
|
char name1[10]; //车次号
|
|
|
char name2[10]; //终点站
|
|
|
char choice;
|
|
|
int j;
|
|
|
do
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n ********************* 欢迎进入 查询火车时刻信息 界面 ********************\n");
|
|
|
printf("\n *********************请选择查找方式*****************\n\n\n");
|
|
|
printf(" 1.显示所有列车信息 2.按车次查询 3.按终点站查询\n");
|
|
|
printf(" \n\n 4.返回\n");
|
|
|
printf("\n\n 请选择: ");
|
|
|
scanf("%d",&j);
|
|
|
gets(l);
|
|
|
switch(j)
|
|
|
{
|
|
|
case 1:
|
|
|
system("cls");
|
|
|
printf("\n\n *********************所有的车次信息如下**********************\n");
|
|
|
PRINT();
|
|
|
break;
|
|
|
case 2:
|
|
|
system("cls");
|
|
|
printf("\n --- 请输入车次 ---: \n");
|
|
|
gets(name1);
|
|
|
break;
|
|
|
case 3:
|
|
|
system("cls");
|
|
|
printf("\n --- 请输入终点站 ---: \n");
|
|
|
gets(name2);
|
|
|
break;
|
|
|
case 4:
|
|
|
break;
|
|
|
default:
|
|
|
WRONG ();
|
|
|
break;
|
|
|
}
|
|
|
READ();
|
|
|
|
|
|
if(j==2)
|
|
|
{
|
|
|
system("cls");
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
if(strcmp(T[i].hao,name1)==0)
|
|
|
{
|
|
|
printf("\n\n 按 车次 查找列车信息成功!\n");
|
|
|
printf("\n **********************************************\n");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
if(strcmp(T[i].hao,name1)==0)
|
|
|
{
|
|
|
printf(GeShi);
|
|
|
printf(Print);
|
|
|
MAI();
|
|
|
}
|
|
|
}
|
|
|
printf(" ************************************************\n");
|
|
|
printf("\n 查询信息完毕,请按任意键返回 ");
|
|
|
gets(l);
|
|
|
}
|
|
|
|
|
|
if(j==3)
|
|
|
{
|
|
|
system("cls");
|
|
|
for(i=0;i<N;i++)
|
|
|
{
|
|
|
if(strcmp(T[i].final,name2)==0)
|
|
|
{
|
|
|
printf("\n\n 按 日期 查找列车信息成功!\n");
|
|
|
printf("\n ************************************************\n");
|
|
|
printf(GeShi);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
if(strcmp (T[i].final,name2)==0)
|
|
|
{
|
|
|
printf(GeShi);
|
|
|
printf(Print);
|
|
|
MAI();
|
|
|
}
|
|
|
}
|
|
|
printf(" ****************************************\n");
|
|
|
printf("\n 查询信息完毕,请按任意键返回 ");
|
|
|
gets(l);
|
|
|
}
|
|
|
do
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n ****** 继续查找(1), 返回主菜单(2)***** ");
|
|
|
choice=getchar();
|
|
|
gets(l);
|
|
|
if(choice!='1'&&choice!='2')
|
|
|
WRONG ();
|
|
|
}while(choice!='1'&&choice!='2');
|
|
|
}while(choice!='2');
|
|
|
}
|
|
|
|
|
|
|
|
|
void TUI()//退票
|
|
|
{
|
|
|
char choice;
|
|
|
system("cls");
|
|
|
printf("\n\n 退票 界面 \n");
|
|
|
do
|
|
|
{
|
|
|
char ch2;
|
|
|
char ch1;
|
|
|
char num[10];
|
|
|
printf("\n 是否要求退票? (y/n) ");
|
|
|
scanf("%c",&ch2);
|
|
|
gets(l);
|
|
|
if(ch2=='n')
|
|
|
break;
|
|
|
else if(ch2=='y')
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n请输入车次号,按回车键确认: ");
|
|
|
scanf("%s",num);
|
|
|
gets(l);
|
|
|
READ();
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
if(strcmp(num, T[i].hao)==0)
|
|
|
{
|
|
|
printf(GeShi);
|
|
|
printf(Print);
|
|
|
do
|
|
|
{
|
|
|
printf("\n 确认退票? (y/n) ");
|
|
|
scanf("%c",&ch1);
|
|
|
gets(l);
|
|
|
if(ch1!='y'&&ch1!='n')
|
|
|
WRONG();
|
|
|
else if(ch1=='n')
|
|
|
break;
|
|
|
} while(ch1!='y'&&ch1!='n');
|
|
|
if(ch1=='y')
|
|
|
printf("\n 退票成功 !\n\n\n");
|
|
|
}
|
|
|
else
|
|
|
printf("\n 查无此车!!! \n ");
|
|
|
}
|
|
|
printf("\n\n 搜索完毕 \n");
|
|
|
do
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n ******* 继续搜索(1), 返回主菜单(2) ******* ");
|
|
|
choice=getchar();
|
|
|
gets(l);
|
|
|
if(choice!='1'&&choice!='2')
|
|
|
WRONG();
|
|
|
}while(choice!='1'&&choice!='2');
|
|
|
}
|
|
|
}while(choice!='2');
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MAI() //买票
|
|
|
{
|
|
|
char ch;
|
|
|
do
|
|
|
{
|
|
|
printf("\n 是否购票? (y/n) ");
|
|
|
ch=getchar();
|
|
|
gets(l);
|
|
|
if(ch!='y'&&ch!='n')
|
|
|
WRONG();
|
|
|
else if(ch=='n')
|
|
|
break;
|
|
|
} while(ch!='y'&&ch!='n');
|
|
|
if(ch=='y')
|
|
|
{
|
|
|
printf("\n请输入所买票数,按回车键确认: ");
|
|
|
scanf("%d",&z);
|
|
|
gets(l);
|
|
|
if(T[i].now<T[i].all)
|
|
|
{
|
|
|
printf("\n购买成功 \n\n\n");
|
|
|
T[i].now=T[i].now+z;}
|
|
|
else
|
|
|
printf("\n无车票 \n\n\n");
|
|
|
}
|
|
|
ADD();
|
|
|
}
|
|
|
void BREAK()
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n ******************************");
|
|
|
printf("\n 感谢使用 ");
|
|
|
printf("\n\n \n");
|
|
|
printf("\n\n 请按任意键退出");
|
|
|
printf("\n\n ----------------------------------------------- ");
|
|
|
printf(" -----------------------------------------------\n ");
|
|
|
}
|
|
|
|
|
|
void WRONG()
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n\n\n 输入错误啦,请按任意键返回 ");
|
|
|
gets(l);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|