简易通讯录类实现原理
时间:2022-07-28
本文章向大家介绍简易通讯录类实现原理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <bits/stdc++.h>
using namespace std;
class Informat
{
private:
string phone;
string address;
string name;
public:
Informat():name(""),phone("12345"),address("Anywhere"){}
Informat(string a,string b,string q):name(a),address(q){ setpho(b);}
void setpho(string a)
{
while(a.length()!=11&&a.length()!=5){
cout<<"Please Key Again"<<endl;
cin>>a;
}
phone=a;
}
void setname(string a){ name=a;}
void setaddr(string a){address=a;}
string getpho() const{return phone;}
string getname()const{return name;}
string getaddr()const{return address;}
friend ostream&operator<<(ostream &out,const Informat &ob);
friend istream&operator>>(istream &in, Informat &ob);
};
ostream&operator<<(ostream &out,const Informat &ob){
out<<ob.name<<" "<<ob.phone<<" "<<ob.address<<" ";
return out;
}
istream &operator>>(istream &in,Informat &ob)
{
in>>ob.name>>ob.phone;
while(ob.phone.length()!=11&&ob.phone.length()!=5)
{
cout<<"Please Key Again"<<endl;
in>>ob.phone;
}
in>>ob.address;
return in;
}
/*int main()
{
Informat demo("李彦宏","1","中国北京");
cout<<demo<<endl;
Informat demo2;
string tem1,tem2,tem3;
cin>>demo;
cout<<demo.getname()<<' '<<demo.getpho()<<' '<<demo.getaddr()<<endl;
cin>>tem1>>tem2>>tem3;
demo2.setname(tem1);
demo2.setpho(tem2);
demo2.setaddr(tem3);
cout<<demo2<<endl;;
}*/
class Contacts
{
vector<Informat>infor;
map<string,int>na;
map<string,int>ph;
public:
Contacts()
{
load();
}
void create()
{
Informat tem;
cin>>tem;
infor.push_back(tem);
if(!na.insert(make_pair(tem.getname(),infor.size()-1)).second)
{
cout<<infor[na.find(tem.getname())->second]<<endl;
cout<<"Please Key "Yes" To Creat name(2) Or Key"No" Update and overwrite "<<endl;
string flag;
cin>>flag;
while(flag!="NO"&&flag!="No"&&flag!="no"&&flag!="YES"&&flag!="yes"&&flag!="Yes") cin>>flag;
if(flag=="NO"||flag=="No"||flag=="no")
{
na.erase(tem.getname());
na.insert(make_pair(tem.getname(),infor.size()-1));
}
else {
tem.setname(tem.getname()+" ");
na.insert(make_pair(tem.getname(),infor.size()-1));
}
}
if(!ph.insert(make_pair(tem.getpho(),infor.size()-1)).second)
{
cout<<infor[ph.find(tem.getpho())->second]<<endl;
cout<<"Please Key "Yes" To Creat Phone(2) Or Key"No" Update and overwrite "<<endl;
string flag;
cin>>flag;
while(flag!="NO"&&flag!="No"&&flag!="no"&&flag!="YES"&&flag!="yes"&&flag!="Yes") cin>>flag;
if(flag=="NO"||flag=="No"||flag=="no")
{
na.erase(tem.getpho());
na.insert(make_pair(tem.getpho(),infor.size()-1));
}
else {
tem.setpho(tem.getpho()+"2");
na.insert(make_pair(tem.getpho(),infor.size()-1));
}
}
}
void find1(string a)
{
if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null"){
cout<<infor[ph.find(a)->second]<<endl;
if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){
cout<<infor[na.find(a)->second]<<endl;
return ;
}
}
else if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){
cout<<infor[na.find(a)->second]<<endl;
}
else cout<<"查无此人/号"<<endl;
}
void modifyaddr(string a )
{
string w;
if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null"){
cout<<infor[ph.find(a)->second]<<endl;
cin>>w;
{
if(w=="No"||w=="no"||w=="NO")
if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){
cout<<infor[na.find(a)->second]<<endl;
cin>>w;
infor[na.find(a)->second].setaddr(w);
return ;
}
else {
infor[na.find(a)->second].setaddr(w);
return ;
}
}
}
if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){
cout<<infor[na.find(a)->second]<<endl;
cin>>w;
infor[na.find(a)->second].setaddr(w);
return ;
}
else cout<<"查无此人"<<endl;
}
void modifyname(string a )
{
string w;
if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){
cout<<infor[na.find(a)->second]<<endl;
cin>>w;
infor[na.find(a)->second].setname(w);
na.insert(make_pair(w,na.find(a)->second));
na.erase(a);
}
else cout<<"查无此人"<<endl;
}
void modifyphone(string a )
{
string w;
if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null"){
cout<<infor[ph.find(a)->second]<<endl;
cin>>w;
infor[ph.find(a)->second].setpho(w);
ph.insert(make_pair(w,ph.find(a)->second));
ph.erase(a);
}
else cout<<"查无此号"<<endl;
}
void delph(string a)
{
if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null")
{
infor[ph.find(a)->second].setpho("Null");
infor[ph.find(a)->second].setname("Null");
}
else cout<<"查无此号"<<endl;
}
void delna(string a)
{
if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null")
{
infor[na.find(a)->second].setpho("Null");
infor[na.find(a)->second].setname("Null");
}
else cout<<"查无此人"<<endl;
}
~ Contacts()
{
save();
}
void load()
{
ifstream in("d:\shuju.txt",ios::in);
infor.clear();
na.clear();
ph.clear();
if(!in) return ;
Informat ob;
while(in>>ob)
{
infor.push_back(ob);
na.insert(make_pair(ob.getname(),infor.size()-1));
ph.insert(make_pair(ob.getpho(),infor.size()-1));
in.close();
}
}
void save()
{
ofstream out("d:\shuju.txt",ios::out);
for(auto po=infor.begin();po!=infor.end();po++)
{
if((*po).getname()!="Null") out<<*po;
}
out.close();
}
};
int main()
{
Contacts ob;
ob.create();
ob.create();
ob.create();
string tem;
cin>>tem;
ob.find1(tem);
cin>>tem;
ob.find1(tem);
cin>>tem;
ob. modifyaddr(tem);
ob.find1(tem);
cin>>tem;
ob. modifyaddr(tem);
ob.find1(tem);
cin>>tem;
ob. modifyname(tem);
ob.find1(tem);
cin>>tem;
ob. modifyname(tem);
ob.find1(tem);
cin>>tem;
ob. modifyphone(tem);
ob.find1(tem);
cin>>tem;
ob. modifyphone(tem);
ob.find1(tem);
cin>>tem;
ob. delph(tem);
ob.find1(tem);
cin>>tem;
ob. delph(tem);
ob.find1(tem);
cin>>tem;
ob. delna(tem);
ob.find1(tem);
cin>>tem;
ob.delna(tem);
ob.find1(tem);
}
- Selenium3源码之异常模块篇
- 移位密码原理及算法实现
- 排序算法的实现(C/C++实现)
- [开源] 分享导出博客园文章成本地 Markdown 文件存储的工具
- 单表代替密码原理及算法实现
- 【Android开发学习笔记之一】5大布局方式详解
- Selenium3源码之common下action_chains.py模块分析
- 图的简单应用(C/C++实现)
- 一个很easy的脚本--php获取服务器端的相关信息
- Kubernetes网络解决方案的比较
- OSX 上初步尝试 asp.net 5
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
- weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 判断ABAP代码是否处于update模式下运行的工具类
- SAP CRM WebClient UI异常的持久化机制
- 在ABAP Webdynpro里显示PDF的一种办法
- ABAP Webdynpro Interface View的用法
- ABAP Webdynpro里Component Usage的用法
- ABAP Webdynpro - 如何使用用户自定义的value help
- ABAP 740的新语法 - 使用BO association的方式进行内表连接操作
- 使用代码修改SAP CRM附件的属性
- SAP CRM附件创建的internal模式是什么含义
- 搭建maven私服上传并使用Jar包
- Docker 容器跨主机多网段通信解决方案
- Docker 容器实现数据持久化
- mongodb----复制
- CentOS磁盘挂载
- Mono for Android 实现高效的导航