C++通訊錄管理系統設計
系統需求
本文主要通過利用C++實現一個通訊錄管理系統
系統需要實現的功能如下:
- 添加聯繫人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、電話、家庭住址等),最多添加1000人
- 顯示聯繫人:顯示所有聯繫人信息
- 刪除聯繫人:按照姓名進行刪除指定人
- 查找聯繫人:按照姓名查找聯繫人
- 修改聯繫人:按照姓名修改聯繫人
- 清空聯繫人:清空通訊簿
- 退出通信錄:退出當前通信錄
最終效果:
1、菜單設計
步驟:
- 封裝函數顯示該界面 如 void showMenu()
- 在main函數中調用封裝好的函數
//菜單界面
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;
}
2、退出功能實現
思路:根據不同用戶選擇,進入不同得功能,選擇switch分支
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;
}
3、添加聯繫人
步驟:
- 設計聯繫人結構體
- 設計通訊錄結構體
- main()中創造通訊錄結構體
- 封裝添加聯繫人函數
- 測試
//1添加聯繫人
void addPerson(Book * book)
{
//判斷人滿了沒有
if (book->p_num == PersonMax)
{
cout << "通信錄已滿,無法添加" << endl;
return;
}
else
{
//顯示聯繫人編號
cout << "正在進行添加聯繫人操作......" << endl;
cout << "請輸入編號 " << book->p_num+1 << " 的信息"<< endl ;
//姓名
string name;
cout << "請輸入姓名:";
cin >> name;
book->personArray[book->p_num].p_name = name;
//性別
int sex = 0;
cout << "請輸入性別(1----男 2-----女):";
while (true) //如果輸入1和2則正確
{
cin >> sex;
if (sex == 1 || sex == 2)
{
book->personArray[book->p_num].p_sex = sex;
break;
}
cout << "輸入有誤,請重新輸入性別:";
}
//年齡
int age = 0;
cout << "請輸入年齡:";
while (true)
{
cin >> age;
if (age >= 1 && age <= 100)
{
book->personArray[book->p_num].p_age = age;
break;
}
cout << "輸入有誤,請重新輸入年齡:";
}
//電話
string phone;
cout << "請輸入電話:";
while (true)
{
cin >> phone;
if (phone.size() == 11)
{
book->personArray[book->p_num].p_phone = phone;
break;
}
cout << "輸入有誤,請重新輸入電話:";
}
//地址
string adrress;
cout << "請輸入地址:";
cin >> adrress;
book->personArray[book->p_num].p_address = adrress;
cout << "添加成功!"<< endl;
book->p_num++;
system("pause");//請按任意鍵繼續
system("cls");//clear
}
}
4、顯示聯繫人
步驟:
- 封裝顯示聯繫人函數
- 測試
//2顯示聯繫人
void showPerson(Book * book)
{
//判斷是否爲0,
if (book->p_num == 0)
{
cout << "當前記錄爲空" << endl;
}
else
{
system("cls");
cout << "通訊錄:\n" << endl;
for (int i = 0; i < book->p_num; i++)
{
cout << "\t 編號:" << i+1 << "\t";
cout << "姓名:" << book->personArray[i].p_name << "\t";
cout << "性別:" << (book->personArray[i].p_sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << book->personArray[i].p_age << "\t";
cout << "電話:" << book->personArray[i].p_phone << "\t";
cout << "地址:" << book->personArray[i].p_address << endl;
}
}
system("pause");
system("cls");
}
5、刪除聯繫人
步驟:
- 封裝檢測聯繫人是否存在函數
- 封裝刪除聯繫人函數
- 測試
//檢測聯繫人是否存在,存在則返回數組索引,不存在返回-1
int isExit(Book * book, string name)
{
for (int i = 0; i < book->p_num; i++)
{
if (book->personArray[i].p_name == name)
{
return i;
}
}
return -1;
}
//刪除聯繫人
void deletePerson(Book * book)
{
cout << "請輸入刪除的聯繫人:" << endl;
string name;
cin >> name;
int ret = isExit(book, name);
if (ret == -1)
{
cout << "查無此人" << endl;
system("pause");//請按任意鍵繼續
system("cls");
}
else
{
for (int i = ret; i < book->p_num; i++)
{
book->personArray[i] = book->personArray[i + 1];//bug
}
book->p_num--;
cout << "刪除成功" << endl;
system("pause");
system("cls");
}
}
6、 查找聯繫人
步驟:
- 基於之前的檢測聯繫人函數,封裝查詢聯繫人函數
- 測試
//查找聯繫人
void findPerson(Book * book)
{
cout << "請輸入查找聯繫人姓名:" << endl;
string name;
cin >> name;
int ret = isExit(book, name);
if (ret == -1)
{
cout << "查無此人" << endl;
}
else
{
cout << "已查到結果如下:" << endl;
cout << "\t 編號:" << ret + 1 << "\t";
cout << "姓名:" << book->personArray[ret].p_name << "\t";
cout << "性別:" << (book->personArray[ret].p_sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << book->personArray[ret].p_age << "\t";
cout << "電話:" << book->personArray[ret].p_phone << "\t";
cout << "地址:" << book->personArray[ret].p_address << endl;
}
system("pause");
system("cls");
}
7、修改聯繫人
- 基於之前的檢測聯繫人函數,封裝修改聯繫人函數
- 測試
//修改聯繫人信息
void modifyPerson(Book * book)
{
cout << "請輸入修改聯繫人的姓名" << endl;
string name;
cin >> name;
int ret = isExit(book, name);
if (ret == -1)
{
cout << "查無此人" << endl;
system("pause");
system("cls");
}
else
{
string name;
cout << "請輸入姓名:";
cin >> name;
book->personArray[ret].p_name = name;
int sex = 0;
cout << "請輸入性別(1----男 2-----女):";
while (true) //如果輸入1和2則正確
{
cin >> sex;
if (sex == 1 || sex == 2)
{
book->personArray[ret].p_sex = sex;
break;
}
cout << "輸入有誤,請重新輸入性別:";
}
//年齡
int age = 0;
cout << "請輸入年齡:";
while (true)
{
cin >> age;
if (age >= 1 && age <= 100)
{
book->personArray[ret].p_age = age;
break;
}
cout << "輸入有誤,請重新輸入年齡:";
}
//電話
string phone;
cout << "請輸入電話:";
while (true)
{
cin >> phone;
if (phone.size() == 11)
{
book->personArray[ret].p_phone = phone;
break;
}
cout << "輸入有誤,請重新輸入電話:";
}
//地址
string adrress;
cout << "請輸入地址:";
cin >> adrress;
book->personArray[ret].p_address = adrress;
cout << "修改成功!" << endl;
system("pause");
system("cls");
}
}
8、 清空聯繫人
- 將人數置0,則邏輯上清空
- 測試
//清空聯繫人
void clearPerson(Book * book)
{
cout << "確定清空嗎?輸入 Y or N" << endl;
string selection;
cin >> selection;
if (selection == "Y")
{
book->p_num = 0;
cout << "清空成功!" << endl;
}
else if (selection == "N")
{
cout << "取消成功" << endl;
}
else
{
cout << "輸入非法,返回主界面" << endl;
}
system("pause");
system("cls");
}
總體代碼:可直接在C++環境中運行
/*
顯示菜單
1封裝函數顯示界面 void showMenu()
2main函數中調用封裝好的函數
*/
#include <iostream>
#include <string>
using namespace std;
#define PersonMax 1000 //最大記錄人數
//設計聯繫人結構體
struct Person
{
//姓名
string p_name;
//性別:1男2女
int p_sex;
//年齡
int p_age;
//電話
string p_phone;
//地址
string p_address;
};
//設計通訊錄的結構體
struct Book
{
//通訊錄中保存的聯繫人數組
struct Person personArray[PersonMax];//結構體數組,數組的元素 都是 聯繫人結構體
//通訊錄當前的記錄人數
int p_num;
};
//菜單界面
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;
}
void addPerson(Book * book);
void showPerson(Book * book);
int isExit(Book * book, string name);
void deletePerson(Book * book);
void modifyPerson(Book * book);
void findPerson(Book * book);
void clearPerson(Book * book);
int main()
{
//創建結構體變量,當前人數爲0
Book book;
book.p_num = 0;
int select = 0;//創建用戶輸入變量 根據選項調用switch函數,只有0退出,其他選項則循環顯示界面
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
addPerson(&book);//1、添加聯繫人 addPerson(book);值傳遞不改變結構體,故採用地址傳遞可以修改實參
break;
case 2:
showPerson(&book);// 2、顯示聯繫人
break;
case 3:
deletePerson(&book);//3、刪除聯繫人
break;
case 4: findPerson(&book);//4、查找聯繫人
break;
case 5:modifyPerson(&book);// 5、修改聯繫人
break;
case 6: clearPerson(&book);//6、清空聯繫人
break;
case 0:// 0、退出通訊簿
cout << "歡迎下次使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
system("pause");//不會一閃而過
return 0;
}
//1添加聯繫人
void addPerson(Book * book)
{
//判斷人滿了沒有
if (book->p_num == PersonMax)
{
cout << "通信錄已滿,無法添加" << endl;
return;
}
else
{
//顯示聯繫人編號
cout << "正在進行添加聯繫人操作......" << endl;
cout << "請輸入編號 " << book->p_num+1 << " 的信息"<< endl ;
//姓名
string name;
cout << "請輸入姓名:";
cin >> name;
book->personArray[book->p_num].p_name = name;
//性別
int sex = 0;
cout << "請輸入性別(1----男 2-----女):";
while (true) //如果輸入1和2則正確
{
cin >> sex;
if (sex == 1 || sex == 2)
{
book->personArray[book->p_num].p_sex = sex;
break;
}
cout << "輸入有誤,請重新輸入性別:";
}
//年齡
int age = 0;
cout << "請輸入年齡:";
while (true)
{
cin >> age;
if (age >= 1 && age <= 100)
{
book->personArray[book->p_num].p_age = age;
break;
}
cout << "輸入有誤,請重新輸入年齡:";
}
//電話
string phone;
cout << "請輸入電話:";
while (true)
{
cin >> phone;
if (phone.size() == 11)
{
book->personArray[book->p_num].p_phone = phone;
break;
}
cout << "輸入有誤,請重新輸入電話:";
}
//地址
string adrress;
cout << "請輸入地址:";
cin >> adrress;
book->personArray[book->p_num].p_address = adrress;
cout << "添加成功!"<< endl;
book->p_num++;
system("pause");//請按任意鍵繼續
system("cls");//clear
}
}
//2顯示聯繫人
void showPerson(Book * book)
{
//判斷是否爲0,
if (book->p_num == 0)
{
cout << "當前記錄爲空" << endl;
}
else
{
system("cls");
cout << "通訊錄:\n" << endl;
for (int i = 0; i < book->p_num; i++)
{
cout << "\t 編號:" << i+1 << "\t";
cout << "姓名:" << book->personArray[i].p_name << "\t";
cout << "性別:" << (book->personArray[i].p_sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << book->personArray[i].p_age << "\t";
cout << "電話:" << book->personArray[i].p_phone << "\t";
cout << "地址:" << book->personArray[i].p_address << endl;
}
}
system("pause");
system("cls");
}
//檢測聯繫人是否存在,存在則返回數組索引,不存在返回-1
int isExit(Book * book, string name)
{
for (int i = 0; i < book->p_num; i++)
{
if (book->personArray[i].p_name == name)
{
return i;
}
}
return -1;
}
//刪除聯繫人
void deletePerson(Book * book)
{
cout << "請輸入刪除的聯繫人:" << endl;
string name;
cin >> name;
int ret = isExit(book, name);
if (ret == -1)
{
cout << "查無此人" << endl;
system("pause");//請按任意鍵繼續
system("cls");
}
else
{
for (int i = ret; i < book->p_num; i++)
{
book->personArray[i] = book->personArray[i + 1];//bug
}
book->p_num--;
cout << "刪除成功" << endl;
system("pause");
system("cls");
}
}
//查找聯繫人
void findPerson(Book * book)
{
cout << "請輸入查找聯繫人姓名:" << endl;
string name;
cin >> name;
int ret = isExit(book, name);
if (ret == -1)
{
cout << "查無此人" << endl;
}
else
{
cout << "已查到結果如下:" << endl;
cout << "\t 編號:" << ret + 1 << "\t";
cout << "姓名:" << book->personArray[ret].p_name << "\t";
cout << "性別:" << (book->personArray[ret].p_sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << book->personArray[ret].p_age << "\t";
cout << "電話:" << book->personArray[ret].p_phone << "\t";
cout << "地址:" << book->personArray[ret].p_address << endl;
}
system("pause");
system("cls");
}
//修改聯繫人信息
void modifyPerson(Book * book)
{
cout << "請輸入修改聯繫人的姓名" << endl;
string name;
cin >> name;
int ret = isExit(book, name);
if (ret == -1)
{
cout << "查無此人" << endl;
system("pause");
system("cls");
}
else
{
string name;
cout << "請輸入姓名:";
cin >> name;
book->personArray[ret].p_name = name;
int sex = 0;
cout << "請輸入性別(1----男 2-----女):";
while (true) //如果輸入1和2則正確
{
cin >> sex;
if (sex == 1 || sex == 2)
{
book->personArray[ret].p_sex = sex;
break;
}
cout << "輸入有誤,請重新輸入性別:";
}
//年齡
int age = 0;
cout << "請輸入年齡:";
while (true)
{
cin >> age;
if (age >= 1 && age <= 100)
{
book->personArray[ret].p_age = age;
break;
}
cout << "輸入有誤,請重新輸入年齡:";
}
//電話
string phone;
cout << "請輸入電話:";
while (true)
{
cin >> phone;
if (phone.size() == 11)
{
book->personArray[ret].p_phone = phone;
break;
}
cout << "輸入有誤,請重新輸入電話:";
}
//地址
string adrress;
cout << "請輸入地址:";
cin >> adrress;
book->personArray[ret].p_address = adrress;
cout << "修改成功!" << endl;
system("pause");
system("cls");
}
}
//清空聯繫人
void clearPerson(Book * book)
{
cout << "確定清空嗎?輸入 Y or N" << endl;
string selection;
cin >> selection;
if (selection == "Y")
{
book->p_num = 0;
cout << "清空成功!" << endl;
}
else if (selection == "N")
{
cout << "取消成功" << endl;
}
else
{
cout << "輸入非法,返回主界面" << endl;
}
system("pause");
system("cls");
}