读书人

非常紧急非常重要的有关问题(100分啊)

发布时间: 2012-06-18 13:23:36 作者: rapoo

非常紧急非常重要的问题(100分啊)谢谢了...(关于C++文件删除其中一行,并保存,及用指针处理双向链表..等等问题)
问题在程序右边的注释处已经写清楚了... 请各位高手花点时间,修改修改,应该几分钟就改好了...这个作业小弟我今天下午就要交了,谢谢了.

C/C++ code
#include <iostream>        #include <string>#include <iomanip>#include <fstream>using namespace std;    //使用标准命名空间stdclass book                {public:                        book();                    char inter_face();    //首界面    void add_person();    //添加联系人    void del_person();    //删除联系人    void show_all();    //显示所有联系人    void alter();        //修改信息    void select();        //查询联系人    void save_new();    //保存新增加的联系人private:                    string name;        //姓名    string address;        //地址    string number;        //电话号码    string post;        //邮编    string qq;            //QQ号};struct record            //定义一个链表节点结构{    book object;        //一个结构体record里有个类的对象,每个节点饱含一个人的信息.    record *prior;        //指向前躯节点    record *next;        //指向后继节点};book::book()            //定义构造函数{    name="\0";    address="\0";    number="\0";    post="\0";    qq="\0";}char book::inter_face()    //实现首界面的函数{    system("cls");    cout<<endl;    cout<<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl        <<"\t\t※                                                ※"<<endl        <<"\t\t※             欢迎使用小小通讯录                 ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t※      1. 添加新联系人.      4. 修改信息.        ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t※      2. 删除联系人.        5. 查询联系人.      ※"<<endl        <<"\t\t※                                                ※"<<endl        <<"\t\t※      3. 显示所有联系人.    6. 关闭通讯录.      ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl<<endl        <<"\t\t选择:" ;    char choose;    cin>>choose;    fflush(stdin);            return choose;}void book::add_person()    //定义添加联系人函数{    cout<<endl<<"根据下面提示输入新联系人信息"<<endl;    cout<<"姓名: ";    cin>>name;            //输入姓名    fflush(stdin);        //清空输入缓冲区,为了处理缓冲区残留的回车什么的,经常需要清空输入缓冲区    cout<<"电话: ";    cin>>number;        //输入电话号码    fflush(stdin);    cout<<"QQ: ";    cin>>qq;            //输入QQ号码    fflush(stdin);    cout<<"邮编: ";    cin>>post;            //输入邮编    fflush(stdin);    cout<<"地址: ";    cin>>address;        //输入地址    fflush(stdin);    save_new();            //调用保存输入信息函数    cout<<endl<<"新联系人信息已经保存好!!!"<<endl<<endl;    system("pause");    //屏幕暂停}void book::save_new()                                        //保存新添加的联系人函数{    ofstream outData("pbook.txt", ios::app);                //将输入信息输出到磁盘文件pbook.txt中.    if(!outData)                                            //检测文件打开是否成功打开    {        cout<<endl<<"对不起!!!打开文件失败!!!"<<endl<<endl;        system("pause");        return;    }    outData<<setiosflags(ios::left)<<setw(17)<<name<<" "    //将输入信息写入pbook.txt文件中        <<setw(16)<<number<<" "<<setw(18)<<qq<<" "        <<setw(14)<<post<<" "<<setw(20)<<address<<endl;    outData.close();                                        //关闭pbook.txt文件}void book::del_person()                            //定义删除联系人函数{    //?????????????    //*********************************************//    //    //这里就是问题啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!请看下面...谢谢.在alter()函数中也有问题...谢谢了...    //    //    //    // 下面这段被注释的代码实在是搞不懂啊,?????     //想实现的功能是输入要删除的姓名或电话号码,    //并将与此相关人的全部信息从pbook.txt文件中删除,之后文件中就剩下未被删除的人的信息.这该怎么实现啊?????     /*    ifstream inData("pbook.txt", ios::in);        //打开文件pbook.txt,进行读操作    if(!inData);                                //判断文件是否打开,即判断文件指针是不是指向文件尾.    {        cout<<endl<<"对不起!!!找不到文件!!!"<<endl;        system("pause");        return;    }    string sign;                   cout<<endl<<"你要删除输入姓名或电话号:";    cin>>sign;       bool flag=true;                            //定义布尔型变量flag.      string str;                                //定义一个字符串变量,用来接受除与输入姓名或电话号码相同的行之外的其他信息    while(inData>>name>>number)//???从文件pbook.txt中依次读取与输入的name或number相同的信息.这里(inData>>name>>number)并不是很清楚???    {        //read line at time until end-of-file        getline(inData, str);                //???getline()应该是把上一行的name或者number中的信息送入字符串str中吧???            if((sign==name)||(sign==number))            {            cout<<endl<<"你想删除的联系人:"<<endl;            cout<<setiosflags(ios::left)<<setw(17)<<name<<" "<<number<<str<<endl;        //输出要删除的人的信息             flag=false;            break;        }        }      if(flag)    {        cout<<endl<<"对不起!!!联系人中没你找的人!!!"<<endl<<endl;    }    else    {        while(getline(inData,str))        {            cout<<setiosflags(ios::left)<<setw(17)<<name<<" "<<number<<str<<endl;        //输出要删除的人的信息                                 }               //outData.close();                                //关闭temp.txt文件        inData.close();                                    //关闭pbook.txt文件              ofstream out("pbook.txt", ios::out);        //ifstream in("temp.txt", ios::in);               if(!out);            //||!in)        {            cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;            system("pause");            return;        }        while(getline(in,str))        {            out<<str<<endl;        }               out.close();                        //关闭pbook.txt文件        //in.close();                            //关闭temp.txt文件        cout<<endl<<"这个人的信息已经从你的通迅录中删除!!!"<<endl<<endl;    }*/    system("pause");    }void book::show_all()                        //定义显示所有所有联系人信息函数{    ifstream inData("pbook.txt",ios::in);    //打开文件pbook.txt,并进行读操作    if (!inData)                            //判断文件是否打开,即判断文件指针是不是指向文件尾    {        cout<<endl<<"对不起!!!没有找到文件!!!"<<endl;        system("pause");        return;    }    bool flag=true;    string allpersons;                        //定义allpersons字符串,用来接收文件中的所有人的信息       while(getline(inData, allpersons))    {        if(flag)        {            cout<<"所有联系人信息如下:"<<endl;        }        cout<<allpersons<<endl;        flag=false;    }    if(flag)    {        cout<<endl<<"你的通迅录中没有联系人!!!"<<endl<<endl;    }    else    {        cout<<"所有联系人已经全部显示出来!!!"<<endl;    }    system("pause");} 



