打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
电话本,可添加,删除,查找

 

12、            电话本

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

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

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

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

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

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

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

 

#include<iostream>

#include<fstream>

#include<stdio.h>

#include<stdlib.h>

 

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<<"请输入姓名:"<<endl;

    cin>>NAME;

       cout<<endl<<"请输入其电话号码:"<<endl;

    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<<endl<<"请输入要删除信息的联系人名字:"<<endl;

    cin>>NAME;

       currentPtr=HeadPtr;

       if(currentPtr==NULL)

       {

              cout<<endl<<"当前电话本为空,不能执行删除操作!"<<endl;

       }

       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<<endl<<"请输入要查找信息的联系人名字:"<<endl;

       cin>>NAME;

    previousPtr=NULL;

       currentPtr=HeadPtr;

       if(currentPtr==NULL)

       {

              cout<<endl<<"当前电话本为空,不能查找!"<<endl;

       }

       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<<endl<<"要找的电话号码为:";

                            cout<<(currentPtr->num);

                            cout<<endl;

                            j++;

                     }

                     previousPtr=currentPtr;

                     currentPtr=currentPtr->nextPtr;

              }

              if(j==0)

              {

                     cout<<endl<<"没有要找的联系人信息!"<<endl;

              }

       }

}

 

void operate::print()

{

       ListPtr currentPtr;     

       currentPtr=HeadPtr; 

       if(currentPtr==NULL)

       {

              cout<<endl<<"当前电话本为空,没有信息!"<<endl;

       }

       else

       {

              cout<<endl<<"当前电话本信息如下:"<<endl;

              while(currentPtr!=NULL)

              {

                     cout<<(currentPtr->name);

                     cout<<": ";

                     cout<<(currentPtr->num);

                     cout<<endl;

                     currentPtr=currentPtr->nextPtr;

              }

       }

}

 

void operate::outfile()

{

     ListPtr previousPtr=NULL,currentPtr=NULL;

     ofstream outf;

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

     if(outf.fail())

     {

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

         return;

     }

     currentPtr=HeadPtr;

     while(currentPtr!=NULL)

     {

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

         previousPtr=currentPtr;

         currentPtr=currentPtr->nextPtr;

     }

     outf.close();

}

    

void operate::infile()

{

     ListPtr previousPtr=NULL,currentPtr=NULL;

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

       if(inf.fail())

      {

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

           return;

       }

       if(inf.eof())

       {

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

           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-》删除;"<<endl;

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

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

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

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

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

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

       cin>>x; 

       Phion.setoperate(M); 

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

       {

              Phion.setoperate(x);

              Phion.select();

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

              cin>>x;

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

              {

                     goto PRT2;

              }

       }

PRT2:

    Phion.outfile();

       system("pause");

       return 0;

}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
比较sizeof()与strlen()
178 f0602
C 内存管理详解
【C++】用C++编写最简单的计算器简单完整版
常用矩阵计算C语言代码
编程论坛-平衡二叉树[原创]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服