一、需求说明
使用c++开发一个个人版通讯录,要求简单实现下面功能:
1.向通讯录添加联系人
2.从通讯录删除联系人
3.查找联系人
4.显示通讯录
5.通讯录存盘
6.读出通讯录
二、效果
三、整体思路
view层使用switch_case语句实现函数跳转, service层使用对象数组模拟数据库存储.
四、详细思路
设计一个Address联系人类
private私有:
(1)联系人信息
public公开:
(1)get联系人信息
(2)flag变量—用来判断当前对象是否可存,即数组对象角标是否可用 .(规定true为可用,false为不可用)
(3)Put方法(有参)—用来实现向私有变量传值,即传递联系人信息 .
设计另一个 AddressBook功能类
,实现具体操作
private私有:
(1)此类中开辟一个对象数组.(人为设置仅使用存储单元[1-100])
public公开:
首先定义FindFree()方法—获取空位,进行if判断,如果不是[1-100]的范围,返回-1
(1)Put()方法—添加联系人, 在此类中调用Address类的Put方法,向数组传递信息.
(2)Delete()方法—删除联系人, for循环内嵌套if语句使用compare方法进行匹配,匹配成功将对应的标志变量flag设置为false
(3)Search()方法—查找联系人,实现方法同Delete()方法,仅将具体操作功能更换为cout输出
(3)List()方法—显示联系人,遍历对象数组,如果flag为true,就进行打印
(4)Save()方法—存盘,创建ofstream对象,从内存向外存写数据
(5)Read()方法—读盘,创建ifstream对象,从外存向内存读数据
五、代码实现
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
/**
文件说明:
使用c++对象类模拟手机通讯录√
实现的功能:
1.向通讯录添加联系人
2.从通讯录删除联系人
3.查找联系人
4.显示通讯录
5.通讯录存盘
6.读出通讯录
整体思路:
view层使用switch_case语句实现函数跳转, service层使用对象数组模拟数据库存储.
详细思路:
设计一个Address联系人类:
private私有:
(1)联系人信息
public公开:
(1)get联系人信息
(2)flag变量---用来判断当前对象是否可存,即数组对象角标是否可用 .(规定true为可用,false为不可用)
(3)Put方法(有参)---用来实现向私有变量传值,即传递联系人信息 .
设计另一个 AddressBook功能类,实现具体操作:
private私有:
(1)此类中开辟一个对象数组.(人为设置仅使用存储单元[1-100])
public公开:
首先定义FindFree()方法---获取空位,进行if判断,如果不是[1-100]的范围,返回-1
(1)Put()方法---添加联系人, 在此类中调用Address类的Put方法,向数组传递信息.
(2)Delete()方法---删除联系人, for循环内嵌套if语句使用compare方法进行匹配,匹配成功将对应的标志变量flag设置为false
(3)Search()方法---查找联系人,实现方法同Delete()方法,仅将具体操作功能更换为cout输出
(3)List()方法---显示联系人,遍历对象数组,如果flag为true,就进行打印
(4)Save()方法---存盘,创建ofstream对象,从内存向外存写数据
(5)Read()方法---读盘,创建ifstream对象,从外存向内存读数据
*/
//为了使数组角标和联系人个数匹配
static int Num = 1;//充当数组地址角标
static int number = 0; //通讯录联系人个数
//一、Address联系人类
class Address
{
private:
string Name; //姓名
string Phone; //电话
string Email; //邮箱
string Addr; //地址
string PostCode; //邮编
public:
bool flag;//标志变量(为true表示可以存)
string GetName();
string GetPhone();
string GetEmail();
string GetAddr();
string GetPostCode();
void Put(string name, string phone, string email, string addr, string postcode); //添加联系人
};
string Address::GetName()
{
return Name;
}
string Address::GetPhone()
{
return Phone;
}
string Address::GetEmail()
{
return Email;
}
string Address::GetAddr()
{
return Addr;
}
string Address::GetPostCode()
{
return PostCode;
}
void Address::Put(string name, string phone, string email, string addr, string postcode)
{//Address层添加通讯录
Name = name;
Phone = phone;
Email = email;
Addr = addr;
PostCode = postcode;
}
//二、AddressBook功能类
class AddressBook
{
private:
Address Item[101];//此通讯录最大容量为 100,[1-100]
public:
int FindFree(); //0.寻找空位
void Put(); //1.增加
void Delete(); //2.删除
void Search(); //3.查找
void List(); //4.显示
void Save(); //5.存盘
void Read(); //6.读盘
};
int AddressBook::FindFree()
{//0.寻找空位
if(Num>0 && Num<=100){
return Num;
}else{
return -1;
}
}
void AddressBook::Put()
{//1.AddressBook层添加通讯录
cout<<"请依次输入姓名、电话、邮箱、地址、邮编:"<<endl;
string Name,Phone,Email,Addr,PostCode;
cin>>Name>>Phone>>Email>>Addr>>PostCode;
Item[Num].Put(Name,Phone,Email,Addr,PostCode);//传到Address层
number++;
Item[Num].flag = true;
Num++;
}
void AddressBook::Delete()
{//2.删除通讯录
string temp;
cin>>temp;
for(int i=1;i<=Num;i++){
if(temp.compare(Item[i].GetName())==0 || temp.compare(Item[i].GetPhone())==0){
Item[i].flag= false;
number--;
cout<<"删除成功!"<<endl;
}
}
}
void AddressBook::Search()
{//3.查找联系人
string temp;
cin>>temp;
for(int i=1;i<=Num;i++){
if(temp.compare(Item[i].GetName())==0 || temp.compare(Item[i].GetPhone())==0){
cout<<"联系人已找到:"<<endl;
cout<<Item[i].GetName()<<" "<<Item[i].GetPhone()<<" "<<Item[i].GetEmail()<<" "<<Item[i].GetAddr()<<" "<<Item[i].GetPostCode()<<endl;
}
}
}
void AddressBook::List()
{//4.显示通讯录
for(int i=1;i<=number;i++){
if(Item[i].flag == true){
cout<<Item[i].GetName()<<" "<<Item[i].GetPhone()<<" "<<Item[i].GetEmail()<<" "<<Item[i].GetAddr()<<" "<<Item[i].GetPostCode()<<endl;
}
}
}
void AddressBook::Save()
{//5.通讯录存盘
ofstream ofs;
ofs.open("D:\\手机通讯录.txt",ios::app);
if(ofs){
for(int i=1;i<=Num;i++){
ofs<<Item[i].GetName()<<" "<<Item[i].GetPhone()<<" "<<Item[i].GetEmail()<<" "<<Item[i].GetAddr()<<" "<<Item[i].GetPostCode()<<endl;
}
cout<<"存储成功!"<<endl;
}else{
cout<<"存储失败!"<<endl;
}
ofs.close();
}
void AddressBook::Read()
{//6.读出通讯录
ifstream ifs("D:\\手机通讯录.txt");
char buf[256];
cout<<"手机通讯录.txt内容如下:"<<endl;
while(!ifs.eof()){
ifs.getline(buf,256,'\n');
cout<<buf<<endl;
}
ifs.close();
}
int main(){
AddressBook A;
cout<<" ****** 模拟电话簿 ******"<<endl;;
cout<<" ** 1.添加联系人 **"<<endl;
cout<<" ** 2.删除联系人 **"<<endl;
cout<<" ** 3.查找联系人 **"<<endl;
cout<<" ** 4.显示通讯录 **"<<endl;
cout<<" ** 5.通讯录存盘 **"<<endl;
cout<<" ** 6.读出通讯录 **"<<endl;
cout<<" ** 7.退 出 **"<<endl;
while(true){
cout<<"请输入选项进行您的操作:";
int n = 0;
cin>>n;
switch(n){
case 1:
//1.添加联系人
if(A.FindFree()>0 && A.FindFree()<=100){//如果有空位,添加通讯录
cout<<"通讯录未满,可以进行存储!"<<endl;
A.Put();
cout<<"存储成功"<<endl;
}else{
cout<<"通讯录已满,无法进行存储!"<<endl;
}
break;
case 2:
//2.删除通讯录
cout<<"请输入联系人的姓名或电话:"<<endl;
A.Delete();
break;
case 3:
//3.查找联系人
cout<<"请输入姓名或电话:"<<endl;
A.Search();
break;
case 4:
//4.显示通讯录
cout<<"显示通讯录"<<endl;
if(number>0){
cout<<"通讯录中有"<<number<<"个联系人信息."<<endl;
A.List();
}else{
cout<<"当前通讯录为空!"<<endl;
}
break;
case 5:
A.Save();
//5.电话簿存盘
break;
case 6:
//6.读出通讯录
A.Read();
break;
case 7:
//7.退出
cout<<"您已退出本产品,谢谢使用!"<<endl;
exit(0);
break;
default:
cout<<"输入不合法,请重新输入:";
}
}
return 0;
}