C++實(shí)現(xiàn)簡單的通訊錄管理系統(tǒng)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)簡單的通訊錄管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
案例描述:
通訊錄是一個(gè)可以記錄親人、好友信息的工具。
本教程主要利用C++來實(shí)現(xiàn)一個(gè)通訊錄管理系統(tǒng)
系統(tǒng)中需要實(shí)現(xiàn)的功能如下:
- 添加聯(lián)系人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、聯(lián)系電話、家庭住址)最多記錄1000人
- 顯示聯(lián)系人:顯示通訊錄中所有聯(lián)系人信息
- 刪除聯(lián)系人:按照姓名進(jìn)行刪除指定聯(lián)系人
- 查找聯(lián)系人:按照姓名查看指定聯(lián)系人信息
- 修改聯(lián)系人:按照姓名重新修改指定聯(lián)系人
- 清空聯(lián)系人:清空通訊錄中所有信息
- 退出通訊錄:退出當(dāng)前使用的通訊錄
#include<iostream> #include<string> using namespace std; #define MAX ?1000 ? ?//通訊錄總?cè)藬?shù),可以修改 //聯(lián)系人信息結(jié)構(gòu)體 struct Person { ?? ?string name; ?? ?string sex; ?? ?int ?age; ?? ?int number; ?? ?string address; }; //通訊錄結(jié)構(gòu)體 struct addressbook { ?? ?struct Person personArray[MAX]; //通訊錄中保存的聯(lián)系人數(shù)組 ?? ?int m_Size; //通訊錄中人員個(gè)數(shù) }; //菜單界面 void showMenu() { ?? ?cout << "***************************" << endl; ?? ?cout << "***** ?1、添加聯(lián)系人 ?*****" << endl; ?? ?cout << "***** ?2、顯示聯(lián)系人 ?*****" << endl; ?? ?cout << "***** ?3、刪除聯(lián)系人 ?*****" << endl; ?? ?cout << "***** ?4、查找聯(lián)系人 ?*****" << endl; ?? ?cout << "***** ?5、修改聯(lián)系人 ?*****" << endl; ?? ?cout << "***** ?6、清空聯(lián)系人 ?*****" << endl; ?? ?cout << "***** ?0、退出通訊錄 ?*****" << endl; ?? ?cout << "***************************" << endl; } //查找聯(lián)系人 int findPerson(addressbook* abs, string name) { ?? ?//-1代表不存在該聯(lián)系人 ?? ?int j = -1; ?? ?for (int i = 0; i < abs->m_Size; i++) { ?? ??? ?if (abs->personArray[i].name == name) { ?? ??? ??? ?cout << "姓名:" << abs->personArray[i].name << "?? ?" ?? ??? ??? ??? ?<< "性別:" << abs->personArray[i].sex << "?? ?" ?? ??? ??? ??? ?<< "年齡:" << abs->personArray[i].age << "?? ?" ?? ??? ??? ??? ?<< "聯(lián)系電話:" << abs->personArray[i].number << "?? ?" ?? ??? ??? ??? ?<< "家庭住址:" << abs->personArray[i].address << endl; ?? ??? ??? ?//獲得已存在聯(lián)系人的下標(biāo) ?? ??? ??? ?j = i; ?? ??? ?} ?? ?} ?? ?return j; } //添加聯(lián)系人 void addPerson(addressbook* abs, string name) { ?? ?int sex = 0; ?? ?int age; ?? ?int number; ?? ?string address; ?? ?abs->personArray[abs->m_Size].name = name; ?? ?cout << "請輸入性別:" << endl; ?? ?cout << "1 -- 男" << endl; ?? ?cout << "2 -- 女" << endl; ?? ?//性別 ?? ?while (true) ?? ?{ ?? ??? ?cin >> sex; ?? ??? ?if (sex == 1 || sex == 2) ?? ??? ?{ ?? ??? ??? ?if (sex == 1) { ?? ??? ??? ??? ?abs->personArray[abs->m_Size].sex = "男"; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?abs->personArray[abs->m_Size].sex = "女"; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?cout << "輸入有誤,請重新輸入"; ?? ?} ?? ?//年齡 ?? ?cout << "請輸入年齡:" << endl; ?? ?cin >> age; ?? ?abs->personArray[abs->m_Size].age = age; ?? ?//聯(lián)系電話 ?? ?cout << "請輸入聯(lián)系電話:" << endl; ?? ?cin >> number; ?? ?abs->personArray[abs->m_Size].number = number; ?? ?//家庭住址 ?? ?cout << "請輸入家庭住址:" << endl; ?? ?cin >> address; ?? ?abs->personArray[abs->m_Size].address = address; ?? ?//更新通訊錄人數(shù) ?? ?abs->m_Size++; ?? ?cout << "添加成功" << endl; ?? ?system("pause"); ?? ?//執(zhí)行清屏操作 ?? ?system("cls"); } //判斷聯(lián)系人受否存在 void existsPerson(addressbook* abs, string name) { ?? ?//判斷通訊錄是否已滿 ?? ?if (abs->m_Size == 1000) { ?? ??? ?cout << "通訊錄已滿,不能添加聯(lián)系人!" << endl; ?? ?} ?? ?//未滿,則判斷聯(lián)系人是否已存在 ?? ?else ?? ?{ ?//判斷用戶輸入的聯(lián)系人是否存在 ?? ??? ?int p = findPerson(abs, name); ?? ??? ?//不存在執(zhí)行添加聯(lián)系人操作 ?? ??? ?if (p == -1) { ?? ??? ??? ?addPerson(abs, name); ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?//若存在,則輸出聯(lián)系人信息,并詢問用戶是否繼續(xù)添加 ?? ??? ??? ?int i = p; ?? ??? ??? ?cout << "姓名:" << abs->personArray[i].name << "?? ?" ?? ??? ??? ??? ?<< "性別:" << abs->personArray[i].sex << "?? ?" ?? ??? ??? ??? ?<< "年齡:" << abs->personArray[i].age << "?? ?" ?? ??? ??? ??? ?<< "聯(lián)系電話:" << abs->personArray[i].address << "?? ?" ?? ??? ??? ??? ?<< "家庭住址:" << abs->personArray[i].address << endl; ?? ??? ??? ?cout << "聯(lián)系人已存在! " << endl; ?? ??? ??? ?system("pause"); ?? ??? ??? ?//執(zhí)行清屏操作 ?? ??? ??? ?system("cls"); ?? ??? ?} ?? ?} } //刪除聯(lián)系人 void deletePerson(addressbook* abs) { ?? ?string name; ?? ?cout << "請輸入聯(lián)系人姓名" << endl; ?? ?cin >> name; ?? ?//判斷用戶輸入的聯(lián)系人是否存在 ?? ?int p = findPerson(abs, name); ?? ?if (p != -1) { ?? ??? ?//進(jìn)行刪除聯(lián)系人操作 ?? ??? ?for (int i = p; i < abs->m_Size; i++) { ?? ??? ??? ?abs->personArray[i] = abs->personArray[i + 1]; ?? ??? ?} ?? ??? ?//更新通訊錄 ?? ??? ?abs->m_Size--; ?? ??? ?cout << "刪除成功!" << endl; ?? ?} ?? ?else ?? ?{ ?? ??? ?cout << "查無此人!" << endl; ?? ?} ?? ?system("pause"); ?? ?//執(zhí)行清屏操作 ?? ?system("cls"); } //顯示聯(lián)系人 void showPerson(addressbook* abs) { ?? ?if (abs->m_Size == 0) ?? ?{ ?? ??? ?cout << "當(dāng)前記錄為空" << endl; ?? ?} ?? ?else ?? ?{ ?? ??? ?for (int i = 0; i < abs->m_Size; i++) ?? ??? ?{ ?? ??? ??? ?cout << "姓名:" << abs->personArray[i].name << "\t"; ?? ??? ??? ?cout << "性別:" << abs->personArray[i].sex << "\t"; ?? ??? ??? ?cout << "年齡:" << abs->personArray[i].age << "\t"; ?? ??? ??? ?cout << "電話:" << abs->personArray[i].number << "\t"; ?? ??? ??? ?cout << "住址:" << abs->personArray[i].address << endl; ?? ??? ?} ?? ?} ?? ?system("pause"); ?? ?system("cls"); } //修改聯(lián)系人 void changePerson(addressbook* abs) { ?? ?string name; ?? ?int sex = 0; ?? ?int age; ?? ?int number; ?? ?string address; ?? ?cout << "請輸入聯(lián)系人姓名:" << endl; ?? ?cin >> name; ?? ?//判斷用戶輸入的聯(lián)系人是否存在 ?? ?int ?p = findPerson(abs, name); ?? ?if (p != -1) { ?? ??? ?cout << "請輸入聯(lián)系人姓名:" << endl; ?? ??? ?cin >> name; ?? ??? ?abs->personArray[p].name = name; ?? ??? ?cout << "請輸入性別:" << endl; ?? ??? ?cout << "1 -- 男" << endl; ?? ??? ?cout << "2 -- 女" << endl; ?? ??? ?//性別 ?? ??? ?while (true) ?? ??? ?{ ?? ??? ??? ?cin >> sex; ?? ??? ??? ?if (sex == 1 || sex == 2) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (sex == 1) { ?? ??? ??? ??? ??? ?abs->personArray[p].sex = "男"; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?abs->personArray[p].sex = "女"; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?cout << "輸入有誤,請重新輸入"; ?? ??? ?} ?? ??? ?//年齡 ?? ??? ?cout << "請輸入年齡:" << endl; ?? ??? ?cin >> age; ?? ??? ?abs->personArray[p].age = age; ?? ??? ?//聯(lián)系電話 ?? ??? ?cout << "請輸入聯(lián)系電話:" << endl; ?? ??? ?cin >> number; ?? ??? ?abs->personArray[p].number = number; ?? ??? ?//家庭住址 ?? ??? ?cout << "請輸入家庭住址:" << endl; ?? ??? ?cin >> address; ?? ??? ?abs->personArray[p].address = address; ?? ??? ?cout << "修改成功" << endl; ?? ??? ?system("pause"); ?? ??? ?//執(zhí)行清屏操作 ?? ??? ?system("cls"); ?? ?} ?? ?else ?? ?{ ?? ??? ?cout << "該聯(lián)系人不存在!" << endl; ?? ??? ?system("pause"); ?? ??? ?//執(zhí)行清屏操作 ?? ??? ?system("cls"); ?? ?} } //清空聯(lián)系人 void empty(addressbook* abs) { ?? ?abs->m_Size = 0; ?? ?cout << "通訊錄已清空" << endl; ?? ?system("pause"); ?? ?system("cls"); } int main() { ?? ?//初始化通訊錄 ?? ?addressbook abs; ?? ?//初始化通訊錄人數(shù)為0 ?? ?abs.m_Size = 0; ?? ?int flag = true; ?? ?int key = 0; ?? ?string name; ?? ?while (true) ?? ?{ ?? ??? ?showMenu(); ?? ??? ?cout << "請輸入要操作的功能" << endl; ?? ??? ?cin >> key; ?? ??? ?switch (key) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?//先判斷判斷通訊錄是否已滿,在判斷聯(lián)系人是否已存在 ?? ??? ??? ?//最后進(jìn)行聯(lián)系人添加操作addPerson(addressbook *abs) ?? ??? ??? ?cout << "請輸入聯(lián)系人姓名" << endl; ?? ??? ??? ?cin >> name; ?? ??? ??? ?existsPerson(&abs, name); ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?showPerson(&abs); ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?deletePerson(&abs); ?? ??? ??? ?break; ?? ??? ?case 4: ?? ??? ??? ?cout << "請輸入聯(lián)系人姓名" << endl; ?? ??? ??? ?cin >> name; ?? ??? ??? ?findPerson(&abs, name); ?? ??? ??? ?system("pause"); ?? ??? ??? ?//執(zhí)行清屏操作 ?? ??? ??? ?system("cls"); ?? ??? ??? ?break; ?? ??? ?case 5: ?? ??? ??? ?changePerson(&abs); ?? ??? ??? ?break; ?? ??? ?case 6: ?? ??? ??? ?empty(&abs); ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?cout << "歡迎下次使用!" << endl; ?? ??? ??? ?system("pause"); ?? ??? ??? ?return 0; ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?cout << "請輸入正確的選項(xiàng)序號:" << endl; ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?system("pause"); ?? ?return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 中重載和運(yùn)算符重載加號實(shí)現(xiàn)矩陣相加實(shí)例代碼
這篇文章主要介紹了C++ 中重載和運(yùn)算符重載加號實(shí)現(xiàn)矩陣相加實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03C++?AVL樹插入新節(jié)點(diǎn)后的四種調(diào)整情況梳理介紹
AVL樹是高度平衡的而二叉樹,它的特點(diǎn)是AVL樹中任何節(jié)點(diǎn)的兩個(gè)子樹的高度最大差別為1,本文主要給大家介紹了C++如何實(shí)現(xiàn)AVL樹,需要的朋友可以參考下2022-08-08C++多重繼承引發(fā)的重復(fù)調(diào)用問題與解決方法
這篇文章主要介紹了C++多重繼承引發(fā)的重復(fù)調(diào)用問題與解決方法,結(jié)合具體實(shí)例形式分析了C++多重調(diào)用中的重復(fù)調(diào)用問題及相應(yīng)的解決方法,需要的朋友可以參考下2018-05-05C++入門教程之內(nèi)聯(lián)函數(shù)與extern?"C"詳解
C++中的內(nèi)聯(lián)函數(shù)與靜態(tài)函數(shù)靜態(tài)函數(shù)靜態(tài)函數(shù)的定義靜態(tài)函數(shù)又稱為內(nèi)部函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++入門教程之內(nèi)聯(lián)函數(shù)與extern?"C"的相關(guān)資料,需要的朋友可以參考下2023-01-01C++析構(gòu)函數(shù)內(nèi)部工作機(jī)制詳解
析構(gòu)函數(shù)(Destructor)也是一種特殊的成員函數(shù),沒有返回值,不需要程序員顯式調(diào)用(程序員也沒法顯式調(diào)用),而是在銷毀對象時(shí)自動執(zhí)行。構(gòu)造函數(shù)的名字和類名相同,而析構(gòu)函數(shù)的名字是在類名前面加一個(gè)~符號2023-02-02