您可能希望定义一个reservation
表示单个预订的类和一个data
保存所有数据的类,作为vector
s的 a reservation
。数据类将希望有一个成员函数,该函数接受std::ostream
引用,并将保留保存到文本文件中(最简单的是每行一个变量)。它还需要一个成员函数,该函数std::istream
通过引用并从文本文件中读取数据。
您的程序的主要部分将(我在这里做出大量假设)将文件加载到data
具有std::istream
成员函数的类中,并要求用户提供某种 ID。然后调用一个成员函数data
来检查data
s 向量中的所有元素,直到找到匹配的 ID(通过引用),并让用户更改一些成员。然后它std::ostream
再次调用成员函数来保存更改。
流是这样处理的。在这个示例中,我没有使用data
类或向量,因为这个问题看起来很像家庭作业,但这显示了文件处理的棘手部分。
#include <string>
#include <iostream>
#include <fstream>
class Reservation {
std::string ID;
std::string date;
public:
//default constructor
Reservation()
{}
//helpful constructor
Reservation(std::string _id, std::string _date)
:ID(_id), date(_date)
{}
//copy constructor
Reservation(const Reservation& b)
:ID(b.ID), date(b.date)
{}
//move constructor
Reservation(Reservation&& b)
:ID(std::move(b.ID)), date(std::move(b.date))
{}
//destructor
~Reservation()
{}
//assignment operator
Reservation& operator=(const Reservation& b)
{
ID = b.ID;
date = b.date;
return *this;
}
//move operator
Reservation& operator=(Reservation&& b)
{
ID = std::move(b.ID);
date = std::move(b.date);
return *this;
}
//save
std::ostream& save(std::ostream& file) {
file << ID << '\n';
file << date << '\n';
return file; //be in the habit of returning file by reference
}
//load
std::istream& load(std::istream& file) {
std::getline(file, ID);
std::getline(file, date);
return file; //be in the habit of returning file by reference
}
};
int main() {
Reservation reserve; //create a Reservation to play with
{ //load the reservation from loadfile
std::ifstream loadfile("myfile.txt");
reserve.load(loadfile);
}
//display the reservation
reserve.save(cout);
{ //save the reservation to a different file
std::ofstream savefile("myfile2.txt");
reserve.save(savefile);
}
return 0;
}