用C++面向对象程序设计思想编写通讯录管理系统
问题描述:
编写一个简单的通讯录管理程序。
通讯录记录有姓名,地址(省、市(县)、街道),电话号码, 邮政编码等四项。
基本要求:
程序应提供的基本管理功能有:
1)添加:即增加一个人的记录到通信录中
2)显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)存储:即将通讯录信息保存在一个文件中。
4)装入:即将文件中的信息读入程序。
5)查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
6)修改:可修改一个人的除姓名外其它信息。 测试数据:程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。
案例代码
以下是使用C++面向对象程序设计思想编写的通讯录管理程序:
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
using namespace std;
// 定义通讯录记录类
class Contact {
private:
string name;
string province;
string city;
string street;
string phoneNumber;
string postalCode;
public:
Contact(string name, string province, string city, string street, string phoneNumber, string postalCode) {
this->name = name;
this->province = province;
this->city = city;
this->street = street;
this->phoneNumber = phoneNumber;
this->postalCode = postalCode;
}
// 获取姓名
string getName() {
return name;
}
// 获取地址
string getAddress() {
return province + city + street;
}
// 获取电话号码
string getPhoneNumber() {
return phoneNumber;
}
// 获取邮政编码
string getPostalCode() {
return postalCode;
}
// 修改地址
void setAddress(string province, string city, string street) {
this->province = province;
this->city = city;
this->street = street;
}
// 修改电话号码
void setPhoneNumber(string phoneNumber) {
this->phoneNumber = phoneNumber;
}
// 修改邮政编码
void setPostalCode(string postalCode) {
this->postalCode = postalCode;
}
// 显示通讯录记录
void display() {
cout << "姓名:" << name << endl;
cout << "地址:" << getAddress() << endl;
cout << "电话号码:" << phoneNumber << endl;
cout << "邮政编码:" << postalCode << endl;
}
};
// 定义通讯录管理类
class ContactManager {
private:
vector<Contact> contacts;
// 根据姓名查找联系人
Contact* findByName(string name) {
for (int i = 0; i < contacts.size(); i++) {
if (contacts[i].getName() == name) {
return &contacts[i];
}
}
return nullptr;
}
public:
// 添加联系人
void addContact(Contact contact) {
contacts.push_back(contact);
}
// 显示所有联系人
void displayAllContacts() {
for (int i = 0; i < contacts.size(); i++) {
contacts[i].display();
cout << endl;
}
}
// 存储联系人信息到文件
void saveToFile(string filename) {
ofstream file(filename);
if (file.is_open()) {
for (int i = 0; i < contacts.size(); i++) {
file << contacts[i].getName() << endl;
file << contacts[i].getAddress() << endl;
file << contacts[i].getPhoneNumber() << endl;
file << contacts[i].getPostalCode() << endl;
}
file.close();
cout << "通讯录信息已保存到文件:" << filename << endl;
}
else {
cout << "无法打开文件:" << filename << endl;
}
}
// 从文件中加载联系人信息
void loadFromFile(string filename) {
ifstream file(filename);
if (file.is_open()) {
contacts.clear();
string name, province, city, street, phoneNumber, postalCode;
while (getline(file, name)) {
getline(file, province);
getline(file, city);
getline(file, street);
getline(file, phoneNumber);
getline(file, postalCode);
Contact contact(name, province, city, street, phoneNumber, postalCode);
contacts.push_back(contact);
}
file.close();
cout << "从文件加载通讯录信息:" << filename << endl;
}
else {
cout << "无法打开文件:" << filename << endl;
}
}
// 根据姓名查询联系人信息
void searchByName(string name) {
Contact* contact = findByName(name);
if (contact != nullptr) {
contact->display();
}
else {
cout << "未找到姓名为:" << name << " 的联系人" << endl;
}
}
// 修改联系人信息
void modifyContact(Contact contact, string name) {
Contact* foundContact = findByName(name);
if (foundContact != nullptr) {
foundContact->setAddress(contact.getAddress());
foundContact->setPhoneNumber(contact.getPhoneNumber());
foundContact->setPostalCode(contact.getPostalCode());
cout << "成功修改联系人信息" << endl;
}
else {
cout << "未找到姓名为:" << name << " 的联系人" << endl;
}
}
};
int main() {
ContactManager contactManager;
string name, province, city, street, phoneNumber, postalCode;
// 输入联系人信息
for (int i = 0; i < 10; i++) {
cout << "请输入联系人姓名:";
cin >> name;
cout << "请输入联系人地址:";
cin >> province >> city >> street;
cout << "请输入联系人电话号码:";
cin >> phoneNumber;
cout << "请输入联系人邮政编码:";
cin >> postalCode;
Contact contact(name, province, city, street, phoneNumber, postalCode);
contactManager.addContact(contact);
}
// 显示所有联系人信息
cout << "所有联系人信息:" << endl;
contactManager.displayAllContacts();
// 保存联系人信息到文件
contactManager.saveToFile("contacts.txt");
// 从文件加载联系人信息
contactManager.loadFromFile("contacts.txt");
// 根据姓名查询联系人信息
cout << "请输入要查询的联系人姓名:";
cin >> name;
contactManager.searchByName(name);
// 修改联系人信息
cout << "请输入要修改的联系人姓名:";
cin >> name;
cout << "请输入新的联系人信息:" << endl;
cout << "请输入联系人地址:";
cin >> province >> city >> street;
cout << "请输入联系人电话号码:";
cin >> phoneNumber;
cout << "请输入联系人邮政编码:";
cin >> postalCode;
Contact modifiedContact(name, province, city, street, phoneNumber, postalCode);
contactManager.modifyContact(modifiedContact, name);
return 0;
}
以上代码实现了基本的通讯录管理功能,可以添加、显示、存储、装入、查询和修改通讯录记录。用户可以输入不少于10个人员的通讯录信息,并且程序考虑了人员可以同名的情况。通讯录信息会被保存到文件中,用户也可以从文件中加载通讯录信息。用户可以根据姓名查询某人的相关信息,并且可以修改某人的除姓名外的其他信息。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END