C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】
C++| 匠心之作 從0到1入門學編程【視頻+課件+筆記+源碼】
目錄
01、系統需求
02、創建項目
2.1 創建項目
2.2 添加文件
03、菜單功能
04、退出功能
05、添加聯系人
5.1 設計聯系人結構體
5.2 設計通訊錄結構體
5.3 main函數中創建通訊錄
5.4 封裝添加聯系人函數
5.5 測試添加聯系人功能
06、顯示聯系人
6.1 封裝顯示聯系人函數
6.2 測試顯示聯系人功能
07、刪除聯系人
7.1 封裝檢測聯系人是否存在
7.2 封裝刪除聯系人函數
7.3 測試刪除聯系人功能
08、查找聯系人
8.1 封裝查找聯系人函數
8.2 測試查找指定聯系人
09、修改聯系人
9.1 封裝修改聯系人函數
9.2 測試修改聯系人功能
10、清空聯系人
10.1 封裝清空聯系人函數
10.2 測試清空聯系人
通訊錄管理系統(項目內容匯總)
完整代碼1
完整代碼2
?
01、系統需求
通訊錄是一個可以記錄親人、好友信息的工具。
本教程主要利用C++來實現一個通訊錄管理系統。
系統中需要實現的功能如下:
添加聯系人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、聯系電話、家庭住址)最多記錄1000人
顯示聯系人:顯示通訊錄中所有聯系人信息
刪除聯系人:按照姓名進行刪除指定聯系人
查找聯系人:按照姓名查看指定聯系人信息
修改聯系人:按照姓名重新修改指定聯系人
清空聯系人:清空通訊錄中所有信息
退出通訊錄:退出當前使用的通訊錄
02、創建項目
創建項目步驟如下:
-
創建新項目
-
添加文件
2.1 創建項目
打開vs2017后,點擊創建新項目,創建新的C++項目:
填寫項目名稱,選擇項目路徑:
2.2 添加文件
添加成功后,效果如圖:
至此,項目已創建完畢。
03、菜單功能
功能描述:用戶選擇功能的界面。
菜單界面效果,如下圖:
步驟:
-
封裝函數顯示該界面 如 void showMenu()
-
在main函數中調用封裝好的函數
代碼:
// 封裝函數顯示該界面,如: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; }04、退出功能
功能描述:退出通訊錄系統。
思路:根據用戶不同的選擇,進入不同的功能,可以選擇switch分支結構,將整個架構進行搭建。
當用戶選擇0時候,執行退出,選擇其他先不做操作,也不會退出程序。
效果圖:
代碼:
// 封裝函數顯示該界面,如: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(); // 菜單調用int select = 0; // 創建用戶選擇輸入的變量while (true){showMenu(); // 菜單調用cin >> select;switch (select){case 1: // 1、添加聯系人break;case 2: // 2、顯示聯系人break;case 3: // 3、刪除聯系人break;case 4: // 4、查找聯系人break;case 5: // 5、修改聯系人break;case 6: // 6、清空聯系人break;case 0: // 0、退出通訊錄cout << "歡迎下次使用!" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0; }05、添加聯系人
功能描述:實現添加聯系人功能,聯系人上限為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) // *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){// 如果輸入的是1或者2,可以退出循環,因為輸入的是正確值// 如果輸入有誤,重新輸入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 = ""; // 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,請按任意鍵繼續...system("cls");//清屏操作} }5.5 測試添加聯系人功能
選擇界面中,如果玩家選擇了1,代表添加聯系人,我們可以測試下該功能。
在switch case 語句中,case1里添加:
case 1: //添加聯系人addPerson(&abs);break;測試效果如圖:
06、顯示聯系人
功能描述:顯示通訊錄中已有的聯系人信息。
顯示聯系人實現步驟:
-
封裝顯示聯系人函數
-
測試顯示聯系人功能
6.1 封裝顯示聯系人函數
思路:判斷如果當前通訊錄中沒有人員,就提示記錄為空,人數大于0,顯示通訊錄中信息。
顯示聯系人代碼:
//2、顯示所有聯系人信息 void showPerson(Addressbooks *abs) {// 判斷通訊錄中人數是否為0,如果為0,提示記錄為空// 如果不為0,顯示記錄的聯系人信息if (abs->m_Size == 0){cout << "當前記錄為空!" << endl;}else{for (int i = 0; i < abs->m_Size; i++){cout << "姓名:" << abs->personArray[i].m_Name << "\t"; // 制表符\t 8個字符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;測試效果如圖:
07、刪除聯系人
功能描述:按照姓名進行刪除指定聯系人。
刪除聯系人實現步驟:
封裝檢測聯系人是否存在
封裝刪除聯系人函數
測試刪除聯系人功能
7.1 封裝檢測聯系人是否存在
設計思路:
刪除聯系人前,我們需要先判斷用戶輸入的聯系人是否存在,如果存在刪除,不存在提示用戶沒有要刪除的聯系人。
因此我們可以把檢測聯系人是否存在封裝成一個函數中,如果存在,返回聯系人在通訊錄中的位置,不存在返回-1。
檢測聯系人是否存在代碼:
//檢測聯系人是否存在。如果存在,返回聯系人所在數組中的具體位置;不存在返回-1 //判斷是否存在查詢的人員,存在返回在數組中索引位置,不存在返回-1 int isExist(Addressbooks *abs, string name) //參數1:通訊錄;參數2:對比姓名 {for (int i = 0; i < abs->m_Size; i++){//找到用戶輸入的姓名了if (abs->personArray[i].m_Name == name){return i; //找到了,返回這個人在數組中的下標編號}}return -1; //如果遍歷結束都沒有找到,返回-1 }7.2 封裝刪除聯系人函數
根據用戶輸入的聯系人判斷該通訊錄中是否有此人
查找到進行刪除,并提示刪除成功
查不到提示查無此人。
//3、刪除指定聯系人信息 void deletePerson(Addressbooks *abs) {cout << "請輸入您要刪除的聯系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);// ret == -1 未查到;ret != -1 查到了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;測試效果如圖:
存在情況:
不存在情況:
08、查找聯系人
功能描述:按照姓名查看指定聯系人信息。
查找聯系人實現步驟
封裝查找聯系人函數
測試查找指定聯系人
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;測試效果如圖。
存在情況:
不存在情況:
09、修改聯系人
功能描述:按照姓名重新修改指定聯系人。
修改聯系人實現步驟:
封裝修改聯系人函數
測試修改聯系人功能
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 = ""; //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,做“邏輯清空”即可。
邏輯清空:將通訊錄的聯系人數量置為0,使得用戶訪問不到數據。
清空聯系人代碼:
//6、清空所有聯系人 void cleanPerson(Addressbooks *abs) {abs->m_Size = 0; //將當前記錄的聯系人數量置為0,做邏輯清空操作cout << "通訊錄已清空!" << endl;//按任意鍵后,清屏system("pause");system("cls"); }10.2 測試清空聯系人
在switch case 語句中,case 6 里添加:
case 6: //清空聯系人cleanPerson(&abs);break;測試效果如圖:
清空通訊錄
再次查看信息,顯示記錄為空。
至此,通訊錄管理系統完成!
通訊錄管理系統(項目內容匯總)
完整代碼1
?
#include <iostream> #include <string> // string頭文件 using namespace std;#define MAX 1000 //最大人數【宏常量:方便后期維護】//設計聯系人結構體 struct Person {string m_Name; //1.姓名int m_Sex; //2.性別:1男、2女int m_Age; //3.年齡string m_Phone; //4.電話string m_Addr; //5.住址 };//設計通訊錄結構體 struct Addressbooks {struct Person personArray[MAX]; //通訊錄中保存的聯系人數組int m_Size; //通訊錄中人員個數 通訊錄中當前記錄聯系人個數 };//菜單界面 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) // *abs使用指針接受地址 {//判斷電話本是否滿了【判斷通訊錄是否己滿,如果滿了就不再添加!】if (abs->m_Size == MAX){cout << "通訊錄已滿,無法添加!" << endl;return;}else //添加具體聯系人{//1.姓名string name;cout << "請輸入姓名:" << endl;cin >> name; //右移運算符abs->personArray[abs->m_Size].m_Name = name;//2.性別cout << "請輸入性別:" << endl;cout << "1 -- 男" << endl;cout << "2 -- 女" << endl;int sex = 0;while (true){// 如果輸入的是1或者2,可以退出循環,因為輸入的是正確值// 如果輸入有誤,重新輸入cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_Size].m_Sex = sex;break;}cout << "輸入有誤,請重新輸入!";}//3.年齡cout << "請輸入年齡:" << endl;int age = 0;cin >> age;abs->personArray[abs->m_Size].m_Age = age;//4.聯系電話cout << "請輸入聯系電話:" << endl;string phone = ""; // string phone;cin >> phone;abs->personArray[abs->m_Size].m_Phone = phone;//5.家庭住址cout << "請輸入家庭住址:" << endl;string address;cin >> address;abs->personArray[abs->m_Size].m_Addr = address;abs->m_Size++; //更新通訊錄人數cout << "添加成功!" << endl;system("pause"); //調用系統函數system,請按任意鍵繼續...system("cls"); //清屏操作} }//2、顯示所有聯系人信息 void showPerson(Addressbooks *abs) {// 判斷通訊錄中人數是否為0,如果為0,提示記錄為空// 如果不為0,顯示記錄的聯系人信息if (abs->m_Size == 0){cout << "當前記錄為空!" << endl;}else{for (int i = 0; i < abs->m_Size; i++){cout << "姓名:" << abs->personArray[i].m_Name << "\t"; // 制表符\t 8個字符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 //判斷是否存在查詢的人員,存在返回在數組中索引位置,不存在返回-1 int isExist(Addressbooks *abs, string name) //參數1:通訊錄;參數2:對比姓名 {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 ret = isExist(abs, name);// ret == -1 未查到;ret != -1 查到了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"); }//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"); }//5、修改指定聯系人信息 void modifyPerson(Addressbooks *abs) {cout << "請輸入您要修改的聯系人的姓名:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret != -1) //找到指定聯系人{//1.姓名string name;cout << "請輸入姓名:" << endl;cin >> name;abs->personArray[ret].m_Name = name;//2.性別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 << "輸入有誤,請重新輸入!";}//3.年齡cout << "請輸入年齡:" << endl;int age = 0;cin >> age;abs->personArray[ret].m_Age = age;//4.聯系電話cout << "請輸入聯系電話:" << endl;string phone = ""; //string phone;cin >> phone;abs->personArray[ret].m_Phone = phone;//5.家庭住址cout << "請輸入家庭住址:" << endl;string address;cin >> address;abs->personArray[ret].m_Addr = address;cout << "修改成功!" << endl;}else //未找到指定聯系人{cout << "查無此人!" << endl;}//按任意鍵后清屏.system("pause");system("cls"); }//6、清空所有聯系人 void cleanPerson(Addressbooks *abs) {//提醒用戶,確認要清空通訊錄嗎?cout << "確定要清空通訊錄嗎?請輸入選擇:" << endl;cout << "1 -- yes" << endl;cout << "2 -- no" << endl;int confirm;cin >> confirm;if (confirm == 1){abs->m_Size = 0; //將當前記錄的聯系人數量置為0,做邏輯清空操作cout << "通訊錄已清空!" << endl;}else if (confirm == 2){cout << "通訊錄未清空!" << endl;}else{cout << "輸入有誤!" << endl;}//按任意鍵后,清屏system("pause");system("cls"); }int main() {// 封裝函數顯示該界面,如:void showMenu ()// 在main函數中調用封裝好的函數// showMenu(); // 菜單調用//mian函數起始位置添加://創建通訊錄結構體變量Addressbooks abs;//初始化通訊錄中當前人員個數abs.m_Size = 0;int select = 0; // 創建用戶選擇輸入的變量while (true){showMenu(); // 菜單調用cin >> select;switch (select){case 1: // 1、添加聯系人addPerson(&abs); //&abs傳入地址,使用“地址傳遞”,值傳遞不會改變實參【利用地址傳遞,可以修飾實參】break;case 2: // 2、顯示聯系人showPerson(&abs);break;case 3: // 3、刪除聯系人// {// cout << "請輸入刪除聯系人的姓名:" << endl;// string name;// cin >> name;// if (isExist(&abs, name) == -1)// {// cout << "查無此人!" << endl;// }// else// {// cout << "找到此人!" << endl;// }// }deletePerson(&abs);break;case 4: // 4、查找聯系人findPerson(&abs); //傳入通訊錄地址break;case 5: // 5、修改聯系人modifyPerson(&abs);break;case 6: // 6、清空聯系人cleanPerson(&abs);break;case 0: // 0、退出通訊錄cout << "歡迎下次使用!" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0; }完整代碼2
原文鏈接:黑馬程序員C++筆記--第二階段實戰:【通訊錄管理系統】
#include <iostream> #include <string> using namespace std;#define MAX 100//-----------------------------------------先展示出主菜單界面------------------------------// void Menu() {cout << endl;cout << "-----------【主菜單】-----------" << endl;cout << "---------1.添加聯系人:----------" << endl;cout << "---------2.顯示聯系人:---------" << endl;cout << "---------3.刪除聯系人:---------" << endl;cout << "---------4.查找聯系人:---------" << endl;cout << "---------5.修改聯系人:---------" << endl;cout << "---------6.清空聯系人:---------" << endl;cout << "---------0.退出通訊錄:---------" << endl; }//-------------實現添加通訊錄聯系人的信息的結構體;(要記錄有多少人在這里)-----------------// struct person {string name; //姓名string sex; //性別int age; //年齡string phone; //手機號string home; //地址 };//------------------------設計通訊錄結構體;(存放成員個數,成員信息)-----------------------------// struct addressbook {struct person personArray[MAX]; //通訊錄擴展到1000;int size; //當前聯系人個數(后面就相當于i++) };//-------------------------------創建一個能添加聯系人-的函數------------------------------------------// void addperson(addressbook *add) {if (add->size > MAX){cout << "這個通訊錄已經滿了!" << endl;}//輸入通訊錄成員的信息;else{cout << "請輸入姓名" << endl;//姓名;輸入完成后將這個名字添加到通訊錄結構體中string name;cin >> name;add->personArray[add->size].name = name;//性別;string sex;cout << "請輸入性別" << endl;cin >> sex;add->personArray[add->size].sex = sex;//年齡;int age;cout << "請輸入年齡" << endl;cin >> age;add->personArray[add->size].age = age;//聯系電話;string phone;cout << "請輸入手機電話" << endl;cin >> phone;add->personArray[add->size].phone = phone;//通訊地址;string home;cout << "請輸入通訊地址" << endl;cin >> home;add->personArray[add->size].home = home;//所有項目添加完之后要給通訊錄結構體的空間加1;add->size++;cout << "添加信息成功" << endl;//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句;} }//----------------------------------定義顯示所有聯系人的函數-------------------------------------// void showperson(addressbook *add) {//如果通訊錄中沒有人,則顯示為空,否則執行顯示聯系人函數;if (add->size == 0){cout << "通訊錄中沒有聯系人,請添加聯系人:" << endl;}else //要輸出多個聯系人 所以要用for循環;{string sex;for (int i = 0; i < add->size; i++){cout << "姓名:" << add->personArray[i].name << "\t性別:" << add->personArray[i].sex << "\t年齡:" << add->personArray[i].age<< "\t電話:" << add->personArray[i].phone << "\t通訊地址:" << add->personArray[i].home << endl;}//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句;} }//---------------------------(先判斷有沒有這個人,要是沒有就輸出“查無此人!”)-------------------------------// int isperson(addressbook *add, string name) //很重要!!!!!!! {//找到你要刪除的那個人;for (int i = 0; i < add->size; i++){//找到輸入的姓名了if (add->personArray[i].name == name){return i; //找到了 就返回這個i的值;}return -1;} }//-----------------------------------定義一個刪除聯系人的函數;(找到人了進行數據遷移就能刪除了)---------------------// void deleteperson(addressbook *add) {string name;cout << "請輸入您要刪除的聯系人:" << endl;cin >> name;//調用是否有該聯系人的函數;int ret = isperson(add, name); //在函數里調用已經定義的函數時不需要+“&”;if (ret != -1){cout << "查無此人請重新輸入:" << endl;}else{char anser;cout << "你真的確定你要刪除他嗎?(Y or N ?)" << endl;cin >> anser;if (anser == 'Y'){for (int i = 0; i < add->size; i++){//-----------------數-據-前-移---------------------//add->personArray[i] = add->personArray[i + 1]; //將后面的聯系人移動到前面就代表此聯系人已經刪除;}cout << "刪除" << add->personArray[add->size].name << "的信息成功" << endl;add->size--; //更新通訊錄中的人數;}else{cout << "\t那么請按任意鍵返回吧" << endl;}}//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句; }//------------------------------------定義一個查找聯系人的函數---------------------------------------// void findperson(addressbook *add) {cout << "請輸入你要查找的聯系人" << endl;//先判斷是否有該聯系人呢 調用判斷聯系人的函數;string name;cin >> name;int ret = isperson(add, name); //在函數里調用已經定義的函數時不需要+“&”;if (ret != -1){cout << "以為您查詢到你要查找的聯系人,請看下面" << endl;cout << "姓名:" << add->personArray[ret].name << endl;cout << "性別:" << add->personArray[ret].sex << endl;cout << "年齡:" << add->personArray[ret].age << endl;cout << "聯系電話:" << add->personArray[ret].phone << endl;cout << "通訊地址:" << add->personArray[ret].home << endl;}else{cout << "并沒有查到你所要查詢的人,請重新輸入吧 *_*" << endl;}//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句; }//----------------------------------------------定義一個修改聯系人的函數-----------------------------------// void changeperson(addressbook *add) {cout << "請輸入你要修改的聯系人" << endl;string name;cin >> name;//先判斷是否有該聯系人,如果沒有就輸出int ret = isperson(add, name); //在函數里調用已經定義的函數時不需要+“&”;if (ret != -1) //已經查到此人了 開始進行修改;{//修改性別;cout << "請修改姓名:" << endl;cin >> name;add->personArray[ret].name = name;//修改性別;string sex;cout << "請修改性別:" << endl;cin >> sex;add->personArray[ret].sex = sex;//修改年齡;int age;cout << "請修改年齡:" << endl;cin >> age;add->personArray[ret].age = age;//修改聯系電話;string phone;cout << "請修改聯系電話" << endl;cin >> phone;add->personArray[ret].phone = phone;//修改通訊地址;string home;cout << "請修改通訊地址" << endl;cin >> home;add->personArray[ret].home = home;cout << "您已經修改完成" << endl;}else{cout << "并沒有查到你所要修改的人,請重新輸入吧 *_*" << endl;}//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句; }//-----------------------------------------定義一個清空聯系人的函數--------------------------------// void clearperson(addressbook *add) {cout << "你真的確定你要刪除他嗎?(Y or N ?)" << endl;char anser;cin >> anser;if (anser == 'Y'){add->size = 0;cout << "已經刪除了全部聯系人:" << endl;}else{cout << "那么請按任意鍵返回吧!" << endl;}//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句; }int main() {//創建通訊錄結構體變量;struct addressbook add;//初始化通訊錄;add.size = 0;int select = 0;//while 用來退出系統;while (true){Menu(); //顯示菜單;cin >> select;switch (select) //選擇的選項{case 1: // 添加聯系人 (調用函數addperson)addperson(&add);break;case 2: //顯示聯系人:(調用函數showperson)showperson(&add);break;case 3: //刪除聯系人// //查找是否有該聯系人的功能實現;// {// string name;// cout << "請輸入你要刪除的聯系人:" << endl;// cin >> name;// if (isperson(&add, name) == 0)// {// cout << "查無此人,請重新輸入" << endl;// }// else// {// cout << "找到此人,請再次確認一下是否要刪除他:" << endl;// }// }deleteperson(&add);break;case 4: //查找聯系人findperson(&add);break;case 5: //修改聯系人changeperson(&add);break;case 6: //清空聯系人:clearperson(&add);break;case 0: //退出通訊錄cout << "退出通訊錄" << endl<< "歡迎下次使用!" << endl;//清屏的操作;//每一部操作完成之后都需要清屏;system("pause");system("cls"); //清屏語句;break;default:break;system("pause");return 0;}}system("pause");return 0; }?
總結
以上是生活随笔為你收集整理的C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIS创新实践【实验1】郑州市地图制作与
- 下一篇: 操作系统 第二章【进程管理】【MOOC答