用C++做图书管理系统时怎么实现删除图书信息?急急急!!

//这是图书内容
struct Bookinformation
{
string booknumber;
string bookname;
string auther;
string press;//出版社
Date pressday;
string category;//类别
string money;
string introduction;
};

void del_book()
{
    //我会一种比较笨的办法:
//建立一个临时文件,然后从原文件读取图书信息,把要删除的项不写入临时文件,其他全部写入。
//全部读写完成后,改变两个文件的读写状态,把临时文件的内容全部覆盖写入原文件
ofstream outData("temp.txt", ios::out);
ifstream inData("d:\\bookInfo.txt", ios::in); 
if (!outData || !inData)
{
cout <<endl <<"对不起!!!!找不到文件!!!!" <<endl;
system("pause");
return;
}
string sign;
cout <<endl <<"你要删除的图书名或者图书号:"; //其他的图书属性也成
cin >>sign;
bool flag = true;
string str;
while (inData >>booknumber >>bookname)
{
getline(inData, str);

if ((sign==booknumber) || (sign==bookname))
{
cout <<endl <<"你想删除的图书:" <<endl <<endl;
cout <<setiosflags(ios::left) <<setw(5) <<booknumber
<<" " <<bookname<<str <<endl;
flag = false;
break;
}
outData <<setiosflags(ios::left) <<setw(5) <<booknumber
<<" " <<bookname <<str <<endl;
}
if (flag)
{
cout <<endl <<"对不起!!!没有该图书的信息!!!!" <<endl <<endl;
}
else
{
while (getline(inData, str))
{
outData <<str <<endl;
}
outData.close();
inData.close();
ofstream out("d:\\bookInfo.txt", ios::out);
ifstream in("temp.txt", ios::in);
if (!out || !in)
{
cout <<endl <<"对不起不能打开文件!!!" <<endl <<endl;
return;
}
while (getline(in, str))
{
out <<str <<endl;
}
out.close();
in.close();
cout <<endl <<"这本图书的信息已经删除!!!" <<endl <<endl;
}  
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-12
看你是怎么存储的咯追问

fstream fin("d:\\bookInfo.txt",ios::in);

追答

C++对于文件好像只能全删全改,不支持删除指定的。
你可以删掉全部的,然后重新写进入