c++通讯录管理系统

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、致谢

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值