C++實現(xiàn)簡單的通訊錄管理系統(tǒng)
更新時間:2022年06月20日 09:19:15 作者:石先森很瘋狂
這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單的通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C++實現(xiàn)簡單的通訊錄管理系統(tǒng)的具體代碼,供大家參考,具體內容如下
案例描述:
通訊錄是一個可以記錄親人、好友信息的工具。
本教程主要利用C++來實現(xiàn)一個通訊錄管理系統(tǒng)
系統(tǒng)中需要實現(xiàn)的功能如下:
- 添加聯(lián)系人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、聯(lián)系電話、家庭住址)最多記錄1000人
- 顯示聯(lián)系人:顯示通訊錄中所有聯(lián)系人信息
- 刪除聯(lián)系人:按照姓名進行刪除指定聯(lián)系人
- 查找聯(lián)系人:按照姓名查看指定聯(lián)系人信息
- 修改聯(lián)系人:按照姓名重新修改指定聯(lián)系人
- 清空聯(lián)系人:清空通訊錄中所有信息
- 退出通訊錄:退出當前使用的通訊錄
#include<iostream>
#include<string>
using namespace std;
#define MAX ?1000 ? ?//通訊錄總人數(shù),可以修改
//聯(lián)系人信息結構體
struct Person
{
?? ?string name;
?? ?string sex;
?? ?int ?age;
?? ?int number;
?? ?string address;
};
//通訊錄結構體
struct addressbook
{
?? ?struct Person personArray[MAX]; //通訊錄中保存的聯(lián)系人數(shù)組
?? ?int m_Size; //通訊錄中人員個數(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)系人的下標
?? ??? ??? ?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) {
?? ??? ?//進行刪除聯(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 << "當前記錄為空" << 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)系人是否已存在
?? ??? ??? ?//最后進行聯(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 << "請輸入正確的選項序號:" << endl;
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?system("pause");
?? ?return 0;
}以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C++ 中重載和運算符重載加號實現(xiàn)矩陣相加實例代碼
這篇文章主要介紹了C++ 中重載和運算符重載加號實現(xiàn)矩陣相加實例代碼的相關資料,需要的朋友可以參考下2017-03-03
C++?AVL樹插入新節(jié)點后的四種調整情況梳理介紹
AVL樹是高度平衡的而二叉樹,它的特點是AVL樹中任何節(jié)點的兩個子樹的高度最大差別為1,本文主要給大家介紹了C++如何實現(xiàn)AVL樹,需要的朋友可以參考下2022-08-08
C++入門教程之內聯(lián)函數(shù)與extern?"C"詳解
C++中的內聯(lián)函數(shù)與靜態(tài)函數(shù)靜態(tài)函數(shù)靜態(tài)函數(shù)的定義靜態(tài)函數(shù)又稱為內部函數(shù),下面這篇文章主要給大家介紹了關于C++入門教程之內聯(lián)函數(shù)與extern?"C"的相關資料,需要的朋友可以參考下2023-01-01

