目录
自己的简单通讯录
0.功能介绍
我们的通讯录有以下功能:
1.通讯录菜单程序
显示通讯录的功能菜单:
#ifndef CAIDAN_H
#define CAIDAN_H
#include <iostream>
#include <string>
void f_caidan();
void f_caidan()
{
std::cout << "**********************" << std::endl;
std::cout << "**** 1.添加联系人 ****" << std::endl;
std::cout << "**** 2.显示联系人 ****" << std::endl;
std::cout << "**** 3.删除联系人 ****" << std::endl;
std::cout << "**** 4.查找联系人 ****" << std::endl;
std::cout << "**** 5.修改联系人 ****" << std::endl;
std::cout << "**** 6.清空联系人 ****" << std::endl;
std::cout << "**** 0.退出通讯录 ****" << std::endl;
std::cout << "**********************" << std::endl;
return;
}
#endif
2.结构体创建
结构体代表联系人,包含了联系人的名字、性别、年龄、电话号码和地址。
#ifndef LIANXIREN_H
#define LIANXIREN_H
#include <iostream>
#include <string>
struct LianXiRen
{
std::string name;
std::string sex;
int age;
std::string number;
std::string location;
};
#endif
3.添加联系人
#ifndef TIANJIA_H
#define TIANJIA_H
#include <iostream>
#include <string>
#include <vector>
#include "lianxiren.h"
void f_tianjia(LianXiRen(&LXR)[1000]);
void f_tianjia(LianXiRen (&LXR)[1000])
{
for(auto &r : LXR)
{
if (r.name.empty())
{
std::cout << "请输入联系人姓名:" << std::endl;
std::cin >> r.name;
std::cout << "请输入联系人性别:" << std::endl;
std::cin >> r.sex;
std::cout << "请输入联系人年龄:" << std::endl;
std::cin >> r.age;
std::cout << "请输入联系人电话:" << std::endl;
std::cin >> r.number;
std::cout << "请输入联系人地址:" << std::endl;
std::cin >> r.location;
std::cout << "保存成功!" << std::endl;
break;
}
}
std::cout << "继续添加联系人吗?" << std::endl;
std::cout << "1.yes\t" << "2.no\t" << std::endl;
int flag;
std::cin >> flag;
switch (flag)
{
case 1:
f_tianjia(LXR);
break;
case 2:
break;
default:
break;
}
}
#endif
4.显示联系人
#ifndef XIANSHI_H
#define XIANSHI_H
#include <iostream>
#include <string>
#include "lianxiren.h"
void f_xianshi(LianXiRen(&LXR)[1000]);
void f_xianshi(LianXiRen(&LXR)[1000])
{
int time = 0;
for (auto &r : LXR)
{
if (!r.name.empty())
{
std::cout << r.name << "\t" << r.sex << "\t"
<< r.age << "\t" << r.number << "\t" << r.location << std::endl;
}
else
{
if (time == 0) std::cout << "通讯录为空!" << std::endl;
}
++time;
}
}
#endif
5.删除联系人
#ifndef SHANCHU_H
#define SHANCHU_H
#include <iostream>
#include <string>
#include "lianxiren.h"
void f_shanchu(LianXiRen(&LXR)[1000]);
void f_shanchu(LianXiRen (&LXR)[1000])
{
std::cout << "您想删除谁?" << std::endl;
std::string name;
std::cin >> name;
for (auto &r : LXR)
{
if (r.name == name)
{
std::string s;
r.name = s;
r.age = 0;
r.location = s;
r.number = s;
r.sex = s;
std::cout << name << "已删除!" << std::endl;
break;
}
else if ((&r) == &LXR[999])
{
std::cout << "查无此人!" << std::endl;
}
}
}
#endif
6.查找联系人
#ifndef CHAZHAO_H
#define CHAZHAO_H
#include <iostream>
#include <string>
#include "lianxiren.h"
void f_chazhao(LianXiRen(&LXR)[1000]);
void f_chazhao(LianXiRen(&LXR)[1000])
{
int time = 0;
std::cout << "您想查找谁?" << std::endl;
std::string name;
std::cin >> name;
for (auto &r : LXR)
{
if (r.name == name)
{
std::cout << r.name << "\t" << r.sex << "\t"
<< r.age << "\t" << r.number << "\t" << r.location << std::endl;
std::cout << "查找完成" << std::endl;
break;
}
else
{
if (time == 999) std::cout << "查无此人!" << std::endl;
}
++time;
}
}
#endif
7.修改联系人
#ifndef XIUGAI_H
#define XIUGAI_H
#include <iostream>
#include <string>
#include "lianxiren.h"
void f_xiugai(LianXiRen(&LXR)[1000]);
void f_xiugai(LianXiRen(&LXR)[1000])
{
std::cout << "您想修改谁:" << std::endl;
std::string name;
std::cin >> name;
for (auto &r : LXR)
{
if (r.name == name)
{
std::cout << "请输入新的联系人姓名:" << std::endl;
std::cin >> r.name;
std::cout << "请输入新的联系人性别:" << std::endl;
std::cin >> r.sex;
std::cout << "请输入新的联系人年龄:" << std::endl;
std::cin >> r.age;
std::cout << "请输入新的联系人电话:" << std::endl;
std::cin >> r.number;
std::cout << "请输入新的联系人地址:" << std::endl;
std::cin >> r.location;
std::cout << "新的联系人保存成功!" << std::endl;
break;
}
else if ((&r) == &LXR[999])
{
std::cout << "查无此人!" << std::endl;
}
}
}
#endif
8 清空联系人
#ifndef QINGKONG_H
#define QINGKONG_H
#include <iostream>
#include <string>
#include "lianxiren.h"
void f_qingkong(LianXiRen(&LXR)[1000]);
void f_qingkong(LianXiRen(&LXR)[1000])
{
std::cout << "确定清空通讯录吗?" << std::endl;
std::cout << "1.yes\t" << "2.no\t" << std::endl;
int flag;
std::cin >> flag;
switch (flag)
{
case 1:
for (auto &r : LXR)
{
std::string s;
r.name = s;
r.age = 0;
r.location = s;
r.number = s;
r.sex = s;
}
std::cout << "已清空!" << std::endl;
break;
case 2:
break;
default:break;
}
}
#endif
9.退出通讯录
#ifndef TUICHU_H
#define TUICHU_H
#include <iostream>
#include <string>
bool f_tuichu();
bool f_tuichu()
{
std::cout << "确认退出?" << std::endl;
std::cout << "1.yes\t" << "2.no\t" << std::endl;
int flag;
std::cin >> flag;
switch (flag)
{
case 1:return 1; break;
case 2:return 0; break;
default:return 0; break;
}
}
#endif
10.主函数
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include "caidan.h"
#include "tuichu.h"
#include "tianjia.h"
#include "xianshi.h"
#include "shanchu.h"
#include "chazhao.h"
#include "xiugai.h"
#include "qingkong.h"
using namespace std;
int main()
{
LianXiRen LXR[1000];
f_caidan();
while (1)
{
int flag;
cin >> flag;
switch (flag)
{
case 0:
if (f_tuichu())
{
cout << "欢迎再次使用!" << endl;
return 0;
}
else
{
system("cls");
f_caidan();
break;
}
case 1:
f_tianjia(LXR);
system("cls");
f_caidan();
break;
case 2:
f_xianshi(LXR);
break;
case 3:
f_shanchu(LXR);
break;
case 4:
f_chazhao(LXR);
break;
case 5:
f_xiugai(LXR);
break;
case 6:
f_qingkong(LXR);
break;
default:return 0; break;
}
}
}
11.效果演示
为什么传不了视频?
别人的思路
- 别人不仅建立了一个联系人的结构体,还建立了一个通讯录的结构体;我只有联系人的结构体,通讯录用数组代替了。
LXR_shuliang 这个变量会在每次添加通讯录时加1,在删除时减1,在清空时归零。用这个可以轻松推断通讯录是否为空,以及定位该在哪写入数据。显然是个更好的思路。
struct TongXunLu
{
LianXiRen LXR[1000];
int LXR_shuliang;
};
- 封装了一个判断某个联系人是否在通讯录的程序,因为无论是显示还是删除、查找、修改,第一步都是判断人是否在通讯录中。
int ifExist(TongXunLu *TXL)
{
string name;
cin >> name;
if(TXL->LXR_shuliang == 0)
{
cout << "通讯录为空" << endl;
return -1;
}
else
{
for(int i = 0; i != TXL->LXR_shuliang; ++i)
{
if(TXL->LXR.name == name)
{
return i;
}
else
{
cout << "查无此人" << endl;
return -1;
}
}
}
}
- 删除操作采取了后一个数据覆盖前一个数据的操作,并不是令数据为空。
- 清空联系人的时候,只是把 LXR_shuliang 的值置为0,做了一个逻辑清零的操作,我是判断每个数据是否为0,这个效率太低了。