1,系統需求
通訊錄是一個記錄親人,好友信息的工具
系統中需要實現的功能如下:
1,添加聯系人:向通訊錄中添加新人,信息包括(姓名,性別,年齡,聯系電話,家庭住址)最多記錄1000個人
2,顯示聯系人:顯示通訊錄中所有的聯系人信息
3,刪除聯系人:按照姓名進行刪除指定聯系人
4,查找聯系人:按照姓名查找指定聯系人信息
5,修改聯系人:按照名字重新修改指定聯系人
6,清空聯系人:清空通訊錄所有信息
7,退出通訊錄:退出當前使用的通訊錄
2,創建項目
創建項目步驟如下:
打開軟件
點擊創建新項目
?
點擊空項目和下一步?
在前兩行包含頭文件?
3,菜單功能
功能描述:用戶選擇功能的界面
步驟:創建函數void showMenu(),并在int 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;cout << endl;
}int main()
{showMenu();system("pause");return 0;
}
結果顯示:?
4,退出功能
功能描述:退出通訊錄系統
思路:根據用戶不同的選擇,進入不同的功能,可以選擇switch分支結構,將整個框架進行搭建
當前用戶選擇0的時候,執行退出,選擇其他先不做操作,也不會退出程序
代碼展示:
int select = 0;//創建用戶輸入變量while (1){//調用菜單showMenu();int select = 0;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");break;default:break;}}system("pause");return 0;
}
5,添加聯系人
功能描述:實現添加聯系人功能,聯系人上限為1000人,聯系人信息包括(姓名,性別,年齡,聯系電話,家庭住址)
步驟:設計聯系人結構體
? ? ? ? ? 設計通訊錄結構體
? ? ? ? ? main()函數中創建通訊錄
? ? ? ? ??封裝添加聯系人函數
? ? ? ? ? 測試添加聯系人函數
5.1??設計聯系人結構體
聯系人信息包括(姓名,性別,年齡,聯系電話,家庭住址)
設計如下:
#include<string>//頭文件信息
//聯系人結構體
struct Person
{string name;//姓名int m_sex;//性別int m_age;//年齡string m_phont;//電話string m_address;//住址
};
5.2??設計通訊錄結構體
//通訊錄結構體
struct Addressbooks
{struct Person personArray[MAX];//通訊錄保存聯系人信息int m_size;//通訊錄中人員個數
};
5.3? main()函數中創建通訊錄
Addressbooks abs;//創建通訊錄變量
5.4???封裝添加聯系人函數
void addPerson(Addressbooks * 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 (1){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}cout << "輸入有誤,請重新輸入" << endl;}abs->personArray[abs->m_size].m_sex = sex;//年齡cout << "請輸入年齡" << endl;int age = 0;cin >> age;abs->personArray[abs->m_size].m_age = age;//聯系電話cout << "請輸入電話" << endl;string phone;cin >> phone;abs->personArray[abs->m_size].m_phone = phone;//家庭住址cout << "請輸入地址" << endl;string address;cin >> address;abs->personArray[abs->m_size].m_address = address;//更新通訊錄人數abs->m_size++;cout << "添加成功" << endl;system("pause");//按任意鍵繼續system("cls");//清屏操作}
}
5.5??測試添加聯系人函數
case 1://1,添加聯系人addPerson(&abs);//利用地址傳參,可以修飾實參break;
5.6 結果展示?
6,顯示聯系人
功能描述:顯示通訊錄已有的聯系人信息
顯示聯系人實現步驟:
? ? ? ? *封存顯示聯系人函數
? ? ? ? *測試顯示聯系人功能
6.1 封存顯示聯系人函數
思路:判斷如果當前通訊錄中沒有人員,就提示記錄為空,人數大于0,顯示通訊錄中信息
代碼如下:
//顯示聯系人
void showPerson(Addressbooks* abs)
{//判斷如果當前通訊錄中沒有人員,就提示記錄為空//人數大于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";cout << "性別:" << abs->personArray[i].m_sex << "\t";cout << "年齡:" << abs->personArray[i].m_age << "\t";cout << "電話:" << abs->personArray[i].m_phone << "\t";cout << "地址:" << abs->personArray[i].m_address << endl;}}system("pause");//按任意鍵繼續system("cls");//清屏操作
}
}
6.2 測試顯示聯系人功能
case 2://2, 顯示聯系人showPerson(&abs);break;
6.3 結果展示?
7,刪除聯系人
功能描述:按照姓名進行刪除指定聯系人
步驟:
7.1封裝檢測聯系人是否存在
思路:刪除聯系人前,我們需要先判斷用戶輸入的聯系人是否存在,如果存在就刪除,不存在則提示用戶沒有要刪除的聯系人
因此我們可以把檢測聯系人是否存在封裝成一個函數,如果存在,返回聯系人在通訊錄中的位置,不存在則返回-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;//如果遍歷結果都沒有找到,則返回-1}
}
case 3://3,刪除聯系人
{cout << "請輸入刪除聯系人的姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查無此人" << endl;}else{cout << "找到此人" << endl;}
}
7.2封裝刪除聯系人函數
void deletePerson(Addressbooks * abs, string name)
{int ret = isExist(abs, name);//ret==-1 未查到//ret != 1 查到了if (ret != -1){//查到人,要進行刪除操作for (int i = 0; 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測試刪除聯系人功能
case 3://3,刪除聯系人
{cout << "請輸入刪除聯系人的姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查無此人" << endl;}else{cout << "找到此人" << endl;}deletePerson(&abs, name);
}
8,查找聯系人
功能描述:按照姓名查找聯系人信息
8.1封裝查找聯系人信息
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 == 1 ? "男" : "女") << "\t";cout << "年齡:" << abs->personArray[ret].m_age << "\t";cout << "電話:" << abs->personArray[ret].m_phone << "\t";cout << "地址:" << abs->personArray[ret].m_address << endl;}else {cout << "查無此人" << endl;}system("pause");system("cls");
}
8.2 測試查找指定聯系人
case 4://4,查找聯系人findPerson(&abs);break;
?
9,修改聯系人
功能描述:按照名字修改指定聯系人
9.1 封裝修改聯系人函數
實現思路:查找用戶輸入的聯系人,如果查找成功進行修改操作,查找失敗提示查無此人
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 << "輸入有誤,請重新輸入" << 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_address = address;cout << "修改成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}
9.2 測試修改聯系人功能
case 5://5,修改聯系人modifyPerson(&abs);break;
?
10,清空聯系人
功能描述:
10.1 封存清空聯系人函數
void cleanPerson(Addressbooks* abs)
{abs->m_size = 0;cout << "通訊錄已經清空" << endl;system("pause");system("cls");
}
10.2 測試清空聯系人功能
case 6://6,清空聯系人cleanPerson(&abs);break;
?
11,整體實現
#include<iostream>
using namespace std;
#include<string>//頭文件信息
#define MAX 1000//聯系人結構體
struct Person
{string m_name;//姓名int m_sex;//性別int m_age;//年齡string m_phone;//電話string m_address;//住址
};//通訊錄結構體
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;cout << endl;
}//添加聯系人
void addPerson(Addressbooks * 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){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;//聯系電話cout << "請輸入電話" << endl;string phone;cin >> phone;abs->personArray[abs->m_size].m_phone = phone;//家庭住址cout << "請輸入地址" << endl;string address;cin >> address;abs->personArray[abs->m_size].m_address = address;//更新通訊錄人數abs->m_size++;cout << "添加成功" << endl;}system("pause");//按任意鍵繼續system("cls");//清屏操作
}//顯示聯系人
void showPerson(Addressbooks* abs)
{//判斷如果當前通訊錄中沒有人員,就提示記錄為空//人數大于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";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_address << endl;}}system("pause");//按任意鍵繼續system("cls");//清屏操作
}//如果存在,返回聯系人在通訊錄中的位置,不存在則返回 - 1
//參數1 通訊錄 參數2 對比姓名
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;//如果遍歷結果都沒有找到,則返回-1}
}void deletePerson(Addressbooks * abs, string name)
{int ret = isExist(abs, name);//ret==-1 未查到//ret != 1 查到了if (ret != -1){//查到人,要進行刪除操作for (int i = 0; i < abs->m_size; i++){//數據遷移//刪除:就是將后面每個人的信息的位置替換前一個人的信息abs->personArray[i] = abs->personArray[i + 1];}abs->m_size--;cout << "刪除成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}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 == 1 ? "男" : "女") << "\t";cout << "年齡:" << abs->personArray[ret].m_age << "\t";cout << "電話:" << abs->personArray[ret].m_phone << "\t";cout << "地址:" << abs->personArray[ret].m_address << endl;}else {cout << "查無此人" << endl;}system("pause");system("cls");
}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 << "輸入有誤,請重新輸入" << 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_address = address;cout << "修改成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}void cleanPerson(Addressbooks* abs)
{abs->m_size = 0;cout << "通訊錄已經清空" << endl;system("pause");system("cls");
}int main()
{Addressbooks abs;//創建通訊錄結構體變量abs.m_size = 0;//初始化當前人數個數int select = 0;//創建用戶輸入變量while (1){//調用菜單showMenu();cout << "請輸入:" << endl;int select = 0;cin >> select;switch (select){case 1://1,添加聯系人addPerson(&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, name); }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");break;default:break;}}system("pause");return 0;
}