[解决办法]
帮顶
[解决办法]
我给你改好嘞
[解决办法]
C/C++ code
#include <iostream>                    //相关头文件#include <string>#include <iomanip>#include <fstream>#include <cstdlib>using namespace std;                //使用标准命名空间stdclass book                            //类book {public:                                //公有成员函数    book();                            //默认构造函数    char inter_face();                //首页    void add_person();                //添加联系人    void del_person();                //删除联系人    void show_all();                //显示所有联系人    void alter();                    //修改信息    void select();                    //查询联系人    void save_new();                //保存新增加的联系人private:                            //私有数据成员    string name;                    //姓名    string address;                    //地址    string number;                    //电话号码    string post;                    //邮编    string qq;                        //QQ号};struct record                        //*******这里不懂啊...尤其是与后面修改函数alter()的相结合的用指针来处理链表处,更不懂...{    book object;                    //????? 请高手解释这里是什么意思???以及与后面是如何的衔接..???    record *prior;                    //    record *next;                    //};book::book()                        //定义构造函数{    name="\0";    address="\0";    number="\0";    post="\0";    qq="\0";}char book::inter_face()                //实现首界面的函数{    system("cls");    cout<<endl;    cout<<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl        <<"\t\t※                                                ※"<<endl        <<"\t\t※             欢迎使用小小通讯录                 ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t※      1. 添加新联系人.      4. 修改信息.        ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t※      2. 删除联系人.        5. 查询联系人.      ※"<<endl        <<"\t\t※                                                ※"<<endl        <<"\t\t※      3. 显示所有联系人.    6. 关闭通讯录.      ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl<<endl        <<"\t\t选择:" ;    char choose;    cin>>choose;    fflush(stdin);                    //清空输入缓冲区    return choose;}void book::add_person()                //添加联系人{    cout<<endl<<"根据下面提示输入新联系人信息"<<endl;    cout<<"姓名: ";    cin>>name;                        //输入姓名    fflush(stdin);                    //清空输入缓冲区    cout<<"电话: ";    cin>>number;                    //输入电话号码    fflush(stdin);    cout<<"QQ: ";    cin>>qq;                        //输入QQ号码    fflush(stdin);    cout<<"邮编: ";    cin>>post;                        //输入邮编    fflush(stdin);    cout<<"地址: ";    cin>>address;                    //输入地址    fflush(stdin);    save_new();                        //调用保存输入信息函数    cout<<endl<<"新联系人信息已经保存好!!!"<<endl<<endl;    system("pause");}void book::del_person()                //删除联系人{    ofstream outData("temp.txt", ios::out);//这个删除的信息好像也有点问题啊...就是不太清楚?????    ifstream inData("pbook.txt", ios::in);//    if(!outData||!inData)            //判断    {        cout<<endl<<"对不起!!!找不到文件!!!"<<endl;        system("pause");        return;    }    string sign;                    //定义字符串    cout<<endl<<"你要删除输入姓名或电话号:";    cin>>sign;                        //输入要查找的相关信息    //这里好像要加句: fflush(stdin);但不知为什么???    string str1;                    //仿佛这个字符串未赋值就在下面的循环中使用,真是莫名其妙???    bool flag=true;                    //    string str;                        //这句又不知是什么意思??? 怎么跟while循环中的语句联系???    while(inData>>name>>number)        //    {        getline(inData, str);        //接收一个字符串        if((sign==name)||(sign==number))        {            cout<<endl<<"你想删除的联系人:"<<endl<<endl;            cout<<str1<<endl;        //str1没赋值为什么要输出?????            cout<<setiosflags(ios::left)<<setw(17)<<name<<" "<<number<<str<<endl;//这个number后面的str字符串不知会输出什么???不懂啊???            flag=false;            break;        }        outData<<setiosflags(ios::left)<<setw(17)<<name<<" "<<number<<str<<endl;//这里好像是多余的???    }    if(flag)    {        cout<<endl<<"对不起!!!联系人中没你找的人!!!"<<endl<<endl;    }    else    {        while(getline(inData, str))//??????        {            outData<<str<<endl;        }               outData.close();        inData.close();               ofstream out("pbook.txt", ios::out);//        ifstream in("temp.txt", ios::in);//               if(!out||!in)        {            cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;            system("pause");            return;        }        while(getline(in, str))        {            out<<str<<endl;        }               out.close();                //        in.close();                    //        cout<<endl<<"这个人的信息已经从你的通迅录中删除!!!"<<endl<<endl;    }       system("pause");    }void book::show_all()                //显示所有联系人{    ifstream inData("pbook.txt",ios::in);    if (!inData)    {        cout<<endl<<"对不起!!!没有找到文件!!!"<<endl;        system("pause");        return;    }    bool flag=true;    string record;                    //这里为什么要定义这个结构体...???????       while(getline(inData, record))    {        if(flag)        {            cout<<"所有联系人信息如下:"<<endl;        }        cout<<record<<endl;        flag=false;    }    if(flag)    {        cout<<endl<<"你的通迅录中没有联系人!!!"<<endl<<endl;    }    else    {        cout<<"所有联系人已经全部显示出来!!!"<<endl;    }    system("pause");} 


