用c++语言编写通讯录,C++实现简单通讯录

本文实例为大家分享了C++实现简单通讯录的具体代码,供大家参考,具体内容如下

说明:

1 程序中运用到两个类,一个是Person类,另一个是List类。前者存储用户信息,后者主要用于操作,如增删改查等。但由于本程序中没有涉及到太复杂的功能,用户信息可以由一个简单的结构体表示,但是为了以后拓展方便,和达到学习运算符重载的目的,还是使用了类。

2 List类中的Reflush()方法用户刷新文件内容,即每次修改了vector后要将最新内容写入到文件。因此增删改操作中都要调用该操作,这种方法在数据库开发中常用到,以小见大。

3 setout()方法设置字符左对齐,便于美观。另外std::cout.width(15)设置输出字符域宽度,只对下一次输出有效。

4 判断文本文件是否为空还有另一种方法,即string类中的empty()方法,但为了读取方便没有采用。

5 其实对于通讯录的操作只是在类内的vector容器中进行,只有最后刷新的时候同步到磁盘文件中。

6 一些函数中设置多个返回值有利于判断操作的情况。

Person.h 与cpp文件:

#ifndef PERSON_H_

#define PERSON_H_

#include

class Person

{

public:

std::string name;

std::string tel;

public:

Person();

~Person();

int operator==(const Person& p);//重载==运算符,本程序中并没有用到

private:

};

#endif // !PERSON_H_

#include "Person.h"

Person::Person()

{

}

Person::~Person()

{

}

int Person::operator==(const Person& p)

{

if (this->name == p.name)

{

if (this->tel == p.tel)

return 0;

else

return -1;

}

else

return -2;

}

List.h文件:

#ifndef LIST_H_

#define LIST_H_

#include

#include "Person.h"

class List

{

public:

List();

~List();

void Showfile();//显示通讯录

int Readfile();//从磁盘读取文件

void Add();

void Reflush();//刷新数据,即重新写入磁盘

void Del();

void Search();

private:

std::vector myfile;

};

inline void setout();//输出格式控制

#endif

List.cpp文件:

#include "List.h"

#include

#include

#include

List::List()

{

}

List::~List()

{

}

void setout()//输出格式控制,即左对齐

{

std::cout.setf(std::ios_base::left, std::ios_base::adjustfield);

}

void List::Showfile()

{

std::vector::iterator iter;

setout();

for (iter = this->myfile.begin(); iter != this->myfile.end(); iter++)

{

std::cout.width(15);//字域宽度为15

std::cout << iter->name;

std::cout.width(15);

std::cout << iter->tel << "\n";

}

}

int List::Readfile()

{

std::fstream readfile("mylist.txt");

int rows = 0;

if (readfile)//如果文件存在

{

std::cout << "*******Telephone book********\n";

std::cout << "name:" << "\t\t" << "phone:" << "\n";

Person p;

if (!(readfile >> p.name >> p.tel))//如果第一次读取为空

{

std::cout << "\tNULL\n";

return 1;

}

myfile.push_back(p);

rows++;

while(readfile>>p.name>>p.tel)//读取后存入vector容器中

{

rows++;

myfile.push_back(p);

}

this->Showfile();

std::cout << "Total:\t" << rows << "\tinfos\n";

readfile.close();

return rows;

}

else

{

std::ofstream outfile;//磁盘中不存在文件的话则创建

outfile.open("mylist.txt");

if (!outfile.is_open())

{

std::cout << "file is not created!\n";

return -1;

}

else

{

std::cout << "file not exist but we have created one for you!\n";

std::cout << "*******Telephone book********\n";

std::cout << "name:" << "\t\t" << "phone:" << "\n";

std::cout << "\tNULL\n";

}

outfile.close();

}

return 2;

}

void List::Reflush()

{

std::ofstream outfile("mylist.txt");

std::vector::iterator iter;

setout();

for (iter = this->myfile.begin(); iter != this->myfile.end(); iter++)

{

outfile.width(15);

outfile << iter->name;

outfile.width(15);

outfile << iter->tel << "\n";

}

outfile.close();

}

void List::Add()

{

Person p;

std::cout << "please input the name:\n";

std::cin >> p.name;

std::cout << "please input the phone\n";

std::cin >> p.tel;

std::cout << "sucessfully created!\n";

myfile.push_back(p);

this->Reflush();

}

void List::Del()

{

if (myfile.empty())

{

std::cout << "no info to del!\n";

return;

}

std::string name;

std::cout << "please input the name you want you del:\n";

std::cin >> name;

std::vector::iterator iter;

for (iter = this->myfile.begin(); iter != this->myfile.end();)

{

if (iter->name == name)

{

myfile.erase(iter);//删除对应项

std::cout << "sucessfully delete!\n";

this->Reflush();

return;

}

else

++iter;

}

std::cout << "no info matches!\n";

}

void List::Search()

{

std::string name;

std::cout << "please input the name you want to search:\n";

std::cin >> name;

std::vector::iterator iter;

for (iter = this->myfile.begin(); iter != this->myfile.end(); iter++)

{

if (name == iter->name)

{

std::cout << iter->name << "\t\t" << iter->tel << "\n";

return;

}

}

std::cout << "no info matches!\n";

}

main文件:

// contact.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include "List.h"

#include

#include

using namespace std;

int Menu()

{

int num;

cout << "********************" << endl;

cout << "* 1 ADD *" << endl;

cout << "* 2 DEL *" << endl;

cout << "* 3 SEARCH *" << endl;

cout << "* 4 SHOW *" << endl;

cout << "* 5 EXIT *" << endl;

cout << "********************" << endl;

cout << "input the num:";

cin >> num;

return num;

}

int _tmain(int argc, _TCHAR* argv[])

{

List mylist;

mylist.Readfile();

int num = Menu();

bool flags = 1;

while (flags)

{

switch (num)

{

case 1:

mylist.Add();

break;

case 2:

mylist.Del();

break;

case 3:

mylist.Search();

break;

case 4:

mylist.Showfile();

break;

case 5:

cout << "Bye.\n";

return 0;

default:

cout<

break;

}

cout << "请输入选项:\n";

cin >> num;

}

system("pause");

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值