記錄一下利用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)前使用的通訊錄
顯示菜單功能
首先創(chuàng)建一個(gè)cpp文件,寫好基本框架:
#include <iostream>
using namespace std;
int main(){
system("pause");
return 0;
}
之后創(chuàng)建一個(gè)showMenu函數(shù)用于顯示系統(tǒng)的菜單
實(shí)際上就是打印出提示信息,提示用戶輸入不同數(shù)字代表對應(yīng)的功能:
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;
}
之后在main函數(shù)中調(diào)用這個(gè)函數(shù)即可:
#include <iostream>
using namespace std;
int main(){
showMenu();
system("pause");
return 0;
}
退出系統(tǒng)功能
定義個(gè)select變量接收用戶輸入,
使用switch結(jié)構(gòu)分別對用戶不同的輸入數(shù)字進(jìn)行處理,
同時(shí)在外層使用一個(gè)while循環(huán),讓程序循環(huán)執(zhí)行,使用戶能持續(xù)輸入,
最終輸入0后,直接結(jié)束程序,達(dá)到退出系統(tǒng)的功能。
int main(){
int select = 0; //用于接收用戶輸入的數(shù)字,對應(yīng)執(zhí)行不同的功能
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
cout << "歡迎下次使用" << endl;
system("pause");
return 0; //當(dāng)輸入0后,直接return退出程序
break;
default:
cout << "你輸入的是啥玩意???" << endl;
break;
}
}
system("pause");
return 0;
}
定義人員結(jié)構(gòu)體和通訊錄結(jié)構(gòu)體
#define MAX 1000
struct Person
{
string name;
int sex;
int age;
string phone;
string address;
};
struct Books
{
struct Person personArray[MAX]; //用于保存聯(lián)系人信息的數(shù)組,最大人數(shù)為1000
int p_size; //記錄通訊錄中的人員個(gè)數(shù)
};
添加聯(lián)系人
在函數(shù)最后使用system("cls");實(shí)現(xiàn)窗口信息清屏操作
void addPerson(struct Books * b){
if (b->p_size == MAX)
{
cout << "已經(jīng)滿員啦!!" << endl;
return;
}
else{
//輸入姓名
string name;
cout << "請輸入姓名:" << endl;
cin >> name;
b->personArray[b->p_size].name = name;
//輸入性別
cout << "請輸入性別:" << endl;
cout << "1 代表 男" << endl;
cout << "2 代表 女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
b->personArray[b->p_size].sex = sex;
break;
}
cout << "輸入錯(cuò)誤!請檢查輸入" << endl;
}
//輸入年齡
int age = 0;
cout << "請輸入年齡:" << endl;
cin >> age;
b->personArray[b->p_size].age = age;
//輸入電話
string phone;
cout << "請輸入電話:" << endl;
cin >> phone;
b->personArray[b->p_size].phone = phone;
//輸入地址
string address;
cout << "請輸入地址:" << endl;
cin >> address;
b->personArray[b->p_size].address = address;
b->p_size++;
cout << "添加完成" << endl;
system("pause");
system("cls"); //進(jìn)行清屏操作,使用戶完成操作后,終端只顯示菜單信息
}
}
查看聯(lián)系人
打印出通訊錄內(nèi)的所有聯(lián)系人信息
void showPerson(struct Books * b){
if (b->p_size == 0)
{
cout << "當(dāng)前記錄為空!" << endl; //檢查通訊錄是否為空
system("pause");
system("cls");
}
else
{
for (int i = 0; i < b->p_size; i++) //打印出所有聯(lián)系人信息
{
cout << "姓名:" << b->personArray[i].name << "\t";
cout << "性別:" << (b->personArray[i].sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << b->personArray[i].age << "\t";
cout << "電話:" << b->personArray[i].phone << "\t";
cout << "地址:" << b->personArray[i].address << endl;
}
system("pause");
system("cls");
}
}
判斷聯(lián)系人是否存在
這里定義了一個(gè)根據(jù)姓名判斷聯(lián)系人是否存在的函數(shù),
因?yàn)楹罄m(xù)的刪除、查找、修改功能都需要先進(jìn)行檢查聯(lián)系人是否存在,因此封裝了一個(gè)額外的函數(shù)
int isExist(struct Books * b, string name){
for (int i = 0; i < b->p_size; i++)
{
if (b->personArray[i].name == name)
{
return i; //如果通訊錄中有聯(lián)系人的姓名,返回聯(lián)系人信息的下標(biāo)索引編號
}
}
return -1; //沒有則返回-1
}
刪除聯(lián)系人
刪除聯(lián)系人:只需要將后面聯(lián)系人信息往前覆蓋,就可以刪除當(dāng)前的聯(lián)系人信息了
void deletePerson(struct Books * b){
cout << "請輸入需要刪除的聯(lián)系人姓名:" << endl;
string name;
cin >> name;
if (isExist(b, name) != -1)
{
for (int i = isExist(b, name); i < b->p_size; i++)
{
//聯(lián)系人信息進(jìn)行一個(gè)前移的操作,即實(shí)現(xiàn)刪除當(dāng)前聯(lián)系人
b->personArray[i] = b->personArray[i+1];
}
b->p_size--;
cout << "刪除成功!" << endl;
}
else
{
cout << "查無此人,請重新輸入" << endl;
}
system("pause");
system("cls");
}
查找聯(lián)系人
根據(jù)姓名查找聯(lián)系人信息,并打印出來
void findPerson(struct Books * b){
cout << "請輸入需要查找的聯(lián)系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(b, name);
if (ret != -1)
{
cout << "姓名:" << b->personArray[ret].name << "\t";
cout << "性別:" << (b->personArray[ret].sex == 1 ? "男" : "女") << "\t";
cout << "年齡:" << b->personArray[ret].age << "\t";
cout << "電話:" << b->personArray[ret].phone << "\t";
cout << "地址:" << b->personArray[ret].address << endl;
}
else
{
cout << "查無此人,請重新輸入" << endl;
}
system("pause");
system("cls");
}
修改聯(lián)系人
根據(jù)姓名選擇所要修改的聯(lián)系人信息,把新輸入的信息覆蓋掉原來的信息
void modifyPerson(struct Books * b){
cout << "請輸入需要修改的聯(lián)系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(b, name);
if (ret != -1)
{
//修改姓名
cout << "請輸入修改的姓名:" << endl;
string name;
cin >> name;
b->personArray[ret].name = name;
//修改性別
cout << "請輸入修改的性別:" << endl;
cout << "1 代表 男" << endl;
cout << "2 代表 女" << endl;
int sex;
while(true){
cin >> sex;
if (sex == 1 || sex == 2)
{
b->personArray[ret].sex = sex;
break;
}
else
{
cout << "輸入有誤,請重新輸入!" << endl;
}
}
//修改年齡
int age = 0;
cout << "請輸入修改的年齡:" << endl;
cin >> age;
b->personArray[ret].age = age;
//修改電話
string phone;
cout << "請輸入修改的電話:" << endl;
cin >> phone;
b->personArray[ret].phone = phone;
//修改地址
string address;
cout << "請輸入修改的地址:" << endl;
cin >> address;
b->personArray[ret].address = address;
cout << "修改成功!!" << endl;
}
else
{
cout << "查無此人,請重新輸入" << endl;
}
system("pause");
system("cls");
}
清空通訊錄
void cleanPerson(struct Books * b){
cout << "確定清空通訊錄所有信息?" << endl;
cout << "1 代表 確定" << endl;
cout << "2 代表 取消" << endl;
int n;
while(true){
cin >> n;
if (n == 1)
{
b->p_size = 0; //直接把通訊錄的聯(lián)系人數(shù)量置為0,做邏輯清空即可
cout << "通訊錄已清空" << endl;
break;
}
else if (n == 2)
{
cout << "已取消" << endl;
break;
}
else
{
cout << "輸入有誤,請重新輸入!" << endl;
}
}
system("pause");
system("cls");
}
主函數(shù)程序
在主函數(shù)中根據(jù)用戶輸入的數(shù)字調(diào)用不同的功能函數(shù)即可:
int main(){
Books books; //創(chuàng)建通訊錄結(jié)構(gòu)體
books.p_size = 0; //先初始化人員個(gè)數(shù)為 0
int select = 0;
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
addPerson(&books);
break;
case 2:
showPerson(&books);
break;
case 3:
deletePerson(&books);
break;
case 4:
findPerson(&books);
break;
case 5:
modifyPerson(&books);
break;
case 6:
cleanPerson(&books);
break;
case 0:
cout << "歡迎下次使用" << endl;
system("pause");
return 0;
break;
default:
cout << "你輸入的是啥玩意???" << endl;
system("pause");
system("cls");
break;
}
}
system("pause");
return 0;
}