[解决办法]

C/C++ code
你试试,改了后我这运行一切正常,其实就是你的修改有问题!多了几行,删除应该没问题,至少我还没发现问题!有问题call我!
[解决办法]
C/C++ code
record *H=new record;        // 
record *p=H;//???
record *q=H;//???
bool flag=true;

while(inData>>p->object.name>>p->object.number>>p->object.qq//读一条记录,一个人的信息
>>p->object.post>>p->object.address)
{
p->next=new record;//???建立双向链表这小弟我不是很清楚...请给些详细解释..谢谢了...
p=p->next;//建立链表
p->prior=q;//???
q->next=p;//???
q=p;//???
}
p->next=NULL;//???
inData.close();//???
p=H;//????

这个有啥不清楚的??自己画画图啊,动手画画,就当你是计算机,自己画画这个过程!

我保管你画四五个,就很明白其中的意思了!!!!



[解决办法]
up楼主
up独行

顺便给楼主说说:写程序是三分写七分调啊...
[解决办法]
C/C++ code
void book::del_person()        //删除联系人 
{
ofstream outData("temp.txt", ios::out);//这个删除的信息好像也有点问题啊...就是不太清楚?????
ifstream inData("pbook.txt", ios::in);//
if(!outData||!inData) //判断
{
cout < <endl < <"对不起!!!找不到文件!!!" < <endl;
system("pause");
return;
}
string sign; //定义字符串
cout < <endl < <"你要删除输入姓名或电话号:";
cin>>sign; //输入要查找的相关信息
//这里好像要加句: fflush(stdin);但不知为什么???
string str1; //仿佛这个字符串未赋值就在下面的循环中使用,真是莫名其妙???
bool flag=true; //
string str; //这句又不知是什么意思??? 怎么跟while循环中的语句联系???
while(inData>>name>>number) //
{
getline(inData, str); //接收一个字符串
if((sign==name)||(sign==number))
{
cout < <endl < <"你想删除的联系人:" < <endl < <endl;
//cout < <str1 < <endl; //str1没赋值为什么要输出?????
cout < <setiosflags(ios::left) < <setw(17) < <name < <" " < <number < <str < <endl;//这个number后面的str字符串不知会输出什么???不懂啊???
flag=false;
break;
}
outData < <setiosflags(ios::left) < <setw(17) < <name < <" " < <number < <str < <endl;//这里好像是多余的???
}
if(flag)
{
cout < <endl < <"对不起!!!联系人中没你找的人!!!" < <endl < <endl;
}
else
{
while(getline(inData, str))//??????
{
outData < <str < <endl;
}
outData.close();
inData.close();
ofstream out("pbook.txt", ios::out);//
ifstream in("temp.txt", ios::in);//
if(!out||!in)
{


cout < <endl < <"对不起不能打开文件!!!" < <endl < <endl;
system("pause");
return;
}
while(getline(in, str))
{
out < <str < <endl;
}
out.close(); //
in.close(); //
cout < <endl < <"这个人的信息已经从你的通迅录中删除!!!" < <endl < <endl;
}
system("pause");
}

