执行力培训后心得:电话本,可添加,删除,查找

来源:百度文库 编辑:中财网 时间:2024/05/06 06:23:39

 

12、            电话本

       编写C++程序完成以下功能:

(1)    实现简单电话本功能,用姓名来搜索电话号码;

(2)    用户输入姓名,程序查找并输出结果;

(3)    用户可以通过输入,添加姓名和电话号码;

(4)    用户可以删除姓名和电话号码;

(5)    电话本可以保存在指定文件中;

(6)    电话可被从指定文件中读入到内存。

 

#include

#include

#include

#include

 

using namespace std;

 

struct imformationlist

{

       char name[30];

       char num[20];

       struct imformationlist* nextPtr;

};

typedef struct imformationlist List;

typedef struct imformationlist* ListPtr;

 

 

class operate

{

private:

       char order;

       ListPtr HeadPtr;

 

public:

       operate(char a='2',ListPtr N0=NULL) {order=a;HeadPtr=N0;}

       ~operate() {}

       void setoperate(char b='2') {order=b;} 

       void setoperate(ListPtr N=NULL) {HeadPtr=N;}

       void seek();

    void deleteit();

    void input();

       void print();

       void select();

       void outfile();

       void infile();

};

 

void operate::select()

{

       switch(order)

       {

          case '0':

                     deleteit();

                     break;

              case '1':

                     seek();

                     break;

              case '2':

                     input();

                     break;

              case '3':

                     print();

                     break;

              case '4':

            infile();

            break;

              default:

                     break;

       }

}

 

void operate::input()

{

       ListPtr newPtr=NULL,previousPtr=NULL,currentPtr=NULL;

    char NAME[30];

    char NUM[20];

       int i=0,j=0;

       cout<<"请输入姓名:"<

    cin>>NAME;

       cout<

    cin>>NUM;

//     newPtr=new List;

       newPtr=(ListPtr)malloc(sizeof(List));

       if(newPtr!=NULL)

       {           

              while(NAME[i]!='\0')

              {

                (newPtr->name)[i]=NAME[i];

                i++;

              }

              (newPtr->name)[i]='\0';

              while(NUM[j]!='\0')

              {

                (newPtr->num)[j]=NUM[j];

                j++;

              }    

              (newPtr->num)[j]='\0';

              previousPtr=NULL;

              currentPtr=HeadPtr;

             

              if(currentPtr==NULL)

              {

                     HeadPtr=newPtr;

                     HeadPtr->nextPtr=NULL;

              }

              else

              {

                     while(currentPtr!=NULL)

                     {

                            previousPtr=currentPtr;

                            currentPtr=currentPtr->nextPtr;

                     }

                     previousPtr->nextPtr=newPtr;

                     newPtr->nextPtr=NULL;

              }

       }

}

 

void operate::deleteit()

{

       ListPtr currentPtr=NULL,previousPtr=NULL,holdPtr=NULL;

       char NAME[30];

       int i=0,same=0;

 

       cout<

    cin>>NAME;

       currentPtr=HeadPtr;

       if(currentPtr==NULL)

       {

              cout<

       }

       else

       {

              while(currentPtr!=NULL)

              {

                     i=0;

                     while(NAME[i]!='\0'&&(currentPtr->name)[i]!='\0')

                     {

                            if(NAME[i]!=(currentPtr->name)[i])

                            {

                                   same=0;

                                   goto PRT;

                            }

                            same=1;

                            i++;

                     }

                     if(!(NAME[i]=='\0'&&(currentPtr->name)[i]=='\0'))

                     {

                            same=0;

                     }

PRT:

                  if(same==1)

                     {

                            if(HeadPtr==currentPtr)

                            {

                                   previousPtr=HeadPtr;

                    HeadPtr=HeadPtr->nextPtr;

                            }

                           

                            previousPtr->nextPtr=currentPtr->nextPtr;

                            //currentPtr->nextPtr=NULL;

                            free(currentPtr);

                            currentPtr=previousPtr->nextPtr;

                     }

                     else

                     {

                            previousPtr=currentPtr;

                            currentPtr=currentPtr->nextPtr;

                     }

              }    

       }

}

 

