基于C++实现(控制台)自助点餐系统【100010526】
自助点餐系统
题目
设计一个自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。
业务流程图
图一:管理员界面操作流程图
图二:顾客点菜界面
系统功能结构图
类的设计
程序代码与说明
头文件1.
SystemMap.h
#pragma once
#ifndef SYSTEMMAP
#define SYSTEMMAP
#include<bits/stdc++.h>
using namespace std;
class SystemMap
{
private:
string frame;
public:
SystemMap();
void showOutsideSystemMap(); // 外卖就餐页面
void showInsideSystemMap(); // 店内就餐页面
int showSystemMap(); //顾客选择系统页面
int showChoiceMap(); //系统的功能选择界面
int showRegMap();
int showClientChoiceMap();
int showQueryMap();
int showMenuChoice();
int showChangeMenuMap();
int showCilentOrderMessage();
int adminSystemMap();
int showOrderChangeMap();
int showPastSales();
};
#endif // !SYSTEMMAP
SystemMap.cpp
#include "SystemMap.h"
SystemMap::SystemMap() {
frame = "#";
}
int SystemMap::showSystemMap() {
for (int i = 0; i < 60; i++)cout << frame;
cout << endl;
for (int i = 0; i < 60; i++) {
if (i == 0 || i == 59)
cout << frame;
else
cout << " ";
}
cout << endl;
cout << "#\t\t\t欢迎光临本店";
for (int i = 0; i < 23; i++)
cout << " ";
cout << "#\n";
for (int i = 0; i < 60; i++) {
if (i == 0 || i == 59)
cout << frame;
else
cout << " ";
}
cout << endl;
cout << "#\t\t 请问您需要什么服务\t\t";
for (int i = 0; i < 11; i++)
cout << " ";
cout << "#\n";
cout << "#\t\t 1:在店就餐";
for (int i = 0; i < 31; i++)
cout << " ";
cout << "#\n";
cout << "#\t\t 2:外卖就餐";
for (int i = 0; i < 31; i++)
cout << " ";
cout << "#\n";
for (int i = 0; i < 60; i++)cout << frame;
cout << endl;
cout << "\t\t 请问您选择的是:";
int choice;
cin >> choice;
return choice;
}
void SystemMap::showInsideSystemMap() {
cout << "欢迎您在本店就餐,以下是菜单\n\n";
}
void SystemMap::showOutsideSystemMap() {
cout << "欢迎您点本店的外卖,以下是菜单\n\n";
}
int SystemMap::showChoiceMap() {
for (int i = 0; i < 60; i++)cout << frame;
cout << endl;
for (int i = 0; i < 60; i++) {
if (i == 0 || i == 59)
cout << frame;
else
cout << " ";
}
cout << "\n#\t\t 欢迎来到榆榆餐厅";
for (int i = 0; i < 21; i++)
cout << " ";
cout << "#\n";
cout << "#\t\t\t店长: 陈榆";
for (int i = 0; i < 23; i++)
cout << " ";
cout << "#\n";
for (int i = 0; i < 60; i++) {
if (i == 0 || i == 59)
cout << frame;
else
cout << " ";
}
cout << endl;
for (int i = 0; i < 60; i++)cout << frame;
cout << endl;
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:顾客服务 |" << endl;
cout << "\t\t| 2:管理员系统 |" << endl;
cout << "\t\t| 3:退出系统 |" << endl;
cout << "\t\t------------------------" << endl;
cout << "\t\t您的选择是:";
int choice;
cin >> choice;
return choice;
}
int SystemMap::adminSystemMap() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:食物管理 |" << endl;
cout << "\t\t| 2:今日反馈 |" << endl;
cout << "\t\t| 3:订单管理 |" << endl;
cout << "\t\t| 4:历史销售情况 |" << endl;
cout << "\t\t| 5:退出 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cin >> choice;
return choice;
}
int SystemMap::showRegMap() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:新顾客点餐 |" << endl;
cout << "\t\t| 2:查询订单 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
int SystemMap::showClientChoiceMap() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:点菜 |" << endl;
cout << "\t\t| 2:修改订单 |" << endl;
cout << "\t\t| 3:提交订单 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
int SystemMap::showQueryMap() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:查询订单 |" << endl;
cout << "\t\t| 2:退出 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
int SystemMap::showChangeMenuMap() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:添加食物 |" << endl;
cout << "\t\t| 2:修改食物价格 |" << endl;
cout << "\t\t| 3:修改食物折扣 |" << endl;
cout << "\t\t| 4:删除食物 |" << endl;
cout << "\t\t| 5:退出食物管理系统 |" << endl;
cout << "\t\t------------------------" << endl;
cout << "\t\t您的选择是:";
int choice;
cin >> choice;
return choice;
}
int SystemMap::showMenuChoice() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:原菜单 |" << endl;
cout << "\t\t| 2:新菜单 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
int SystemMap::showCilentOrderMessage() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:修改数量 |" << endl;
cout << "\t\t| 2:删除食物 |" << endl;
cout << "\t\t| 3:退出修改 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
int SystemMap::showOrderChangeMap() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:查找订单 |" << endl;
cout << "\t\t| 2:修改订单 |" << endl;
cout << "\t\t| 3:删除订单 |" << endl;
cout << "\t\t| 4:退出修改 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
int SystemMap::showPastSales() {
cout << "\t\t------------------------" << endl;
cout << "\t\t| 1:查找订单 |" << endl;
cout << "\t\t| 2:修改订单 |" << endl;
cout << "\t\t| 3:删除订单 |" << endl;
cout << "\t\t| 4:退出修改 |" << endl;
cout << "\t\t------------------------" << endl;
int choice;
cout << "\t\t您的选择是:";
cin >> choice;
return choice;
}
头文件2.
Admin.h
#pragma once
#ifndef ADMIN
#define ADMIN
#include <bits/stdc++.h>
using namespace std;
class Admin
{
private:
int num;
string ID, password;
public:
Admin();
void setId(string I);
void setPassword(string p);
void setNum(int i);
string getID();
string getPassword();
int getNum();
};
#endif // !ADMIN
Admin.cpp
#include "Admin.h"
Admin::Admin() {
}
void Admin::setId(string I) {
ID = I;
}
void Admin::setNum(int n) {
num = n;
}
void Admin::setPassword(string P) {
password = P;
}
string Admin::getID() {
return ID;
}
string Admin::getPassword() {
return password;
}
int Admin::getNum() {
return num;
}
头文件3.
AdminManager.h
#pragma once
#ifndef ADMINMANAGER
#define ADMINMANAGER
#include <bits/stdc++.h>
#include "Admin.h"
using namespace std;
class AdminManager
{
public:
AdminManager();
int adminNum;
Admin admin[100];
void addAdmin(string ,string );
int getAdminNum();
int checkPassword(string, string);
};
#endif // !ADMINMANAGER
AdminManager.cpp
#include "AdminManager.h"
AdminManager::AdminManager() {
adminNum = 0;
}
void AdminManager::addAdmin(string ID,string p) {
admin[adminNum].setId(ID);
admin[adminNum].setPassword(p);
admin[adminNum].setNum(adminNum + 1);
adminNum++;
}
int AdminManager::checkPassword(string id,string p) {
int i;
for (i = 0; i < adminNum; i++) {
if (admin[i].getID() == id) {
if (admin[i].getPassword() == p) {
cout << "密码正确\n\n";
return 1;
}
else {
cout << "密码错误\n\n";
return 2;
}
}
}
if (i >= adminNum) {
cout << "没有此账号的管理员,请先注册\n\n";
return 3;
}
}
int AdminManager::getAdminNum() {
return adminNum;
}
头文件4.
Client.h
#pragma once
#ifndef CLIENT
#define CLIENT
#include<bits/stdc++.h>
#include "Menu.h"
using namespace std;
class Client
{
private:
int id, type, desk, arriveTime;// id 指的是 顾客编号 type 指就餐类型
double coust; // 花费
string name, phone, address; //姓名 电话 地址
public:
Client();
Client(string n, string p,int d);
Client(string n, string p,string a);
int judge = 1;//判断是否输出订单
int num[100];
Menu Client_Menu;
string getName();
string getPhone();
string getAddress();
int getDesk();
double getCoust();
int getType();
int getDeskCoust();
void setCoust(double);
void setId(int);
void setDesk(int);
void setAddress(string a);
void setType(int n);
void addCoust(double x);
void showCientMessage();
void changeNum();
void delFood();
void setArriveTime(int);
};
#endif // CLIENT
Client.cpp
#include "Client.h"
#include <iomanip>
Client::Client() {
judge = 1;
}
Client::Client(string n, string p, int d) {
name = n;
phone = p;
desk = d;
coust = 0;
for (int i = 0; i < 100; i++)
num[i] = 0;
cout << "顾客注册成功" << endl;
judge = 1;
}
Client::Client(string n, string p, string a) {
name = n;
phone = p;
address = a;
coust = 0;
for (int i = 0; i < 100; i++)
num[i] = 0;
cout << "顾客注册成功" << endl;
judge = 1;
}
double Client::getCoust() {
return coust;
}
string Client::getName() {
return name;
}
string Client::getPhone() {
return phone;
}
string Client::getAddress() {
return address;
}
int Client::getType() {
return type;
}
int Client::getDesk() {
return desk;
}
int Client::getDeskCoust() {
if (desk > 50)
return 50;
else
return 0;
}
void Client::setAddress(string a) {
address = a;
}
void Client::setDesk(int a) {
desk = a;
if (a >= 1 && a <= 50)
cout << "\n您选择了" << a << "号餐桌" << endl;
else {
cout << "\n您选择了" << a << "号包厢" << endl;
coust += 50;
}
}
void Client::setType(int n) {
type = n;
}
void Client::addCoust(double n) {
coust += n;
}
void Client::setCoust(double a) {
coust = 0;
}
void Client::showCientMessage() {
if (judge == 1) {
string a;
if (type == 1)
{
a = "在店就餐";
cout << "姓名:" << name << "\t\t" << a << endl;
cout << "电话号码:" << phone << endl;
cout << "餐桌号为:" << desk << endl << endl;
cout << setw(10) << setiosflags(ios::left) << "食物序列" << setw(10) << "菜名" << "\t数量\t价格\t折扣" << endl;
for (int i = 0; i < Client_Menu.getNum(); i++)
cout << setw(10) << setiosflags(ios::left) << setw(10) << i + 1 << Client_Menu.food[i].getName() << "\t" << num[i] << "\t" << num[i] * Client_Menu.food[i].getRightPrice() << "\t" << Client_Menu.food[i].getDiscount() << endl;
cout << "总价:\t" << coust + getDeskCoust() << "元\t\t含包厢费" << getDeskCoust() << "元" << endl << endl;
cout << "--------------------------------------" << endl;
}
else {
a = "外卖";
cout << "姓名:" << name << "\t\t" << a << endl;
cout << "电话号码:" << phone << endl;
cout << "外卖送达地址:" << address << endl << endl;
cout << setw(10) << setiosflags(ios::left) << "食物序列" << setw(10) << "菜名" << "\t数量\t价格\t折扣" << endl;
for (int i = 0; i < Client_Menu.getNum(); i++)
cout << setw(10) << setiosflags(ios::left) << setw(10) << i + 1 << Client_Menu.food[i].getName() << "\t" << num[i] << "\t" << num[i] * Client_Menu.food[i].getRightPrice() << "\t" << Client_Menu.food[i].getDiscount() << endl;
int t = 5;
//cout << "\n\n\n" << coust << "\n\n\n";
cout << "总价:\t\t" << coust + 5 << "元\t" << "含外卖费" << 5 << "元" << endl << endl;
cout << "预计到达时间:\t" << arriveTime << "分钟后\n";
cout << "--------------------------------------" << endl;
}
}
else {
name = "";
phone = "";
address = "";
desk = 0;
coust = 0;
arriveTime = 0;
cout << "该订单已删除\n\n";
}
}
void Client::setId(int i) {
id = i;
}
void Client::changeNum() {
int n,numss;
cout << "请输入食物序列:";
cin >> n;
cout << "您选择了食物为:\t" << Client_Menu.food[n - 1].getName() << endl;
cout << "请输入要改变该食物的数量:";
cin >> numss;
coust += (numss - num[n - 1]) * Client_Menu.getPriceByName(Client_Menu.getNameById(n - 1));
num[n - 1] = numss;
}
void Client::delFood() {
int n;
cout << "请输入您的序列号:";
cin >> n;
cout << "您选择了食物:" << Client_Menu.food[n - 1].getName() << endl;
coust -= num[n - 1] * Client_Menu.food[n - 1].getPrice();
for (int i = n - 1; i < Client_Menu.getNum(); i++) {
Client_Menu.food[i] = Client_Menu.food[i + 1];
num[i] = num[i + 1];
}
Client_Menu.setNum(Client_Menu.getNum() - 1);
}
void Client::setArriveTime(int t) {
arriveTime = t;
}
头文件5.
Clientmanager.h
#pragma once
#ifndef CLIENTMANAGER
#define CLIENTMANAGER
#include<bits/stdc++.h>
#include"Client.h"
using namespace std;
class Clientmanager
{
public:
Clientmanager();
int clientNum;
Client client[100];
void addClient(Client t);
int getClientNum();
void showQuery(string a);//查询
void showAll();
};
#endif // !CLIENTMANAGER
Clientmanager.cpp
#include "Clientmanager.h"
Clientmanager::Clientmanager() {
clientNum = 0;
}
void Clientmanager::addClient(Client t) {
client[clientNum++] = t;
}
int Clientmanager::getClientNum() {
return clientNum;
}
void Clientmanager::showQuery(string a) {
int count = 0;
int t;
cout << "-----------------------------------" << endl;
for (int i = 0; i < clientNum; i++) {
if (client[i].getType() == 1) {
cout << "第" << ++count << "单:" << client[i].getName() << "\t总价是:" << client[i].getCoust() + client [i].getDeskCoust() << "元\t在店就餐" << endl << endl;
if (a == client[i].getName())
t = count;
}
}
for (int i = 0; i < clientNum; i++) {
if (client[i].getType() == 2) {
cout << "第" << ++count << "单:" << client[i].getName() << "\t总价是:" << client[i].getCoust() + 5 << "元\t外卖" << endl << endl;
if (a == client[i].getName())
t = count;
}
}
cout << "您当前排在第" << t << "单" << endl;
cout << "-----------------------------------" << endl;
}
void Clientmanager::showAll() {
for (int i = 0; i < clientNum; i++) {
if (client[i].getType()== 1) {
cout << "订单号:" << i + 1 << endl;
client[i].showCientMessage();
cout << endl;
cout << "--------------------------------------" << endl;
}
}
cout << endl;
for (int i = 0; i < clientNum; i++) {
if (client[i].getType() == 2) {
cout << "订单号:" << i + 1 << endl;
client[i].showCientMessage();
cout << endl;
cout << "--------------------------------------" << endl;
}
}
}
头文件6.
CoustManager.h
#pragma once
#ifndef COUSTMANAGER
#define COUSTMANAGER
#include<bits/stdc++.h>
class CoustManager
{
private:
double insideCoust, outsideCoust;
public:
CoustManager();
double getInsideCoust();
double getOutsideCoust();
void addInsideCoust(double x);
void addOutsideCoust(double x);
};
#endif // !COUSTMANAGER
CoustManager.cpp
#include "CoustManager.h"
CoustManager::CoustManager() {
insideCoust = 0;
outsideCoust = 0;
}
double CoustManager::getInsideCoust() {
return insideCoust;
}
double CoustManager::getOutsideCoust() {
return outsideCoust;
}
void CoustManager::addInsideCoust(double x) {
insideCoust += x;
}
void CoustManager::addOutsideCoust(double x) {
outsideCoust += x;
}
头文件7.
Food.h
#ifndef FOOD
#define FOOD
#include <bits/stdc++.h>
using namespace std;
class Food
{
private:
string name; // 食物名称
double price,discount; // 食物价格 食物折扣
int saleNum;//卖出去食物的数量
public:
Food();
Food(string name, double price, double discount = 1.0);
void setName(string name);
void setPrice(double price);
void setDiscount(double discount);
void addSaleNum(int);
int getSaleNum();
double getRightPrice();
string getName();
double getPrice();
double getDiscount();
void showInformation();
};
#endif // !FOOD
Food.cpp
#include "Food.h"
Food::Food() {
saleNum = 0;
}
Food::Food(string name, double price,double d) {
this->name = name;
this->price = price;
discount = d;
saleNum = 0;
}
void Food::setName(string name) {
this->name = name;
}
void Food::setPrice(double price){
this->price = price;
}
void Food::setDiscount(double discount) {
this->discount = discount;
}
string Food::getName() {
return name;
}
double Food::getDiscount() {
return discount;
}
double Food::getPrice() {
return price;
}
double Food::getRightPrice() {
return price * discount;
}
void Food::showInformation() {
cout << name << "\t" << price << "\t" << discount << endl;
}
void Food::addSaleNum(int n) {
saleNum += n;
}
int Food::getSaleNum() {
return saleNum;
}
头文件8.
Menu.h
#pragma once
#ifndef MENU
#define MENU
#include "Food.h"
class Menu
{
private:
int num; // 菜总数
public:
Food food[100];
Menu();
void setNum(int n);
void addFood(string name,double price,double d);
void addFood(Food f);
void delFood();
void changePrice();
void changeDiscount();
void showFood();
string getNameById(int i);
double getPriceByName(string n);
int getIdByName(string s);//根据name 返回 id
int getNum();
};
#endif // !MENU
Menu.cpp
#include "Menu.h"
Menu::Menu() {
num = 0;
}
void Menu::addFood(Food f) {
food[num++] = f;
cout << "成功添加食物,当前共有:" << num << "种食物\n\n";
}
void Menu::setNum(int x) {
num = x;
}
void Menu::showFood() {
cout << "食物中共有" << num << "种" << endl;
cout << "食物编号 名称\t\t单价\t\t折扣" << endl;
for (int i = 0; i < num; i++)
cout << setw(10) << setiosflags(ios::left) << i << setw(10) << food[i].getName() << "\t" << food[i].getPrice() << "\t\t" << food[i].getDiscount() << endl;
}
void Menu::changePrice() {
string s;
int c,i;
double p;
cout << "请输入食物的编号:";
cin >> c;
s = food[c].getName();
cout << "您选择了食物:" << s << endl;
cout << endl;
cout << "请输入价格:";
cin >> p;
cout << endl;
for (i = 0; i < num; i++) {
if (s == food[i].getName()) {
food[i].setPrice(p);
cout << "修改成功\n";
cout << endl;
break;
}
}
if (i >= num)
cout << "没有这种食物,修改失败\n";
}
void Menu::changeDiscount() {
string s;
int c,i;
double p;
cout << "请输入食物的编号:";
cin >> c;
s = food[c].getName();
cout << "您选择了食物:" << s << endl;
cout << endl;
cout << "请输入折扣(0<折扣 折扣<=1):";
cin >> p;
cout << endl;
for (i = 0; i < num; i++) {
if (s == food[i].getName()) {
food[i].setDiscount(p);
cout << "修改成功\n";
cout << endl;
break;
}
}
if (i >= num)
cout << "没有这种食物,修改失败\n";
}
void Menu::delFood() {
string s;
int i;
cout << "请输入菜名:";
cin >> s;
for (i = 0; i < num; i++) {
if (food[i].getName() == s) {
cout << "成功删除" << s << endl << endl;
num--;
for (int j = i; j < num; j++) {
food[j] = food[j + 1];
return;
}
}
}
if (i >= num)
cout << "没有这种食物\n\n";
}
void Menu::addFood(string s, double p,double d) {
food[num++] = Food(s, p, d);
}
double Menu::getPriceByName(string n) {
for (int i = 0; i < num; i++) {
if (n == food[i].getName())
return food[i].getRightPrice();
return 0;
}
}
int Menu::getIdByName(string n) {
for (int i = 0; i < num; i++) {
if (n == food[i].getName())
return i;
return 0;
}
}
string Menu::getNameById(int i) {
return food[i].getName();
}
int Menu::getNum() {
return num;
}
main.cpp
#include <bits/stdc++.h>
#include <fstream>
#include <iomanip>
#include "Client.h"
#include "Clientmanager.h"
#include "CoustManager.h"
#include "Menu.h"
#include "Food.h"
#include"SystemMap.h"
#include "Admin.h"
#include "AdminManager.h"
using namespace std;
CoustManager coust;
SystemMap smap;
Clientmanager cm;
Menu menu;
fstream ioFile;
AdminManager ad;
int AdminChoice,adNum,ClientChoice,ClientService, EatChoice, curClient, QueryChoice, FoodChoice, ClientMapChoice, MenuChoice, orderChoice,StstemMapChoice;
int main()
{
ioFile.open("./data/food.txt", ios::in);
while (!ioFile.eof())
{
string s;
double p;
double d;
ioFile >> s >> p >> d;
menu.addFood(s, p,d);
}
ioFile.close();
//从food文件中读取食物
ioFile.open("./data/admin.txt", ios::in);
while (!ioFile.eof())
{
string id, pas;
ioFile >> id >> pas;
ad.addAdmin(id, pas);
}
ioFile.close();
while (true) {
StstemMapChoice = smap.showChoiceMap();
if (StstemMapChoice == 1) {//顾客服务
ClientMapChoice = smap.showRegMap();
if (ClientMapChoice == 1) { //用户注册
ClientMapChoice = smap.showSystemMap();
if (ClientMapChoice == 1) { // 店内就餐
string name, phone;
cout << "请填写您的基本信息:\n";
cout << "您的订单号:" << cm.getClientNum() + 1 << endl;
curClient = cm.getClientNum();
cout << "请输入您的姓名:"; cin >> name;
cout << endl;
cout << "请输入您的电话号码:"; cin >> phone;
cout << endl;
cout << "餐桌号1~50为普通桌,餐桌号51~80为包厢,包厢费为50元\n";
cout << "请输入您的餐桌号:";
int q;
cin >> q;
cout << endl;
Client a(name, phone,q);
a.setId(cm.getClientNum());
cm.addClient(a);
a.setDesk(q);
cm.client[curClient].setType(1);
smap.showInsideSystemMap();
while (true) {
menu.showFood();
int choice;
choice = smap.showClientChoiceMap();
if (choice == 1) { //点菜
string n;
int code, nums;
double prices;
cout << "请输入食物编号:"; cin >> code;
n = menu.food[code].getName();
cout << endl << "您选择了食物:" << n << endl;
prices = menu.food[code].getRightPrice();
cout << "请输入数量:"; cin >> nums;
cout << endl;
menu.food[code].addSaleNum(nums);
cm.client[curClient].Client_Menu.addFood(menu.food[code]);
cm.client[curClient].addCoust(nums * prices);
cm.client[curClient].num[cm.client[curClient].Client_Menu.getNum() - 1] = nums;
cout << "当前的总费用是" << cm.client[curClient].getCoust() << "元" << endl << endl;
}
else if (choice == 2) {//修改订单
cout << "您当前的订单是:" << endl;
while (true)
{
cm.client[curClient].showCientMessage();
orderChoice = smap.showCilentOrderMessage();
if (orderChoice == 1)
cm.client[curClient].changeNum();
else if (orderChoice == 2)
cm.client[curClient].delFood();
else
break;
}
}
else if (choice == 3) //提交订单
break;
}
coust.addInsideCoust(cm.client[curClient].getCoust() + cm.client[curClient].getDeskCoust());
cout << "您的订单是:" << endl;
cm.client[curClient].showCientMessage();//输出当前订单
}
else if (ClientMapChoice == 2) {//外卖
string name, phone,address;
cout << "请填写您的基本信息:\n";
cout << "您的订单号:" << cm.getClientNum() + 1 << endl;
curClient = cm.getClientNum();
cout << "请输入您的姓名:"; cin >> name;
cout << endl;
cout << "请输入您的电话号码:"; cin >> phone;
cout << endl;
cout << "请输入您的地址:";
cin >> address;
cout << endl;
Client a(name, phone, address);
a.setId(cm.getClientNum());
cm.addClient(a);
srand((unsigned)time(NULL));
int t = rand() % 59 + 1;
cm.client[curClient].setArriveTime(t);
cm.client[curClient].setType(2);
smap.showOutsideSystemMap();
while (true)
{
menu.showFood();
int choice;
choice = smap.showClientChoiceMap();
if (choice == 1) { //点菜
string n;
int code, nums;
double prices;
cout << "请输入食物编号:"; cin >> code;
n = menu.food[code].getName();
cout << endl << "您选择了食物:" << n << endl;
prices = menu.food[code].getRightPrice();
cout << "请输入数量:"; cin >> nums;
cout << endl;
menu.food[code].addSaleNum(nums);
cm.client[curClient].Client_Menu.addFood(menu.food[code]);
cm.client[curClient].addCoust(nums * prices);
cm.client[curClient].num[cm.client[curClient].Client_Menu.getNum() - 1] = nums;
cout << "当前的总费用是" << cm.client[curClient].getCoust() << "元" << endl << endl;
}
else if (choice == 2) {//修改订单
cout << "您当前的订单是:" << endl;
while (true)
{
cm.client[curClient].showCientMessage();
orderChoice = smap.showCilentOrderMessage();
if (orderChoice == 1)
cm.client[curClient].changeNum();
else if (orderChoice == 2)
cm.client[curClient].delFood();
else
break;
}
}
else if (choice == 3) {
coust.addOutsideCoust(cm.client[curClient].getCoust() + 5);
cout << "您的订单是:" << endl;
cm.client[curClient].showCientMessage();//输出当前订单
break;
}
//提交订单
cout << "您的订单是:" << endl;
cm.client[curClient].showCientMessage();//输出当前订单
}
}
}
else if (ClientMapChoice == 2) {
while (true)
{
QueryChoice = smap.showQueryMap();
if (QueryChoice == 1) {//查询客户订单
string name;
cout << "请输入您的姓名:" << endl;
cin >> name;
cm.showQuery(name);
}
else if (QueryChoice == 2)
break;//退出查询
}
}
}
//顾客服务
else if (StstemMapChoice == 2) {
while (true)
{
cout << "请问您是否有管理员账号?\n若有请输入 1 进行登录\n若无账号,请输入 2 进行注册\n";
int oo;
cin >> oo;
if (oo == 1) {
string id, pas;
cout << "请输入您的管理员账号:"; cin >> id;
cout << endl;
cout << "请输入密码:"; cin >> pas;
cout << endl;
int op;
op = ad.checkPassword(id, pas);
if (op != 1)
break;
//登录成功
while (true)
{
AdminChoice = smap.adminSystemMap();
if (AdminChoice == 1) {
while (true) {
menu.showFood();
FoodChoice = smap.showChangeMenuMap();
if (FoodChoice == 1) {
string n;
double p, d;
cout << "请输入食物的名称:"; cin >> n;
cout << endl;
cout << "请输入食物的价格:"; cin >> p;
cout << endl;
cout << "请输入折扣(0<折扣 折扣<=1):"; cin >> d;
cout << endl;
menu.addFood(Food(n, p, d));
}
else if (FoodChoice == 2)
menu.changePrice();
else if (FoodChoice == 3)
menu.changeDiscount();
else if (FoodChoice == 4)
menu.delFood();
else
break;
}
}
//食物管理
else if (AdminChoice == 2) {
cout << "今天共有" << cm.getClientNum() << "名顾客消费,消费总额为:" << coust.getInsideCoust() + coust.getOutsideCoust() << "元" << endl;
cout << "其中\n在店就餐消费为:" << coust.getInsideCoust() << "元\n";
cout << "外卖消费为:" << coust.getOutsideCoust() << "元\n";
cout << "--------------------------------------" << endl;
cm.showAll();
}
//今日反馈
else if (AdminChoice == 3) {
int order = smap.showOrderChangeMap();
while (true)
{
if (order == 1) {
cout << "请选择您要查找订单的方式:\n(订单号查询 输入1\t电话号码查询 输入2)\n";
int o;
cin >> o;
if (o == 1) {
int op;
cout << "请输入订单号:"; cin >> op;
op--;
if (op >= cm.getClientNum()) {
cout << "无此订单号\n";
break;
}
cm.client[op].showCientMessage();
break;
}
//订单号查询
else if (o == 2) {
string op;
int i;
cout << "请输入电话号码:"; cin >> op;
for (i = 0; i < cm.getClientNum(); i++) {
if (cm.client[i].getPhone() == op) {
cm.client[i].showCientMessage();
break;
}
}
if (i >= cm.getClientNum()) {
cout << "无此电话号码对应的订单\n";
break;
}
break;
}
//电话号码查询
}
//查找订单
else if (order == 2) {
cout << "请选择您要修改订单的方式:\n(订单号查询 输入1\t电话号码查询 输入2)\n";
int o;
cin >> o;
if (o == 1) {
int op;
cout << "请输入订单号:"; cin >> op;
op--;
if (op >= cm.getClientNum()) {
cout << "无此订单号\n";
break;
}
cm.client[op].showCientMessage();
orderChoice = smap.showCilentOrderMessage();
if (orderChoice == 1)
cm.client[op].changeNum();
else if (orderChoice == 2)
cm.client[op].delFood();
else
break;
}
else if (o == 2) {
string op;
int i;
cout << "请输入电话号码:"; cin >> op;
for (i = 0; i < cm.getClientNum(); i++) {
if (cm.client[i].getPhone() == op) {
cm.client[i].showCientMessage();
orderChoice = smap.showCilentOrderMessage();
if (orderChoice == 1) {
cm.client[i].changeNum();
break;
}
else if (orderChoice == 2) {
cm.client[i].delFood();
break;
}
else
break;
}
}
if(i >= cm.getClientNum())
cout << "无此号码对应的订单\n";
break;
}
}
//修改订单
else if (order == 3) {
cout << "请选择您要删除订单的方式:(订单号查询 输入1\t电话号码查询 输入2)\n";
int o;
cin >> o;
if (o == 1) {
int op;
cout << "请输入订单号:"; cin >> op;
op--;
if (op >= cm.getClientNum()) {
cout << "无此订单号\n";
break;
}
cm.client[op].judge = 2;
if (cm.client[op].getType() == 1)
coust.addInsideCoust(-cm.client[op].getCoust());
else
coust.addOutsideCoust(-cm.client[op].getCoust());
cout << "该订单已删除\n\n";
cm.client[op].setCoust(0);
break;
}
else if (o == 2) {
string op;
int i;
cout << "请输入电话号码:"; cin >> op;
for (i = 0; i < cm.getClientNum(); i++) {
if (cm.client[i].getPhone() == op) {
cm.client[i].judge = 2;
if (cm.client[i].getType() == 1)
coust.addInsideCoust(-cm.client[i].getCoust());
else
coust.addOutsideCoust(-cm.client[i].getCoust());
cout << "该订单已删除\n\n";
cm.client[i].setCoust(0);
break;
}
}
if (i >= cm.getClientNum())
cout << "无此号码对应的订单\n";
break;
}
}
//删除订单
else
break;
}
//订单管理
}
else if (AdminChoice == 4) {
string date, s;
char tem(0);
cout << "请输入您要查询的日期 (年-月-日)(如2020-5-20) :";
cin >> date;
string a = "./data/" + date + ".txt";
ioFile.open(a, ios::_Nocreate);
if (!ioFile)
cout << "\n没有这一天的订单信息\n\n";
ioFile.close();
ioFile.open(a, ios::in);
while (!ioFile.eof()) {
ioFile.get(tem);
s += tem;
}
cout << s << endl;
}
//历史订单查询
else
break;
//退出
}
break;
}
//登录界面
else if (oo == 2) {
string id, pas1, pas2;
cout << "注册界面\n请输入您的账号:";
cin >> id; cout << endl;
cout << "请输入您的密码:";
cin >> pas1;
cout << "\n请再次确认密码:";
cin >> pas2;
cout << endl;
if (pas1 == pas2) {
cout << "注册成功!\n\n";
ad.addAdmin(id, pas1);
break;
}
else
{
cout << "两次密码不一样,请重新输入\n\n";
break;
}
}
//注册界面
}
}
//管理员系统
else if (StstemMapChoice == 3) {//退出系统并保存
cout << "请输入今日的日期 (年-月-日)(如2020-5-20) :";
string a;
cin >> a;
string b = "./data/" + a + "order.txt";
string c= "./data/" + a + ".txt";
ioFile.open(b, ios::out, ios::_Noreplace);
ioFile << a << endl << cm.getClientNum() << "名顾客消费,消费总额为:" << coust.getInsideCoust() + coust.getOutsideCoust() << "元" << endl;
ioFile << "在店就餐消费为:" << coust.getInsideCoust() << "元\n";
ioFile << "外卖消费为:" << coust.getOutsideCoust() << "元\n";
ioFile << "--------------------------------------" << endl;
for (int i = 0; i < cm.getClientNum(); i++) {
ioFile << "第" << i + 1 << "单:\n" << "姓名:\t" << cm.client[i].getName() << endl;
ioFile << "电话号码:\t" << cm.client[i].getPhone() << endl;
if (cm.client[i].getType() == 1){
ioFile << "就餐方式为:\t在店就餐\n" << "餐桌号为:\t" << cm.client[i].getDesk() << endl;
ioFile << "总共消费为:\t" << cm.client[i].getCoust() + cm.client[i].getDeskCoust() << "元" << endl;
}
else{
ioFile << "就餐方式为:\t外卖就餐\n地址为:\t" << cm.client[i].getAddress() << endl;
ioFile << "总共消费为:\t" << cm.client[i].getCoust() + 5 << "元" << endl;
}
ioFile << "--------------------------------------" << endl;
}
ioFile.close();
ioFile.open("./data/food.txt", ios::out);
for (int i = 0; i < menu.getNum(); i++) {
ioFile << setw(10) << setiosflags(ios::left) << menu.food[i].getName() << "\t" << menu.food[i].getPrice() << "\t" << menu.food[i].getDiscount();
if (i != menu.getNum() - 1)
ioFile<< endl;
}
ioFile.close();
ioFile.open("./data/admin.txt", ios::out);
for (int i = 0; i < ad.getAdminNum(); i++) {
ioFile << setw(10) << setiosflags(ios::left) << ad.admin[i].getID() << "\t" << setw(10) << setiosflags(ios::left) << ad.admin[i].getPassword();
if (i != ad.getAdminNum())
ioFile << endl;
}
ioFile.close();
ioFile.open(c, ios::out, ios::_Noreplace);
ioFile << a << "销售情况" << endl;
int q = 0;
for (int i = 0; i < cm.getClientNum(); i++)
if (cm.client[i].judge == 1)
q++;
ioFile << "一共销售出单数:\t" << q << endl;
ioFile << "销售额为:\t" << coust.getInsideCoust() + coust.getOutsideCoust() << "元\n\n";
ioFile << "在店销售额:\t" << coust.getInsideCoust() << "元\n";
ioFile << "外卖销售额:\t" << coust.getOutsideCoust() << "元\n\n";
ioFile << "菜品销售数量情况:\n\n";
for (int i = 0; i < menu.getNum(); i++)
ioFile << menu.food[i].getName() << "\t" << menu.food[i].getSaleNum() << "份\n";
ioFile.close();
cout << "成功退出系统" << endl << endl << endl;
system("pause");
return 0;
}
//退出系统
}
return 0;
}
说明:
管理员账号:chenyu 密码:123456
运行结果与分析
一种是餐厅管理员,一种是顾客。餐厅管理员根据账号、密码登录系统。顾客无需登录即可使用系统。
考核标准>=60:
菜单以文件形式保存:
保存菜单代码如下:
读取food文件代码如下:
在店用餐顾客服务:
在店消费的订单信息:
订单内容包括订单编号、菜品名称、每个菜品的价格、份数、折扣等
在店消费要求包括餐桌号,是否有包厢费
这两项目的已达成
外卖就餐
订单内容包括订单编号、菜品名称、每个菜品的价格、份数、折扣等
外卖要求包括送餐时间,送餐地点,客户手机号,外卖服务费
考核标准>=70:
系统退出后能保存当天的订单信息,要求每天一个文档,文档名按照日期命名
订单按照下单时间先后排序
输入日期为2020-6-1
Data文件夹中出现2020-6-1order 文件 该文件中保存了订单信息
保存当天订单的代码如下:
餐厅管理员可以根据订单编号或手机号查找、删除或修改某个订单
查找
订单号查找:
手机号查找:
修改
删除订单:
考核标准>=80:
能够实现对保存在文件中的餐厅菜式和价格的管理,包括对菜品和对应价格的增加、修改、删除、查找,折扣的设置,设置后,顾客在点餐时看到的是新设置后的菜单,成绩≥80;
增加菜品
修改价格
删除
折扣设置/修改
查找:
查找操作已经包含在菜品和对应价格的增加、修改、删除、折扣的操作中,且每次修改后均会展示菜单,故我未专门添加查找操作
顾客在点餐时看到的是新设置后的菜单:
首先会保存在food文件中,之后会从文件中读入展示给顾客新的菜单
考核标准>=90:
系统可根据历史记录对销售情况进行统计,根据餐厅管理员的输入日期统计某天的销售情况并显示
输入日期统计某天销售情况并显示
一共接了多少单,销售额是多少,各个菜品的销售情况,外卖和在店销售的占比
心得与体会
经过该次C++的课程设计,我更加深刻掌握了继承,STL容器等多种使用方法。更加深入了解巩固面向对象的思维。学会了在设计程序时要先需求分析,了解用户的使用需求,之后进行类的设计,最后再根据类的设计,进行代码的编写。在代码编写中也产生了许多的bug,但通过一次又一次的试验,将bug解决,同时也学会了很多的内容和知识,在遇到无法解决的问题时,通过查阅博客,查看书本等方法来解决问题。在解决bug过程中,对所学的内容也进行了复习和进一步的巩固学习,提高了自己的技能。
♻️ 资源
大小: 129MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87400360
相关文章
- qt实现web服务器加载vue应用进行C++和html混合编程-连载【6】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
- C++冒泡排序
- 【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)
- c++获取系统错误提示!getLastError()
- 基于QT(C++)+SQL Server 2008 实现相机租赁系统【100010742】
- 基于QT(C++)+Sqlite3实现单词消除游戏系统【100010741】
- 基于C++实现(控制台)银行业务系统【100010510】
- 基于C+++FLTK实现(WinForm)超市收银系统【100010032】
- [第六届蓝桥杯省赛C++B组]加法变乘法
- [第四届蓝桥杯省赛C++B组 ]三部排序
- 62、【数组】leetcode——54. 螺旋矩阵:N*M型(C++版本)
- c++ 中const的使用
- VC++获得当前系统时间的几种方案
- C/C++ Windows API——获取系统指定目录