鱼C论坛

 找回密码
 立即注册
查看: 1952|回复: 4

[已解决]我需要帮忙

[复制链接]
发表于 2018-6-25 15:59:33 | 显示全部楼层 |阅读模式
5鱼币
课程题目:餐厅管理程序
内容要求:使用文本命令行设计餐厅管理程序。要求使用文本命令行界面,用文件保存餐厅里的菜单信息、座位信息等。能实现菜单信息和座位的增、删、改、查等功能,以及座位保留和预订。
c++的
最佳答案
2018-6-25 15:59:34
没人写吗。。。
我觉得你没有阐述清楚,我就按照我自己的理解写了一个
写的比较臃肿。。不想改了。。
#include <iostream>
#include <fstream>
#include <list>
#include <string>
#include <vector>
using namespace std;

// 常量定义
const int TABLE_MAX = 100; // 最大桌数
const int SEAT_MAX = 10;  // 每桌最大人数


class Restaurant {
public:
        // 默认初始化
        Restaurant():is_Destine(false), Seat_number(0), Seat_val(1), menu(){}
        
        // 增加菜品
        bool Set_menu_add(string food) { 
                //  判断一下菜单里面有没有这个菜
                int count = 0;
                for (vector<string>::iterator i = menu.begin(); i != menu.end(); i++, count++) {
                        if ((*i) == food) {
                                return false; //  有这个菜了 
                        }
                }
                this->menu.push_back(food);
                return true;
        }

        // 删除菜品
        bool Set_menu_sub(string food) { 
                int count = 0;
                for (vector<string>::iterator i = menu.begin(); i != menu.end(); i++,count++) {
                        if ((*i) == food) {
                                menu.erase(menu.begin() + count);
                                return true; // 删除成功
                        }
                }
                return false; // 没有找到food
        }

        // 增加座位
        bool Set_Seat_add(int val){ 
                if (this->Seat_number + val >= SEAT_MAX) {
                        return false;  // 人多了
                }
                this->Seat_number += val;
                return true;
        }

        // 减少座位
        bool Set_Seat_sub(int val){
                if ((this->Seat_number - val) < 0) {
                        return false; // 人数不够减
                }
                else if (this->Seat_number == 0) {
                        return false; // 空桌
                }
                this->Seat_number -= val;
                return true;
        }

        // 预定
        bool Set_Destine(int val, string Tel) {
                // 判断这一下这桌有没人
                if (this->Seat_number == 0) {
                        this->is_Destine = true;
                        this->Destine_Tel = Tel;
                        this->Seat_number = 0;
                        return true; // 预约成功
                }
                else {
                        return false;  // 预约失败
                }
        }
        
        vector<string> Get_menu() { return menu; } // 获取点菜信息
        int Get_Seat_val() { return this->Seat_val; } // 获取桌号
        void Set_Seat_val(int val) { this->Seat_val = val; } // 设置桌号
        bool Get_Destine() { return is_Destine; }  // 是否被预定
        string Get_Destine_Tel() { return this->Destine_Tel; } // 获取预订者的手机号
        int Get_Seat_number() { return this->Seat_number; } // 获取就餐人数
private:
        bool is_Destine;  // 是否被预定
        string Destine_Tel; //预约者手机号
        int Seat_number; // 座位
        int Seat_val; // 座位号
        vector<string> menu; //菜单
};

bool is_val(int val) {
        return val > TABLE_MAX;
}

