首页 > 编程语言 >c++通讯录管理系统

c++通讯录管理系统

时间:2024-08-13 14:27:05浏览次数:13  
标签:return string 管理系统 联系人 number c++ Client 通讯录 cout

1、系统需求

(1)添加。添加联系人信息(主要包括姓名、年龄、号码和备注)。

(2)遍历。显示出所有联系人的信息。

(3)删除。删除指定的联系人信息,通过电话号码筛选。

(4)修改。修改指定的联系人信息,通过电话号码查找。

(5)查找。查找指定的联系人信息,通过电话号码查找。

(6)清空。清空所有联系人信息。

(7)保存。退出系统时保存联系人信息,方便下一次打开系统的时候直接读取,不再需要手动重复添加。

2、包含技术

(1)c++基础语法

(2)面向对象

(3)STL标准库

3、代码实现

1、mystruct.h

宏定义年龄的范围和电话号码的长度,便于及时修改对应数值。

#pragma once
#ifndef _MYSTRUCT_H_
#define _MYSTRUCT_H_

#define AGE_MAX 130//年龄的最大值
#define AGE_MIN 0//年龄的最小值
#define NUMBET_SIZE 11//电话号码的长度

#endif

2、phone.h

编写电话联系人的实体类。

#pragma once
#ifndef _PHONE_H_
#define _PHONE_H_

#include <iostream>

#include "mystruct.h"

using namespace std;

class Phone {
public:
	void setName (string name);//name的set方法
	string getName ();//name的get方法
	bool setNumber (string number);//number的set方法
	string getNumber ();//number的get方法
	void setNote (string note);//note的set方法
	string getNote ();//note的get方法
	bool setAge (int age);//age的set方法
	int getAge ();//age的get方法
	friend ostream& operator<<(ostream& os, Phone p);//重载Phone类的输出流
private:
	string name;//联系人的名称
	string number;//联系人的电话
	string note;//联系人的备注
	int age;//联系人的年龄
};

#endif

3、phone.cpp

对Phone类中声明的函数进行实现。

#include "phone.h"

//name的set方法
void Phone::setName (string name) {
	(*this).name = name;
}

//name的get方法
string Phone::getName () {
	return (*this).name;
}

//number的set方法
bool Phone::setNumber (string number) {
	if (number.size () == NUMBET_SIZE) {
		(*this).number = number;
		return true;
	} else {
		cout << "设置number属性失败!!!!\n长度非法!!!!\n";
		return false;
	}
}

//number的get方法
string Phone::getNumber () {
	return (*this).number;
}

//note的set方法
void Phone::setNote (string note) {
	(*this).note = note;
}

//note的get方法
string Phone::getNote () {
	return (*this).note;
}

//age的set方法
bool Phone::setAge (int age) {
	if (age >= AGE_MIN || age <= AGE_MAX) {
		(*this).age = age;
		return true;
	} else {
		cout << "age属性设置失败!!!!\nage必须在0到130的范围中!!!";
		return false;
	}
}

//age的get方法
int Phone::getAge () {
	return (*this).age;
}

//重载Phone类的输出流
ostream& operator<<(ostream& os, Phone p) {
	cout << p.name << "\t\t";
	cout << p.age << "\t\t";
	cout << p.number << "\t\t";
	cout << p.note;
	return os;

}

4、client.h

编写客户端类(软件体系结构中叫外观类吧),便于在main函数中调用。

#pragma once
#ifndef _CLIENT_H_
#define _CLINET_H_

#include <vector>
#include <fstream>
#include "phone.h"

class Client {
public:
	bool menu ();//菜单
	Client ();//构造函数,读取上一次保存时的数据
	~Client ();//析构函数,保存数据
private:

	vector<Phone> v = vector<Phone> ();//存储联系人数据
	void add();//添加联系人
	void show ();//遍历联系人
	void drop (string number);//删除联系人
	void change (string number);//修改联系人
	void find (string number);//查找联系人
	void clear ();//清空联系人
};

#endif

5、client.cpp

对Client类中声明的函数进行实现。

#include "client.h"

//构造函数,读取上一次保存时的数据
Client::Client () {
	ifstream is;
	string s;
	int i;
	Phone p;
	is.open ("data.txt");
	while (is >> s) {
		p = Phone ();
		p.setName (s);
		is >> i;
		p.setAge (i);
		is >> s;
		p.setNumber (s);
		is >> s;
		p.setNote (s);
		v.push_back (p);
	}
	is.close ();
}

//析构函数,保存数据
Client::~Client () {
	ofstream os;
	os.open ("data.txt");
	for (Phone p : v) {
		os << p.getName() << "\n";
		os << p.getAge () << "\n";
		os << p.getNumber () << "\n";
		os << p.getNote () << "\n";

	}
	os.close ();
}

//菜单
bool Client::menu () {
	cout << "欢迎来到电话管理系统!\n";
	cout << "1、添加\n"
		<< "2、遍历\n"
		<< "3、删除\n"
		<< "4、修改\n"
		<< "5、查找\n"
		<< "6、清空\n"
		<< "7、退出\n";
	int i;
	string s;
	cin >> i;
	switch (i) {
	case 1: {
		add();
		return true;
	}
	case 2: {
		show ();
		return true;
	}
	case 3: {
		cout << "电话:";
		cin >> s;
		drop (s);
		return true;
	}
	case 4: {
		cout << "电话:";
		cin >> s;
		change(s);
		return true;
	}
	case 5: {
		cout << "电话:";
		cin >> s;
		find (s);
		return true;
	}
	case 6: {
		clear ();
		return true;
	}
	default:
		return false;
	}
}

