zl程序教程

您现在的位置是:首页 >  后端

当前栏目

基于C++实现(控制台)自助点餐系统【100010526】

C++系统 实现 基于 控制台 自助 点餐
2023-09-11 14:17:49 时间

自助点餐系统

题目

设计一个自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。

业务流程图

​ 图一:管理员界面操作流程图

​ 图二:顾客点菜界面

系统功能结构图

类的设计

程序代码与说明

头文件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