⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edit_train_infm.h

📁 该系统为列车查询系统,你可以根据不同时间地点查询你所需要的信息
💻 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 + -