面向对象程序设计实验8


题目概要

通讯录是由通讯录条目组成的;通讯录总条目数,通讯录中现有多少条.可以输入通讯录、可以输出通讯录、可以查找、修改.其中的通讯录条目可以是一般条目,也可以是朋友条目.

要求:

1.输入通讯录
2.输出通讯录
3.查找姓名
4.修改(输入姓名,修改其电话)
0.退出

题目要求

(1). 指针数组.数组中的每一个元素是一个指针,可以指向一般条目的对象,也可以指向朋友条目的对象.

指针数组的声明:
CommEntry ** pCes;
申请内存:
    pCes = new CommEntry * [maxCount];
回收内存:
   for(int i=0; i<=count;i++){             
      delete pCes[i];
   }
   delete []pCes;
元素的使用:
    if (iType==1)
    {
        pCes[i] = new CommEntry;           
    } 
    else if(iType ==2)
    {
        pCes[i] = new FriendEntry;           
    }

   for (int i=0;i<count;i++)
   {  //注意,下一行是多态函数的调用
      (pCes[i])->output();
   }

(2). 多态的使用

1.输出通讯录时,根据据条目的实际类型(一般或是朋友)输出条目内容.提示:使用多态.
2.在输入通讯录时,根据据用户的要求创建通迅目的管理条目数.
3.(选做)写一个成员函数,分开显示朋友条目与一般条目.提示:使用RTTI技术.

代码

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

class CommEntry{

public:
    int displaymenu();
    virtual void inputcommEntry();
    virtual void outputcommEntry();
    void update_name(string change_name);
    void update_tel(string change_tel);
    string get_name();
    string get_tel();

private:
    string name;
    string tel;
};


class FriendEntry:public CommEntry{

public:
    int displaymenu();
    void inputcommEntry();
    void outputcommEntry();
    void update_addr(string change_addr);    
    string get_addr();

private:
    string addr;
};

int CommEntry::displaymenu()
{
    int op;
    cout << "-------------功能菜单-------------" << endl;
    cout << "         1.输入通讯录/朋友条目"  << endl;
    cout << "         2.输出通讯录/朋友条目"  << endl;
    cout << "         3.查询通讯录/朋友条目姓名"  << endl;
    cout << "         4.修改通讯录/朋友条目电话"  << endl;
    cout << "         0.退出系统"  << endl;
    cout << "----------------------------------" << endl;
    cout << "请输入你要选择的功能编号(0-4):  ";
    while(cin >> op)
    {
        if(op>=0&&op<=4)
            break;
        else
            cout << "输入出错,请重新输入你要选择的功能编号(0,4):  ";
    }
    return op;
}


void CommEntry::inputcommEntry()
{
    string temp_name,temp_tel;
    cout << "请输入该通讯录条目的名字:  " ;
    cin >> temp_name;
    cout << "请输入该通讯录条目的电话:  " ;
    cin >> temp_tel;
    update_name(temp_name);
    update_tel(temp_tel);
}

void FriendEntry::inputcommEntry()
{
    string temp_name,temp_tel,temp_addr;
    cout << "请输入该朋友条目的名字:  " ;
    cin >> temp_name;
    cout << "请输入该朋友条目的电话:  " ;
    cin >> temp_tel;
    cout << "请输入该朋友条目的地址:  " ;
    cin >> temp_addr;
    update_name(temp_name);
    update_tel(temp_tel);
    update_addr(temp_addr);
}


string CommEntry::get_name()
{
    return name;
}
string CommEntry::get_tel()
{
    return tel;
}

string FriendEntry::get_addr()
{
    return addr;
}

void CommEntry::outputcommEntry()
{
    string temp_name=get_name();
    cout << "该通讯录条目的名字:  " << temp_name << endl;
    string temp_tel=get_tel();
    cout << "该通讯录条目的电话:  " << temp_tel << endl;
}

void FriendEntry::outputcommEntry()
{
    string temp_name=get_name();
    cout << "该朋友条目的名字:  " << temp_name << endl;
    string temp_tel=get_tel();
    cout << "该朋友条目的电话:  " << temp_tel << endl;
    string temp_addr=get_addr();
    cout << "该朋友条目的地址:  " << temp_addr << endl;
}

void CommEntry::update_name(string change_name)
{
    name=change_name;
}

void CommEntry::update_tel(string change_tel)
{
    tel=change_tel;
}

void FriendEntry::update_addr(string change_addr)
{
    addr=change_addr;
}


int main()
{
    int num,type;
    cout << "请输入通讯录条目的管理条目个数和通讯录的类型(1为普通通讯录,2为朋友通讯录): " ;
    cin >> num >> type;
    CommEntry ** data;
    data=new CommEntry *[num];
    for(int i=0;i<num;i++)
    {
        if(type==1)
            data[i]=new CommEntry;
        else if(type==2)
            data[i]=new FriendEntry;
    }
    while(1)
    {
        int op=data[1]->displaymenu();
        if(op==1)
        {
            for(int i=0;i<num;i++)
            {
                cout << "第" << i << "个人的信息:" << endl;
                data[i]->inputcommEntry();
            }
        }
        else if(op==2)
        {
            for(int i=0;i<num;i++)
            {
                cout << "第" << i << "个人的信息:" << endl;
                data[i]->outputcommEntry();
            }
        }
        else if(op==3)
        {
            string temp_name;
            cout << "请输入要查找的通讯录/朋友条目的名字:  ";
            cin >> temp_name;
            int flag=0;
            for(int i=0;i<num;i++)
            {
                if(data[i]->get_name()==temp_name)
                {
                    cout << "查找成功" << endl;
                    data[i]->outputcommEntry();
                    flag=1;
                    break;
                }
            }
            if(flag==0)
                cout << "查找失败" << endl;
        }
        else if(op==4)
        {
            string temp_tel,temp_name;
            cout << "请输入要修改的通讯录/朋友条目的姓名和即将修改的电话:  ";
            cin >> temp_name >> temp_tel;
            int flag=0;
            for(int i=0;i<num;i++)
            {
                if(data[i]->get_name()==temp_name)
                {
                    cout << "修改电话成功" << endl;
                    data[i]->update_tel(temp_tel);
                    data[i]->outputcommEntry();
                    flag=1;
                    break;
                }
            }
            if(flag==0)
                cout << "修改电话失败" << endl;
        }
        else if(op==0)
            break;
    }

    for(int i=0;i<num;i++)
        delete data[i];
    delete []data;
    return 0;
}

文章作者: 保底不歪抽早柚
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 保底不歪抽早柚 !
评论
  目录