没人写吗。。。
我觉得你没有阐述清楚,我就按照我自己的理解写了一个
写的比较臃肿。。不想改了。。#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;
}
}
}
|