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 <string>

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 <vector>
#include "Person.h"
class List
{
public:
 List();
 ~List();
 void Showfile();//显示通讯录
 int Readfile();//从磁盘读取文件
 void Add();
 void Reflush();//刷新数据,即重新写入磁盘
 void Del();
 void Search();
private:
 std::vector<Person> myfile;
};

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

List.cpp文件:

#include "List.h"
#include <iostream>
#include <fstream>
#include <string>

List::List()
{
}

List::~List()
{
}

void setout()//输出格式控制,即左对齐
{
 std::cout.setf(std::ios_base::left, std::ios_base::adjustfield);
}
void List::Showfile()
{
 std::vector<Person>::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<Person>::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<Person>::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<Person>::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 <stdlib.h>
#include <iostream>
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<<"没有该选项请重输!\n";
  break;
 }
 cout << "请输入选项:\n";
 cin >> num;
 }
 system("pause");
 return 0;
}

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

(0)

相关推荐

  • C++实现通讯录管理系统

    本文实例为大家分享了C++通讯录管理系统的具体代码,供大家参考,具体内容如下 #include<iostream> #include<string> using namespace std; #define MAX 1000 struct Person { string m_Name; int m_Sex; int m_Age; string m_Phone; string m_Addr; }; struct Addressbooks { struct Person personA

  • C++实现简单通讯录

    本文实例为大家分享了C++实现简单通讯录的具体代码,供大家参考,具体内容如下 说明: 1 程序中运用到两个类,一个是Person类,另一个是List类.前者存储用户信息,后者主要用于操作,如增删改查等.但由于本程序中没有涉及到太复杂的功能,用户信息可以由一个简单的结构体表示,但是为了以后拓展方便,和达到学习运算符重载的目的,还是使用了类. 2 List类中的Reflush()方法用户刷新文件内容,即每次修改了vector后要将最新内容写入到文件.因此增删改操作中都要调用该操作,这种方法在数据库开

  • C++双向链表实现简单通讯录

    本文实例为大家分享了C++双向链表实现简单通讯录的具体代码,供大家参考,具体内容如下 #include<iostream> #include<fstream> #include <stdlib.h> #include<string> using namespace std; typedef struct Directory { string Name; string Mobile; string Wechatnumber; string STREET; st

  • C语言实现简单通讯录功能

    本文实例为大家分享了C语言实现简单通讯录功能的具体代码,供大家参考,具体内容如下 1.存放联系人信息 2.信息:名字+年龄+性别+电话+住址 3.增加联系人 4.删除联系人 5.查找联系人 6.修改联系人 7.排序 test.c源文件代码如下: #define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" void menu() { printf("#####################################\n&

  • C++实现简单通讯录系统

    本文实例为大家分享了C++实现简单通讯录系统的具体代码,供大家参考,具体内容如下 需求分析: 1.通讯录可以添加联系人. 2.通讯录可以显示所有联系人. 3.通讯录可以查找联系人. 4.通讯录可以删除联系人. 5.通讯录可以修改联系人. 6.可以清空通讯录. 7.退出通讯录. 项目代码: #include<iostream> #include<string> #include<stdlib.h> using namespace std; #define MAX 1000

  • C语言使用结构体实现简单通讯录

    C语言用结构体实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 代码实现: 头文件: #ifndef __HEAD_H__ ////防止头文件被多次调用 #define __HEAD_H__ #include<stdio.h> #include<string.h> #in

  • C++实现简单通讯录管理系统

    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 一.代码 #include <iostream> #include <string> #include <cstring> #include <fstream> using namespace std; //自定义一个联系人结点类型 typedef struct node1 {     string name;        //姓名     string tel;  

  • 30分钟学会用PHP写带数据库的简单通讯录第1/3页

    引用上篇文章的开场白: 我接触PHP也不是很久,所以有什么不足的地方,欢迎各位指正,让大家见笑了. 这篇小教程的对象是PHP初学者,都是些最简单.最基本的东西,因此高手们可以略过哦. 为了让各位初学者提起兴趣.尽快入门,这里写的是将是最简单,最基本的PHP程序,相信你只要有一点点的PHP基础知识,10分钟之内就能把它学会.没有PHP基础知识也没有关系,只要耐心的看,学会它也不会超过一个小时的. 我写这篇文章的目的是,和大家一起共同学习.共同进步,然后将PHP初学者们对PHP的恐惧心理驱赶到十万八

  • C语言实现简单通讯录系统

    本文实例为大家分享了C语言通讯录系统(增删改查),供大家参考,具体内容如下 全部代码如下所示: #include <iostream> #include <string> using namespace std; const int MAX = 1000; //联系人结构体 typedef struct person { string m_name; //姓名 int m_sex; //性别 1 男,0 女 int m_age; //年龄 string m_phone; //电话

  • C语言实现简单通讯录管理系统

    C语言实现的通讯录管理系统,供大家参考,具体内容如下 设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号.姓名.电话号码.所在班级.寝室地址等),通信录数据类型定义为结构体类型. 主要实现功能包括: (1)创建学生通讯录 (2)修改学生通讯录 (3)增删学生通讯录 (4)能够按多种方式进行查询(如:①按学号查询:②按所在班级查询) 源代码: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.

  • Java实现简单通讯录管理系统

    本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 题目: 1.完成一个通讯录,需求: (1)添加联系人(联系人:编号,姓名,手机号,QQ,邮箱地址)添加时需要检查手机号和邮箱地址格式是否正确,若不正确,不允许添加 (2)联系人查询(输入姓名或电话查询) (3)显示联系人列表 (4)根据编号删除指定编号的联系人 代码分析: 之前写过类似的管理系统,不过是使用数组进行数据存储,这次的通讯录管理系统通过动态数组 ArrayList进行数据存储.其中代码实现的原理和之前

随机推荐