int main()
{
        /*
         操作指令:
                        增加菜品: SMA
                        删除菜品: SMS
                        增加座位: SSA
                        查询是否被预定: GET_DT
                        查看指定桌的就餐情况: GET
                        保存到文本: KEEP;
                        退出: EXIT
                        预定: DS
        */
        list<Restaurant> Restaurant_list;
        string CMD;
        Restaurant R;
        // 先把餐厅搞出来
        for (int i = 0; i < TABLE_MAX; i++) {
                R.Set_Seat_val(i);
                Restaurant_list.push_back(R);
        }

        //  触发事件
        while (true) {
                cout << "请输入操作指令: ";
                cin >> CMD;
                if ((CMD != "SMA") && (CMD != "SMS") && (CMD != "SSA") && (CMD != "GET") && (CMD != "SD") && (CMD != "KEEP") && (CMD != "EXIT") && (CMD != "GET_DT")) {
                        cout << "请正确填写命令!" << endl;
                }
                
                        if (CMD == "SMA") { //增加菜品
                        string menu;
                        int val;
                        cout << "请输入你要增加的菜品名称和桌号: ";
                        cin >> menu >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        if (i->Set_menu_add(menu)) {
                                                cout << "操作成功!" << endl;
                                        }
                                        else {
                                                cout << "操作失败!" << endl;
                                        }
                                }
                        }
                }

                else if (CMD == "SMS") { //删除菜品
                        string menu;
                        int val;
                        cout << "请输入你要增加的菜品名称和桌号: ";
                        cin >> menu >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        if (R.Set_menu_sub(menu)) {
                                                cout << "操作成功!" << endl;
                                        }
                                        else {
                                                cout << "操作失败!" << endl;
                                        }
                                }
                        }
                }
                else if (CMD == "SSA") { // 增加座位
                        cout << "请输入要增加座位的人数和桌号: ";
                        int val,menu;
                        cin >> menu >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        if (i->Set_Seat_add(menu)) {
                                                cout << "操作成功!" << endl;
                                                break;
                                        }
                                        else {
                                                cout << "操作失败!" << endl;
                                                break;
                                        }
                                }
                        }
                }
                else if (CMD == "GET") { // 查询指定桌的情况
                        int val;
                        cout << "请输如你要查询的桌号: " << endl;
                        cin >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        // 判断一下被预定没有
                                        if (i->Get_Destine()) {
                                                cout << "当前桌被预定,预定者的手机号为: " << i->Get_Destine_Tel() << endl;
                                        }
                                        else {
                                                cout << "当前桌" << i->Get_Seat_number() << "人就餐" 
                                                         << "空余座位" << SEAT_MAX - i->Get_Seat_number() << "个" << endl;
                                        }
                                }
                        }
                }
                else if (CMD == "GET_DT") { // 查询是否被预定
                        int val;
                        cout << "请输如你要查询的桌号: ";
                        cin >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号: ";
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        // 判断一下被预定没有
                                        if (i->Get_Destine()) {
                                                cout << "当前桌被预定,预定者的手机号为: " << i->Get_Destine_Tel() << endl;
                                                break;
                                        }
                                        else {
                                                cout << "没有被预约" << endl;
                                                break;
                                        }
                                }
                        }
                }
                else if (CMD == "SD") {        // 预定
                        cout << "请输入欲预定的桌号和预订者的手机号: ";
                        string Tel;
                        int val;
                        cin >> val >> Tel;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        // 检查一下手机号是否合法
                        while (Tel.size() != 11) {
                                cout << "请正确填写手机号码: " << endl;
                                cin >> Tel;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                
                                if (i->Get_Seat_val() == val) {
                                        //  检查指定桌号被其他人预定没有
                                        if (i->Get_Destine()) {
                                                cout << "你来晚了,这一桌已经被其他人预定了!" << endl;
                                        }
                                        else {
                                                if (i->Set_Destine(val, Tel)) {
                                                        cout << "预约成功" << endl;
                                                }
                                                else {
                                                        cout << "这一桌好像有人正在吃饭哦" << endl;
                                                }
                                        }
                                }
                        }
                }
                else if (CMD == "KEEP") { // 保存信息
                        ofstream f("d:\\Test.txt", ios::out);
                        
                        int count = 0;
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++,count++) {
                                f << "第" << count << "桌:"
                                        << i->Get_Seat_number() << "人就餐" << '\n'
                                        << "点菜:";
                                vector<string> menu = i->Get_menu();
                                for (vector<string>::iterator j = menu.begin(); j != menu.end(); j++) {
                                        f << *j << " ";
                                }
                                f << endl;
                                f << "========================" << endl;
                                
                        }
                        cout << "操作成功" << endl;
                        f.close();
                }
                else if (CMD == "EXIT") { // 退出
                        return 0;
                }
        }
}

QQ截图20180626164305.png
QQ截图20180626164343.png

最佳答案

查看完整内容

没人写吗。。。 我觉得你没有阐述清楚,我就按照我自己的理解写了一个 写的比较臃肿。。不想改了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-25 15:59:34 | 显示全部楼层    本楼为最佳答案   
没人写吗。。。
我觉得你没有阐述清楚,我就按照我自己的理解写了一个
写的比较臃肿。。不想改了。。
#include <iostream>
#include <fstream>
#include <list>
#include <string>
#include <vector>
using namespace std;

