吃货联盟系统 C++实现

代码:

#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++;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值