其实上面这么做是对的!!!


思路大概是首先将要删除的信息前面的信息流入一个临时文件中保存

然后将剩余的信息再流入这个临时文件,中间删除的那一个不流入!


while(inData>>name>>number) //
{
getline(inData, str); //接收一个字符串
if((sign==name)||(sign==number))
{
cout < <endl < <"你想删除的联系人:" < <endl < <endl;
//cout < <str1 < <endl; //str1没赋值为什么要输出?????
cout < <setiosflags(ios::left) < <setw(17) < <name < <" " < <number < <str < <endl;//这个number后面的str字符串不知会输出什么???不懂啊???
flag=false;
break;
}
outData < <setiosflags(ios::left) < <setw(17) < <name < <" " < <number < <str < <endl;//这里好像是多余的???
}

上面这个就是将要删除的信息前面的信息流入一个临时文件中保存,在break之前,都是将信息流入outData,看明白没??

如果是删除的那个人,那么break了,所以没将该条流入outData


while(getline(inData, str))//??????
{
outData < <str < <endl;
}

这个就是将剩余的信息流入文件outData,这样outData就是删除之后的文件!

最后一道工序就是将outData再次流回源文件!

思路还是可以的!

但是,有很多可以改进的地方,比如,文件io确实比较费时!

再次,就算用文件io,最后的流入也不必那么费事儿!

可以使用outData < <(inData.rdbuf());一行就ok了!!!



