使用c++语言基于GUI编写一个通讯录系统实现对联系人信息的保存和增删查改等操作。 要求所有函数都是lambd函数, 要求使用构造函数、友元函数、指针等, 要求实现用户异常处理, 包含五个模块
时间: 2024-09-19 10:01:23 浏览: 62
在C++中,基于GUI(图形用户界面)编写一个通讯录系统可以使用Qt库,它是一个强大的跨平台应用程序框架,支持窗口和控件的设计。这里简述如何构建一个基本的通讯录系统,包括五个核心模块,每个模块都有一个相关的lambda函数:
1. **Contact** 类 (构造函数、成员变量):
- 构造函数接受姓名、电话号码等属性作为参数,并存储在智能指针中(避免内存泄漏)。
```cpp
class Contact {
public:
Contact(const std::string& name, const std::string& phoneNumber) : name_(name), phone_(phoneNumber) {}
// 使用指针存储数据
std::shared_ptr<std::string> getName() { return name_; }
std::shared_ptr<std::string> getPhoneNumber() { return phone_; }
private:
std::shared_ptr<std::string> name_;
std::shared_ptr<std::string> phone_;
};
```
2. **ContactBook** 类 (友元函数):
- 包含一个vector来存储Contact对象,以及添加、删除等操作的lambda函数。
- 友元函数允许直接访问Contact对象的私有成员。
```cpp
class ContactBook {
public:
void addContact(std::function<void(Contact&)> action) {
action(*contacts_.emplace_back());
}
void removeContact(const std::string& phoneNumber, std::function<bool(Contact&)> pred = nullptr) {
if (pred) {
auto it = std::find_if(contacts_.begin(), contacts_.end(), pred);
if (it != contacts_.end())
contacts_.erase(it);
} else {
contacts_.erase(std::remove_if(contacts_.begin(), contacts_.end(),
[phoneNumber](const Contact& c){return c.getPhoneNumber()->equals(phoneNumber);}),
contacts_.end());
}
}
private:
std::vector<Contact> contacts_;
};
// 友元函数示例
void saveContact(Contact& contact) {
// 实现保存到文件或数据库的操作
}
```
3. **MainWindow** 类 (GUI交互):
- 使用Qt的QWidgets库设计窗口,包含添加、删除、查找、编辑联系人的按钮,点击事件通过lambda函数连接。
```cpp
class MainWindow : public QMainWindow {
public slots:
void onAddButtonClicked() { contactBook_.addContact([](Contact& c) { saveContact(c); }); }
... // 删除、查找、编辑按钮的槽函数类似
private:
ContactBook contactBook_;
};
```
4. **异常处理**:
- 在关键操作如文件读写或网络请求时加入异常捕获,使用try-catch blocks。
```cpp
void saveContact(const Contact& contact) {
try {
// 执行保存操作
} catch (std::exception& e) {
qCritical("Error saving contact: %s", e.what());
}
}
```
5. **主程序入口**:
- 初始化Qt应用,创建窗口并运行。
```cpp
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
```
阅读全文