通訊錄管理系統
1、系統需求
通訊錄是一個可以記錄親人、好友信息的工具。
本教程主要利用C++來實現一個通訊錄管理系統
系統中需要實現的功能如下:
- 添加聯系人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、聯系電話、家庭住址)最多記錄1000人
- 顯示聯系人:顯示通訊錄中所有聯系人信息
- 刪除聯系人:按照姓名進行刪除指定聯系人
- 查找聯系人:按照姓名查看指定聯系人信息
- 修改聯系人:按照姓名重新修改指定聯系人
- 清空聯系人:清空通訊錄中所有信息
- 退出通訊錄:退出當前使用的通訊錄
2、創建項目
創建項目步驟如下:
- 創建新項目
- 添加文件
2.1 創建項目
打開vs2017后,點擊創建新項目,創建新的C++項目
填寫項目名稱,選擇項目路徑
2.2添加文件
添加成功后,效果如圖:
)
至此,項目已創建完畢
3、菜單功能
功能描述: 用戶選擇功能的界面
菜單界面效果如下圖:
步驟:
- 封裝函數顯示該界面 如
void showMenu()
- 在main函數中調用封裝好的函數
代碼:
#include<iostream>
using namespace std;
//菜單界面
void showMenu()
{
cout << "***************************" << endl;
cout << "***** 1、添加聯系人 *****" << endl;
cout << "***** 2、顯示聯系人 *****" << endl;
cout << "***** 3、刪除聯系人 *****" << endl;
cout << "***** 4、查找聯系人 *****" << endl;
cout << "***** 5、修改聯系人 *****" << endl;
cout << "***** 6、清空聯系人 *****" << endl;
cout << "***** 0、退出通訊錄 *****" << endl;
cout << "***************************" << endl;
}
int main() {
showMenu();
system("pause");
return 0;
}
4、退出功能
功能描述:退出通訊錄系統
思路:根據用戶不同的選擇,進入不同的功能,可以選擇switch分支結構,將整個架構進行搭建
當用戶選擇0時候,執行退出,選擇其他先不做操作,也不會退出程序
代碼:
int main() {
int select = 0;
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1: //添加聯系人
break;
case 2: //顯示聯系人
break;
case 3: //刪除聯系人
break;
case 4: //查找聯系人
break;
case 5: //修改聯系人
break;
case 6: //清空聯系人
break;
case 0: //退出通訊錄
cout << "歡迎下次使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}
效果圖:
5、添加聯系人
功能描述:
實現添加聯系人功能,聯系人上限為1000人,聯系人信息包括(姓名、性別、年齡、聯系電話、家庭住址)
添加聯系人實現步驟:
- 設計聯系人結構體
- 設計通訊錄結構體
- main函數中創建通訊錄
- 封裝添加聯系人函數
- 測試添加聯系人功能
5.1 設計聯系人結構體
聯系人信息包括:姓名、性別、年齡、聯系電話、家庭住址
設計如下:
#include <string> //string頭文件
//聯系人結構體
struct Person
{
string m_Name; //姓名
int m_Sex; //性別:1男 2女
int m_Age; //年齡
string m_Phone; //電話
string m_Addr; //住址
};
5.2 設計通訊錄結構體
設計時候可以在通訊錄結構體中,維護一個容量為1000的存放聯系人的數組,並記錄當前通訊錄中聯系人數量
設計如下
#define MAX 1000 //最大人數
//通訊錄結構體
struct Addressbooks
{
struct Person personArray[MAX]; //通訊錄中保存的聯系人數組
int m_Size; //通訊錄中人員個數
};
5.3 main函數中創建通訊錄
添加聯系人函數封裝好后,在main函數中創建一個通訊錄變量,這個就是我們需要一直維護的通訊錄
mian函數起始位置添加:
//創建通訊錄
Addressbooks abs;
//初始化通訊錄中人數
abs.m_Size = 0;
5.4 封裝添加聯系人函數
思路:添加聯系人前先判斷通訊錄是否已滿,如果滿了就不再添加,未滿情況將新聯系人信息逐個加入到通訊錄
添加聯系人代碼:
//1、添加聯系人信息
void addPerson(Addressbooks *abs)
{
//判斷電話本是否滿了
if (abs->m_Size == MAX)
{
cout << "通訊錄已滿,無法添加" << endl;
return;
}
else
{
//姓名
string name;
cout << "請輸入姓名:" << endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name = name;
cout << "請輸入性別:" << endl;
cout << "1 -- 男" << endl;
cout << "2 -- 女" << endl;
//性別
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArray[abs->m_Size].m_Sex = sex;
break;
}
cout << "輸入有誤,請重新輸入";
}
//年齡
cout << "請輸入年齡:" << endl;
int age = 0;
cin >> age;
abs->personArray[abs->m_Size].m_Age = age;
//聯系電話
cout << "請輸入聯系電話:" << endl;
string phone = "";
cin >> phone;
abs->personArray[abs->m_Size].m_Phone = phone;
//家庭住址
cout << "請輸入家庭住址:" << endl;
string address;
cin >> address;
abs->personArray[abs->m_Size].m_Addr = address;
//更新通訊錄人數
abs->m_Size++;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
}
5.5 測試添加聯系人功能
選擇界面中,如果玩家選擇了1,代表添加聯系人,我們可以測試下該功能
在switch case 語句中,case1里添加:
case 1: //添加聯系人
addPerson(&abs);
break;
測試效果如圖:
6、顯示聯系人
功能描述:顯示通訊錄中已有的聯系人信息
顯示聯系人實現步驟:
- 封裝顯示聯系人函數
- 測試顯示聯系人功能
6.1 封裝顯示聯系人函數
思路:判斷如果當前通訊錄中沒有人員,就提示記錄為空,人數大於0,顯示通訊錄中信息
顯示聯系人代碼:
//2、顯示所有聯系人信息
void showPerson(Addressbooks * abs)
{
if (abs->m_Size == 0)
{
cout << "當前記錄為空" << endl;
}
else
{
for (int i = 0; i < abs->m_Size; i++)
{
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
cout << "性別:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << abs->personArray[i].m_Age << "\t";
cout << "電話:" << abs->personArray[i].m_Phone << "\t";
cout << "住址:" << abs->personArray[i].m_Addr << endl;
}
}
system("pause");
system("cls");
}
6.2 測試顯示聯系人功能
在switch case語句中,case 2 里添加
case 2: //顯示聯系人
showPerson(&abs);
break;
測試效果如圖:
7、刪除聯系人
功能描述:按照姓名進行刪除指定聯系人
刪除聯系人實現步驟:
- 封裝檢測聯系人是否存在
- 封裝刪除聯系人函數
- 測試刪除聯系人功能
7.1 封裝檢測聯系人是否存在
設計思路:
刪除聯系人前,我們需要先判斷用戶輸入的聯系人是否存在,如果存在刪除,不存在提示用戶沒有要刪除的聯系人
因此我們可以把檢測聯系人是否存在封裝成一個函數中,如果存在,返回聯系人在通訊錄中的位置,不存在返回-1
檢測聯系人是否存在代碼:
//判斷是否存在查詢的人員,存在返回在數組中索引位置,不存在返回-1
int isExist(Addressbooks * abs, string name)
{
for (int i = 0; i < abs->m_Size; i++)
{
if (abs->personArray[i].m_Name == name)
{
return i;
}
}
return -1;
}
7.2 封裝刪除聯系人函數
根據用戶輸入的聯系人判斷該通訊錄中是否有此人
查找到進行刪除,並提示刪除成功
查不到提示查無此人。
//3、刪除指定聯系人信息
void deletePerson(Addressbooks * abs)
{
cout << "請輸入您要刪除的聯系人" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
for (int i = ret; i < abs->m_Size; i++)
{
abs->personArray[i] = abs->personArray[i + 1];
}
abs->m_Size--;
cout << "刪除成功" << endl;
}
else
{
cout << "查無此人" << endl;
}
system("pause");
system("cls");
}
7.3 測試刪除聯系人功能
在switch case 語句中,case3里添加:
case 3: //刪除聯系人
deletePerson(&abs);
break;
測試效果如圖:
存在情況:
不存在情況:
8、查找聯系人
功能描述:按照姓名查看指定聯系人信息
查找聯系人實現步驟
- 封裝查找聯系人函數
- 測試查找指定聯系人
8.1 封裝查找聯系人函數
實現思路:判斷用戶指定的聯系人是否存在,如果存在顯示信息,不存在則提示查無此人。
查找聯系人代碼:
//4、查找指定聯系人信息
void findPerson(Addressbooks * abs)
{
cout << "請輸入您要查找的聯系人" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
cout << "性別:" << abs->personArray[ret].m_Sex << "\t";
cout << "年齡:" << abs->personArray[ret].m_Age << "\t";
cout << "電話:" << abs->personArray[ret].m_Phone << "\t";
cout << "住址:" << abs->personArray[ret].m_Addr << endl;
}
else
{
cout << "查無此人" << endl;
}
system("pause");
system("cls");
}
8.2 測試查找指定聯系人
在switch case 語句中,case4里添加:
case 4: //查找聯系人
findPerson(&abs);
break;
測試效果如圖
存在情況:
不存在情況:
9、修改聯系人
功能描述:按照姓名重新修改指定聯系人
修改聯系人實現步驟
- 封裝修改聯系人函數
- 測試修改聯系人功能
9.1 封裝修改聯系人函數
實現思路:查找用戶輸入的聯系人,如果查找成功進行修改操作,查找失敗提示查無此人
修改聯系人代碼:
//5、修改指定聯系人信息
void modifyPerson(Addressbooks * abs)
{
cout << "請輸入您要修改的聯系人" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)
{
//姓名
string name;
cout << "請輸入姓名:" << endl;
cin >> name;
abs->personArray[ret].m_Name = name;
cout << "請輸入性別:" << endl;
cout << "1 -- 男" << endl;
cout << "2 -- 女" << endl;
//性別
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArray[ret].m_Sex = sex;
break;
}
cout << "輸入有誤,請重新輸入";
}
//年齡
cout << "請輸入年齡:" << endl;
int age = 0;
cin >> age;
abs->personArray[ret].m_Age = age;
//聯系電話
cout << "請輸入聯系電話:" << endl;
string phone = "";
cin >> phone;
abs->personArray[ret].m_Phone = phone;
//家庭住址
cout << "請輸入家庭住址:" << endl;
string address;
cin >> address;
abs->personArray[ret].m_Addr = address;
cout << "修改成功" << endl;
}
else
{
cout << "查無此人" << endl;
}
system("pause");
system("cls");
}
9.2 測試修改聯系人功能
在switch case 語句中,case 5里添加:
case 5: //修改聯系人
modifyPerson(&abs);
break;
測試效果如圖:
查不到指定聯系人情況:
查找到聯系人,並修改成功:
再次查看通訊錄,確認修改完畢
10、清空聯系人
功能描述:清空通訊錄中所有信息
清空聯系人實現步驟
- 封裝清空聯系人函數
- 測試清空聯系人
10.1 封裝清空聯系人函數
實現思路: 將通訊錄所有聯系人信息清除掉,只要將通訊錄記錄的聯系人數量置為0,做邏輯清空即可。
清空聯系人代碼:
//6、清空所有聯系人
void cleanPerson(Addressbooks * abs)
{
abs->m_Size = 0;
cout << "通訊錄已清空" << endl;
system("pause");
system("cls");
}
10.2 測試清空聯系人
在switch case 語句中,case 6 里添加:
case 6: //清空聯系人
cleanPerson(&abs);
break;
測試效果如圖:
清空通訊錄
再次查看信息,顯示記錄為空
至此,通訊錄管理系統完成!
11.完整代碼:
#include <iostream>
#include<string>
#define MAX 1000//最大人數
using namespace std;
//設計聯系人結構體
struct Person
{
string m_Name;//姓名
int m_Sex;//性別 1 男 2 女
int m_Age;//年齡
string m_Phone;//電話
string m_Addr;//地址
};
//設計通訊錄結構體
struct Addressbooks
{
struct Person personArray[MAX];//通訊錄中保存的人員數組
int m_size;//通訊錄中的人員個數
};
//* 封裝函數顯示該界面 如 `void showMenu()
void showMenu()
{
cout << "********************************" << endl;
cout << "***** 1.添加聯系人 *****" << endl;
cout << "***** 2.顯示聯系人 *****" << endl;
cout << "***** 3.刪除聯系人 *****" << endl;
cout << "***** 4.查找聯系人 *****" << endl;
cout << "***** 5.修改聯系人 *****" << endl;
cout << "***** 6.清空聯系人 *****" << endl;
cout << "***** 0.退出通訊錄 *****" << endl;
cout << "********************************" << endl;
}
//1.封裝添加聯系人操作的函數
void addPerson(Addressbooks * abs)
{
//先判斷通訊錄是否已滿
if (abs->m_size == MAX)
{
cout << "通訊錄已滿!" << endl;
return;
}
else
{
//輸入姓名
string name;
cout << "請輸入姓名:";
cin >> name;
abs->personArray[abs->m_size].m_Name = name;
//輸入性別
cout << "請輸入性別:" << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
int Sex = 0;
while (true)
{
cin >> Sex;
if (Sex == 1 || Sex == 2)
{
abs->personArray[abs->m_size].m_Sex = Sex;
break;
}
cout << "您的輸入有誤,請重新輸入:" << endl;
}
//輸入年齡
cout << "請輸入年齡: " << endl;
int Age = 0;
cin >> Age;
abs->personArray[abs->m_size].m_Age = Age;
//輸入電話
cout << "請輸入電話: " << endl;
string Phone;
cin >> Phone;
abs->personArray[abs->m_size].m_Phone = Phone;
//輸入地址
cout << "請輸入地址: " << endl;
string Address;
cin >> Address;
abs->personArray[abs->m_size].m_Addr = Address;
//更新通訊錄人數
abs->m_size++;
cout << "添加聯系人成功!" << endl;
system("pause");//請按任意鍵繼續
system("cls");//清屏操作
}
}
//2.顯示聯系人
void showPerson(Addressbooks * abs)
{
//1.判斷通訊錄中的人數是否為零,如果為零,則輸出“通訊錄中沒有聯系人”
if (abs->m_size == 0)
{
cout << "通訊錄中沒有聯系人!" << endl;
}
else//2.如果通訊錄中的人數不為零,則逐條顯示聯系人信息
{
for (int i = 0; i < abs->m_size; i++)
{
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
cout << "性別: " << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << abs->personArray[i].m_Age <<"\t" ;
cout << "電話:" << abs->personArray[i].m_Phone << "\t";
cout << "地址:" << abs->personArray[i].m_Addr << endl;
}
}
system("pause");
system("cls");
}
//檢測聯系人是否存在,如果存在,則返回聯系人在通訊錄數組中的位置,不存在則返回-1
int isExist(Addressbooks * abs, string name)
{
//找到了輸入的聯系人名字
for (int i = 0; i < abs->m_size; i++)
{
if (abs->personArray[i].m_Name == name)
{
return i;//找到了,返回這個人在數組中的下標編號
}
}
return -1;//如果遍歷結束都沒有找到,則返回-1
}
//3.刪除聯系人的函數
void deletePerson(Addressbooks * abs)
{
cout << "請輸入你要刪除的聯系人名字:" << endl;
string name;
cin >> name;
int logo = isExist(abs, name);//看logo的值是否等於-1來判斷是否查找到聯系人名字
if (logo != -1)
{
for (int i = logo; i < abs->m_size; i++)
{
abs->personArray[i] = abs->personArray[i + 1];//刪除數組中的第i位
}
abs->m_size--;//更新通訊錄中的人員數
cout << "刪除成功!" << endl;
}
else
cout << "查無此人!" << endl;
system("pause");
system("cls");
}
//4.查找聯系人
void findPerson(Addressbooks * abs)
{
cout << "請輸入要查找的聯系人姓名: " << endl;
string name;
cin >> name;
//判斷指定的人是否存在於通訊錄中
int logo = isExist(abs, name);
if (logo != -1)//輸出要查找的聯系人信息
{
cout << "姓名:" << abs->personArray[logo].m_Name << "\t";
cout << "性別: " << (abs->personArray[logo].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << abs->personArray[logo].m_Age << "\t";
cout << "電話:" << abs->personArray[logo].m_Phone << "\t";
cout << "地址:" << abs->personArray[logo].m_Addr << endl;
}
else
cout << "查無此人" << endl;
system("pause");
system("cls");
}
//5.修改聯系人
void modifyPerson(Addressbooks * abs)
{
cout << "請輸入要修改的聯系人名稱: " << endl;
string name;
cin >> name;
int logo = isExist(abs, name);
if (logo != -1)
{
cout << "開始修改聯系人信息:" << endl;
//姓名
cout << "請輸入姓名:" << endl;
string name;
cin >> name;
abs->personArray[logo].m_Name = name;
//性別
cout << "請輸入性別:" << endl;
cout << "1. 男 " << endl;
cout << "2. 女 " << endl;
int sex=0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArray[logo].m_Sex = sex;
break;
}
else
cout << "輸入有誤,請重新輸入:" << endl;
}
//年齡
cout << "請輸入年齡: " << endl;
int age = 0;
cin >> age;
abs->personArray[logo].m_Age = age;
//電話
cout << "請輸入電話: " << endl;
string Phone;
cin >> Phone;
abs->personArray[logo].m_Phone = Phone;
//地址
cout << "請輸入地址: " << endl;
string address;
cin >> address;
abs->personArray[logo].m_Addr = address;
cout << "修改成功!" << endl;
}
else
cout << "查無此人!" << endl;
system("pause");
system("cls");
}
//6.清空聯系人
void clearPerson(Addressbooks * abs)
{
abs->m_size = 0;
cout << "已清空通訊錄" << endl;
system("pause");
system("cls");
}
int main()
{
Addressbooks abs;//創建通訊錄
abs.m_size = 0;//初始化通訊錄中人員個數
int select = 0;
while (true)
{
//*在main函數中調用封裝好的函數
showMenu();
cin >> select;
switch (select)
{
case 1://1.添加聯系人
addPerson(&abs);//在通訊錄中添加聯系人
break;
case 2://2.顯示聯系人
showPerson(&abs);
break;
case 3://3.刪除聯系人
deletePerson(&abs);
//{
// cout << "請輸入要查找的聯系人姓名:" << endl;
// string name;
// cin >> name;
// if (isExist(&abs, name) == -1)
// {
// cout << "沒有找到這個聯系人!" << endl;
// }
// else//輸出聯系人的信息
// {
// cout << "找到了" << endl;
// }
//}
break;
case 4://4.查找聯系人
findPerson(&abs);
break;
case 5://5.修改聯系人
modifyPerson(&abs);
break;
case 6://6.清空聯系人
clearPerson(&abs);
break;
case 0://0.退出通訊錄
cout << "歡迎下次使用!" << endl;
system("pause");
break;
default:
break;
}
}
system("pause");
return 0;
}