[解决办法]
C/C++ code
lz我贴上完整代码,然后将演示的测试过程给你贴出来!!你自己好好琢磨!!!代码::#include <iostream>                    //相关头文件#include <string>#include <iomanip>#include <fstream>#include <cstdlib>using namespace std;                //使用标准命名空间stdclass book                            //类book {public:                                //公有成员函数    book();                            //默认构造函数    char inter_face();                //首页    void add_person();                //添加联系人    void del_person();                //删除联系人    void show_all();                //显示所有联系人    void alter();                    //修改信息    void select();                    //查询联系人    void save_new();                //保存新增加的联系人private:                            //私有数据成员    string name;                    //姓名    string address;                    //地址    string number;                    //电话号码    string post;                    //邮编    string qq;                        //QQ号};struct record                        //*******这里不懂啊...尤其是与后面修改函数alter()的相结合的用指针来处理链表处,更不懂...{    book object;                    //????? 请高手解释这里是什么意思???以及与后面是如何的衔接..???    record *prior;                    //    record *next;                    //};book::book()                        //定义构造函数{    name="\0";    address="\0";    number="\0";    post="\0";    qq="\0";}char book::inter_face()                //实现首界面的函数{    system("cls");    cout<<endl;    cout<<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl        <<"\t\t※                                                ※"<<endl        <<"\t\t※             欢迎使用小小通讯录                 ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t※      1. 添加新联系人.      4. 修改信息.        ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t※      2. 删除联系人.        5. 查询联系人.      ※"<<endl        <<"\t\t※                                                ※"<<endl        <<"\t\t※      3. 显示所有联系人.    6. 关闭通讯录.      ※"<<endl         <<"\t\t※                                                ※"<<endl        <<"\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl<<endl        <<"\t\t选择:" ;    char choose;    cin>>choose;    fflush(stdin);                    //清空输入缓冲区    return choose;}void book::add_person()                //添加联系人{    cout<<endl<<"根据下面提示输入新联系人信息"<<endl;    cout<<"姓名: ";    cin>>name;                        //输入姓名    fflush(stdin);                    //清空输入缓冲区    cout<<"电话: ";    cin>>number;                    //输入电话号码    fflush(stdin);    cout<<"QQ: ";    cin>>qq;                        //输入QQ号码    fflush(stdin);    cout<<"邮编: ";    cin>>post;                        //输入邮编    fflush(stdin);    cout<<"地址: ";    cin>>address;                    //输入地址    fflush(stdin);    save_new();                        //调用保存输入信息函数    cout<<endl<<"新联系人信息已经保存好!!!"<<endl<<endl;    system("pause");}void book::del_person()                //删除联系人{    ofstream outData("temp.txt", ios::out);//这个删除的信息好像也有点问题啊...就是不太清楚?????    ifstream inData("pbook.txt", ios::in);//    if(!outData||!inData)            //判断    {        cout<<endl<<"对不起!!!找不到文件!!!"<<endl;        system("pause");        return;    }    string sign;                    //定义字符串    cout<<endl<<"你要删除输入姓名或电话号:";    cin>>sign;                        //输入要查找的相关信息    //这里好像要加句: fflush(stdin);但不知为什么???    string str1;                    //仿佛这个字符串未赋值就在下面的循环中使用,真是莫名其妙???    bool flag=true;                    //    string str;                        //这句又不知是什么意思??? 怎么跟while循环中的语句联系???    while(inData>>name>>number)        //    {        getline(inData, str);        //接收一个字符串        if((sign==name)||(sign==number))        {            cout<<endl<<"你想删除的联系人:"<<endl<<endl;            cout<<str1<<endl;        //str1没赋值为什么要输出?????            cout<<setiosflags(ios::left)<<setw(17)<<name<<" "<<number<<str<<endl;//这个number后面的str字符串不知会输出什么???不懂啊???            flag=false;            break;        }        outData<<setiosflags(ios::left)<<setw(17)<<name<<" "<<number<<str<<endl;//这里好像是多余的???    }    if(flag)    {        cout<<endl<<"对不起!!!联系人中没你找的人!!!"<<endl<<endl;    }    else    {        while(getline(inData, str))//??????        {            outData<<str<<endl;        }               outData.close();        inData.close();               ofstream out("pbook.txt", ios::out);//        ifstream in("temp.txt", ios::in);//               if(!out||!in)        {            cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;            system("pause");            return;        }        while(getline(in, str))        {            out<<str<<endl;        }               out.close();                //        in.close();                    //        cout<<endl<<"这个人的信息已经从你的通迅录中删除!!!"<<endl<<endl;    }       system("pause");    } 


[解决办法]

