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

要求:
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;
}