您的位置:首页 > 编程语言

企业管理程序数据删除代码

2013-06-16 22:34 351 查看
之前在那个程序中有输入,有排序,有统计,但是我们要删除其中的一条记录,如何删除呢?今天刚写的代码,包含了注释,自己看看吧~
while(chose==3)
{
int tempcount=0;
ifstream infile("data.txt"); //绑定文件
string arr[1000];
string del_str;
string _str;
infile>>_str;
if(_str.empty())
{
cout<<"无数据!程序即将退出!"<<endl;
break;
}
cout<<_str<<endl;//数据读入成功!
cout<<"请输入你要删除的职工号"<<endl;
cin>>del_str;
del_str+="&";
string::iterator p=_str.begin();
string::iterator first=p;  //记住当前p所指向的字符串(str的首字符)
string::iterator last=p;  //用于尾部的指针
int ix=0;
while(*p!=NULL)
{
string tempstr;  //临时str存放的是当前指向的属性,与del_str进行比较
arr[ix]=*p;//////////////////////////////////////////////////
++p;           //将数据存进数组
++ix;      ///////////////////////////////////////////////////
if(*p=='$')
{
++tempcount;
++p;
for(int i=1;i<ix;i++)
{
arr[0]+=arr[i];
}
tempstr=arr[0];
cout<<tempstr<<endl;
if(tempstr==del_str)//如果当前的临时变量等于需要删除的变量
{
tempcount=1;                                        //每次找到匹配头的时候就将计数器重新置为1  因为找到了职工号,所以$已经有了1个,所以置为1而不是0
while(*p!='$'||tempcount!=6)                          //只要我们的$符号不为6,或者我们的*p还不为$,我们就继续执行循环体中的语句。
{
++p;                              //一上来我们就要把指针p加一,这样我们就能够计算$符号的个数,来决定我们这个职工的所有属性到底指完了没。(☆_☆)/~~
if(*p=='$')
{
++tempcount;
}
}
last=p;                       //最后,我们将last指针变为P当前所指的数据,这样我们就完成了first和last指针的正确数据指向!
p=_str.erase(first,last+1);//调用string类型的函数来删除两个指针中间的值,+1是为了删除最后一个$。↖(^ω^)↗
}
ix=0;
first=p;                                      //在这里我们将first的指针指向P,否则会产生指针永远指向头的情况,会造成只能顺序删除而不能随机删除的情况,
}                                                 //这个情况debug了我一个小时,把first指针给忘了……细心很重要啊!(ー_ー)!!

}
ofstream("data.txt").close();        //清空原数据
ofile.open("data.txt",ofstream::out | ofstream::app);  //重新打开文件
ofile<<_str;   //将_str中的内容全部写入文件,这样做效率太低,不过我暂时没什么好办法,希望大神能给出更完美的算法,谢谢!
chose=0;                        //给予跳出循环的条件,完成~!`(*∩_∩*)′
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