代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
/**
* 案例 - 吃货联盟系统
* 案例描述:
* 现在已经进入网络时代,人们的日常生活已经离不开网络,如网上购物、看新闻、交友等。
* “只要点点手,就能送餐上门”,网上订餐越来越受到都市年轻人的青睐。
* 本系统功能包括:
* 1、我要订餐
* 2、查看餐袋
* 3、签收订单
* 4、删除订单
* 5、我要点赞
* 6、退出系统
*
* 订单信息包括:订餐人姓名、选择菜品及份数、送餐时间、送餐地址、订单状态、总金额
*/
/**
* 菜品
*/
struct Food {
string name; // 菜名
double price; // 价格
int food_num; // 数量
int love; // 点赞数
};
/**
* 订单
*/
struct Order {
string user_name; // 订餐人姓名
Food food; // 菜品
string date_time; // 送餐时间
string address; // 送餐地址
int state; // 订单状态(0:派送中,1:已签收)
double total_price; // 总金额
};
/**
* 显示菜单
*/
void showMenu();
/**
* 数据初始化
*/
void init(vector<Food>& F);
/**
* 打印菜品信息
*/
void printFood(vector<Food>& F);
/**
* 打印订单信息
*/
void printOrder(vector<Order>& Or);
/**
* 签收订单
*/
bool signForOrder(vector<Order>& Or, int num);
/**
* 删除订单
*/
bool deleteOrder(vector<Order>& Or, int num);
/**
* 实现菜品点赞
*/
void add_food_love(vector<Food>& F, int num);
int main() {
// 初始化
vector<Food>F; // 菜品容器
vector<Order>Or; // 订单容器
init(F);
int flag = 0; // 菜单选项
Order order; // 订餐信息容器
Food food; // 菜品信息容器
int no; // 菜品编号容器
bool res; // 返回结果容器(判断成功与否)
string msg; // 提示语句
while (flag!=6) {
showMenu();
cin >> flag;
switch (flag)
{
case 1:
cout << "***我要订餐***" << endl;
cout << "请输入订餐人姓名:";
cin >> order.user_name;
printFood(F);
cout << "请选择菜品(请输入编号):";
cin >> no;
food = F.at(no-1);
cout << "请输入菜品数量:";
cin >> food.food_num;
cout << "请输入送餐时间:";
cin >> order.date_time;
cout << "请输入送餐地址:";
cin >> order.address;
order.food = food;
order.state = 0;
order.total_price = food.price * food.food_num;
Or.push_back(order);
cout << "提示:订餐成功!" << endl;
break;
case 2:
cout << "***查看餐袋***" << endl;
printOrder(Or);
break;
case 3:
cout << "***签收订单***" << endl;
printOrder(Or);
if (Or.size() > 0) {
cout << "请选择要签收的订单编号:";
cin >> no;
res = signForOrder(Or, no);
msg = res ? "提示:订单签收成功!" : "提示:订单签收失败(已签收或订单编号不存在)";
cout << msg << endl;
}
break;
case 4:
cout << "***删除订单***" << endl;
printOrder(Or);
if (Or.size() > 0) {
cout << "请选择要删除的订单编号:";
cin >> no;
res = deleteOrder(Or, no);
msg = res ? "提示:订单删除成功!" : "提示:订单删除失败(订单可能未签收或不存在)!";
cout << msg << endl;
}
break;
case 5:
cout << "***我要点赞***" << endl;
printFood(F);
cout << "请选择要点赞的菜品编号:";
cin >> no;
add_food_love(F, no);
cout << "提示:点赞成功!" << endl;
break;
case 6:
cout << "***退出系统***" << endl;
break;
default:
// ps:只能判断整数类型
cout << "***没有该选项***" << endl;
break;
}
}
return 0;
}
void init(vector<Food>& F) {
Food f1 = { "鱼香肉丝",28 ,0,0};
Food f2 = { "红烧排骨",32 ,0,0 };
Food f3 = { "醋溜土豆丝",15 ,0,0 };
Food f4 = { "时令小菜",15 ,0,0 };
Food f5 = { "酸菜鱼hot",98 ,0,0 };
Food f6 = { "茄子豆角",22 ,0,0 };
Food f7 = { "蚂蚁上树",26 ,0,0 };
Food f8 = { "虎皮扣肉",58 ,0,0 };
Food f9 = { "西红柿炒蛋",18 ,0,0 };
F.push_back(f1);
F.push_back(f2);
F.push_back(f3);
F.push_back(f4);
F.push_back(f5);
F.push_back(f6);
F.push_back(f7);
F.push_back(f8);
F.push_back(f9);
}
void printFood(vector<Food>& F) {
int num = 1;
cout << "序号 \t菜名名字 " << "\t价格" << "\t点赞人数" << endl;
for (vector<Food>::iterator it = F.begin(); it != F.end(); it++) {
cout << num << ".\t" << it->name << "\t" << it->price << "\t " << it->love << endl;
num++;
}
}
void showMenu() {
cout << "\n欢迎使用“吃货联盟系统”~" << endl;
cout << "***********************************" << endl;
cout << "1、我要订餐" << endl;
cout << "2、查看餐袋" << endl;
cout << "3、签收订单" << endl;
cout << "4、删除订单" << endl;
cout << "5、我要点赞" << endl;
cout << "6、退出系统" << endl;
cout << "***********************************" << endl;
cout << "请选择:";
}
void printOrder(vector<Order>& Or) {
if (Or.size() > 0) {
int num = 1;
cout << "序号\t订餐人姓名\t菜品名称\t菜品数量\t送餐时间\t送餐地址\t订单状态\t总金额" << endl;
for (vector<Order>::iterator it = Or.begin(); it != Or.end(); it++) {
cout << num << ".\t"
<< it->user_name << " \t\t"
<< it->food.name << "\t"
<< it->food.food_num << "\t\t"
<< it->date_time << "\t"
<< it->address << "\t"
<< ((it->state) == 0 ? "派送中" : "已签收") << "\t\t"
<< it->total_price << endl;
num++;
}
}
else {
cout << "提示:当前暂无订单信息" << endl;
}
}
bool signForOrder(vector<Order>& Or, int num) {
if (Or.size() > 0 && num <= Or.size() && num > 0 && Or.at(--num).state == 0) {
Or.at(num).state = 1;
return true;
}
return false;
}
bool deleteOrder(vector<Order>& Or, int num) {
if (Or.size() > 0 &&num <= Or.size() && num > 0 && Or.at(--num).state == 1) {
int index = 0;
for (vector<Order>::iterator it = Or.begin(); it != Or.end(); it++) {
if (index == num) {
Or.erase(it);
return true;
}
}
}
return false;
}
void add_food_love(vector<Food>& F, int num) {
num--;
F.at(num).love++;
}