C/C++ code
void book::show_all()                //显示所有联系人{    ifstream inData("pbook.txt",ios::in);    if (!inData)    {        cout<<endl<<"对不起!!!没有找到文件!!!"<<endl;        system("pause");        return;    }    bool flag=true;    string record;                    //这里为什么要定义这个结构体...???????       while(getline(inData, record))    {        if(flag)        {            cout<<"所有联系人信息如下:"<<endl;        }        cout<<record<<endl;        flag=false;    }    if(flag)    {        cout<<endl<<"你的通迅录中没有联系人!!!"<<endl<<endl;    }    else    {        cout<<"所有联系人已经全部显示出来!!!"<<endl;    }    system("pause");} void book::alter()//修改信息: 这里通过输入姓名或者电话号码查找要修改的信息,但如果从已经存了多于两个人中查找,则会输出保存的全部信息,而且即使修改后,也不能保存,会丢失???{    ifstream inData("pbook.txt", ios::in);//        if(!inData)    {        cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;        system("pause");        return;    }        string sign;    cout<<endl<<"请输入你想要修改的联系人的姓名或电话号码:";    cin>>sign;    fflush(stdin);//清空输入缓冲区      // string str1;   // getline(inData, str1);//接收一个字符串    //getline(inData,sign)    record *H=new record;                //这里用指针来处理链表更不清楚????    record *p=H;    record *q=H;    bool flag=true;    //inData.seekg(0, ios::beg);    while(inData>>p->object.name>>p->object.number>>p->object.qq//???????????        >>p->object.post>>p->object.address)    {        p->next=new record;        p=p->next;//????????//        p->prior=q;        q->next=p;        q=p;    }    p->next=NULL;//    inData.close();        p=H;    while(p)    {        if((p->object.name==sign)||(p->object.number==sign))        {            if(flag)            {                cout<<endl<<"你想修改你联系人的信息如下: "<<endl<<endl;                //cout<<endl<<sign<<endl;                //cout<<endl<<str1<<endl;                cout<<setiosflags(ios::left)<<setw(17)                    <<p->object.name<<" "<<setw(16)<<p->object.number                    <<" "<<setw(18)<<p->object.qq                     <<" "<<setw(14)<<p->object.post                     <<" "<<setw(20)<<p->object.address <<endl;                flag=false;            }            cout<<endl<<"请根据下面提示修改信息 : "<<endl;            cout<<"姓名  :" ;            cin>>p->object.name;            fflush(stdin);            cout<<"电话号:";            cin>>p->object.number;            fflush(stdin);            cout<<"QQ    :";            cin>>p->object.qq;            fflush(stdin);            cout<<"邮编  :";            cin>>p->object.post;            fflush(stdin);            cout<<"地址  :";            cin>>p->object.address;            fflush(stdin);            break;        }                p=p->next;    }        if(flag)    {        cout<<endl<<"你的通迅录中没有你找的联系人!!!"<<endl<<endl;        system("pause");        return;    }    else    {        ofstream out("pbook.txt",ios::out);                if (!out)//        {            cout <<endl <<"对不起!!!不能打开文件!!!!" <<endl;            system("pause");            return;        }               //out<<str1<<endl;        p=H;        //p=H->next;        while(p)        {            out<<setiosflags(ios::left)<<setw(17)<<p->object.name                 <<" "<<setw(16)<<p->object.number                 <<" "<<setw(18)<<p->object.qq                <<" "<<setw(14)<<p->object.post                <<" "<<setw(20)<<p->object.address<<endl;            p=p->next;        }                out.close();        cout<<endl<<"信息已经修改完成!!!"<<endl<<endl;        system("pause");    }}void book::select()//查询联系人{    ifstream inData("pbook.txt",ios::in);        if(!inData)    {        cout <<endl <<"对不起!!!!文件找不到!!!!" <<endl;        system("pause");        return;    }    string sign;    cout<<endl<<"输入你想查找的联系人的姓名或电话号码: ";    cin>>sign;    fflush(stdin);        string str1;// 这里与上面好像有些相同之处,但不知是什么意思???    bool flag=true;        string str;//好像是多余???    while (inData>>name>>number)    {        getline(inData, str);//                if((name==sign)||(number==sign))        {            cout<<endl<<"你要查找的联系人是: "<<endl<<endl;            cout<<str1<<endl;//???            cout<<setiosflags(ios::left)<<setw(17)<<name<<number<<str<<endl;//????            flag=false;            break;        }    }    system("pause");}void book::save_new()//保存新添加的联系人?{    ofstream outData("pbook.txt", ios::app);//    if(!outData)    {        cout<<endl<<"对不起!!!打开文件失败!!!"<<endl<<endl;        system("pause");        return;    }    outData<<setiosflags(ios::left)<<setw(17)<<name        <<" "<<setw(16)<<number<<" "        <<setw(18)<<qq<<" "        <<setw(14)<<post<<" "        <<setw(20)<<address<<endl;    outData.close();}int main(){    char choose;    book obj;//创建对象        while(choose=obj.inter_face())    {        switch (choose)        {        case '1':            obj.add_person();////添加联系人            break;        case '2':            obj.del_person();////删除联系人            break;        case '3':            obj.show_all();////显示所有联系人            break;        case '4':            obj.alter();////修改信息            break;        case '5':            obj.select();////查询联系人            break;        case '6':            cout <<endl <<"谢谢使用!!!"<<endl <<endl;            exit(0);            break;        default:            break;        }    }    return 0;} 

读书人网 >C++

热点推荐