//添加联系人
void Client::add () {
	Phone p = Phone ();
	string s;
	int i;
	cout << "姓名:";
	cin >> s;
	p.setName (s);
	do {
		cout << "年龄:";
		cin >> i;
	} while (!p.setAge (i));
	do {
		cout << "电话:";
		cin >> s;
	} while (!p.setNumber (s));
	cout << "备注:";
	cin >> s;
	p.setNote (s);
	v.push_back (p);
	cout << "添加成功!\n";
	system ("pause");
	system ("cls");
}

//遍历联系人
void Client::show () {
	cout << "姓名\t\t年龄\t\t电话\t\t备注\n";
	for (Phone p : v) {
		cout << p << endl;
	}
	system ("pause");
	system ("cls");
}

//删除联系人
void Client::drop (string number) {
	for (int i = 0; i < v.size (); i++) {
		if (v[i].getNumber () == number) {
			v.erase (v.begin()+i);
			cout << "删除成功!\n";
			system ("pause");
			system ("cls");
			return;
		}
	}
	cout << "该电话不存在!\n";
	system ("pause");
	system ("cls");
}

//修改联系人
void Client::change (string number) {
	for (int i = 0; i < v.size(); i++) {
		if (v[i].getNumber() == number) {
			Phone p = Phone ();
			string s;
			int i;
			cout << "姓名:";
			cin >> s;
			p.setName (s);
			do {
				cout << "年龄:";
				cin >> i;
			} while (!p.setAge (i));
			do {
				cout << "电话:";
				cin >> s;
			} while (!p.setNumber (s));
			cout << "备注:";
			cin >> s;
			p.setNote (s);
			v[i] = p;
			cout << "插入成功!\n";
			system ("pause");
			system ("cls");
			return;
		}
	}
	cout << "该电话不存在!\n";
	system ("pause");
	system ("cls");
}

//查找联系人
void Client::find (string number) {
	for (Phone p : v) {
		if (p.getNumber () == number) {
			cout << "姓名\t\t年龄\t\t电话\t\t备注\n";
			cout << p << endl;
		}
	}
	system("pause");
	system ("cls");
}

//清空联系人
void Client::clear () {
	v.clear ();
	cout << "清空成功!\n";
	system ("pause");
	system ("cls");
}

6、man.cpp

编写main函数。

#include "client.h"
int main () {
	Client c =  Client ();
	while (c.menu ());
	return 0;
}

4、致谢

这就是全部的内容了,欢迎大家对本系统有待改进的地方提供宝贵的建议,谢谢大家。

标签:return,string,管理系统,联系人,number,c++,Client,通讯录,cout
From: https://blog.csdn.net/weixin_51270513/article/details/141162413

相关文章

  • 计算机毕业设计django+vue祥安保险公司客户关系管理系统【开题+程序+论文】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在数字化转型的大潮中,保险行业正面临着前所未有的机遇与挑战。随着市场竞争的日益激烈,保险公司如何高效地管理客户关系,提升服务质量,增强客......
  • 高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。
    1.项目结构2.config.json{"service":{"api":"http","port":8080,"ip":"0.0.0.0"},"http":{"script":"",&q......
  • 基于flask+vue框架的酒店经营管理系统[开题+论文+程序]-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者对服务质量要求的日益提高,酒店行业面临着前所未有的挑战与机遇。传统的手工管理模式已难以满足酒店日常运营......
  • JSP红十字会管理系统enh63--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:捐赠人员,物资分类,物资信息,捐赠记录,募捐信息,捐款记录,捐赠动态技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Sprin......
  • Springboot+Vue 搭建简单的学生信息管理系统(附源码)
    前言        本博客旨用最基础的知识来开发一个最简单的学生信息管理系统。通过使用Springboot+Vue+Mybatis-plus+axios技术,能帮助大家更好的了解前后端分离的大致流程和框架。文章末尾附有源码和启动项目的想法,赶时间的同学可以直接下载源码进行学习一、技术栈1.......
  • C++浅拷贝和深拷贝
    在C++编程中,对象的拷贝是一项常见的操作。深拷贝和浅拷贝是两种常用的拷贝方式,对于理解对象拷贝的内部机制和避免潜在的问题至关重要。本文将深入解析C++中的深拷贝和浅拷贝的概念、原理以及使用场景,帮助读者更好地掌握和运用这两种拷贝方式。浅拷贝(ShallowCopy)是指在拷贝对象时......
  • 计算机毕业设计django+vue酒店客房管理系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,酒店行业作为旅游产业链中的关键环节,其管理效率与服务质量直接影响到顾客的满意度与忠诚度。传统的酒店客房管理方式......
  • SSM基于Java通识课程管理系统v87xr 线上测试
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:学生,教师,教学视频,课程信息,选课信息,专业,学院,职称开题报告内容一、课题背景随着信息技术的飞速发展,教育领域对高效、智能的管理系统需求日益迫切......
  • C++——构造函数和析构函数
    一、初识构造函数和析构函数简单来说,有对象生成必然会调用构造函数,有对象销毁必然会调用析构函数。构造函数的作用是初始化成员变量,是由编译器去调用的,而析构函数同理也是由编译器调用,不过他的作用则是清理。可以由下面的代码体验两个函数的使用。注意:相同点:两个函数都没有......
  • 如何挑选最适合您需求的项目管理系统
    国内外主流的10款国外项目管理软件对比:PingCode、Worktile、Trello、Monday.com、ClickUp、Jira、Asana、Tapd、Tower、Teambition。在管理复杂项目时,选对工具是成功的关键。全生命周期项目管理系统不仅可以帮助你保持项目的进度和预算控制,还能优化资源分配和风险管理。但面对......