首页 > 编程 > C++ > 正文

用C++实现一个简单的通讯录

2019-11-08 02:10:43
字体:
来源:转载
供稿:网友

    有了一定的C基础之后,目前正在学习C++,今天尝试用面向对象的思想编写了一个简单的通讯录(之前在C的练习中做过类似的项目)

通过不停的敲代码,出现问题也解决问题的过程中也稍微总结了一下新的知识。

遇到的第一个问题即是,我自定义了一个Person类用来存放每个联系人的信息,然而在创建了一个容器vector<Person>V(0)后,

查阅了一下其他大神博客中写的demo,发现都是用存放基本类型int来举例子,初始化直接用V.push_back(int)就可以,但是自定义的类中,私有成员不止一个,但是这个函数我在用的过程中发现能且只能传一个参数,也就是只能初始化一个私有成员,其他私有成员只能通过默认构造函数初始化,其他的私有成员只能通过赋值的方式再去重新写入。

第二个问题,再用vector<Person>::iterator iter 迭代器遍历的时候,如果要删除某个元素,或者用Vector.push_back()插入一个元素的时候,迭代器就会失效。这时候如果不重置迭代器,iter会相当于一个野指针,编译器也会报类似的错误。

下面贴上我写的代码:

#include <iostream>#include <vector>#include <map>#include "addr_book.h"using namespace std;int main(){    Tool T;T.enter_menu();vector<Person>V(0);//map<int,Person>M;//map<int,Person>::iterator it;    int n;int count;char name[20];int tel;//Person P;while(1){    count = 0;memset(name,0,sizeof(name));   cout << "请输入操作命令:";   cin >> n;    switch (n)        {       case 1:   {   cout << "请输入联系人姓名:";   cin >> name;   cout << "请输入联系人电话:";   cin >> tel;   V.push_back(name);                (V.back()).Tel(tel);break;   }case 2:{   if(V.capacity() == 0){   cout << "未录入联系人!" << endl;break;}cout << "请输入查找的联系人姓名:";                cin >> name;   for(vector<Person>::iterator it = V.begin(); it != V.end();++it){   count = ((*it).Compare(name,count));}   if(count == 0){   cout << "查无此人!" << endl;}                break;}case 3:{   if(V.capacity() == 0){   cout << "未录入联系人!" << endl;break;}   for(vector<Person>::iterator it = V.begin(); it != V.end(); ++it){   (*it).Display();}break;}case 4:{   if(V.capacity() == 0){   cout << "未录入联系人!" << endl;break;}cout << "请输入要修改的联系人姓名:";cin >> name;for(vector<Person>::iterator it = V.begin(); it != V.end();++it)                {   count = ((*it).Update(name,count));}   if(count == 0){   cout << "查无此人!" << endl;}   break;             }                        case 5:{   if(V.capacity() == 0){   cout << "未录入联系人!" << endl;break;} cout << "请输入要删除的联系人姓名:";cin >> name;for(vector<Person>::iterator it = V.begin(); it != V.end();++it)                {   int i = ((*it).Delete(name));if(i == 0){   V.erase(it);cout << "删除成功!" << endl;count++;break;}}if(count == 0){   cout << "查无此人!" << endl;}            break;  }            case 6:{   return 0;}case 0:{   T.enter_menu();break;}default:{      cout << "输入有误,请重输!" << endl;   break;}   }}    return 0;}

#ifndef _ADDR_BOOK_H#define _ADDR_BOOK_H#include <vector>class Person{public:    Person();Person(char *name);Person(int tel);Person(int tel,char *name);Person(char *name,int tel);void Tel(int tel);void Display();~Person();int Compare(char *name,int count);int Update(char *name,int count);int Delete(char *name);//friend void search(char *name,vector<Person> V);PRivate:    char name_[20];int tel_;};class Tool{public:    Tool();~Tool();void enter_menu();private:};#endif

#include <iostream>#include <vector>#include <string.h>#include "addr_book.h"using namespace std;#include <string.h>Person::Person(){    *name_ = '/0';tel_ = 0;}Person::Person(int tel){    tel_ = tel;}Person::Person(char *name){    //name_ = name;strcpy(name_,name);}Person::Person(int tel, char *name){    tel_ = tel;//name_ = name;}Person::Person(char *name,int tel){    tel_ = tel;//name_ = name;strcpy(name_,name);}void Person::Tel(int tel){    tel_ = tel;}void Person::Display(){    cout << name_ << "    " << tel_ << endl;}Person::~Person(){}int Person::Compare(char *name,int count){    if(strcmp(name,name_) == 0){   Display();count++;}else{   return count;}}int Person::Update(char *name,int count){    if(strcmp(name,name_) == 0){   Display();cout <<"请输入修改后的姓名:";cin >> name_;cout << "请输入修改后的手机号码:";cin >>tel_;count++;}    else{   return count;}}int Person::Delete(char *name){    if(strcmp(name,name_) == 0){   return 0;}return -1;}/*****************************华美的分割线***********************//*void search(char *name,vector<Person> V){    int count = 0;for(vector<Person>::iterator it = V.begin(); it != V.end; ++it){   if(strcmp(name,(*it).name_) == 0){   (*it).Display;count++;}}if(count == 0){   cout << "查无此人" <<endl;}}*//*****************************华美的分割线***********************/Tool::Tool(){}Tool::~Tool(){}void Tool::enter_menu(){    cout << endl;cout << ("        *******欢迎使用通讯录*******") << endl;cout << ("        *                                      *") << endl;cout << ("        *1.          添加联系人信息            *") << endl;cout << ("        *2.          查找联系人信息            *") << endl;cout << ("        *3.          显示联系人信息            *") << endl;cout << ("        *4.          修改联系人信息            *") << endl;cout << ("        *5.          删除联系人信息            *") << endl;cout << ("        *6.               退出                 *") << endl;cout << ("        *7.                                    *") << endl;cout << ("        *8.          按0呼出主菜单             *") << endl;cout << ("        *********************") << endl;cout << endl;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选