


在UserManager中,用户信息保存在unordered_map中,可以将用户信息加载到内存中,支持用户的注册和登录功能。注册时会检查用户名是否已存在,如果不存在则将用户名和密码保存到文件中;登录时会检查用户名和密码是否匹配。
在NewsManager中,新闻信息以NewsItem对象的形式保存在vector中。可以添加新的新闻,并且支持显示新闻标题和内容。
在主函数main()中,通过不断循环来提供用户选择的操作,包括注册、登录、发布新闻、查看新闻和退出程序。根据用户的选择,调用相应的方法执行相应的操作。
int main() {
UserManager userManager;
NewsManager newsManager;
std::string username, password, newsTitle, newsContent;
int choice;
while (true) {
std::cout << "选择操作:1 注册 2 登录 3 发布新闻 4 查看新闻 5 退出\n";
std::cin >> choice;
switch (choice) {
case 1:
std::cout << "输入用户名:";
std::cin >> username;
std::cout << "输入密码:";
std::cin >> password;
if (userManager.registerUser(username, password)) {
std::cout << "注册成功\n";
}
else {
std::cout << "注册失败,用户名可能已被使用\n";
}
break;
case 2:
std::cout << "输入用户名:";
std::cin >> username;
std::cout << "输入密码:";
std::cin >> password;
if (userManager.loginUser(username, password)) {
std::cout << "登录成功\n";
}
else {
std::cout << "登录失败,用户名或密码错误\n";
}
break;
case 3:
if (username.empty()) {
std::cout << "请先登录\n";
}
else {
std::cin.ignore(); // 清除缓冲区
std::cout << "输入新闻标题:";
std::getline(std::cin, newsTitle);
std::cout << "输入新闻内容:";
std::getline(std::cin, newsContent);
newsManager.addNews(newsTitle, newsContent);
std::cout << "新闻发布成功\n";
}
break;
case 4:
newsManager.displayNewsTitles();
std::cout << "输入要查看的新闻编号:";
size_t index;
std::cin >> index;
newsManager.displayNewsContent(index);
break;
case 5:
std::cout << "退出程序\n";
return 0;
default:
std::cout << "无效选择\n";
break;
}
}
return 0;
}