利用C++制作一个通讯录管理系统。
每一个联系人信息包括:姓名 性别 年龄 电话 住址。
功能包括:按1、添加联系人 按2、显示联系人 按3、删除联系人 按4、查找联系人 按5、修改联系人 按6、清空联系人 按0、退出通讯录。
要求利用数组,指针,不使用#include <vector>, 可以做到按任意键后合理化清屏。
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
using namespace std;
const int MAX_CONTACTS = 100; // 最大联系人数量
struct Contact {
string name; // 姓名
string gender; // 性别
int age; // 年龄
string phone; // 电话
string address; // 住址
};
class AddressBook {
private:
Contact contacts[MAX_CONTACTS]; // 保存联系人信息的数组
int contactCount; // 当前联系人数量
public:
AddressBook() : contactCount(0) {} // 初始化联系人数量为0
// 添加联系人
void addContact() {
if (contactCount >= MAX_CONTACTS) {
cout << "通讯录已满,无法添加更多联系人!" << endl;
return;
}
Contact &contact = contacts[contactCount];
cout << "请输入联系人姓名: ";
cin >> contact.name;
cout << "请输入联系人性别: ";
cin >> contact.gender;
cout << "请输入联系人年龄: ";
cin >> contact.age;
cout << "请输入联系人电话: ";
cin >> contact.phone;
cout << "请输入联系人住址: ";
cin.ignore(); // 清除换行符
getline(cin, contact.address);
contactCount++;
cout << "联系人添加成功!" << endl;
}
// 显示所有联系人
void displayContacts() {
if (contactCount == 0) {
cout << "通讯录为空!" << endl;
return;
}
cout << left << setw(20) << "姓名" << setw(10) << "性别"
<< setw(10) << "年龄" << setw(20) << "电话" << "住址" << endl;
for (int i = 0; i < contactCount; ++i) {
cout << left << setw(20) << contacts[i].name
<< setw(10) << contacts[i].gender
<< setw(10) << contacts[i].age
<< setw(20) << contacts[i].phone
<< contacts[i].address << endl;
}
}
// 删除联系人
void deleteContact() {
string name;
cout << "请输入要删除的联系人姓名: ";
cin >> name;
for (int i = 0; i < contactCount; ++i) {
if (contacts[i].name == name) {
// 将最后一个联系人移到当前位置,形成"挤压"效果
contacts[i] = contacts[--contactCount];
cout << "联系人删除成功!" << endl;
return;
}
}
cout << "未找到联系人!" << endl;
}
// 查找联系人
void findContact() {
string name;
cout << "请输入要查找的联系人姓名: ";
cin >> name;
for (int i = 0; i < contactCount; ++i) {
if (contacts[i].name == name) {
cout << "姓名: " << contacts[i].name
<< ", 性别: " << contacts[i].gender
<< ", 年龄: " << contacts[i].age
<< ", 电话: " << contacts[i].phone
<< ", 住址: " << contacts[i].address << endl;
return;
}
}
cout << "未找到联系人!" << endl;
}
// 修改联系人信息
void modifyContact() {
string name;
cout << "请输入要修改的联系人姓名: ";
cin >> name;
for (int i = 0; i < contactCount; ++i) {
if (contacts[i].name == name) {
cout << "请输入新的性别: ";
cin >> contacts[i].gender;
cout << "请输入新的年龄: ";
cin >> contacts[i].age;
cout << "请输入新的电话: ";
cin >> contacts[i].phone;
cout << "请输入新的住址: ";
cin.ignore(); // 清除换行符
getline(cin, contacts[i].address);
cout << "联系人修改成功!" << endl;
return;
}
}
cout << "未找到联系人!" << endl;
}
// 清空所有联系人
void clearContacts() {
contactCount = 0; // 重置联系人数量
cout << "通讯录已清空!" << endl;
}
};
// 清屏函数
void clearScreen() {
#ifdef _WIN32
system("cls"); // Windows系统
#else
system("clear"); // Linux/macOS系统
#endif
}
// 等待用户按任意键继续
void waitForKeyPress() {
system("pause");
}
int main() {
AddressBook addressBook; // 创建地址簿对象
int choice; // 用户选择
do {
clearScreen(); // 每次循环清屏
cout << "==========通讯录管理系统=========" << endl;
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 << "请输入选择: ";
cin >> choice;
switch (choice) {
case 1:
addressBook.addContact();
waitForKeyPress();
break;
case 2:
addressBook.displayContacts();
waitForKeyPress();
break;
case 3:
addressBook.deleteContact();
waitForKeyPress();
break;
case 4:
addressBook.findContact();
waitForKeyPress();
break;
case 5:
addressBook.modifyContact();
waitForKeyPress();
break;
case 6:
addressBook.clearContacts();
waitForKeyPress();
break;
case 0:
cout << "退出通讯录管理系统!" << endl;
break;
default:
cout << "无效选择,请重新输入!" << endl;
waitForKeyPress();
}
} while (choice != 0); // 继续循环,直到用户选择退出
return 0;
}