通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:
添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
显示联系人:显示通讯录中所有联系人信息
删除联系人:按照姓名进行删除指定联系人
查找联系人:按照姓名查看指定联系人信息
修改联系人:按照姓名重新修改指定联系人
清空联系人:清空通讯录中所有信息
退出通讯录:退出当前使用的通讯录
主要步骤
建立菜单列表
退出功能实现
添加联系人
显示联系人
寻找联系人函数
删除和查找联系人
修改联系人
清空联系人
1.建立菜单列表
#include"iostream"
using namespace std;
void show_menu(){ //Show menu list
cout << "1--Add a contact\n";
cout << "2--Show contacts\n";
cout << "3--Delete a contact\n";
cout << "4--Find a contact\n";
cout << "5--Modifying a contact\n";
cout << "6--Clear addres books\n";
cout << "0--Exit address books\n";
}
int main(void){
int select = 0; //Record the user 's selection
a:
show_menu(); cout << endl;
cin >> select; cout << endl;
if(select == 1){ //Add
}else if(select == 2){ //Show
}else if(select == 3){ //Delete
}else if(select == 4){ //Find
}else if(select == 5){ //Modify
}else if(select == 6){ //Clear
}else if(select == 0){ //Exit
}else{
cout << "Input error! Please enter again.\n";
}
goto a;
return 0;
}
2.退出功能实现
// Exit那行,即select == 0时,exit(0)即可退出程序
else if(select == 0){
cout << "Have quit.\n";
system("pause"); system("cls"); //pause是按任意键继续 cls是清屏
exit(0);
}
3.添加联系人
3.1先创建联系人的结构体 存放(姓名,性别...)
struct person{ //创建联系人结构题
string Name;
int Sex; //Sex可以用1或2来表示男或女
int Age;
string Phone;
string address;
};
3.2创建通讯录的结构体 设置联系人结构体数组变量
struct addBooks{ //创建通讯录结构体
person Array[MAX]; //定义person结构体变量 MAX为宏定义 1000
int Size; //记录当前人数
};
3.3在main函数中定义addBooks 结构体变量
addbooks abs;
abs.Size = 0; //初始话Size为0
3.4封装,调用添加联系人函数
void Add(struct addBooks *abs){ //封装添加联系人函数 利用指针传递 可以改变实参
cout << "name: "; string name; cin >> name; abs->Array[abs->Size].Name = name;
cout << "sex(1--男 or 2--女): "; int sex;
while(1){ //若输入除了男和女别的数 则重新输入
cin >> sex;
if(sex == 1 or sex == 2){
abs->Array[abs->Size].Sex = sex;break;
}else{
cout << "Please enter again! (1--man or 2--woman):\n";
}
}
cout << "age: "; int age; cin >> age; abs->Array[abs->Size].Age = age;
cout << "phone: "; string phone; cin >> phone; abs->Array[abs->Size].Phone = phone;
cout << "address: "; string address; cin >> address; abs->Array[abs->Size].Address = address;
cout << "Add successfully!\n"; abs->Size++; //每添加成功一次Size++
system("pause"); system("cls");
}
// 完成以上操作再main函数中调用此函数
4.显示联系人函数
//封装一个显示联系人函数
// 2_Show
void Show(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
for(int i = 0;i < abs->Size;i++){
cout << "name:" << abs->Array[i].Name << "\t";
cout << "sex:" << (abs->Array[i].Sex == 1 ? "男":"女") << "\t";
cout << "age:" << abs->Array[i].Age << "\t";
cout << "phone:" << abs->Array[i].Phone << "\t";
cout << "address:" << abs->Array[i].Address << endl;
}system("pause");system("cls"); //显示完清个屏
}
5.创建寻找联系人函数
// 寻找联系人函数
int isExist(addBooks *abs,string name){
for(int i = 0;i < abs->Size;i++){
if(abs->Array[i].Name == name){
return i; //返回数组的下标值
}
}return -1; //若没找到返-1
}
6.删除和查找联系人
//封装删除联系人函数
// 3_Delete
void Del(addBooks *abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "Please enter name of contact you want to delete: "; string name; cin >> name;
int ret = isExist(abs,name); //ret存储返回值 因为del函数形参已经有指针指向abs了 所以这里不需&
if(ret != -1){ //说明找到了
for(int i = ret;i < abs->Size;i++){
abs->Array[i] = abs->Array[i+1]; //后一个值赋给前一个值
}abs->Size--; //删除后Size--;
cout << "Delete successfully!\n";
}else{
cout << "No one has been found.\n";
}system("pause"); system("cls");
}
//封装查找联系人函数
// 4_Find
void Find(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "please enter name of contact you want to looking for: "; string name; cin >> name;
int ret = isExist(abs,name);
if(ret != -1){ //说明找到了
cout << "name:" << abs->Array[ret].Name << "\t";
cout << "sex:" << abs->Array[ret].Sex << "\t";
cout << "age:" << abs->Array[ret].Age << "\t";
cout << "phone:" << abs->Array[ret].Phone << "\t";
cout << "address:" << abs->Array[ret].Address << endl;
}else{
cout << "No one has been found.\n";
}system("pause"); system("cls");
}
7.修改联系人
// 5_Modify
void Modify(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "Please enter the name of the contact you want to modifying: "; string name; cin >> name;
int ret = isExist(abs,name);
if(ret != -1){ //说明找到了
cout << "This is the contact you will modify:\n";
cout << "name:" << abs->Array[ret].Name << "\t";
cout << "sex:" << abs->Array[ret].Sex << "\t";
cout << "age:" << abs->Array[ret].Age << "\t";
cout << "phone:" << abs->Array[ret].Phone << "\t";
cout << "address:" << abs->Array[ret].Address << endl;
cout << "\nModify(1) or exit(else)?\n"; char reply;/*记住用户的选择*/ cin >> reply;
if(reply == '1'){
cout << "name: "; string name; cin >> name; abs->Array[ret].Name = name;
cout << "sex(1--男 or 2--女): "; int sex; cin >> sex; abs->Array[ret].Sex = sex;
cout << "age: "; int age; cin >> age; abs->Array[ret].Age = age;
cout << "phone: "; string phone; cin >> phone; abs->Array[ret].Phone = phone;
cout << "address: "; string address; cin >> address; abs->Array[ret].Address = address;
cout << "Modify successfully!\n";
}else{
cout << "Have quit.\n";
}
}else{
cout << "No one has been found.\n";
}system("pause"); system("cls");
}
8.清空联系人
// 6_Clear address
void Clear(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "Are you sure about clearing?\n";
cout << "Yes(Y/y) or No(N/n)\n"; char reply; cin >> reply;
if(reply == 'y' or reply == 'Y'){
abs->Size = 0; cout << "Clear successfully!\n";
}else{
cout << "Have quit.\n";
}system("pause"); system("cls");
}
9.源码
#include"iostream"
using namespace std;
#define MAX 1000 //宏定义MAX方便后期维护
void show_menu(){ //Show menu list
cout << "1--Add a contact\n";
cout << "2--Show contacts\n";
cout << "3--Delete a contact\n";
cout << "4--Find a contact\n";
cout << "5--Modifying a contact\n";
cout << "6--Clear addres books\n";
cout << "0--Exit address books\n";
}
struct person{ //create contact strusture
string Name;
int Sex;
int Age;
string Phone;
string Address;
};
struct addBooks{ //create address books structure
person Array[MAX];
int Size; //Record the current number
};
// 寻找联系人函数
int isExist(addBooks *abs,string name){
for(int i = 0;i < abs->Size;i++){
if(abs->Array[i].Name == name){
return i; //返回数组的下标值
}
}return -1; //若没找到返-1
}
// 1_Add
void Add(struct addBooks *abs){
cout << "name: "; string name; cin >> name; abs->Array[abs->Size].Name = name;
cout << "sex(1--男 or 2--女): "; int sex;
while(1){ //若输入除了男和女别的数 则重新输入
cin >> sex;
if(sex == 1 or sex == 2){
abs->Array[abs->Size].Sex = sex;break;
}else{
cout << "Please enter again! (1--man or 2--woman):\n";
}
}
cout << "age: "; int age; cin >> age; abs->Array[abs->Size].Age = age;
cout << "phone: "; string phone; cin >> phone; abs->Array[abs->Size].Phone = phone;
cout << "address: "; string address; cin >> address; abs->Array[abs->Size].Address = address;
cout << "Add successfully!\n"; abs->Size++; //每添加成功一次Size++
system("pause"); system("cls");
}
// 2_Show
void Show(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
for(int i = 0;i < abs->Size;i++){
cout << "name:" << abs->Array[i].Name << "\t";
cout << "sex:" << (abs->Array[i].Sex == 1 ? "男":"女") << "\t";
cout << "age:" << abs->Array[i].Age << "\t";
cout << "phone:" << abs->Array[i].Phone << "\t";
cout << "address:" << abs->Array[i].Address << endl;
}system("pause");system("cls");
}
// 3_Delete
void Del(addBooks *abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "Please enter name of contact you want to delete: "; string name; cin >> name;
int ret = isExist(abs,name); //ret存储返回值
if(ret != -1){ //说明找到了
for(int i = ret;i < abs->Size;i++){
abs->Array[i] = abs->Array[i+1]; //后一个值赋给前一个值
}abs->Size--; //删除后Size--;
cout << "Delete successfully!\n";
}else{
cout << "No one has been found.\n";
}system("pause"); system("cls");
}
// 4_Find
void Find(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "please enter name of contact you want to looking for: "; string name; cin >> name;
int ret = isExist(abs,name);
if(ret != -1){ //说明找到了
cout << "name:" << abs->Array[ret].Name << "\t";
cout << "sex:" << abs->Array[ret].Sex << "\t";
cout << "age:" << abs->Array[ret].Age << "\t";
cout << "phone:" << abs->Array[ret].Phone << "\t";
cout << "address:" << abs->Array[ret].Address << endl;
}else{
cout << "No one has been found.\n";
}system("pause"); system("cls");
}
// 5_Modify
void Modify(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "Please enter the name of the contact you want to modifying: "; string name; cin >> name;
int ret = isExist(abs,name);
if(ret != -1){ //说明找到了
cout << "This is the contact you will modify:\n";
cout << "name:" << abs->Array[ret].Name << "\t";
cout << "sex:" << (abs->Array[ret].Sex == 1 ? "男":"女" )<< "\t";
cout << "age:" << abs->Array[ret].Age << "\t";
cout << "phone:" << abs->Array[ret].Phone << "\t";
cout << "address:" << abs->Array[ret].Address << endl;
cout << "\nModify(1) or exit(else)?\n"; char reply;/*记住用户的选择*/ cin >> reply;
if(reply == '1'){
cout << "name: "; string name; cin >> name; abs->Array[ret].Name = name;
cout << "sex(1--男 or 2--女): "; int sex; cin >> sex; abs->Array[ret].Sex = sex;
cout << "age: "; int age; cin >> age; abs->Array[ret].Age = age;
cout << "phone: "; string phone; cin >> phone; abs->Array[ret].Phone = phone;
cout << "address: "; string address; cin >> address; abs->Array[ret].Address = address;
cout << "Modify successfully!\n";
}else{
cout << "Have quit.\n";
}
}else{
cout << "No one has been found.\n";
}system("pause"); system("cls");
}
// 6_Clear address books
void Clear(addBooks * abs){
if(abs->Size == 0){ //作个判断 若没有联系人则返回
cout << "The current record is empty!\n"; system("pause");system("cls");
return;
}
cout << "Are you sure about clearing?\n";
cout << "Yes(Y/y) or No(N/n)\n"; char reply; cin >> reply;
if(reply == 'y' or reply == 'Y'){
abs->Size = 0; cout << "Clear successfully!\n";
}else{
cout << "Have quit.\n";
}system("pause"); system("cls");
}
int main(void){
addBooks abs; //用指针记录addBooks的结构变量 指针传递利于改变实参
abs.Size = 0; //最初通讯录人数为0
int select = 0; //Record the user 's selection
a:
show_menu(); cout << endl;
cin >> select; cout << endl;
if(select == 1){ //Add
Add(&abs);
}else if(select == 2){ //Show
Show(&abs);
}else if(select == 3){ //Delete
Del(&abs);
}else if(select == 4){ //Find
Find(&abs);
}else if(select == 5){ //Modify
Modify(&abs);
}else if(select == 6){ //Clear
Clear(&abs);
}else if(select == 0){ //Exit
cout << "Have quit.\n";system("pause");return 0;
}else{
cout << "Input error! Please enter again.\n";
}
goto a;
return 0;
}
若以上代码或说明存在错误的地方,欢迎同学们指正,共同进步,谢谢大家!