全部代码在visual studio 2019(本地Windows调试器)成功编译运行。
代码中有注释,看不懂的地方可以留言。
若要全套代码,请移步
通讯录管理系统(需求分析设计+代码)
person.h文件
#ifndef PERSON_H #define PERSON_H #include#include using namespace std; //Person类 class Person { private: char name[10];//联系人姓名 char birthday[12];//出生日期 char telephone[12];//电话号码 char qq[12];//QQ号码 char email[25];//电子邮箱 char firm[31];//工作单位名称 public: Person();//无参构造函数 Person(char n[] , char bir[], char tel[], char q[], char ema[], char fir[]);//带参构造函数 Person(char n[]);//只使用姓名构造 bool operator ==(Person& p);//重载运算符==,判断是否为同一个联系人 char* getName()//获取联系人姓名 { return name; } char* getTelephone()//获取联系人电话号码 { return telephone; } //使用友元函数重载输入输出流 friend istream& operator >>(istream &in, Person& p); friend ostream& operator <<(ostream& out, Person& p); }; #endif
person.cpp文件
#include#include "person.h" using namespace std; //重载输入流 istream& operator >>(istream& in, Person& p) { cout << "姓名:"; in >> p.name; cout << "出生日期:"; in >> p.birthday; cout << "电话号码:"; in >> p.telephone; cout << "QQ:"; in >> p.qq; cout << "电子邮箱:"; in >> p.email; cout << "工作单位:"; in >> p.firm; return in; } //重载输出流 ostream& operator <<(ostream& out, Person& p) { out << endl; out << "姓名:" << p.name << "t出生日期:" << p.birthday << "t电话号码:" << p.telephone << "tQQ:" << p.qq << "t电子邮箱:" << p.email << "t工作单位:" << p.firm << endl; return out; } //无参构造函数 Person::Person() { name[0] = ' '; birthday[0] = ' '; telephone[0] = ' '; qq[0] = ' '; email[0] = ' '; firm[0] = ' '; } //带参构造函数 Person::Person(char n[], char bir[], char tel[], char q[], char ema[], char fir[]) { strcpy_s(name,strlen(n)+1, n); strcpy_s(birthday,strlen(bir)+1, bir); strcpy_s(telephone, strlen(tel)+1,tel); strcpy_s(qq,strlen(q)+1, q); strcpy_s(email, strlen(ema)+1,ema); strcpy_s(firm,strlen(fir)+1, fir); } //只带一个参数的构造函数 Person::Person(char n[]) { strcpy_s(name,strlen(n)+1, n); birthday[0] = ' '; telephone[0] = ' '; qq[0] = ' '; email[0] = ' '; firm[0] = ' '; } //重载运算符== //这里将姓名作为唯一标志,即假设联系人的姓名不重复 //若姓名一致,则视为同一联系人 bool Person::operator==(Person& p) { if (strcmp(this->name, p.name) == 0) { return true; } else { return false; } }
data.h文件
#ifndef DATA_H #define DATA_H #include#include #include using namespace std; #include "person.h" typedef vector VectorPerson;//取别名 //Data类 class Data { private: VectorPerson personData;//用vector顺序容器存储联系人信息 public: Data() {};//构造函数 //添加联系人 void addPerson(Person& p); //删除联系人 void deletePerson(Person& p); //修改联系人信息 void modifyPerson(string& pname); //查找联系人 int findPerson(Person& p);//查询通讯录中是否存在该联系人 void findTelephone(string& pname);//通过姓名查找联系人的电话号码 void findPerson(string& ptelephone);//通过电话号码查找联系人的全部信息 //显示信息 void displayPerson();//显示所有联系人的全部信息 void displayPerson(string& pname);//显示某个联系人的全部信息 //清空通讯录 void clear(); }; #endif
data.cpp文件
#includeusing namespace std; #include "data.h" //查询通讯录中是否存在该联系人 int Data::findPerson(Person& p) { for (unsigned i = 0; i < personData.size(); i++) { if (personData[i] == p) { return i; } } return -1;//未在通讯录中查找到该联系人,返回-1 } //添加联系人 void Data::addPerson(Person& p) { if (findPerson(p) == -1)//说明通讯录中暂无该联系人 { personData.push_back(p);//添加 } else { cout << "添加联系人操作出错!!!该联系人已存在。" << endl; } } //删除联系人 void Data::deletePerson(Person& p) { int i = findPerson(p); if (i == -1) { cout << "删除联系人操作出错!!!不存在该联系人。" << endl; return; } VectorPerson::iterator pIter = personData.begin(); int j = 0; while (j++ < i) { pIter++; } personData.erase(pIter);//使用erase()函数释放vector容器元素 } //修改信息 //前提是通讯录中已经存在该联系人 void Data::modifyPerson(string& pname) { unsigned i; bool flag = false;//标志是否找到该联系人,true代表找到 for ( i= 0; i < personData.size(); i++) { if (string(personData[i].getName()) == pname) { flag = true; break; } } if (flag) { deletePerson(personData[i]);//先删除 cout << "已找到" << pname << ",请输入其信息:" << endl; Person p;//无参构造 cin >> p; personData.push_back(p);//重新添加 }else { cout << "修改联系人信息操作出错!!!不存在该联系人。" << endl; } } //显示所有联系人的全部信息 void Data::displayPerson() { for (unsigned i = 0; i < personData.size(); i++) { cout << personData[i]; } } //显示单个联系人的全部信息 void Data::displayPerson(string& pname) { unsigned i; bool flag = false; for ( i= 0; i < personData.size(); i++) { if (string(personData[i].getName()) == pname) { flag = true;//找到该联系人 break; } } if (flag) { cout << personData[i]; } else { cout << "通讯录中不存在联系人:" << pname << endl; } } //通过姓名查找联系人的电话号码 void Data::findTelephone(string& pname) { unsigned i; bool flag = false; for (i= 0; i < personData.size(); i++) { if (string(personData[i].getName()) == pname) { flag = true; break; } } if (flag) { cout << pname << "的电话号码:" << personData[i].getTelephone() << endl; } else { cout << "通讯录中不存在联系人:" << pname << endl; } } //通过电话号码查找联系人的全部信息 void Data::findPerson(string& ptelephone) { for (unsigned i = 0; i < personData.size(); i++) { if (string(personData[i].getTelephone()) == ptelephone) { cout << personData[i]; return; } } cout << "不存在电话号码为 " << ptelephone << " 的联系人!" << endl; } //清空通讯录 void Data::clear() { personData.clear();//使用clear()函数清空vector容器 }
menu.h文件
#ifndef MENU_H
#define MENU_H
//Menu类
class Menu
{
public:
Menu() {};//构造函数
int showMainMenu();//展示菜单
};
#endif
menu.cpp文件
#include "menu.h" #includeusing namespace std; int Menu::showMainMenu() { system("cls");//清屏 //菜单简单设计 cout << endl; cout << "--------------------欢迎使用通讯录管理系统---------------------" << endl; cout << "-------------------------1、显示联系人-------------------------" << endl; cout << "-------------------------2、添加联系人-------------------------" << endl; cout << "-------------------------3、修改信息---------------------------" << endl; cout << "-------------------------4、删除联系人-------------------------" << endl; cout << "-------------------------5、查询联系人-------------------------" << endl; cout << "-------------------------6、按姓名查找电话号码-----------------" << endl; cout << "-------------------------7、按电话号码查询机主信息-------------" << endl; cout << "-------------------------8、清空通讯录-------------------------" << endl; cout << "-------------------------9、退出系统---------------------------" << endl; cout << endl; cout << "请选择(1-9):" << endl; int select;//选择菜单项 cin >> select; while (select < 1 || select>9) { cout << "选择错误!!请重新选择(1-9):" << endl; cin.clear(); cin.sync(); cin >> select; } return select; }
application.h文件
#ifndef APPLICATION_H
#define APPLICATION_H
#include "data.h"
#include "menu.h"
//Application类
class Application
{
private:
Data myData;//创建Data类对象
Menu myMenu;//创建Menu类对象
public:
Application() {};//构造函数
void run();//主界面处理函数
void displayAllPerson();//菜单项1,显示联系人功能的函数
void addNewPerson();//菜单项2,添加联系人功能的函数
void modPerson();//菜单项3,修改信息功能的函数
void delPerson();//菜单项4,删除联系人功能的函数
void findOnePerson();//菜单项5,查询联系人功能的函数
void findByName();//菜单项6,通过姓名查找电话号码功能的函数
void findByTel();//菜单项7,通过电话号码查询机主信息功能的函数
void clearAll();//菜单项8,清空通讯录功能的函数
};
#endif
application.cpp文件
#include "application.h"
void Application::run()
{
bool userExited = false;//标志是否退出系统,true代表退出
while (!userExited)
{
int userSelection = myMenu.showMainMenu();//得到选择的菜单项
switch (userSelection)
{
case 1:
displayAllPerson();
break;
case 2:
addNewPerson();
break;
case 3:
modPerson();
break;
case 4:
delPerson();
break;
case 5:
findOnePerson();
break;
case 6:
findByName();
break;
case 7:
findByTel();
break;
case 8:
clearAll();
break;
case 9:
userExited = true;
}
if (userSelection != 9)
{
cout << endl;
cout << "返回主界面" << endl;
system("pause");
}
else
{
cout << "!!退出系统!!" << endl;
}
}
}
//展示所有联系人的全部信息
void Application::displayAllPerson()
{
cout << "通讯录中联系人:n";
myData.displayPerson();
}
//新增联系人
void Application::addNewPerson()
{
cout << "请输入新的联系人信息:" << endl;
Person newPerson;
cin >> newPerson;
myData.addPerson(newPerson);
}
//修改某一联系人信息
void Application::modPerson()
{
string pname;
cout << "请输入要修改的联系人的姓名:" ; cin >> pname;
myData.modifyPerson(pname);
}
//删除联系人
void Application::delPerson()
{
string pn;
cout << "请输入要删除的联系人的姓名:"; cin >> pn;
// c_str()函数:返回指针,指向string类对象中的字符串,末尾加上' '
Person temp((char*)pn.c_str());//只用姓名构造
if (myData.findPerson(temp) != -1)
{
myData.deletePerson(temp);
}
}
//查询单个联系人的信息
void Application::findOnePerson()
{
string pn;
cout << "请输入要查找的联系人的姓名:"; cin >> pn;
myData.displayPerson(pn);
}
//通过姓名查找电话号码
void Application::findByName()
{
string pn;
cout << "请输入要查找的联系人的姓名:"; cin >> pn;
myData.findTelephone(pn);
}
//通过电话号码查询机主信息
void Application::findByTel()
{
string ptel;
cout << "请输入电话号码:"; cin >> ptel;
myData.findPerson(ptel);
}
//清空通讯录
void Application::clearAll()
{
myData.clear();
}
appMain.cpp文件
#include "application.h"
int main()
{
Application myApp;//创建对象
myApp.run();//调用主界面函数
return 0;
}



