Files

184 lines
7.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "CosmeticManager.h"
#include <iostream>
#include <string>
#include <limits>
void displayMenu() {
std::cout << "\n===== 化妆品管理系统 =====" << std::endl;
std::cout << "当前时间: " << Cosmetic::getTime() << std::endl;
std::cout << "1. 添加化妆品" << std::endl;
std::cout << "2. 删除化妆品" << std::endl;
std::cout << "3. 查询化妆品" << std::endl;
std::cout << "4. 修改化妆品" << std::endl;
std::cout << "5. 显示所有化妆品" << std::endl;
std::cout << "6. 查找临期化妆品" << std::endl;
std::cout << "0. 退出系统" << std::endl;
std::cout << "=========================" << std::endl;
std::cout << "请选择操作: " << std::endl;
}
// 获取并验证日期输入
bool getAndValidateDate(CosmeticManager& manager, std::string& expirationDate) {
std::cout << "输入过期日期 (YYYY-MM-DD): ";
std::cin >> expirationDate;
if (!manager.isValidDate(expirationDate)) {
std::cout << "日期格式有误格式YYYY-MM-DD 例2000-01-01" << std::endl;
manager.launchWindow("日期格式有误","格式YYYY-MM-DD 例2000-01-01");
return false;
}
return true;
}
// 获取并验证类型输入
bool getAndValidateType(int& type, CosmeticManager& manager) {
std::cout << "输入类型 (1-国产, 0-进口): ";
std::cin >> type;
if (type != 1 && type != 0) {
std::cout << "类型输入错误请输入1-国产, 0-进口" << std::endl;
manager.launchWindow("类型输入错误","请输入1-国产, 0-进口");
return false;
}
return true;
}
int main() {
CosmeticManager manager;
manager.loadFromFile(); // 启动时加载数据
while (true) {
int choice;
std::string name;
double price;
int type;
std::string expirationDate;// 过期日期
std::string msgboxTitle, msgboxContent;// 消息框标题和内容
displayMenu();
std::cin >> choice;
switch (choice) {
case 1: {
std::cout << "输入品牌名称: ";
std::cin >> name;
std::cout << "输入价格: ";
std::cin >> price;
if (!getAndValidateType(type, manager)) {
break;
}
if (!getAndValidateDate(manager, expirationDate)) {
break;
}
// 检查品牌名是否已存在
if (manager.findCosmetic(name) != nullptr) {
msgboxTitle="添加失败";
msgboxContent="品牌名已存在";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
break;
}
if (manager.addCosmetic(Cosmetic(name, price, type, expirationDate))) {
msgboxTitle="添加成功";
msgboxContent="品牌添加成功";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
} else {
msgboxTitle="添加失败";
msgboxContent="品牌已存在或其他错误";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
}
break;
}
case 2: {
std::cout << "输入要删除的品牌名称: ";
std::cin >> name;
if (manager.deleteCosmetic(name)) {
msgboxTitle="删除成功";
msgboxContent="品牌删除成功";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
} else {
msgboxTitle="删除失败";
msgboxContent="未找到该品牌";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
}
break;
}
case 3: {
std::cout << "输入要查询的品牌名称: ";
std::cin >> name;
Cosmetic* cosmetic = manager.findCosmetic(name);
if (cosmetic) {
std::cout << "品牌: " << cosmetic->getName() << "\n"
<< "价格: " << cosmetic->getPrice() << "\n"
<< "类型: " << (cosmetic->getType() ? "国产" : "进口") << "\n"// 注意这里还为开放其他类型若需2种以上要新构
<< "过期日期: " << cosmetic->getExpirationDate() << "\n"
<< std::endl;
msgboxTitle="查询成功";
msgboxContent=cosmetic->getName() + "\n"
+ "价格: " + std::to_string(cosmetic->getPrice()) + "\n"
+ "类型: " + (cosmetic->getType() ? "国产" : "进口") + "\n"// 注意这里还为开放其他类型若需2种以上要新构建
+ "过期日期: " + cosmetic->getExpirationDate();
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
} else {
msgboxTitle="查询失败";
msgboxContent="未找到该品牌";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
}
// 清除输入缓冲区
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
break;
}
case 4: {
std::cout << "输入要修改的品牌名称: ";
std::cin >> name;
std::cout << "输入新价格: ";
std::cin >> price;
if (!getAndValidateType(type, manager)) {
break;
}
if (!getAndValidateDate(manager, expirationDate)) {
break;
}
if (manager.modifyCosmetic(name, price, type, expirationDate)) {
msgboxTitle="修改成功";
msgboxContent="品牌修改成功";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
} else {
msgboxTitle="修改失败";
msgboxContent="未找到该品牌";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
}
break;
}
case 5:
manager.displayAll();
break;
case 6: {
int days;
std::cout << "输入临期天数: ";
std::cin >> days;
manager.displayExpiringCosmetics(days);
break;
}
case 0:
manager.saveToFile();
msgboxTitle="数据已保存";
msgboxContent="数据已保存,再见!";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
return 0;
default:
msgboxTitle="无效选项";
msgboxContent="请重新选择!";
std::cout << msgboxContent << std::endl;
manager.launchWindow(msgboxTitle,msgboxContent);
}
}
// ???
return 0;
}