自助点餐系统
题目
设计一个自助点餐系统,方便顾客自己点餐,并提供对餐厅销售情况的统计和管理功能。
业务流程图
图一:管理员界面操作流程图
图二:顾客点菜界面
系统功能结构图
类的设计
程序代码与说明
头文件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 // !SYSTEMMAPSystemMap.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 // !ADMINAdmin.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 // !ADMINMANAGERAdminManager.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 // CLIENTClient.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 // !CLIENTMANAGERClientmanager.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 // !COUSTMANAGERCoustManager.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 // !FOODFood.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 // !MENUMenu.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过程中,对所学的内容也进行了复习和进一步的巩固学习,提高了自己的技能。