C++课程设计通讯录管理系统(含课程设计报告)
本代码就一个文件,对于初学者来说比较适用,不含STL等知识
`#include
#include
#include
#include
using namespace std;
//创建手机和手机卡文本文件时,根据具体情境创建,如创建在D盘中“d://Phone.txt",ios::in
//手机联系人类*
class Phone
{
protected:
string name,telePhone;
public:
Phone(string n1,string t1):name(n1),telePhone(t1) {} //带默认值的构造函数
Phone() {} //无参 构造函数
string Phone_Get_name()
{
return name;
}
string Phone_Get_telePhone()
{
return telePhone;
}
void Phone_set(string n1,string t1)//赋 值
{
name=n1;
telePhone=t1;
}
void Phone_modify()//修改
{
int i;
string n,t;
cout<<"请选择要修改的内容: 姓名:1 电话号码:2 姓名和电话号码:3"<<endl;
cin>>i;
if(i==1)
{
cout<<"请您输入修改后的姓名:"<<endl;
cin>>n;
name=n;
cout<<"修改已完成!!!"<<endl;
}
else if(i==2)
{
cout<<"请您输入修改后的电话号码:"<<endl;
cin>>t;
telePhone=t;
cout<<"修改已完成!!!"<<endl;
}
else if(i==3)
{
cout<<"请您输入修改后的姓名和电话号码:"<<endl;
cout<<"姓名:";
cin>>n;
name=n;
cout<<endl<<"电话号码:";
cin>>t;
telePhone=t;
cout<<"修改已完成!!!"<<endl;
}
else
{
cout<<"无效指令!"<<endl;
return;
}
}
/*以函数为重载函数*/
friend istream& operator>>(istream& in,Phone& a)
{
in>>a.name>>a.telePhone;
return in;
}
friend ostream& operator<<(ostream& out,Phone& a)
{
out<<"姓名: "<<a.name<<" , 电话号码:"<<a.telePhone<<endl;
return out;
}
};
手机卡联系人类*
class Card:public Phone
{
protected:
string hometown;
string qq;
public:
Card(string n1,string t1,string h1,string q1):Phone(n1,t1)//带默认值的构造函数
{
hometown=h1;
qq=q1;
}
Card() {} // 无参构 造函数
string Card_Get_name2()
{
return name;
}
string Card_Get_telePhone2()
{
return telePhone;
}
string Card_Get_hometown2()
{
return hometown;
}
string Card_Get_qq2()
{
return qq;
}
void Card_set(string n1,string t1,string h1,string q1)//赋值
{
name=n1;
telePhone=t1;
hometown=h1;
qq=q1;
}
void Card_modify()//修改
{
cout<<“请您输入您要修改的信息:”<<endl;
cout<<“姓名:1 , 电话号码:2 , 籍贯:3 , QQ号:4”<<endl;
int i;
string j;
cin>>i;
if(i1)
{
cout<<“请您输入修改 后的姓名:”<<endl;
cin>>j;
name=j;
cout<<“修改已完成!!!”<<endl;
}
else if(i2)
{
cout<<“请您输入修改后的电话号码:”<<endl;
cin >> j;
telePhone=j;
cout <<“修改已完成!!!”<<endl;
}
else if(i3)
{
cout <<“请您输入修改后的籍贯:”<<endl;
cin >>j;
hometown=j;
cout <<“修改已完成!!!”<<endl;
}
else if(i4)
{
cout << “请您输入修改后的QQ号:”<<endl;
cin>>j;
qq=j;
cout <<“修改已完成!!!”<<endl;
}
else
{
cout <<“无效指令!”<<endl;
return;
}
}
friend istream& operator>>(istream& in,Card& a)//重载>>
{
in>>a.name>>a.telePhone>>a.hometown>>a.qq;
return in;
}
friend ostream&operator<<(ostream&out,Card&a)//重载<<
{
out<<“姓名:”<<a.name<<" 电话号码: “<<a.telePhone<<” 籍贯: “<<a.hometown<<” QQ号: "<<a.qq<<endl;
return out;
}
};
//通讯簿抽象类*
class Book
{
public://********以下函数 均为纯虚函数
virtual void Add()=0 ;// 增 加
virtual void Del(string telePhone) =0;//删 除
virtual void display() =0; //显示全部信息
virtual void modify(string telePhone) =0; //修改操作
virtual void query(string NAME) =0;//查询操作
};
//手机通讯簿类
class Address:public Book
{
protected:
int number1;//手机联系人的数量
Phone Phone1[1000];//手机通讯录
public:
Address()//构造函数
{
number1=0;
ifstream fp1;
fp1.open(“Phone.txt”,ios::in);
if(!fp1)
{
cout<<“can not open the file!”<<endl;
abort();
}
while(fp1>>Phone1[number1])
{
number1++;
}
fp1.close();
}
~Address()//析构函数
{
ofstream fp2;
fp2.open(“Phone.txt”,ios::out);
if(!fp2)
{
cout<<“can not open the file!”<<endl;
abort();
}
for(int j1=0; j1<=number1; j1++)
{
fp2<<Phone1[j1];
}
fp2.close();
}
Phone Get_Phone1(int ii);//返回手机的某联系人
int Get_number1();//得到总人数数值
void Addnumber1();//总人数自增
string Get_telePhone(int w);//得到某联系人的电话号码
void Add();//增加
void Add(Card a);//增加一个已知的联系人
void Del(string telePhone); //删除
void display(); //显示全部
void modify(string telePhone); //修改
void query(string NAME);//查询
};
Phone Address::Get_Phone1(int ii)//返回手机的某联系人
{
return Phone1[ii];
}
int Address::Get_number1()
{
return number1;
}
void Address::Addnumber1()
{
number1++;
}
string Address::Get_telePhone(int w)//获得某联系人的电话号码
{
return Phone1[w].Phone_Get_telePhone();
}
void Address::Add()//增 加
{
if(number1>=1000)
{
cout<<“内存已满,无法添加!!!”<<endl;
return;
}
else
{
string name1,telePhone1;
cout<<“请依次您输入增加联系人的姓名和电话号码:”<<endl;
cout<<"姓名: ";
cin>>name1;
cout<<endl<<"电话号码: ";
cin>>telePhone1;
cout<<endl;
Phone1[number1++].Phone_set(name1,telePhone1);//调用手机联系人类的赋值函数
cout<<“添加成功!!!”<<endl;
return;
}
}
void Address::Add(Card a)//增加一个 已知 联系人
{
Phone1[number1++].Phone_set(a.Card_Get_name2(),a.Card_Get_telePhone2());
cout<<endl;
}
void Address::Del(string telePhone)//删除操作
{
int j1=0;
int x1;
for(int i1=0;i1<number1;i1++)
{
if(Phone1[i1].Phone_Get_telePhone()telePhone)//找到需要了要删除 的联系人
{
for(x1=i1;x1<number1-1;x1++)
{
Phone1[x1].Phone_Get_name()=Phone1[x1+1].Phone_Get_name();
Phone1[x1].Phone_Get_telePhone()=Phone1[x1+1].Phone_Get_telePhone();
}
number1–;
j1=1;
break;
}
}
if(j11)
{
cout<<“删除联系人成功!”<<endl;
}
else
{
cout<<“查无 此人!!!”<<endl;
}
}
void Address::display()//显示全部
{
if(number1<=0)
{
cout<<“无联系人!!”<<endl;
return;
}
else
{
for(int i1=0;i1<number1;i1++)
{
cout<<Phone1[i1];
}
cout<<endl;
}
}
void Address::modify(string telePhone)//修改
{
int j1=0;
for(int i1=0;i1<number1;i1++)
{
if(Phone1[i1].Phone_Get_telePhone()telePhone)//找到了联系人
{
Phone1[i1].Phone_modify();
j1=1;
break;
}
}
if(j10)
{
cout<<“查无此人!!”<<endl;
}
}
void Address::query(string NAME)//查 询
{
int j1=0;
for(int i1=0;i1<number1;i1++)
{
if(Phone1[i1].Phone_Get_name()NAME)//找到了 要查询 的联系人
{
j1=1;
cout<<"联系人 : "<<endl;
cout<<Phone1[i1];
}
}
if(j10)
{
cout<<“查无此人!!”<<endl;
}
}
//手机卡通讯簿类*
class Card_Address_Book:public Book
{
protected:
int number2;//手机卡中联系人 数量
Card Card1[1000];//手机卡 通讯录
public:
Card_Address_Book()//构造 函数
{
number2=0;
ifstream fp3;
fp3.open(“Card.txt”,ios::in);
if(!fp3)
{
cout<< “can not open the file!”<<endl;
abort();
}
while(fp3>> Card1[number2])
{
number2++;
}
fp3.close();
}
~Card_Address_Book()// *析构函数
{
ofstream fp4;
fp4.open(“Card.txt”,ios::out);
if(!fp4)
{
cout<<“can not open the file!”<<endl;
abort();
}
for(int j2=0;j2<=number2;j2++)
{
fp4<<Card1[j2];
}
fp4.close();
}
Card Get_Card1(int ii);//*****返回某手机卡 联系人
int Get_number2();//***得到 总人数
void Addnumber2();//总人数 自增
string Get_telePhone(int w);//获得某联系人的 电话号码
void Add();//增加
void Add(Phone a);//增加一个 已知的联系人
void Del(string telePhone); //删除
void display(); // 显示 全部
void modify(string telePhone); //修 改
void query(string NAME);//查 询
};
Card Card_Address_Book::Get_Card1(int ii)//返回某手机卡 联系人
{
return Card1[ii];
}
int Card_Address_Book::Get_number2()
{
return number2;
}
void Card_Address_Book::Addnumber2()
{
number2++;
}
string Card_Address_Book::Get_telePhone(int w)
{
return Card1[w].Card_Get_telePhone2();
}
void Card_Address_Book::Add()//增 加
{
if(number2>1000)
{
cout<<“内存已满,无法添加!!!”<<endl;
return;
}
else
{
string name1,telePhone1,hometown1,qq1;
cout<<“请您输入增加联系人的姓名、 电话号码、 籍贯、 QQ号” <<endl;
cout<<“姓名:”;
cin>>name1;
cout<<endl<<“电话号码:”;
cin>>telePhone1;
cout<<endl<<“籍贯:”;
cin>>hometown1;
cout<<endl<<“QQ号:”;
cin>>qq1;
cout<<endl;
Card1[number2++].Card_set(name1,telePhone1,hometown1,qq1);//调用手机卡中联系人类的 赋值函数
cout<<“添加成功!!”<<endl;
return;
}
}
void Card_Address_Book::Add(Phone a)//增加一个已知 的联系人
{
string a1,a2;
a1=a2=“空!”;
Card1[number2++].Card_set(a.Phone_Get_name(),a.Phone_Get_telePhone(),a1,a2);
}
void Card_Address_Book::Del(string telePhone)//删除操作
{
int j2=0;
int x2;
for(int i2=0;i2<number2;i2++)
{
if(Card1[i2].Card_Get_telePhone2()telePhone)//找到了 要删除的 联系人
{
for(x2=i2;x2<number2-1;x2++)
{
Card1[x2].Card_Get_name2()=Card1[x2+1].Card_Get_name2();
Card1[x2].Card_Get_telePhone2()=Card1[x2+1].Card_Get_telePhone2();
Card1[x2].Card_Get_hometown2()=Card1[x2+1].Card_Get_hometown2();
Card1[x2].Card_Get_qq2()=Card1[x2+1].Card_Get_qq2();
}
number2–;
j2=1;
break;
}
}
if(j21)
{
cout<<“删除联系人成功!!”<<endl;
}
else
{
cout<<“查无此人!!”<<endl;
}
}
void Card_Address_Book::display()//显示全部
{
if(number2<=0)
{
cout<<“无联系人!!”<<endl;
return;
}
else
{
for(int i2=0;i2<number2;i2++)
{
cout<<Card1[i2];
}
cout<<endl;
}
}
void Card_Address_Book::modify(string telePhone)//修改
{
int j2=0;
for(int i2=0;i2<number2;i2++)
{
if(Card1[i2].Card_Get_telePhone2()telePhone)//*找到联系人
{
Card1[i2].Card_modify();
j2=1;
break;
}
}
if(j20)
{
cout<<“查无此人!”<<endl;
}
}
void Card_Address_Book::query(string NAME)//查询
{
int j2 =0;
for(int i2=0;i2<number2;i2++)
{
if(Card1[i2].Card_Get_name2()==NAME)//找到了要查 询的联系人
{
j2=1;
cout<<"联系人: "<< endl;
cout<<Card1[i2];
}
}
if(j2==0)
{
cout<<“查无此人”<< endl;
}
}
//用户类
class User
{
protected:
Address a;
Card_Address_Book s;
public:
void Add( int xx );//增加操作
void Del( int xx) ;//删除操作
void display( int xx) ;//显示全部
void modify( int xx) ;//修改
void query( int xx) ;//查询
void movea_s() ;//手机中信息移动到手机卡中
void moves_a() ;//手机卡中信息移动到手机中
void copya_s() ;//手机中信息复制到手机卡中
void copys_a() ;//手机卡中信息复制到手机中
};
void User::Add(int xx)//增加操作
{
Book *b;//创建基类指针
if(xx1)
{
b =&a;//实现 多态
b-> Add();
}
else if( xx2)
{
b =&s;//实现 多态
b ->Add();
}
else if(xx0)
{
return;
}
else
{
cout<< “无效 指令”<<endl;
return;
}
}
void User::Del( int xx )//删除
{
Book *b;//创建基类的指针
string telePhones;
cout<<“请您输入要删除的联系人的电话号码:”;
cin>>telePhones;
cout <<endl;
if(xx1)
{
b =&a;
b ->Del( telePhones );
}
else if(xx2)
{
b=&s;
b->Del( telePhones );
}
else if( xx0 )
{
return;
}
else
{
cout<<“错误 指令!”<<endl;
return;
}
}
void User::display( int xx )//显示全部
{
Book *b;//创建基类指针
if( xx1 )
{
b =&a;
b ->display();
}
else if( xx2)
{
b =&s;
b ->display();
}
else if( xx0)
{
return;
}
else
{
cout <<“错误 指令”<<endl;
return;
}
}
void User::modify( int xx )//修 改
{
Book *b;
string telePhones;
cout << “请您输入要修改的联系人的电话号码:”;
cin >> telePhones;
cout << endl;
if( xx1 )
{
b =&a;
b -> modify( telePhones );
}
else if( xx2 )
{
b =&s;
b ->modify( telePhones );
}
else if( xx0 )
{
return;
}
else
{
cout<<" 错误指令 "<<endl;
return;
}
}
void User::query( int xx )//查 询
{
Book *b;
string names;
cout << “请您输入要查询的联系人的姓名:”;
cin >> names;
cout << endl;
if(xx1)
{
b =&a;
b ->query(names);
}
else if( xx2 )
{
b =&s;
b ->query(names);
}
else if(xx0)
{
return;
}
else
{
cout<<“错误指令”<<endl;
}
}
void User::movea_s()//手机信息 移动到手机卡
{
if( a.Get_number1()<=0 )
{
cout<<“手机内无联系人,无法进行此操作”<< endl;
return;
}
else
{
for( int ii=a.Get_number1()-1;ii>=0;ii–)
{
int kk=0;//判断 查 重因数
for( int jj=0;jj<s.Get_number2();jj++)
{
if(a.Get_telePhone(ii)s.Get_telePhone(jj))
{
kk++;
break;//找到了重复的,退出循环
}
}
if( kk!=0 )
{
cout <<“手机卡内已有此联系人”<<endl;
}
else
{
s.Add(a.Get_Phone1(ii));//移动完毕
}
a.Del(a.Get_telePhone(ii));//删除移动完的联系人
}
}
}
void User::moves_a()//手机卡信息移动到手机
{
if( s.Get_number2()<=0 )
{
cout << “手机卡内无联系人,无法进行此操作”<< endl;
return;
}
else
{
for( int ii =s.Get_number2()-1; ii>=0;ii-- )
{
int kk=0;//判断查重因数
for( int jj=0;jj<a.Get_number1() ; jj++ )
{
if( s.Get_telePhone(ii)a.Get_telePhone(jj))
{
kk++;
break;//找到重复的
}
}
if( kk!=0)
{
cout<<“手机内已有此联系人”<<endl;
}
else
{
a.Add(s.Get_Card1(ii));//移动完毕
}
s.Del( s.Get_telePhone(ii));//删除移动完的联系人
}
}
}
void User::copya_s()手机信息复制到手机卡
{
if( a.Get_number1()<=0)
{
cout<<“手机内无联系人,无法进行此操作”<<endl;
return;
}
else
{
for(int ii=a.Get_number1()-1;ii>=0;ii–)
{
int kk=0;//判断查重因数
for( int jj=0;jj<s.Get_number2(); jj++ )
{
if(a.Get_telePhone(ii)s.Get_telePhone(jj))
{
kk++;
break;//找到了重复的,退出循环
}
}
if(kk!=0)
{
cout <<“手机卡内已有此联系人”<<endl;
}
else
{
s.Add(a.Get_Phone1(ii));//移动完毕
}
}
}
}
void User::copys_a()//手机卡信息复制到手机
{
if(s.Get_number2()<=0)
{
cout << “手机卡内无联系人 , 无法进行此操作” << endl;
return;
}
else
{
for(int ii=s.Get_number2()-1;ii>=0;ii–)
{
int kk=0;//判断查重因数
for( int jj=0;jj<a.Get_number1();jj++ )
{
if( s.Get_telePhone(ii)a.Get_telePhone( jj ) )
{
kk++;
break;//找到重复的
}
}
if( kk!=0 )
{
cout<<“手机内已有此联系人”<<endl;
}
else
{
a.Add( s.Get_Card1 ( ii ) );//移动完毕
}
}
}
}
//**菜单类
class Menu
{
public:
void mainMenu();// 主菜单
void AddMenu();//增加 联系人 菜单
void DelMenu();//删除 联系人 菜单
void modifyMenu();//修改 联系人 菜单
void queryMenu();//查询 联系人 菜单
void displayMenu();//显示 联系人 菜单
void moveorcopyMenu();//转移 或 复制 操作
};
void Menu::mainMenu()//主菜单
{
cout<<"-----------欢迎使用小童de手机管理系统--------------"<<endl;
cout<<"--------------请选择服务类型-----------------------"<<endl;
cout<<“1. 新建联系人 ----”<<endl;
cout<<“2. 删除联系人 ----”<<endl;
cout<<“3. 修改联系人信息 ----”<<endl;
cout<<“4. 查询联系人信息 ----”<<endl;
cout<<“5. 浏览所有联系人信息 ----”<<endl;
cout<<“6. 手机和手机卡联系人的转移或复制 ----”<<endl;
cout<<“0. 离开小童的通讯录 ----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::AddMenu()//增加联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<“1. 在手机中新建联系人 ----”<<endl;
cout<<“2. 在手机卡中新建联系人 ----”<<endl;
cout<<“0. 返回上一级操作 ----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::DelMenu()//删除联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<“1. 在手机中删除联系人 ----”<<endl;
cout<<“2. 在手机卡中删除联系人 ----”<<endl;
cout<<“0. 返回上一级操作 ----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::modifyMenu()//修改联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<“1. 修改手机中的联系人 -----”<<endl;
cout<<“2. 修改手机卡中的联系人 -----”<<endl;
cout<<“0. 返回上一级操作 -----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::queryMenu()//查询联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<" 1. 查询手机中的联系人 -----"<<endl;
cout<<" 2. 查询手机卡中的联系人 -----"<<endl;
cout<<" 0. 返回上一级操作 -----"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::displayMenu()//显示(浏览)联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<" 1. 浏览手机中的联系人 -----"<<endl;
cout<<" 2. 浏览手机卡中的联系人 -----"<<endl;
cout<<" 0. 返回上一级操作 -----"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::moveorcopyMenu()//转移or复制操作
{
cout<<"---------------------------------------------------"<<endl;
cout<<" 1. 将手机联系人的信息转移到手机卡上 -----"<<endl;
cout<<" 2. 将手机卡联系人的信息转移到手机上 -----"<<endl;
cout<<" 3. 将手机联系人的信息复制到手机卡上 -----"<<endl;
cout<<" 4. 将手机卡联系人的信息复制到手机上 -----"<<endl;
cout<<" 0. 返回上一级操作 -----"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
int main()
{
User User;//定义 一个用户
Menu Menu;//定义 一个菜单
while(111)//重复 进行操作
{
Menu.mainMenu();//调用 主菜单
int chose;
cin>>chose;
//开始判断 操作的类型
if(chose1)//新建 操作
{
Menu.AddMenu();//调用 新建菜单
int chose1;
cin>>chose1;
User.Add(chose1);
cout<<endl;
}
else if(chose2)// 删除操作
{
Menu.DelMenu();// 调用删除菜单
int chose1;
cin>>chose1;
User.Del(chose1);
cout<<endl;
}
else if(chose3)// 修改操作
{
Menu.modifyMenu();// 调用修改菜单
int chose1;
cin>>chose1;
User.modify(chose1 );
cout<<endl;
}
else if(chose4 )// 查询操作
{
Menu.queryMenu();//调用查询菜单caozuo
int chose1;
cin>>chose1;
User.query(chose1);
cout<<endl;
}
else if(chose5 )//显示操作(浏览)
{
Menu.displayMenu();//调用查询菜单
int chose1;
cin>>chose1;
User.display( chose1);
cout<< endl;
}
else if(chose6)//转移或复制操作
{
Menu.moveorcopyMenu();//调用转移 复制菜单
int chose1;
cin>>chose1;
if(chose10)
{
cout<< endl;
}
else if(chose11)
{
User.movea_s();
cout<< endl;
}
else if(chose12)
{
User.moves_a();
cout<< endl;
}
else if(chose13)
{
User.copya_s();
cout<< endl;
}
else if(chose14)
{
User.copys_a();
cout<< endl;
}
}
else if(chose==0)
{
cout<<“再见~See You Again~~”<<endl;
system(“pause”);
break;
}
}
return 0;
}
`
课程设计报告(含图片)
一、设计要求
根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写手机通讯录管理系统。
(1)创建文本文件,在手机和手机卡(根据具体环境创建,如创建在D盘中)中创建两个文本文件,分别存储手机和手机卡上的联系人信息。
(2)以菜单方式工作(字符界面即可)。
(3)存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息。
(4)通讯录管理系统的功能包括:
a)新建联系人:添加新的联系人,添加时确定是添加到手机上还是手机卡中。
b)删除操作:删除一个联系人,通过输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作
c)修改操作:修改某个联系人的信息,通过输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作。
d)查询操作:通过名字查询联系人信息,查询结果不唯一。
e)浏览操作:显示所有联系人的信息。
f)将联系人的信息从手机转存到手机卡上,同时要避免重复数据的存在。并且在转存时要检查容量是否受限。
g)将联系人的信息从手机卡上准存到手机上,同时要避免重复数据的存在。
(5)要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点。
二、总体设计
(1)系统由一个.cpp文件和两个文本文件组成:.cpp文件用于程序的实现;两个文本文件分别用于存储手机联系人和手机卡联系人信息。
(2)系统由7个类组成:
手机类
手机卡类(继承于手机类)
通讯簿类(抽象类)
手机通讯簿类(继承于通讯簿类)
手机卡通讯簿类(继承于通讯簿类)
用户类(操作类,用于完成通讯簿的操作)
界面菜单类(用来给出显示提示)
(3)每个类的具体声明
class Phone(手机类)
class Card:public Phone(手机卡类)
class Book(通讯簿类)
class Address:public Book(手机通讯簿类)
class Card_Address_Book:public Book(手机卡通讯簿类)
class User(用户类)
class Menu(界面菜单类)
三、界面设计与各功能模块实现
(1)主页面(主菜单):
(2)新建联系人:
(3)删除联系人:
(4)修改联系人信息:
(5)查询联系人信息:
(6)浏览所有联系人信息:
(7)手机或手机卡联系人的转移和复制:
四、编程体会
通过这次通讯录管理系统的课程设计的编写,将自己近一年的C++程序设计的知识有机地结合在了一起,特别是现在学习的面向对象的相关知识,一开始学习的类贯彻始终,实现了类的封装,代码中充分体现了保护继承和公有继承、运用了纯虚函数和抽象类、体现了多态性、用友元函数实现了运算符的重载,建立了用户类、菜单类将其他类结合在一起,锻炼了自己的思维和编程能力。同时,在编写过程中发现自己仍有一些知识点没有课下及时复习,导致在编写的过程中仍然需要看笔记本和课件,而且在这次编写的过程中,意识到了在写代码前,一定要保存创建到自己的U盘中,否则如果遇到特殊情况,前面写的代码可能全都会消失;还有一点就是,在写代码的过程中要适当地添加注释,帮助自己更好地编写程序。反思:在平时的学习过程中要及时复习学过去的知识,不仅是刚刚学的,还有以前学习过的;而且写代码时要有恒心、有毅力,在编写的过程中要不断修改、不断完善。
五、附件
源代码