如果我在文件中有客户记录,如果我有两个客户名称john doe但我们有不同的电话号码,如何从该文件中删除客户记录。基本上我想知道如何使用姓名和电话号码从文件中删除客户记录。这是我的代码。
void deleteCustomerData() {
string name, customerInfo, customerData;
string email;
string phoneNumber;
string address;
string deleteCustomer;
int skip = 0;
cout << "Enter the name of the Customer record you want to delete: " << endl;
getline(cin, name);
cout << "Enter the phone number of the Customer record you want to delete: " << endl;
getline(cin, customerData);
ifstream customerFile;
ofstream tempFile;
int tracker = 0;
customerFile.open("customer.txt");
tempFile.open("tempCustomer.txt");
while (getline(customerFile, customerInfo)) {
if ((customerInfo != name) && !(skip > 0)) {
if ((customerInfo != "{" && customerInfo != "}")) {
if (tracker == 0) {
tempFile << "{" << endl << "{" << endl;
}
tempFile << customerInfo << endl;
tracker++;
if (tracker == 4)
{
tempFile << "}" << endl << "}" << endl;
tracker = 0;
}
}
}
else
{
if (skip == 0)
skip = 3;
else
--skip;
}
}
cout << "The record with the name " << name << " has been deleted " << endl;
customerFile.close();
tempFile.close();
remove("customer.txt");
rename("tempCustomer.txt", "customer.txt");
}
答案 0 :(得分:0)
假设客户记录是您文件中的一行,您需要:
答案 1 :(得分:0)
我不知道OP的文件格式,所以我必须从事普遍性工作。
定义客户结构
struct customer
{
string name;
string email;
string phoneNumber;
string address;
};
写入读取客户的功能,如果不能,则返回false。如果使用类似于以下的函数重载>>
运算符,可能最简单:
std::istream & operator>>(std::istream & in, customer & incust)
编写函数来写出客户,如果不能,则返回false。同样,如果您重载<<
运算符,则最简单。
std::ostream & operator<<(std::ostream & out, const customer & outcust)
使用流运算符可以利用流的布尔运算符来判断读取或写入是否成功。
然后使用读写功能实现以下功能:
while read in a complete customer from input file
if customer.name != deletename or customer.phoneNumber!= deletenumber
Write customer to output file
英文:只要我能从输入文件中读取客户,如果客户不是我想删除的客户,我会将客户写入输出文件。
使用重载的流运算符,这可以像
一样简单customer cust;
while (infile >> cust)
{
if (cust.name != deletename || cust.phoneNumber != deletenumber)
{
outfile << cust;
}
}
所有&#34;大脑&#34;在读写功能中,选择逻辑很简单。客户匹配并且未写入文件或不匹配并写入文件。
所有读写逻辑都与选择逻辑分离,可以轻松地重复用于多种不同类型的搜索。
但是你可能会发现缓存,读入一次以及构建std::vector
个customer
以便进行操作而无需不断读取和重写文件。