C++通訊錄系統(含完整程式碼和詳細註釋)
阿新 • • 發佈:2021-01-31
功能說明
含有以下幾個主要功能:
- 新增聯絡人,包括聯絡人姓名、性別、年齡、電話和家庭住址,上限2000人
- 顯示通訊錄中所有聯絡人的資訊
- 按照姓名刪除指定聯絡人
- 按照姓名查詢指定聯絡人資訊
- 按照姓名修改指定聯絡人資訊
- 清空通訊錄中所有資訊(邏輯清除)
- 退出通訊錄
程式碼
/*
* File name:main.cpp
* Author:ORI
* Versio:V1.0
* Description:通訊錄管理系統。含有選單、退出、新增聯絡人、顯示聯絡人
* 刪除聯絡人、查詢聯絡人、修改聯絡人和清空聯絡人的功能。
* Others:
* Log:初版 2021/1/30 ori建立
*/
#include <iostream>
#include <string>
using namespace std;
#define MAX 2000 /* 通訊錄最大人數 */
/* 定義聯絡人結構體 */
struct Person{
string m_Name; /* 姓名 */
int m_Sex; /* 性別 1_男 2_女 */
int m_Age; /* 年齡 */
string m_Phone; /* 電話 */
string m_Addr; /* 地址 */
};
/* 定義通訊錄結構體 */
struct Addressbooks{
struct Person personArray[MAX]; /* 通訊錄中儲存聯絡人陣列 */
int m_size; /* 當前記錄聯絡人個數 */
};
/*
* @Description : 實現選單頁面
* @param : 無
* @return : 無
*/
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;
}
/*
* @Description : 新增聯絡人
* @param - abe : 通訊錄結構體變數
* @return : 若通訊錄已滿,返回0
*/
void addPerson(Addressbooks *abs)
{
/* 判斷人數是否已滿 */
if(abs->m_size == MAX){
cout << "通訊錄已滿,無法新增!" << endl;
return;
}
else{
/* 新增聯絡人 */
/* 新增姓名 */
string name1;
cout << "請輸入姓名:" << endl;
cin >> name1;
abs->personArray[abs->m_size].m_Name = name1;
/* 新增性別 */
int sex = 0;
cout << "請輸入性別:" << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女:" << endl;
while (true) {
/* 判斷輸入是否有誤,若有錯誤則重新輸入 */
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personArray[abs->m_size].m_Sex = sex;
break;
} else {
cout << "輸入格式不正確!" << endl;
}
}
/* 新增年齡 */
int age = 0;
cout << "請輸入年齡:" << endl;
while (true) {
/* 判斷輸入是否有誤,若有錯誤則重新輸入 */
cin >> age;
if (age > 0 && age <= 120) {
abs->personArray[abs->m_size].m_Age = age;
break;
} else {
cout << "輸入數值不正確!" << endl;
}
}
/* 新增電話 */
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;
system("pause"); /* 按任意鍵繼續 */
system("cls"); /* 清屏操作 */
}
}
/*
* @Description : 顯示聯絡人
* @param - abs : 通訊錄結構體變數
* @return : 無
*/
void showPerson(Addressbooks *abs)
{
/* 判斷通訊錄是否為空 */
if (abs->m_size == 0){
cout << "當前記錄為空" << endl;
}
else{
for (int i = 0; i < abs->m_size; i++) {
cout << "姓名:" << abs->personArray[i].m_Name << endl;
cout << "性別:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女")
<< endl;
cout << "年齡:" << abs->personArray[i].m_Age << endl;
cout << "電話:" << abs->personArray[i].m_Phone << endl;
cout << "住址:" << abs->personArray[i].m_Addr << endl;
cout << endl;
}
}
system("pause"); /* 按任意鍵繼續 */
system("cls"); /* 清屏操作 */
}
/*
* @Description : 檢測聯絡人是否存在
* @param - abs : 通訊錄
* @param - name : 對比名字
* @return : 如果存在,返回聯絡人所在陣列中的具體位置;
* 如果不存在,返回 -1
*/
int isExist(Addressbooks *abs, string name)
{
for (int i = 0; i < abs->m_size; i++){
/* 如果找到了一樣的使用者 */
if (abs->personArray[i].m_Name == name){
return i;
}
}
return -1;
}
/*
* @Description : 刪除指定聯絡人
* @param - abs : 通訊錄結構體變數
* @return : 無
*/
void deletePerson(Addressbooks *abs)
{
cout << "請輸入您要刪除的聯絡人" << endl;
string name;
cin >> name;
/*
* ret == -1 未查到
* ret != -1 查到
*/
int ret = isExist(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;
}
system("pause"); /* 按任意鍵繼續 */
system("cls"); /* 清屏操作 */
}
/*
* @Description : 查詢指定聯絡人資訊
* @param - abs : 通訊錄結構體變數
* @return : 無
*/
void findPerson(Addressbooks *abs)
{
cout << "請輸入您要查詢的聯絡人" << endl;
string name;
cin >> name;
/*
* 判斷指定的聯絡人是狗存在通訊錄中
* ret == -1 未查到
* ret != -1 查到
*/
int ret = isExist(abs, name);
if (ret != -1){
/* 查詢到此人,進行操作 */
cout << "姓名:" << abs->personArray[ret].m_Name << endl;
cout << "性別:" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女")
<< endl;
cout << "年齡:" << abs->personArray[ret].m_Age << endl;
cout << "電話:" << abs->personArray[ret].m_Phone << endl;
cout << "住址:" << abs->personArray[ret].m_Addr << endl;
cout << endl;
}
else {
cout << "查無此人" << endl;
}
system("pause"); /* 按任意鍵繼續 */
system("cls"); /* 清屏操作 */
}
/*
* @Description : 修改指定聯絡人資訊
* @param - abs : 通訊錄結構體變數
* @return : 無
*/
void modifyPerson(Addressbooks *abs)
{
cout << "請輸入您要修改的聯絡人" << endl;
string name;
cin >> name;
/*
* 判斷指定的聯絡人是狗存在通訊錄中
* ret == -1 未查到
* ret != -1 查到
*/
int ret = isExist(abs, name);
if (ret != -1){
/* 查詢到此人,進行操作 */
/* 修改姓名 */
string name1;
cout << "請輸入姓名:" << endl;
cin >> name1;
abs->personArray[ret].m_Name = name1;
/* 修改性別 */
int sex = 0;
cout << "請輸入性別:" << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女:" << endl;
while (true) {
/* 判斷輸入是否有誤,若有錯誤則重新輸入 */
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personArray[ret].m_Sex = sex;
break;
} else {
cout << "輸入格式不正確!" << endl;
}
}
/* 修改年齡 */
int age = 0;
cout << "請輸入年齡:" << endl;
while (true) {
/* 判斷輸入是否有誤,若有錯誤則重新輸入 */
cin >> age;
if (age > 0 && age <= 120) {
abs->personArray[ret].m_Age = age;
break;
} else {
cout << "輸入數值不正確!" << endl;
}
}
/* 修改電話 */
string phone;
cout << "請輸入練習電話:" << endl;
cin >> phone;
abs->personArray[ret].m_Phone = phone;
/* 修改住址 */
string address;
cout << "請輸入住址:" << endl;
cin >> address;
abs->personArray[ret].m_Addr = address;
cout << "修改聯絡人成功" << endl;
}
else {
cout << "查無此人" << endl;
}
system("pause"); /* 按任意鍵繼續 */
system("cls"); /* 清屏操作 */
}
/*
* @Description : 清空聯絡人
* @param - abs : 通訊錄結構體變數
* @return : 無
*/
void cleanPerson(Addressbooks *abs)
{
abs->m_size = 0;
cout << "通訊錄已清空" << endl;
system("pause"); /* 按任意鍵繼續 */
system("cls"); /* 清屏操作 */
}
/*
* @Description: main函式
* @param : 無
* @return : 無
*/
int main()
{
//system("chcp 65001 > nul"); /* 在不同編碼環境下得以正常顯示中文漢字 */
int select = 0; /* 使用者選擇變數 */
Addressbooks abs; /* 建立通訊錄結構體變數 */
abs.m_size = 0; /* 初始化通訊錄當前人員個數 */
while (true) {
showMenu(); /* 選單呼叫 */
cout << "請輸入你要使用的功能序號:" << endl;
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、清空聯絡人 */
cleanPerson(&abs);
break;
case 0: /* 0、退出通訊錄 */
cout << "歡迎下次使用" << endl;
system("pause"); /* 按任意鍵鍵結束 */
return 0;
}
}
}
介面
最後
個人練習寫的,主要用來複習鞏固C++基礎語法知識,以及規範自己的程式碼結構和註釋。