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;
}
c++对象数组模拟手机通讯录Demo相关推荐
- 模拟手机通讯录联系人功能
实训:模拟手机通讯录联系人功能 package com.qf.day43_02; import android.app.Activity; import android.app.AlertDialog ...
- Java版数据结构之数组模拟环形队列demo
Java版数据结构之数组模拟环形队列demo 我的代码仓库:https://github.com/zhuangbinan/datastructure 类 CircleArray package clu ...
- 模拟手机通讯录管理 2021.2.11
模拟手机通讯录管理 现在手机都有通讯录程序,下面这个代码模拟手机通讯录设置添加,查询,删除联系人等功能. 今天是除夕,祝各位程序员朋友们新春快乐,阖家欢乐! import os import sysp ...
- python模拟手机通讯录
print('-' * 20) print('欢迎使用通讯录:\n1.添加联系人\n2.查看通讯录\n3.删除联系人\n4.修改联系人信息\n5.查找联系人\n6.退出') print('-' * 2 ...
- python通讯录的录入与测试_python实现手机通讯录搜索功能
# -*- coding:utf-8 -*- # 练习2: # 模拟手机通讯录搜索功能 class PERSON(object): def __init__(self): self.name_list ...
- python制作手机通讯录功能
模拟手机通讯录功能 个人练习,仅供参考 print('-' * 20) print('欢迎使用通讯录:\n1.添加联系人\n2.查看通讯录\n3.删除联系人\n4.修改联系人信息\n5.查找联系人\n ...
- python实现手机通讯录_python实现手机通讯录搜索功能
# -*- coding:utf-8 -*- # 练习2: # 模拟手机通讯录搜索功能 class PERSON(object): def __init__(self): self.name_list ...
- 【Demo】IOS中将对象数组按照时间戳排序
将对象按照时间戳排序,这里典型的一个例子是登录账户的排序:本地客户端可能保存了多个账户信息,在登录窗口用户可以选择已经登陆过的账户直接登录,现在的需求是要时刻让最近登陆过的账户排在前面,对于每个账户, ...
- 练习-Java类和对象之对象引用之模拟手机功能
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 任务: 实现手机的基本功能. 手机具有属性:品牌(brand).型号(type).价格(price).操作系统(os)和内存( ...
最新文章
- Matplotlib使用日期作为横坐标
- 提升深度学习模型性能及网络调参
- 为什么不应该重写service方法?
- 需求管理(3)------方法论
- linux断开会话不中断进程,Linux screen 解决会话终止当前进程断开的问题
- 直方图中最大的矩形(遍历与单调栈)
- 二十四、数据挖掘时序模式
- xmlWriter 以UTF-8格式写xml问题
- python裁剪图片并保存_python – 如何从图像中剪切轮廓并将其保存到新文件中
- Java 面向对象 之 接口 火车票实例
- java 有序map_Java有序的Hash集合:LinkedHashMap
- C语言基础函数(二)
- 一个近乎完美基于Dubbo的微服务改造实践
- java redis设置过期时间_Redis的内存回收原理,及内存过期淘汰策略详解
- Symantec赛门铁克安全软件免密卸载方式
- ​我国首个5G消息平台标准发布;华为拿下支付牌照;工业富联、酷派发布2020年业绩报告...
- 关于QComboBox
- c语言英文背单词软件下载,英语百词斩下载,背单词最好的软件排名?
- 05.前端面经汇总javaScript篇
- 【软件测试】可以写进简历的项目实战内容