使用c++语言基于GUI实现一个简易的通讯录系统实现对联系人信息的保存和增删查改等操作。 要求所有函数都是lambd函数, 要求使用构造函数、友元函数、指针等, 要求实现用户异常处理, 包含五个模块
时间: 2024-09-18 19:05:16 浏览: 39
在C++中,基于GUI的简易通讯录系统可以分为以下几个模块,每个模块都采用lambda函数和现代C++特性:
1. **ContactModel** 模块:用于存储联系人的数据结构,可能包括姓名、电话号码等属性。你可以创建一个Contact类,作为模板类,内部有数据成员和构造函数:
```cpp
template <typename T>
class Contact {
public:
struct ContactInfo {
std::string name;
T phoneNumber;
};
explicit Contact(const std::string& name, T phoneNumber)
: info(name, phoneNumber) {}
// 使用lambda函数表示getter和setter
auto getName() const -> decltype(info.name) { return info.name; }
void setName(const std::string& name) { info.name = name; }
private:
ContactInfo info;
};
```
2. **GuiView** 模块:显示界面并处理用户输入,可能包含窗口、按钮、文本框等控件。利用Qt库或其它GUI框架,设置事件处理器为lambda函数:
```cpp
// Qt示例
auto saveContact = [this](const Contact<std::string>& contact) {
// 实现保存功能...
};
auto deleteContact = [this](int id) {
// 实现删除功能...
};
// 友元函数处理用户输入
void onViewUpdate(const std::string& newName, int newPhoneNumber) {
// 更新联系人...
}
```
3. **GuiController** 模块:负责业务逻辑,如接收用户输入、调用模型的操作等,也是使用lambda函数来简化:
```cpp
auto createContact = [](std::shared_ptr<ContactModel> model, ContactInfo&& info) {
model->createContact(std::move(info));
};
auto findContactById = [](const ContactModel& model, int id) -> Optional<ContactInfo> {
return model.findContact(id);
};
```
4. **ContactManager** 或 **ContactModel** (这里两者合并):封装底层数据管理和异常处理,可能包含指向Contact实例的指针:
```cpp
class ContactManager {
public:
// 使用指针存储Contact对象
template <typename T>
void addContact(const ContactInfo<T>& info) {
try {
contacts.push_back(Contact<T>(info));
} catch (const std::exception& e) {
std::cerr << "Error adding contact: " << e.what() << '\n';
}
}
// 使用lambda函数处理查找、更新等操作...
private:
std::vector<std::shared_ptr<Contact<T>>> contacts;
};
```
5. **ExceptionHandler** 模块:全局异常处理,使用`try-catch`结构捕获并处理可能出现的异常:
```cpp
struct ExceptionHandler {
static void handleException(const std::exception& e) {
std::cerr << "An error occurred: " << e.what() << '\n';
}
};
```
阅读全文