C++通讯录管理系统
网上看到的一个小需求,练练手
代码如下:
#include <iostream>
#include <string>
#include <vector>
//联系人
class Contact {
public:
Contact(const std::string& _name = "无名氏", const std::string& _phoneNumber = "00000") :name(_name), phoneNumber(_phoneNumber) {}; //初始化构造函数
bool operator == (const Contact contact) {
return (this->name == contact.name);
}
//展示信息
void showMsg() {
std::cout << "姓名:" << name << std::endl;
std::cout << "电话:" << phoneNumber << '\n' << std::endl;
}
//修改电话
void changeNumber(const std::string& _number) {
phoneNumber = _number;
}
private:
std::string name; //姓名
std::string phoneNumber; //联系方式
};
//第四个模块 通讯录
class Contacts {
public:
//第五个模块 在通讯录的末尾写入信息并返回选单
void Add(const std::string& name, const std::string& phoneNumber);
//函数重载
bool Find(const std::string& name);
//第七个模块 修改某人信息,未找到则提示通讯录中无此人信息,并返回选单
void Alter(const std::string & name);
//第八个模块 删除某人信息,如果未找到要删除的人,则提示通讯录中没有此人信息,并返回选单
void Delete(const std::string & name);
//第九个模块 显示通讯录中的所有记录
void List();
private:
//第六个模块 查询某人信息,找到了,返回某人信息,未找到,则提示通讯录中没有此人信息并返回选单。
auto inFind(const std::string& name);
private:
std::vector <Contact> ContactVec;
};
Contacts contacts;
//清空缓冲区
void clearInputBuffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF) {} // 清空直到遇到换行符或文件结束
}
//第二个模块 - Menu
void menu()
{
std::cout << "Creat please enter 1" << std::endl;
std::cout << "Add please enter 2" << std::endl;
std::cout << "Find please enter 3" << std::endl;
std::cout << "Alter please enter 4" << std::endl;
std::cout << "Delete please enter 5" << std::endl;
std::cout << "List please enter 6" << std::endl;
std::cout << "Quit please enter 0" << std::endl;
char ch; //等待用户输入
ch = getchar(); //获取用户输入
clearInputBuffer();
std::string inName; //名字
std::string inNumber; //号码
switch (ch) {
case '0': //退出系统
std::cout << "通讯系统已退出" << std::endl;
return;
case '1': //创建通讯录
std::cout << "通讯录已创建" << std::endl;
clearInputBuffer();
menu();
break;
case '2': //添加联系人
std::cout << "请输入名字" << std::endl;
std::getline(std::cin, inName);
std::cout << "请输入号码" << std::endl;
std::getline(std::cin, inNumber);
contacts.Add(inName,inNumber);
clearInputBuffer();
menu();
break;
case '3': //查找联系人
std::cout << "请输入名字" << std::endl;
std::getline(std::cin, inName);
contacts.Find(inName);
clearInputBuffer();
menu();
break;
case '4':
std::cout << "请输入要修改联系人姓名" << std::endl;
std::getline(std::cin, inName);
contacts.Alter(inName);
clearInputBuffer();
menu();
break;
case '5':
std::cout << "请输入要删除的联系人姓名" << std::endl;
std::getline(std::cin, inName);
contacts.Delete(inName);
clearInputBuffer();
menu();
break;
case '6':
contacts.List();
clearInputBuffer();
menu();
break;
}
}
//第一个模块
int main()
{
menu();
return 0;
}
auto Contacts::inFind(const std::string& name)
{
Contact contact(name);
auto it = ContactVec.begin();
while (it != ContactVec.end())
{
if (*it == contact)
{
return it;
}
it++;
}
}
void Contacts::Add(const std::string& name, const std::string& phoneNumber)
{
auto it = inFind(name);
if (it != ContactVec.end())
{
std::cout << "联系人已存在" << std::endl;
}
else {
Contact contact(name, phoneNumber); //初始化联系人
ContactVec.push_back(contact); //插入联系人
std::cout << "联系人添加成功" << std::endl;
}
}
bool Contacts::Find(const std::string& name)
{
auto it = inFind(name);
if (it != ContactVec.end())
{
it->showMsg();
return true;
}
else {
std::cout << "通讯录中无此人信息" << std::endl;
return false;
}
}
void Contacts::Alter(const std::string& name)
{
auto it = inFind(name);
if (it != ContactVec.end() )
{
std::string inputPhoneNumber;
std::cout << "请输入要修改的电话号码" << std::endl;
std::getline(std::cin, inputPhoneNumber);
it->changeNumber(inputPhoneNumber);
std::cout << "修改后的信息如下" << std::endl;
it->showMsg();
}
else {
std::cout << "通讯录中没有此人信息" << std::endl;
}
}
void Contacts::Delete(const std::string& name)
{
auto it = inFind(name);
if (it != ContactVec.end())
{
ContactVec.erase(it);
}
else {
std::cout << "通讯录中没有此人信息" << std::endl;
}
}
void Contacts::List()
{
for (auto it : ContactVec)
{
it.showMsg();
}
}