【C++】小項目:C++實現通訊錄管理系統

文章目錄

  • 1、系統需求
    • 完整代碼


1、系統需求

本文將利用C++來實現一個通訊錄管理系統

系統中需要實現的功能如下:

  • 添加聯系人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、聯系電話、家庭住址)最多記錄1000人
  • 顯示聯系人:顯示通訊錄中所有聯系人信息
  • 刪除聯系人:按照姓名進行刪除指定聯系人
  • 查找聯系人:按照姓名查看指定聯系人信息
  • 修改聯系人:按照姓名重新修改指定聯系人
  • 清空聯系人:清空通訊錄中所有信息
  • 退出通訊錄:退出當前使用的通訊錄

以下是本篇文章正文內容

完整代碼

#include<iostream>
#include<string>
#define MAX 1000
using namespace std;//設計聯系人結構體
struct Person
{//姓名string m_Name;//性別 1 男 2 女int m_Sex;//年齡int m_Age;//電話string m_Phone;//地址string m_Addr;
};//設計通訊錄結構體
struct Addressbooks
{//通訊錄中保存的聯系人數組struct Person PersonArray[MAX];//通訊錄中當前記錄的人數int m_Size;
};//1、添加聯系人
void addPerson(Addressbooks * abs)
{//判斷通訊錄是否已經加滿,如果加滿則不再添加if (abs->m_Size == MAX){cout << "通訊錄已滿,無法添加!" << endl;}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 << "輸入有誤,請重新輸入" << endl;}//年齡cout << "請輸入年齡:" << endl;int age = 0;cin >> age;abs->PersonArray[abs->m_Size].m_Age = age;//電話string phone;cout << "請輸入聯系電話:" << endl;cin >> phone;abs->PersonArray[abs->m_Size].m_Phone = phone;//住址string address;cout << "請輸入家庭地址:" << endl;cin >> address;abs->PersonArray[abs->m_Size].m_Addr = address;//更新通訊錄人數abs->m_Size++;cout << "添加成功" << endl;	}}//打印聯系人
//打印數組中第i個聯系人
void print(Addressbooks * abs, int 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;
}//2、顯示所有的聯系人
void showPerson(Addressbooks * abs)
{//判斷通訊錄中人數是否為0,如果為0,提示記錄為空if (abs->m_Size == 0){cout << "通訊錄為空" << endl;}else{for (int i = 0; i < abs->m_Size; i++){print(abs, i);}}}//檢測聯系人是否存在,如果存在,返回聯系人所在數組中的具體位置,不存在返回-1
//參數1:通訊錄參數
//參數2:對比姓名
int isExit(Addressbooks * abs,string name)
{for (int i = 0; i < abs->m_Size; i++){if (abs->PersonArray[i].m_Name == name){return i;}else{return -1;}}
}//3、刪除聯系人
void deletePerson(Addressbooks * abs)
{cout << "請輸入您要刪除的聯系人姓名" << endl;string name;cin >> name;//ret == -1 未查到//ret != -1 查到了int ret = isExit(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;}
}//4、查找聯系人
void findPerson(Addressbooks * abs)
{cout << "請輸入您要查找的聯系人:" << endl;string name;cin >> name;int ret = isExit(abs, name);if (ret != -1){print(abs, ret);}else{cout << "查無此人" << endl;}
}//5、修改指定聯系人信息
void modifyPerson(Addressbooks * abs)
{cout << "請輸入您要修改的聯系人:" << endl;string name;cin >> name;int ret = isExit(abs, name);if (ret != -1){cout << "請輸入姓名:" << endl;string name;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 << "輸入有誤,請重新輸入" << endl;}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;}}//6、清空所有聯系人
void clearPerson(Addressbooks* abs)
{abs->m_Size = 0; //將當前聯系人數量計為0,做邏輯清空操作cout << "通訊錄已清空" << endl;
}//菜單界面
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()
{//創建通訊錄結構體變量Addressbooks abs;//初始化通訊錄中當前成員個數abs.m_Size = 0;int select = 0; //創建用戶輸入的變量while (true){showMenu(); //菜單調用cin >> select;switch (select){case 1: //1、添加聯系人addPerson(&abs);  //利用地址傳遞,可以修飾實參break;case 2: //2、顯示聯系人showPerson(&abs);break;case 3: //3、刪除聯系人deletePerson(&abs);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");return 0;default:break;}system("pause");system("cls");}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVGL | Demo實例使用說明

LVGL | Demo實例使用說明 時間&#xff1a;2023年12月10日21:51:17 文章目錄 LVGL | Demo實例使用說明Demos for LVGLAdd the examples to your projectsDemosWidgetsMusic playerKeypad and encoderBenchmarkStress Contributing Demos for LVGL Add the examples to your p…

基于SSM的酒店管理旅店系統(Java畢業設計)

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

華為OD機試真題-密碼輸入檢測-2023年OD統一考試(C卷)

題目描述&#xff1a; 給定用戶密碼輸入流input&#xff0c;輸入流中字符<表示退格&#xff0c;可以清除前一個輸入的字符&#xff0c;請你編寫程序&#xff0c;輸出最終得到的密碼字符&#xff0c;并判斷密碼是否滿足如下的密碼安全要求。 密碼安全要求如下&#xff1a; …

【軟件測試】年薪30萬跟年薪15萬的面試有些什么區別?

1、什么是兼容性測試&#xff1f;兼容性測試側重哪些方面&#xff1f; 參考答案&#xff1a; 兼容測試主要是檢查軟件在不同的硬件平臺、軟件平臺上是否可以正常的運行&#xff0c;即是通常說的軟件的可移植性。 兼容的類型&#xff0c;如果細分的話&#xff0c;有平臺的兼容…

7記一次組網過程

這段時間學習了服務器、操作系統、網絡相關的知識&#xff0c;后面真的進行了一次組網操作。這次把組網的過程記錄下來&#xff0c;方便下次操作的時候有資料可查詢。 前期準備 要組網&#xff0c;首先要做好規劃&#xff0c;把前期要準備的事情提前做好&#xff0c;才能事半…

Numpy數組中數據的排序【sort(),argsort()與 lexsort()】 (第13講)

Numpy數組中數據的排序【sort(),argsort()與 lexsort()】 (第13講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ???????????????????????????????????????????????????????????????????…

【C++ 程序設計入門基礎】- 第3節-循環結構02

目錄 while 語句 案例 while 循環 輸入一個整數 n &#xff0c;輸出 1~n 的所有整數。 查看運行結果&#xff1a; while 語句結構解析 do while 語句 案例 do while 循環 輸入一個整數n&#xff0c;輸出1&#xff5e;n的所有整數。 查看運行結果 while、do while的區別 …

AE-制作唯美星空粒子動態視頻

目錄 1.新建合成 2.導入一張星空圖片,拖入到新建的合成中 3.新建純色層面命名為bj

【git 相關操作】

git status - 查看當前狀態 git add - 將文件添加到暫存區 git commit -m "msg" - 提交暫存區文件到本地倉庫 git push origin master - 本地倉庫文件推送到遠程倉庫 git merge - 合并分支 git clone - 從指定地址克隆項目 git log - 查看commit日志 git stash push …

SpringSecurity6 | 登錄成功后的JSON處理

?作者簡介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;熱愛Java后端開發者&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;Leo的博客 &#x1f49e;當前專欄&#xff1a; Java從入門到精通 ?特色專欄&#xf…

Android:java.lang.SecurityException: Provider must not be exporte

java.lang.SecurityException: Provider must not be exporte 解決方案 首先在AndroidManifest.xml中添加provider android:authorities&#xff1a; 是用來標識provider的唯一標識&#xff0c;在同一部手機上一個"authority"串只能被一個app使用&#xff0c;沖突的話…

架構LNMP

目錄 1.安裝Nginx服務 2.安裝 MySQL 服務 3.安裝配置 PHP 解析環境 4.部署 Discuz&#xff01;社區論壇 Web 應用 1.安裝Nginx服務 實驗準備 systemctl stop firewalld systemctl disable firewalld setenforce 0 安裝依賴包 yum -y install pcre-devel zlib-devel gcc…

JavaScript中的async await基本使用

目錄 1. async await是什么2. 為什么會出現3. 需要怎么去使用4. 最終的結果解決什么5. 使用的注意點6. 常用的技巧 JavaScript中的async await是一種處理異步代碼的語法糖&#xff0c;它可以讓我們更加方便地處理異步操作&#xff0c;避免了回調地獄和Promise鏈式調用的問題。 …

Jmeter測試實踐:文件下載接口

一 Jmeter步驟 1.打開jmeter4.0&#xff0c;新建測試計劃&#xff0c;添加線程組。根據實際情況配置線程屬性。 2.添加HTTP請求。根據接口文檔進行配置。 Basic部分修改如下&#xff0c;Advanced部分保持默認。這里的參數id是文件的id&#xff0c;我進行了參數化&#xff0c…

vue基本運用之常見問題及案例代碼

前言 一些 Vue.js 的常見問題以及對應的案例代碼 Vue實例生命周期 問題描述:如何在Vue的生命周期鉤子中調用其他鉤子?案例代碼: new Vue({el: #app, created: function () {console.log(m

Redis哨兵(sentinel)

文章目錄 簡介搭建框架具體步驟主要文件參數開始配置 案例分析原有的master掛了 哨兵運行流程和選舉原理主觀下線客觀下線(Objectively Down)選舉出領導者哨兵(哨兵中選出兵王) 選新的master使用建議 簡介 將某一個從庫轉換為新主庫&#xff0c;繼續對外服務將某一個從庫轉換為…

?operator --- 標準運算符替代函數?

源代碼: Lib/operator.py operator 模塊提供了一套與Python的內置運算符對應的高效率函數。例如&#xff0c;operator.add(x, y) 與表達式 xy 相同。 許多函數名與特殊方法名相同&#xff0c;只是沒有雙下劃線。為了向后兼容性&#xff0c;也保留了許多包含雙下劃線的函數。為了…

Java - HashMap

數組和鏈表 數組&#xff1a; 存儲區間是連續&#xff0c;且占用內存嚴重&#xff0c;空間復雜也很大&#xff0c;時間復雜為O&#xff08;1&#xff09; 優點&#xff1a;是隨機讀取效率很高&#xff0c;原因數組是連續&#xff08;隨機訪問性強&#xff0c;查找速度快&#x…

properties配置和讀取

如何配置和讀取屬性文件 1.屬性文件介紹1.1 什么是屬性文件1.2屬性文件規范1.3 屬性文件優缺點 2.屬性文件讀取4.spring和屬性文件4.1利用注解讀取4.2配置文件里直接引用 4.屬性文件寫入5.注意事項5.總結 1.屬性文件介紹 1.1 什么是屬性文件 Java開發中&#xff0c;我們經常需…

Qt6.5類庫實例大全:Qt Creator快速入門

哈嘍大家好&#xff0c;我是20YC編程小二&#xff01;掃碼關注公眾號&#xff0c;現在可免費領取《C程序員》在線視頻教程哦&#xff01;#下面開始今天內容# 1. Qt Creator介紹 Qt Creator是一個輕量級的跨平臺集成開發環境(IDE)&#xff0c;專為使用Qt框架進行應用程序開發而…