// 常量定义
const int TABLE_MAX = 100; // 最大桌数
const int SEAT_MAX = 10;  // 每桌最大人数


class Restaurant {
public:
        // 默认初始化
        Restaurant():is_Destine(false), Seat_number(0), Seat_val(1), menu(){}
        
        // 增加菜品
        bool Set_menu_add(string food) { 
                //  判断一下菜单里面有没有这个菜
                int count = 0;
                for (vector<string>::iterator i = menu.begin(); i != menu.end(); i++, count++) {
                        if ((*i) == food) {
                                return false; //  有这个菜了 
                        }
                }
                this->menu.push_back(food);
                return true;
        }

        // 删除菜品
        bool Set_menu_sub(string food) { 
                int count = 0;
                for (vector<string>::iterator i = menu.begin(); i != menu.end(); i++,count++) {
                        if ((*i) == food) {
                                menu.erase(menu.begin() + count);
                                return true; // 删除成功
                        }
                }
                return false; // 没有找到food
        }

        // 增加座位
        bool Set_Seat_add(int val){ 
                if (this->Seat_number + val >= SEAT_MAX) {
                        return false;  // 人多了
                }
                this->Seat_number += val;
                return true;
        }

        // 减少座位
        bool Set_Seat_sub(int val){
                if ((this->Seat_number - val) < 0) {
                        return false; // 人数不够减
                }
                else if (this->Seat_number == 0) {
                        return false; // 空桌
                }
                this->Seat_number -= val;
                return true;
        }

        // 预定
        bool Set_Destine(int val, string Tel) {
                // 判断这一下这桌有没人
                if (this->Seat_number == 0) {
                        this->is_Destine = true;
                        this->Destine_Tel = Tel;
                        this->Seat_number = 0;
                        return true; // 预约成功
                }
                else {
                        return false;  // 预约失败
                }
        }
        
        vector<string> Get_menu() { return menu; } // 获取点菜信息
        int Get_Seat_val() { return this->Seat_val; } // 获取桌号
        void Set_Seat_val(int val) { this->Seat_val = val; } // 设置桌号
        bool Get_Destine() { return is_Destine; }  // 是否被预定
        string Get_Destine_Tel() { return this->Destine_Tel; } // 获取预订者的手机号
        int Get_Seat_number() { return this->Seat_number; } // 获取就餐人数
private:
        bool is_Destine;  // 是否被预定
        string Destine_Tel; //预约者手机号
        int Seat_number; // 座位
        int Seat_val; // 座位号
        vector<string> menu; //菜单
};

bool is_val(int val) {
        return val > TABLE_MAX;
}

