You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

410 lines
8.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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);
}