184 lines
7.7 KiB
C++
184 lines
7.7 KiB
C++
#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;
|
||
}
|