通讯录管理程序
问题2:通讯录管理程序。通讯录是由通讯录条目组成的。通讯录总条目数。通讯录中现有多少条。可以输入通讯录、可以输出通讯录、可以查找、修改。其中的通讯录条目可以是一般条目,也可以是朋友条目。
要求:
1.输入通讯录
2.输出通讯录
3.查找姓名
4.修改(输入姓名,修改其电话)
0.退出
技术要点:
(1)指针数组。数组中的每一个元素是一个指针,可以指向一般条目的对象,也可以指向朋友条目的对象。
(2)多态的使用:
多态使用的条件,参见课件。
//以下是实验要求
1.输出通讯录时,根据据条目的实际类型(一般或是朋友)输出条目内容。提示:使用多态。
2.在输入通讯录时,根据据用户的要求创建通迅目的管理条目数。
3.(选做)写一个成员函数,分开显示朋友条目与一般条目。提示:使用RTTI技术。
Comms.h:
#ifndef COMMS_H_INCLUDED
#define COMMS_H_INCLUDED
#include<iostream>
#include<string>
using namespace std;
class CommEntry
{
public:
CommEntry();
~CommEntry();
virtual void input();
virtual void output();
void setName(string nm);
void setTel(string t);
string getName();
string getTel();
protected:
int telcount;
string name;
string tel;
string telType;
};
class FriendEntry:public CommEntry
{
public:
virtual void input();
virtual void output();
void setEmail(string a);
string getEmail();
private:
string email;
};
class Comms
{
public:
Comms(int up=200);
~Comms();
void inputAll();
void outputAll();
int Find(string nm);
void modify(string nm,string t);
private:
CommEntry **pCes;
int maxCount;//最多管理的通讯录条目个数
int Count;//已经存在的通讯录条目个数
};
#endif // COMMS_H_INCLUDED
Comms.cpp:
#include<iostream>
#include<string>
#include "Comms.h"
#include "CommEntry.cpp"
Comms::Comms(int up)
{
maxCount = up;
pCes = new CommEntry*[maxCount];
Count = 0;
}
//内存的回收
Comms::~Comms()
{
for(int i=0; i<=Count; i++)
{
delete pCes[i];
}
delete []pCes;
}
void Comms:: inputAll()
{
int iCount,iType;
cout<<"请输入要输入的条数:";
cin>>iCount;
while(iCount>maxCount)
{
cout<<"对不起,通讯录超出范围!\n请重新输入!"<<endl;
cout<<"请输入要输入的条数:";
cin>>iCount;
}
Count = iCount;
for (int i=0; i<Count; i++)
{
cout<<"============================"<<endl;
cout<<" 1.CommEntry"<<endl;
cout<<" 2.FriendEntry"<<endl;
cout<<"============================"<<endl;
cout<<"请输入条目的实际类型(1 or 2):"<<endl;
cin>>iType;
if(iType==1)
{
pCes[i]=new CommEntry;
}
else if(iType==2)
{
pCes[i]=new FriendEntry;
}
(pCes[i])->input();
}
}
void Comms:: outputAll()
{
for (int i=0; i<Count; i++)
{
(pCes[i])->output();
}
}
int Comms::Find(string nm)
{
int i;
for (i=0; i<Count; i++)
{
//cout<<(pCe[i]).getName()<<endl;
if ((pCes[i])->getName()==nm)
{
break;
}
}
if(i>=Count)
cout<<"查找失败!"<<endl;
else
{
cout<<"查找成功!"<<endl;
pCes[i]->output();
}
return i;
}
void Comms::modify(string nm,string t)
{
int i;
cout<<"输入要修改的姓名:"<<endl;
cin>>nm;
i=Find(nm);
if(i>=Count)
{
cout<<"修改失败!"<<endl;
}
else
{
(pCes[i])->setTel(t);
cout<<"修改成功!"<<endl;
}
}
CommEntry.cpp:
#include<iostream>
#include<string>
#include"Comms.h"
using namespace std;
CommEntry::CommEntry()//构造函数
{
}
CommEntry::~CommEntry()//析构函数
{
}
void CommEntry::input()
{
cout << "姓名:" << endl;
cin >> name;
cout <<"电话类型:"<<endl;
cin >> telType;
cout << "电话:" << endl;
cin >> tel;
}
void CommEntry::output()
{
cout << "姓名" << "\t\t"<<"电话类型"<<"\t" << "电话" << endl;
cout << name << "\t\t" <<telType<<"\t\t"<< tel << endl;
}
void CommEntry::setName(string nm)
{
cout << "将名字改为:" << endl;
cin >> nm;
name = nm;
}
void CommEntry::setTel(string t)
{
cout << "将电话改为:" << endl;
cin >> t;
tel = t;
}
string CommEntry::getName()
{
return name;
}
string CommEntry::getTel()
{
return tel;
}
void FriendEntry::setEmail(string a)
{
cout << "将地址改为:" << endl;
cin >> a;
email=a;
}
string FriendEntry::getEmail()
{
return email;
}
void FriendEntry::input()
{
cout << "姓名:" << endl;
cin >> name;
cout << "电话:" << endl;
cin >> tel;
cout << "邮箱:" << endl;
cin >> email;
}
void FriendEntry::output()
{
cout << "姓名" << "\t\t" << "电话" <<"\t\t"<<"邮箱"<< endl;
cout << name << "\t\t" << tel <<"\t"<<email<< endl;
}
main.cpp:
#include <iostream>
#include<string>
#include"Comms.h"
#include"Comms.cpp"
using namespace std;
int menu()
{
int i;
cout << endl;
cout << "*******************************************" << endl;
cout << " 1.输入通讯录" << endl;
cout << " 2.输出通讯录" << endl;
cout << " 3.查找姓名" << endl;
cout << " 4.修改(输入姓名,修改电话)" << endl;
cout << " 0.退出" << endl;
cout << "*******************************************" << endl;
cout << "请选择(0-4):";
while(1)
{
cin >> i;
if(i >= 0 && i <= 4)
break;
else
{
cout << "该选项不在目录中,请重新输入!" << endl;
continue;
}
}
return i;
}
int main()
{
int t = 1;
Comms p;
string nm,tl;
while(t != 0)
{
t = menu();
switch(t)
{
case 1:
p.inputAll();
break;
case 2:
p.outputAll();
break;
case 3:
cout<<"输入要查找的姓名:"<<endl;
cin>>nm;
p.Find(nm);
break;
case 4:
p.modify(nm,tl);
break;
case 0:
break;
}
}
return 0;
}