注册 登录
编程论坛 C++教室

则么把纪录从文件中删除?

jqbbccn 发布于 2007-04-21 23:29, 742 次点击
RT:
case '2':{
cout<<"请输入要查找的姓名:";
cin>>newname;
while(fp.read((char *)&t4,sizeof(t4)))
{
if(strcmp(t4.getname(),newname)==0) //t4是一个类的对象,getname()是类的公有方法
{ //用来取得私有变量name的值,和输入值比较
cout<<"已找到该纪录"<<endl;
cout<<"序号"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"住址"<<"\t"<<"电话"<<endl;
t4.disp();
//删除语句则么写;
cout<<"删除成功!"<<endl;
system("pause");
return;
}
}
break;
}
比如我所有纪录都放在"stu.dat"文件中,当strcmp(t4.getname(),newname)==0时,把当前纪录删除,则么删呢?



//只复制一部分,大家应该能看懂=。=,急急急~~~
只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2007-4-22 9:54:02编辑过]

8 回复
#2
jqbbccn2007-04-22 09:19

则么没人会吗?

#3
wfpb2007-04-22 09:22

//删除语句则么写;
//循环外用两个变量
fp.tellg()获取当前位置.用一个记录之前的,一个记录当前的位置,当读取的是要的结果时,那么之前的位置就是开始处
关闭fp(应该是ifstream吧!),创建打开ofstream ous
然后定位到开始处,然后用ous写入空格(ous.put(' ')),来删除那段文件.

当然你也可以选择把个文件存入向量,然后在向量中寻找它,然后在向量中删除,最后写入到文件,但是这样比较耗内存.

#4
jqbbccn2007-04-22 09:53
cout<<"已找到该纪录"<<endl;
cout<<"序号"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"住址"<<"\t"<<"电话"<<endl;
t4.disp();
int last=fp.tellg();
fp.seekg(-sizeof(t4),ios::cur);
int first=fp.tellg();
for(int j=first;j<last;j++)
{
fp.put(' ');
}
fp.write((char *)&t4,sizeof(t4));
fp.close();
cout<<"删除成功!"<<endl;
system("pause");
return;

//删掉了,但这条纪录的地方显示乱码了
#5
jqbbccn2007-04-22 09:56
不会啊。。大大写一下代码吧,put和tellg都没用过,没装msdn,查不到用法
#6
wfpb2007-04-22 10:03

fp是什么?

#7
jqbbccn2007-04-22 10:30
fstream fp;
test1 t4;
fp.open("stu.dat",ios::in|ios::out|ios::cur|ios::binary);
do
{
cout<<"请输入要查找的学生信息:1.按学号查找2.按姓名查找3.返回"<<endl;
cout<<"请选择:";
cin>>c;
switch(c)
{
case '1':{
cout<<"请输入查找的学号:";
cin>>newno;
while(fp.read((char *)&t4,sizeof(t4)))
{
if(t4.getno()==newno)
{
cout<<"已找到该纪录"<<endl;
cout<<"序号"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"住址"<<"\t"<<"电话"<<endl;
t4.disp();
/* int last=fp.tellg();
fp.seekg(-sizeof(t4),ios::cur);
int first=fp.tellg();
for(int j=first;j<last;j++)
{
fp.put(' ');
}
fp.write((char *)&t4,sizeof(t4)); */
fp.close();
cout<<"删除成功!"<<endl;
system("pause");
return;
}
}
break;
}
case 2:...
...
...
#8
yuyunliuhen2007-04-22 12:07
以下是引用jqbbccn在2007-4-22 9:56:31的发言:
不会啊。。大大写一下代码吧,put和tellg都没用过,没装msdn,查不到用法

可以在线查http://msdn2.microsoft.com/zh-cn/default.aspx

#9
jqbbccn2007-04-22 13:57
哪位会的,讲解一下吧
http://msdn2.microsoft.com/zh-cn/default.aspx讲的很模糊,不实用
1