📄 edit_train_infm.h
字号:
#ifndef edit_train_infm
#define edit_train_infm
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
#include<fstream>
#include"message.h"
class train
{
public:
void input_train();
void output_all_train();
void find_the_train();
void edit_the_train();
void delete_the_train();
friend class train;
private:
int save_train(train_data t);
void read_last_train();
void read_all_train();
void read_the_train();
void search_the_train();
void erase_the_train();
int search_by_id();
int search_by_point();
int search_by_time();
void change_the_train();
train_data t;
};
int trainsum=0;
int train::save_train(train_data t)//保存新增的列车时刻信息
{
int judge=0;//judge用于判断是否保存成功
ofstream ofile("train.dat",ios_base::app);
//here=ofile.tellp();
//cout<<"指针位置0"<<here<<endl;
ofile.write((char *)&t,sizeof(t));
//here=ofile.tellp();//获的文件尾地址
ofile.close();
//cout<<"指针位置1"<<here<<endl;
//cout<<"指针位置2"<<here-streampos(60)<<endl;
//记录列车时刻信息条数
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
trainsum=m;
trainsum++;
cout<<trainsum<<endl;
ofstream train_sum2("train_msg_sum.dat",ios_base::trunc);
train_sum2.write((char *)&trainsum,sizeof(trainsum));
train_sum2.close();
judge=1;
return judge;
}
void train::read_last_train()//用于输入最后增加的一条列车时刻信息
{
ifstream ifile("train.dat",ios_base::in);
train_data t;
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
cout<<setiosflags(ios::left)<<setw(7)<<"列车号"<<setw(7)<<"始发站"<<setw(7)<<"终点站"
<<setw(10)<<"开车时刻"<<setw(9)<<"到站时刻"<<setw(7)<<resetiosflags(ios::left)<<endl;
//cout<<endl;
ifile.seekg((m-1)*60);
ifile.read((char *)&t,sizeof(t));
cout<<setiosflags(ios::left)<<setw(7)<<t.id<<setw(7)<<t.s_point<<setw(9)<<t.e_point
<<setw(10)<<t.s_time<<setw(7)<<t.e_time<<setw(7)<<resetiosflags(ios::left);//<<endl;
}
void train::read_all_train()
{
ifstream ifile("train.dat",ios_base::in);
train_data t;
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
cout<<setiosflags(ios::left)<<setw(7)<<"列车号"<<setw(7)<<"始发站"<<setw(7)<<"终点站"
<<setw(10)<<"开车时刻"<<setw(9)<<"到站时刻"<<setw(7)<<resetiosflags(ios::left)<<endl;
// cout<<endl;
for(int i=0;i<m;i++)
{
ifile.seekg(i*60);
ifile.read((char *)&t,sizeof(t));
cout<<setiosflags(ios::left)<<setw(7)<<t.id<<setw(7)<<t.s_point<<setw(9)<<t.e_point
<<setw(10)<<t.s_time<<setw(7)<<t.e_time<<setw(7)<<resetiosflags(ios::left)<<endl;
}
}
void train::input_train()
{
train_data t;
int ch=0;
add:cout<<"请输入列车号(格式为:字母+数字,或数字): ";
cin>>t.id;
cout<<"请输入列车始发的起点城市: ";
cin>>t.s_point;
cout<<"请输入列车到达的目的城市: ";
cin>>t.e_point;
cout<<"请输入列车的发车时间: ";
cin>>t.s_time;
cout<<"请输入列车的到站时间: ";
cin>>t.e_time;
int p;
p=save_train(t);
if(p==1)
cout<<"恭喜!添加成功!"<<endl;
else
cout<<"Sorry!输入失败!请重新输入!"<<endl;
cout<<"新增的列车时刻信息为:"<<endl;
this->read_last_train();
add_ch:cout<<"\n是否继续添加?\n 1. 是 2.否\n"<<endl;
cin>>ch;
if(1==ch)
goto add;
else if(2==ch)
{}
else
{
cout<<"选择的相关操作有误!请重新选择:";
goto add_ch;
}
}
void train::output_all_train()
{
this->read_all_train();
}
void train::find_the_train()
{
this->search_the_train();
}
void train::search_the_train()
{
cout<<"请选择查询方式:\n"<<endl;
loop1:cout<<"1.按列车号\n2.按起始和终点站\n3.按发车时刻\n4.返回主菜单"<<endl;
int ch;
cin>>ch;
cout<<endl;
switch(ch)
{
case 1:
this->search_by_id();
break;
case 2:
this->search_by_point();
break;
case 3:
this->search_by_time();
break;
case 4:
break;
default:
cout<<"输入有误!请重新输入相关操作"<<endl;
goto loop1;
}
cout<<"是否继续查询?请选择:\n\n1.是 2.否"<<endl;
cin>>ch;
if(1==ch)
goto loop1;
}
int train::search_by_id()
{
cout<<"请输入要查询的列车号:"<<endl;
char id[10];
cin>>id;
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
ifstream ifile("train.dat",ios_base::in);
train_data t;
int i;
for(i=0;i<m;i++)
{
ifile.seekg(i*60);
ifile.read((char *)&t,sizeof(t));
if(0==strcmp(t.id,id))
{
cout<<setiosflags(ios::left)<<setw(7)<<"列车号"<<setw(7)<<"始发站"<<setw(7)<<"终点站"
<<setw(10)<<"开车时刻"<<setw(9)<<"到达时刻"<<setw(7)<<resetiosflags(ios::left)<<endl;
//cout<<endl;
cout<<setiosflags(ios::left)<<setw(7)<<t.id<<setw(7)<<t.s_point<<setw(9)<<t.e_point
<<setw(10)<<t.s_time<<setw(7)<<t.e_time<<setw(7)<<resetiosflags(ios::left)<<endl;
break;
}
}
if(i==m)
cout<<"查询失败!没有该信息!"<<endl;
return i;
}
int train::search_by_point()
{
char sp[10];
char ep[10];
cout<<"请输入起点: ";
cin>>sp;
cout<<"请输入终点: ";
cin>>ep;
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
ifstream ifile("train.dat",ios_base::in);
train_data t;
int i;
for(i=0;i<m;i++)
{
ifile.seekg(i*60);
ifile.read((char *)&t,sizeof(t));
if(0==(strcmp(t.s_point,sp)&&strcmp(t.e_point,ep)))
{
cout<<setiosflags(ios::left)<<setw(7)<<"列车号"<<setw(7)<<"起点站"<<setw(7)<<"终点站"
<<setw(10)<<"开车时刻"<<setw(9)<<"到达时刻"<<setw(7)<<resetiosflags(ios::left)<<endl;
//cout<<endl;
cout<<setiosflags(ios::left)<<setw(7)<<t.id<<setw(7)<<t.s_point<<setw(9)<<t.e_point
<<setw(10)<<t.s_time<<setw(7)<<t.e_time<<setw(7)<<resetiosflags(ios::left)<<endl;
break;
}
}
if(i==m)
cout<<"查询失败!没有该信息!"<<endl;
return i;
}
int train::search_by_time()
{
char s_time[6];
cout<<"请输入开车时间:";
cin>>s_time;
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
ifstream ifile("train.dat",ios_base::in);
train_data t;
int i;
for(i=0;i<m;i++)
{
ifile.seekg(i*60);
ifile.read((char *)&t,sizeof(t));
if(0==strcmp(t.s_time,s_time))
{
cout<<setiosflags(ios::left)<<setw(7)<<"列车号"<<setw(7)<<"始发站"<<setw(7)<<"终点站"
<<setw(10)<<"开车时刻"<<setw(9)<<"到达时刻"<<setw(7)<<resetiosflags(ios::left)<<endl;
//cout<<endl;
cout<<setiosflags(ios::left)<<setw(7)<<t.id<<setw(7)<<t.s_point<<setw(9)<<t.e_point
<<setw(10)<<t.s_time<<setw(7)<<t.e_time<<setw(7)<<resetiosflags(ios::left)<<endl;
break;
}
}
if(i==m)
cout<<"查询失败!没有该信息!"<<endl;
return i;
}
void train::change_the_train()
{
cout<<"先查找你要修改的列车时刻信息:"<<endl;
cout<<"请选择查询方式:\n"<<endl;
loop2:cout<<"1.按列车号\n2.按起始和终点站\n3.按开车时刻\n4.返回主菜单"<<endl;
int ch;
cin>>ch;
cout<<endl;
int result;
switch(ch)
{
case 1:
result=this->search_by_id();
break;
case 2:
result=this->search_by_point();
break;
case 3:
result=this->search_by_time();
break;
case 4:
return;
default:
cout<<"输入有误!请重新输入"<<endl;
goto loop2;
}
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
if(result!=m)
{
train_data t;
cout<<"请输入新信息:"<<endl;
cout<<"请输入列车号(格式为:字母+数字,或纯数字): ";
cin>>t.id;
cout<<"请输入列车的起点城市: ";
cin>>t.s_point;
cout<<"请输入列车的目的城市: ";
cin>>t.e_point;
cout<<"请输入列车的开车时间: ";
cin>>t.s_time;
cout<<"请输入列车的到达时间: ";
cin>>t.e_time;
train_data temp;
train_data *p=new train_data [m];
ifstream ifile("train.dat",ios_base::in);
for(int i=0;i<m;i++)
{
ifile.read((char *)&temp,sizeof(temp));
if(result!=i)
{
p[i]=temp;
}
else
p[i]=t;
}
//写入新信息
ofstream ofile("train.dat",ios_base::trunc);
for(i=0;i<m;i++)
{
ofile.write((char *)&p[i],sizeof(p[i]));
}
ofile.close();
}//if(result!=m)的另一个}
}
void train::edit_the_train()
{
this->change_the_train();
}
void train::erase_the_train()
{
cout<<"先查找你要删除的列车时刻信息:"<<endl;
cout<<"请选择查询方式:\n"<<endl;
loop2:cout<<"1.按列车号\n2.按起始和终点站\n3.按开车时刻"<<endl;
int ch;
cin>>ch;
cout<<endl;
int result;
switch(ch)
{
case 1:
result=this->search_by_id();
break;
case 2:
result=this->search_by_point();
break;
case 3:
result=this->search_by_time();
break;
default:
cout<<"输入有误!请重新输入"<<endl;
goto loop2;
}
int m=0;
ifstream train_sum1("train_msg_sum.dat",ios_base::in);
train_sum1.read((char *)&m,sizeof(m));
train_sum1.close();
if(result!=m)
{
int ch;
det:cout<<"确定删除该信息?\n 1 是 2 否";
cin>>ch;
if(1==ch)
{
train_data temp;
train_data *p=new train_data [m];
ifstream ifile("train.dat",ios_base::in);
for(int i=0;i<m;i++)
{
ifile.read((char *)&temp,sizeof(temp));
p[i]=temp;
}
//写入新信息
ofstream ofile("train.dat",ios_base::trunc);
for(i=0;i<m;i++)
{
if(i!=result)
{
ofile.write((char *)&p[i],sizeof(p[i]));
}
}
ofile.close();
//以下是把信息的条数减一
m--;
ofstream train_sum2("train_msg_sum.dat",ios_base::trunc);
train_sum2.write((char *)&m,sizeof(m));
train_sum2.close();
cout<<"删除成功!"<<endl;
}
else if(2==ch)
{}//do nothing
else
{
cout<<"输入错误!重新选择相关操作: "<<endl;
goto det;
}
}
}
void train::delete_the_train()
{
this->erase_the_train();
}
#endif edit_train_infm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -