📄 b06020422.cpp
字号:
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
class train //定义关于班次信息的类
{
private:
int num;
int hour,minute;
char *start;
char *destination;
float totaltime;
int load;
int surplus;
char *state;
public:
train(int n,int h,int m,char *sh,char *zh,float r,int z,int y=30)
//构造函数
{
hour=h;
minute=m;
num=n;
start=new char[strlen(sh)+1];
strcpy(start,sh);
destination=new char[strlen(zh)+1];
strcpy(destination,zh);
totaltime=r;
load=z;
surplus=y;
state=new char[10];
state="可售";
}
void copy(int n,int h,int m,char *sh,char *zh,float r,int z,int y=30)
//函数功能:将变量赋值于对象
{
hour=h;
minute=m;
num=n;
start=new char[strlen(sh)+1];
strcpy(start,sh);
destination=new char[strlen(zh)+1];
strcpy(destination,zh);
totaltime=r;
load=z;
surplus=y;
state=new char[10];
state="可售";
struct tm *now; //获取系统时间
time_t t;
t=time(NULL);
now=localtime(&t);
if(now->tm_hour>h) //将系统时间与班次信息时间比较,确定列车状态
{
state="已发出";
if((now->tm_hour=h)&&(now->tm_min>m))
state="已发出";
}
}
train() //重载无参构造函数
{}
~train() //析构函数
{
delete []start;
delete []destination;
}
int getnum() //获得私有成员num
{
return num;
}
char *getdestination() //获得私有成员destination
{ return destination;
}
void print() //函数功能:输出班次信息
{
cout<<endl;
cout<<"班次"<<'\t'<<"出发时间"<<" "<<"始发站"<<" "<<"终点站"<<" "<<"行车时间(小时)"<<" "<<"载客量"<<" "<<"剩余票数"<<" "<<"车票现状";
cout<<endl;
cout<<endl;
cout<<num<<'\t'<<hour<<"时"<<minute<<"分"<<" "<<start<<" "<<destination<<" "<<totaltime<<'\t'<<'\t'<<" "<<load<<" "<<surplus<<" "<<state<<endl;
cout<<endl;
cout<<"按任意键,击回车继续"<<endl;
char ch;
cin>>ch;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}
void record() //函数功能:将班次信息写入二进制文件
{
ofstream fout("test.dat",ios::app);
if(!fout) //确认打开文件成功
{
cout<<"文件打开失败!"<<endl;
}
else
{
fout.write((char *)&num,sizeof(int));
fout.write((char *)&hour,sizeof(int));
fout.write((char *)&minute,sizeof(int));
fout.write(start,10);
fout.write(destination,10);
fout.write((char *)&totaltime,5);
fout.write((char *)&load,sizeof(int));
fout.write((char *)&surplus,sizeof(int));
fout.close();
}
}
};
//函数功能:显示菜单,选择
//函数返回值:从输入设备获得的一个字符
char menu()
{
cout<<'\t'<<'\t'<<"******** 欢迎使用票务信息系统 V1.0********"<<endl;
cout<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 1. 录入班次信息 "<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 2. 浏览班次信息"<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 3. 购票 "<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 4. 退票 "<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 5. 查询班次信息 "<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 6. 版本信息"<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 7. 使用说明"<<endl;
cout<<endl;
cout<<'\t'<<'\t'<<'\t'<<"* 8. 退出 "<<endl;
char c;
cout<<"请选择 :"<<endl;
cin>>c;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
return c;
}
//函数功能:将从输入设备获得的信息,赋值于对象,并写入文件
int write()
{
cout<<"录入班次信息"<<endl;
cout<<endl;
cout<<" 始发站 :"<<endl;
char *sh;
sh=new char[10];
cin>>sh;
cout<<"终点站 :"<<endl;
char *zh;
zh=new char[10];
cin>>zh;
cout<<"班次 :"<<endl;
int n;
cin>>n;
cout<<"行车时间 :"<<endl;
float r;
cin>>r;
cout<<"载客量 :"<<endl;
int z;
cin>>z;
cout<<"发车时间 (小时):"<<endl;
int h;
cin>>h;
cout<<"发车时间 (分钟):"<<endl;
int m;
cin>>m;
train A(n,h,m,sh,zh,r,z);
A.print();
cout<<"确认输入(Y)?"<<endl; //核实并确认输入
char a;
cin>>a;
if(a=='Y'||a=='y')
{
A.record();
return 0;
}
else
return 0;
}
//函数功能:从二进制文件中获取班次信息,存入对象数组
int read()
{ ifstream fin("test.dat");
train C[9]; //定义对象数组
int num,hour,minute,load,surplus;
float totaltime;
char *start;
start=new char[10];
char *destination;
destination=new char[10];
for(int i=0;i<9;i++)
{
fin.read((char *)&num,sizeof(int));
fin.read((char *)&hour,sizeof(int));
fin.read((char *)&minute,sizeof(int));
fin.read(start,10);
fin.read(destination,10);
fin.read((char *)&totaltime,5);
fin.read((char *)&load,sizeof(int));
fin.read((char *)&surplus,sizeof(int));
C[i].copy(num,hour,minute,start,destination,totaltime,load,surplus);
C[i].print();
}
fin.close();
return 0;
}
int scan()
{ read();
return 0;
}
//函数功能:介绍版本信息
void information()
{
cout<<"车票信息管理系统"<<endl;
cout<<"版本:V1.0 "<<endl;
cout<<"作者:陈守宁"<<endl;
cout<<"6.1"<<endl;
}
//函数功能:从输入设备获得所选班次和所需票数,从文件中读出相关信息,
//进行操作,再写入文件
void buy()
{
cout<<"请输入所选班次:"<<endl;
int i;
cin>>i;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"<<endl;
fstream fs;
fs.open("test.dat",ios::in|ios::out); //以读写方式打开文件
if(!fs) //确认打开文件成功
{
cout<<"文件打开失败!"<<endl;
}
else
{
fs.seekg((((i-1)*(5*sizeof(int)+25))+sizeof(int)),ios::beg);
//设置读指针
int h;
fs.read((char *)&h,sizeof(int));
fs.seekg((((i-1)*(5*sizeof(int)+25))+2*sizeof(int)),ios::beg);
//设置读指针
int f;
fs.read((char *)&f,sizeof(int));
struct tm *now; //获取系统时间
time_t t;
t=time(NULL);
now=localtime(&t);
if(now->tm_hour>h) //将系统时间与班次信息时间进行比较
{
cout<<"列车已发出 !"<<endl;
if((now->tm_hour=h)&&(now->tm_min>f))
cout<<"列车已发出!"<<endl;
}
else
{
int m;
fs.seekg(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
//设置读指针
fs.read((char *)&m,sizeof(int));
int n;
cout<<"需购多少张?"<<endl;
cin>>n;
m=m-n;
if(m<0)
{
cout<<"余票不足 !"<<endl;
}
else
{
fs.seekp(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
//设置写指针
fs.write((char *)&m,sizeof(int));
}
}
fs.close();
}
cout<<"购票结束 !"<<endl;
}
//函数功能:从输入设备获得所选班次,从文件中获得相关信息,
//进行操作,再写入文件
void reback()
{
cout<<"请输入所选班次:"<<endl;
int i;
cin>>i;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"<<endl;
fstream fs;
fs.open("test.dat",ios::in|ios::out);
if(!fs)
{
cout<<"文件打开失败!"<<endl;
}
else
{
fs.seekg((((i-1)*(5*sizeof(int)+25))+sizeof(int)),ios::beg);
int h;
fs.read((char *)&h,sizeof(int));
fs.seekg((((i-1)*(5*sizeof(int)+25))+2*sizeof(int)),ios::beg);
int f;
fs.read((char *)&f,sizeof(int));
struct tm *now;
time_t t;
t=time(NULL);
now=localtime(&t);
if(now->tm_hour>h)
{
cout<<"列车已发出!退票失败!"<<endl;
if((now->tm_hour=h)&&(now->tm_min>f))
cout<<"列车已发出!退票失败!"<<endl;
}
else
{
int m;
fs.seekg(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
fs.read((char *)&m,sizeof(int));
m++;
fs.seekp(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
fs.write((char *)&m,sizeof(int));
}
fs.close();
}
cout<<"退票结束! "<<endl;
}
//函数功能:介绍使用信息
void explanation()
{
cout<<"欢迎使用 ****车票信息管理系统 Version1.0 ****"<<endl;
cout<<endl;
cout<<"由于作者技术水平浅陋,给您带来使用上的不便之处,还请海涵。"<<endl;
cout<<endl;
cout<<"录入班次信息需获得管理员权限!"<<endl;
cout<<endl;
cout<<"具体操作请严遵屏幕提示信息要求。"<<endl;
cout<<endl;
cout<<"输入信息还请慎重。"<<endl;
cout<<endl;
cout<<"感谢您的使用 !"<<endl;
cout<<endl;
}
//函数功能:查询相关信息的班次,可按班次或终点站查询
void search()
{
train C[9];
int num,hour,minute,load,surplus;
float totaltime;
char *start;
start=new char[10];
char *destination;
destination=new char[10];
int i;
ifstream fin("test.dat");
if(!fin)
{
cout<<"文件打开失败!"<<endl;
}
else
{
for(i=0;i<9;i++)
{
fin.read((char *)&num,sizeof(int));
fin.read((char *)&hour,sizeof(int));
fin.read((char *)&minute,sizeof(int));
fin.read(start,10);
fin.read(destination,10);
fin.read((char *)&totaltime,5);
fin.read((char *)&load,sizeof(int));
fin.read((char *)&surplus,sizeof(int));
C[i].copy(num,hour,minute,start,destination,totaltime,load,surplus);
}
fin.close();
}
cout<<endl;
cout<<endl;
//查询子菜单
cout<<'\t'<<'\t'<<'\t'<<"****车票查询****"<<endl;
cout<<'\t'<<'\t'<<'\t'<<"1 .按班次查询"<<endl;
cout<<'\t'<<'\t'<<'\t'<<"2 .按终点站查询"<<endl;
cout<<"您的选择 :"<<endl;
char ch;
cin>>ch;
switch(ch)
{
case'1':
cout<<"输入待查班次 :"<<endl;
int m;
cin>>m;
int flag;
flag=15; //标记变量
for(i=0;i<9;i++)
{
if(C[i].getnum()==m)
{
flag=i;
}
}
cout<<endl;
if(flag==15)
cout<<"抱歉,所输班次不存在!"<<endl;
else
C[flag].print();
break;
case'2':
cout<<"输入待查终点站 :"<<endl;
char *str;
str=new char[10];
cin>>str;
int q; //标记变量
q=15;
for(i=0;i<9;i++)
{
if(strcmp(C[i].getdestination(),str)==0)
{
q=i;
}
}
if(q==15)
cout<<"抱歉,所输终点站不存在"<<endl;
else
C[q].print();
break;
default:
break;
}
}
main()
{
char ch,c;
char password[10]="123"; //设置管理员密码
while(1)
{
ch=menu();
switch(ch)
{
case'1':
cout<<"请输入管理员口令:"<<endl;
char word[10];
cin>>word;
if(strcmp(word,password)==0) //核对口令
write();
else
cout<<"您没有获得管理员权限!"<<endl;
break;
case'2':scan();
break;
case'3':buy();
break;
case'4':reback();
break;
case'5':search();
break;
case'6':information();
break;
case'7':explanation();
break;
case'8':cout<<"谢谢使用"<<endl;
exit(0);
break;
default:
break;
}
cout<<"\n单击任意键 ,然后击回车 ,回主菜单 。"<<endl;
cin>>c;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -