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