#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ROOT "admin" //管理员
#define MAXSIZE 1000
typedef struct _USER
{
char name[20];//姓名
char IDtype[20];//证件类型
char ID[20];//证件号
char password[20];//密码
char tel[20];//电话
}USER;
typedef struct _TRAIN
{
char no[20];//车次
char start[20];//起始站
char end[20];//终到站
float price;//票价
int stime[5];//发车年月日小时分
int etime[5];//到站年月日小时分
}TRAIN;
typedef struct _RECORD
{
char name[20];//姓名
char IDtype[20];//证件类型
char ID[20];//证件号
char tel[20];//电话
TRAIN info;
}REC;//乘车记录
int MainMenu()
{
int choice;
system("cls");
printf("1:登录\n");
printf("2:注册\n");
printf("0:退出\n");
printf("请输入选项:");
scanf("%d",&choice);
return choice;
}
void SaveTrain(TRAIN s[],int n)
{
int i;
FILE* fp=fopen("TRAIN.data","w+");
if(fp==NULL)//代开失败返回
{return ;}
for(i=0;i<n;i++)
{
fwrite(&s[i],sizeof(TRAIN),1,fp);
}
fclose(fp);
}
int LoadTrain(TRAIN s[])//加载文件信息
{
int i=0;
FILE* fp=fopen("TRAIN.data","r+");
if(fp==NULL)//打开失败返回
{return 0;}
while(fread(&s[i],sizeof(TRAIN),1,fp))//读取文件到结尾
{
i++;
}
fclose(fp);
return i;
}
/*文件保存读取*/
void SaveUser(USER s[],int n)
{
int i;
FILE* fp=fopen("USER.data","w+");
if(fp==NULL)//代开失败返回
{return ;}
for(i=0;i<n;i++)
{
fwrite(&s[i],sizeof(USER),1,fp);
}
fclose(fp);
}
int LoadUser(USER s[])//加载文件信息
{
int i=0;
FILE* fp=fopen("USER.data","r+");
if(fp==NULL)//打开失败返回
{return 0;}
while(fread(&s[i],sizeof(USER),1,fp))//读取文件到结尾
{
i++;
}
fclose(fp);
return i;
}
void SaveRecord(REC s[],int n)
{
int i;
FILE* fp=fopen("REC.data","w+");
if(fp==NULL)//代开失败返回
{return ;}
for(i=0;i<n;i++)
{
fwrite(&s[i],sizeof(REC),1,fp);
}
fclose(fp);
}
int LoadRecord(REC s[])//加载文件信息
{
int i=0;
FILE* fp=fopen("REC.data","r+");
if(fp==NULL)//打开失败返回
{return 0;}
while(fread(&s[i],sizeof(REC),1,fp))//读取文件到结尾
{
i++;
}
fclose(fp);
return i;
}
int RegUser(USER s[],int n)
{
system("cls");
printf("请输入姓名:");
scanf("%s",s[n].name);
printf("请输入证件类型:");
scanf("%s",s[n].IDtype);
printf("请输入证件号:");
scanf("%s",s[n].ID);
printf("请输入密码:");
scanf("%s",s[n].password);
printf("请输入电话:");
scanf("%s",s[n].tel);
printf("注册成功!\n");
system("pause");
return n+1;
}
int AddTrain(TRAIN s[],int n)
{
system("cls");
printf("请输入车次:");
scanf("%s",s[n].no);
printf("请输入起始站:");
scanf("%s",s[n].start);
printf("请输入终到站:");
scanf("%s",s[n].end);
printf("请输入票价:");
scanf("%f",&s[n].price);
printf("请输入发车时间y-m-d-h-m:");
scanf("%d-%d-%d-%d-%d",&s[n].stime[0],&s[n].stime[1],&s[n].stime[2],&s[n].stime[3],&s[n].stime[4]);
printf("请输入到站时间y-m-d-h-m:");
scanf("%d-%d-%d-%d-%d",&s[n].etime[0],&s[n].etime[1],&s[n].etime[2],&s[n].etime[3],&s[n].etime[4]);
printf("添加成功!\n");
system("pause");
return n+1;
}
void PrintTrain(TRAIN s[],int n)
{
int i;
if(n==0)
{
printf("无车次信息!\n");
return;
}
printf("%-8s%-10s%-20s%-20s","序号","车次","起始站","终到站");
printf("%-10s%-20s%-20s\n","票价","发车时间","到站时间");
for(i=0;i<n;i++)
{
printf("%-8d%-10s%-20s%-20s",i+1,s[i].no,s[i].start,s[i].end);
printf("%-10.2f%-4d-%02d-%02d-%02d-%02d %-4d-%02d-%02d-%02d-%02d \n",s[i].price,s[i].stime[0],s[i].stime[1],s[i].stime[2],s[i].stime[3],s[i].stime[4],s[i].etime[0],s[i].etime[1],s[i].etime[2],s[i].etime[3],s[i].etime[4]);
}
}
void PrintUser(USER s[],int n)
{
int i;
if(n==0)
{
printf("无用户信息!\n");
return;
}
printf("%-10s%-10s%-20s%-20s\n","姓名","证件类型","证件号","电话");
for(i=0;i<n;i++)
{
printf("%-10s%-10s%-20s%-20s\n",s[i].name,s[i].IDtype,s[i].ID,s[i].tel);
if(i&&i%10==0)
system("pause");
}
}
void PrintRecord(REC s[],int n)
{
int i;
if(n==0)
{
printf("无记录信息!\n");
return;
}
printf("%-10s%-10s%-20s%-20s","姓名","证件类型","证件号","电话");
printf("%-10s%-20s%-20s","车次","起始站","终到站");
printf("%-10s%-20s%-20s\n","票价","发车时间","到站时间");
for(i=0;i<n;i++)
{
printf("%-10s%-10s%-20s%-20s",s[i].name,s[i].IDtype,s[i].ID,s[i].tel);
printf("%-10s%-20s%-20s",s[i].info.no,s[i].info.start,s[i].info.end);
printf("%-10.2f%-4d-%02d-%02d-%02d-%02d %-4d-%02d-%02d-%02d-%02d \n",s[i].info.price,s[i].info.stime[0],s[i].info.stime[1],s[i].info.stime[2],s[i].info.stime[3],s[i].info.stime[4],s[i].info.etime[0],s[i].info.etime[1],s[i].info.etime[2],s[i].info.etime[3],s[i].info.etime[4]);
}
}
void AdminMenu(USER s[],int n)
{
int choice;
TRAIN train[MAXSIZE];
int tn=LoadTrain(train);
REC rec[MAXSIZE];
int rn=LoadRecord(rec);
do
{
system("cls");
printf("1:添加车次\n");
printf("2:显示车次\n");
printf("3:显示用户\n");
printf("4:显示记录\n");
printf("0:退出\n");
printf("请输入选项:");
scanf("%d",&choice);
switch(choice)
{
case 1:
tn=AddTrain(train,tn);
break;
case 2:
system("cls");
PrintTrain(train,tn);
system("pause");
break;
case 3:
system("cls");
PrintUser(s,n);
system("pause");
break;
case 4:
system("cls");
PrintRecord(rec,rn);
system("pause");
break;
}
}while(choice!=0);
SaveTrain(train,tn);
SaveRecord(rec,rn);
}
int BuyTicket(USER s[],int who,TRAIN train[],int tn,REC rec[],int rn)
{
int choice;
system("cls");
PrintTrain(train,tn);
printf("请输入要购买的序号:");
scanf("%d",&choice);
if(choice<1||choice>tn)
{
printf("序号错误!购票失败!\n");
system("pause");
return rn;
}
rec[rn].info=train[choice-1];
strcpy(rec[rn].ID,s[who].ID);
strcpy(rec[rn].name,s[who].name);
strcpy(rec[rn].IDtype,s[who].IDtype);
strcpy(rec[rn].tel,s[who].tel);
printf("购票成功!\n");
system("pause");
return rn+1;
}
void PrintSelf(USER s[],int who,REC rec[],int n)
{
int i,flag;
system("cls");
for(i=0,flag=0;i<n;i++)
{
if(!strcmp(rec[i].ID,s[who].ID))
{
flag=1;
PrintRecord(&rec[i],1);
}
}
if(flag==0)
{
printf("无购票记录!\n");
}
system("pause");
}
int DelTicket(USER s[],int who,REC rec[],int n)
{
int i,flag,j;
char no[20];
system("cls");
for(i=0,flag=0;i<n;i++)
{
if(!strcmp(rec[i].ID,s[who].ID))
{
flag=1;
PrintRecord(&rec[i],1);
}
}
if(flag==0)
{
printf("无购票记录!\n");
system("pause");
return n;
}
printf("请输入退票的车次:");
scanf("%s",no);
for(i=0,flag=0;i<n;i++)
{
if(!strcmp(rec[i].ID,s[who].ID)&&!strcmp(no,rec[i].info.no))
{
flag=1;
for(j=i;j<n;j++)
{
rec[j]=rec[j+1];
}
break;
}
}
if(flag==0)
{
printf("无该车次购票记录!\n");
system("pause");
return n;
}
printf("退票成功!\n");
system("pause");
return n-1;
}
void SortNo(TRAIN train[],int tn)
{
int i,j;
TRAIN temp;
for(i=0;i<tn;i++)
{
for(j=i+1;j<tn;j++)
{
if(strcmp(train[i].no,train[j].no)>0)
{
temp=train[i];
train[i]=train[j];
train[j]=temp;
}
}
}
}
void SelectNo(TRAIN train[],int tn)
{
int i;
char temp[20];
system("cls");
printf("请输入要查询的车次:");
scanf("%s",temp);
for(i=0;i<tn;i++)
{
if(!strcmp(temp,train[i].no))
{
PrintTrain(&train[i],1);
}
}
system("pause");
}
void SelectStart(TRAIN train[],int tn)
{
int i;
char temp[20];
system("cls");
printf("请输入要查询的起始站:");
scanf("%s",temp);
for(i=0;i<tn;i++)
{
if(!strcmp(temp,train[i].start))
{
PrintTrain(&train[i],1);
}
}
system("pause");
}
void SelectEnd(TRAIN train[],int tn)
{
int i;
char temp[20];
system("cls");
printf("请输入要查询的终点站:");
scanf("%s",temp);
for(i=0;i<tn;i++)
{
if(!strcmp(temp,train[i].end))
{
PrintTrain(&train[i],1);
}
}
system("pause");
}
void SelectMenu(TRAIN train[],int tn)
{
int choice;
do
{
system("cls");
printf("1:按车次查询\n");
printf("2:按起始站查询\n");
printf("3:按终点站查询\n");
printf("0:退出\n");
printf("请输入选项:");
scanf("%d",&choice);
switch(choice)
{
case 1:
SelectNo(train,tn);
break;
case 2:
SelectStart(train,tn);
break;
case 3:
SelectEnd(train,tn);
break;
}
}while(choice!=0);
}
void UserMenu(USER s[],int n,int who)
{
int choice;
TRAIN train[MAXSIZE];
int tn=LoadTrain(train);
REC rec[MAXSIZE];
int rn=LoadRecord(rec);
do
{
system("cls");
printf("1:购票\n");
printf("2:退票\n");
printf("3:显示车次\n");
printf("4:查询车次\n");
printf("5:查看记录\n");
printf("0:退出\n");
printf("请输入选项:");
scanf("%d",&choice);
switch(choice)
{
case 1:
SortNo(train,tn);
rn=BuyTicket(s,who,train,tn,rec,rn);
break;
case 2:
rn=DelTicket(s,who,rec,rn);
break;
case 3:
system("cls");
PrintTrain(train,tn);
system("pause");
break;
case 4:
SelectMenu(train,tn);
break;
case 5:
PrintSelf(s,who,rec,rn);
break;
}
}while(choice!=0);
SaveTrain(train,tn);
SaveRecord(rec,rn);
}
void Login(USER s[],int n)
{
int i;
char no[20];
char pass[20];
system("cls");
printf("请输入证件号:");
scanf("%s",no);
printf("请输入密码:");
scanf("%s",pass);
if(!strcmp(ROOT,no)&&!strcmp(ROOT,pass))
{
AdminMenu(s,n);
return;
}
for(i=0;i<n;i++)
{
if(!strcmp(s[i].ID,no)&&!strcmp(s[i].password,pass))
{
UserMenu(s,n,i);
return;
}
}
}
int main()
{
int choice;
USER user[MAXSIZE];
int n=LoadUser(user);
system("mode con: cols=160 lines=40");
do
{
choice=MainMenu();
if(choice==1)
{
Login(user,n);
}
else if(choice==2)
{
n=RegUser(user,n);
}
}while(choice!=0);
SaveUser(user,n);
return 0;
}
高铁乘客管理系统
最新推荐文章于 2023-02-09 20:54:08 发布