c++对象数组模拟手机通讯录Demo


一、需求说明

使用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;
} 
发布了328 篇原创文章 · 获赞 798 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/103525916
今日推荐