void operate::seek()

{

       ListPtr previousPtr,currentPtr;

       char NAME[30];      

       int i=0,same=0,j=0;

 

       cout<

       cin>>NAME;

    previousPtr=NULL;

       currentPtr=HeadPtr;

       if(currentPtr==NULL)

       {

              cout<

       }

       else

       {

              while(currentPtr!=NULL)

              {

                     i=0;

                     while(NAME[i]!='\0'&&(currentPtr->name)[i]!='\0')

                     {

                            if(NAME[i]!=(currentPtr->name)[i])

                            {

                                   same=0;

                                   goto PRT1;

                            }

                            same=1;

                            i++;

                     }

                     if(!(NAME[i]=='\0'&&(currentPtr->name)[i]=='\0'))

                     {

                            same=0;

                     }

PRT1:

                     if(same==1)

                     {

                            cout<

                            cout<<(currentPtr->num);

                            cout<

                            j++;

                     }

                     previousPtr=currentPtr;

                     currentPtr=currentPtr->nextPtr;

              }

              if(j==0)

              {

                     cout<

              }

       }

}

 

void operate::print()

{

       ListPtr currentPtr;     

       currentPtr=HeadPtr; 

       if(currentPtr==NULL)

       {

              cout<

       }

       else

       {

              cout<

              while(currentPtr!=NULL)

              {

                     cout<<(currentPtr->name);

                     cout<<": ";

                     cout<<(currentPtr->num);

                     cout<

                     currentPtr=currentPtr->nextPtr;

              }

       }

}

 

void operate::outfile()

{

     ListPtr previousPtr=NULL,currentPtr=NULL;

     ofstream outf;

     outf.open("file",ios::out);

     if(outf.fail())

     {

         cout<<"文件打开失败!"<

         return;

     }

     currentPtr=HeadPtr;

     while(currentPtr!=NULL)

     {

         outf<<(currentPtr->name)<<" "<<(currentPtr->num)<

         previousPtr=currentPtr;

         currentPtr=currentPtr->nextPtr;

     }

     outf.close();

}

    

void operate::infile()

{

     ListPtr previousPtr=NULL,currentPtr=NULL;

     ifstream inf("file",ios::in);

       if(inf.fail())

      {

           cout<<"文件打开失败!"<

           return;

       }

       if(inf.eof())

       {

           cout<<"文件file为空文件!"<

           return;

       }

       else

      {

         currentPtr=(ListPtr)malloc(sizeof(List));

         inf.getline(currentPtr->name,30,' ');

         inf.getline(currentPtr->num,20); 

         HeadPtr=currentPtr;

         while(!inf.eof())

         {          

             previousPtr=currentPtr;           

             currentPtr->nextPtr=(ListPtr)malloc(sizeof(List));

             currentPtr=currentPtr->nextPtr;

             inf.getline(currentPtr->name,30,' ');

             inf.getline(currentPtr->num,20);                   

         }

         currentPtr->nextPtr=NULL;

         }

     inf.close();

}

 

int main()

{

       char x;

       ListPtr M=NULL;

       operate Phion;

 

       cout<<"请输入指令进行操作:0-》删除;"<

       cout<<"                    1-》查找;"<

       cout<<"                    2-》添加;"<

       cout<<"                    3-》查看电话本;"<

       cout<<"                    4-》读取文件file中的数据;"<

    cout<<"                    其他-》退出;"<

       cout<<"请输入指令:"<

       cin>>x; 

       Phion.setoperate(M); 

       while(x=='0'||x=='1'||x=='2'||x=='3'||x=='4')

       {

              Phion.setoperate(x);

              Phion.select();

              cout<

              cin>>x;

              if(x!='0'&&x!='1'&&x!='2'&&x!='3'&&x!='4')

              {

                     goto PRT2;

              }

       }

PRT2:

    Phion.outfile();

       system("pause");

       return 0;

}