int main()
{
        /*
         操作指令:
                        增加菜品: SMA
                        删除菜品: SMS
                        增加座位: SSA
                        查询是否被预定: GET_DT
                        查看指定桌的就餐情况: GET
                        保存到文本: KEEP;
                        退出: EXIT
                        预定: DS
        */
        list<Restaurant> Restaurant_list;
        string CMD;
        Restaurant R;
        // 先把餐厅搞出来
        for (int i = 0; i < TABLE_MAX; i++) {
                R.Set_Seat_val(i);
                Restaurant_list.push_back(R);
        }

        //  触发事件
        while (true) {
                cout << "请输入操作指令: ";
                cin >> CMD;
                if ((CMD != "SMA") && (CMD != "SMS") && (CMD != "SSA") && (CMD != "GET") && (CMD != "SD") && (CMD != "KEEP") && (CMD != "EXIT") && (CMD != "GET_DT")) {
                        cout << "请正确填写命令!" << endl;
                }
                
                        if (CMD == "SMA") { //增加菜品
                        string menu;
                        int val;
                        cout << "请输入你要增加的菜品名称和桌号: ";
                        cin >> menu >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        if (i->Set_menu_add(menu)) {
                                                cout << "操作成功!" << endl;
                                        }
                                        else {
                                                cout << "操作失败!" << endl;
                                        }
                                }
                        }
                }

                else if (CMD == "SMS") { //删除菜品
                        string menu;
                        int val;
                        cout << "请输入你要增加的菜品名称和桌号: ";
                        cin >> menu >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        if (R.Set_menu_sub(menu)) {
                                                cout << "操作成功!" << endl;
                                        }
                                        else {
                                                cout << "操作失败!" << endl;
                                        }
                                }
                        }
                }
                else if (CMD == "SSA") { // 增加座位
                        cout << "请输入要增加座位的人数和桌号: ";
                        int val,menu;
                        cin >> menu >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        if (i->Set_Seat_add(menu)) {
                                                cout << "操作成功!" << endl;
                                                break;
                                        }
                                        else {
                                                cout << "操作失败!" << endl;
                                                break;
                                        }
                                }
                        }
                }
                else if (CMD == "GET") { // 查询指定桌的情况
                        int val;
                        cout << "请输如你要查询的桌号: " << endl;
                        cin >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        // 判断一下被预定没有
                                        if (i->Get_Destine()) {
                                                cout << "当前桌被预定,预定者的手机号为: " << i->Get_Destine_Tel() << endl;
                                        }
                                        else {
                                                cout << "当前桌" << i->Get_Seat_number() << "人就餐" 
                                                         << "空余座位" << SEAT_MAX - i->Get_Seat_number() << "个" << endl;
                                        }
                                }
                        }
                }
                else if (CMD == "GET_DT") { // 查询是否被预定
                        int val;
                        cout << "请输如你要查询的桌号: ";
                        cin >> val;
                        while (is_val(val)) {
                                cout << "请正确填写桌号: ";
                                cin >> val;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                if (i->Get_Seat_val() == val) {
                                        // 判断一下被预定没有
                                        if (i->Get_Destine()) {
                                                cout << "当前桌被预定,预定者的手机号为: " << i->Get_Destine_Tel() << endl;
                                                break;
                                        }
                                        else {
                                                cout << "没有被预约" << endl;
                                                break;
                                        }
                                }
                        }
                }
                else if (CMD == "SD") {        // 预定
                        cout << "请输入欲预定的桌号和预订者的手机号: ";
                        string Tel;
                        int val;
                        cin >> val >> Tel;
                        while (is_val(val)) {
                                cout << "请正确填写桌号" << endl;
                                cin >> val;
                        }
                        // 检查一下手机号是否合法
                        while (Tel.size() != 11) {
                                cout << "请正确填写手机号码: " << endl;
                                cin >> Tel;
                        }
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++) {
                                
                                if (i->Get_Seat_val() == val) {
                                        //  检查指定桌号被其他人预定没有
                                        if (i->Get_Destine()) {
                                                cout << "你来晚了,这一桌已经被其他人预定了!" << endl;
                                        }
                                        else {
                                                if (i->Set_Destine(val, Tel)) {
                                                        cout << "预约成功" << endl;
                                                }
                                                else {
                                                        cout << "这一桌好像有人正在吃饭哦" << endl;
                                                }
                                        }
                                }
                        }
                }
                else if (CMD == "KEEP") { // 保存信息
                        ofstream f("d:\\Test.txt", ios::out);
                        
                        int count = 0;
                        for (list<Restaurant>::iterator i = Restaurant_list.begin(); i != Restaurant_list.end(); i++,count++) {
                                f << "第" << count << "桌:"
                                        << i->Get_Seat_number() << "人就餐" << '\n'
                                        << "点菜:";
                                vector<string> menu = i->Get_menu();
                                for (vector<string>::iterator j = menu.begin(); j != menu.end(); j++) {
                                        f << *j << " ";
                                }
                                f << endl;
                                f << "========================" << endl;
                                
                        }
                        cout << "操作成功" << endl;
                        f.close();
                }
                else if (CMD == "EXIT") { // 退出
                        return 0;
                }
        }
}

QQ截图20180626164305.png
QQ截图20180626164343.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-26 22:37:23 | 显示全部楼层
风过无痕丶 发表于 2018-6-26 16:47
没人写吗。。。
我觉得你没有阐述清楚,我就按照我自己的理解写了一个
写的比较臃肿。。不想改了。。

谢谢!!我再看看
学校的课程就是c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-27 14:14:58 | 显示全部楼层
风过无痕丶 发表于 2018-6-25 15:59
没人写吗。。。
我觉得你没有阐述清楚,我就按照我自己的理解写了一个
写的比较臃肿。。不想改了。。

可以问下你写这代码的思路么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-27 15:21:05 | 显示全部楼层
露水之余 发表于 2018-6-27 14:14
可以问下你写这代码的思路么

思路,思路这个东西怎么讲,你这个题目又讲得太广义了。没有落到实处,应该怎么弄。 我能获取到的有价值的消息就是,菜单,座位,预定,文本保存。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 00:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表