C++金拱门点餐结算系统
题目:
金拱门快餐店主要出售汉堡、小吃、饮料和甜品等类型的快餐食品,每种类型的食品有不同的产品,例如饮料类食品有可乐、咖啡、茶饮料等。现在让你担任吉珠金拱门连锁门店的经理,负责销售产品的选定和套餐的设计,你需要使用C/C++的console模式开发一个软件,包含所有销售产品的信息(包括单品和套餐信息),通过一个菜单系统实现顾客的点餐和结算过程,通过管理员权限统计当前结算周期的销售信息(如各产品的销售量、销售额等)
功能需求:
- 根据面向对象的设计思想,设计一个抽象类作为基类,封装所有具体产品的共有属性和运算。根据你的产品列表,从基类派生出各具体类,包括单品和套餐产品。
- 设计一个菜单类,应该包含但不限定下述多层菜单选项
i.顾客点餐子菜单:商品列表,顾客可一次购买多种产品
ii.结算子菜单:顾客点餐完毕自动转入结算界面,现实顾客点餐内容及总金额。要求可以返回点餐菜单进行修改。
iii.管理员子菜单:密码管理,退出系统。 - 设计一个订单类,封装每一个售出的订单信息,以供数据统计使用。
- 使用外部文件存取数据,方便数据的输入输出。
思路:
利用数组实现点餐等操作
利用文件实现订单保存
代码实现:
#include <iostream>
#include <windows.h> //句柄颜色设置
#include <iomanip> //设置域宽
#include <fstream> //设置文件
#include <cmath> //完成计算
#include <stdio.h>
void Menu();
void guest();
using namespace std;
class menu {
//菜单抽象类
public:
virtual void printf() = 0;
};
class Food :public menu {
//套餐具体类
string Name; //菜名
float Price; //价格
string Kind; //类别
int Num; //编号
public:
void Foodmenu(); //食物菜单
void foodshow(int num, string kind, string name, float price) {
Num = num; Kind = kind; Price = price; Name = name;
}
void printf() {
cout << " " << Num << setw(7) << Kind << setw(35) << Name << Price; //套餐菜单显示
}
Food();
};
Food::Food() {
Num = 0; Price = 0; //初始化变量
}
class Single :public menu {
//单点具体类
string sName; //菜名
float sPrice; //价格
string sKind; //类别
int sNum; //编号
public:
void singleshow(int snum, string skind, string sname, float sprice) {
sNum = snum; sName = snum; sKind = skind; sName = sname; sPrice = sprice; //单点食物
}
void printf() {
cout << " " << sNum << setw(7) << sKind << setw(35) << sName << sPrice; //单点菜单显示
}
Single();
};
Single::Single() {
sNum = 0; sPrice = 0;
}
class Employee :public menu {
//管理员具体类
string NAME; //员工姓名
string SEX; //员工性别
long PHONE; //员工电话
public:
void employeeshow(string Name, string Sex, long Phone) {
//员工信息输出
NAME = Name; SEX = Sex; PHONE = Phone;
}
void printf() {
cout << setw(60) << "姓名:" << NAME << endl
<< setw(60) << "性别:" << SEX << endl
<< setw(60) << "电话:" << PHONE << endl;
}
Employee();
};
Employee::Employee() {
PHONE = 0; //初始化变量
}
用结构体存储菜单
struct storage {
//储存菜单
int Num1; //编号
string Name1; //菜名
double Price1; //价格
int Count1; //点菜数量
int Kucun1;
};
struct storage sto[55] = {
{
1,"巨无霸升级四件套(巨无霸/中薯条/中杯可乐)",32,0,500},
{
2,"安格斯芝士堡套餐(芝士堡/中薯条/中杯可乐)",32.5,0,500},
{
3,"板烧鸡腿堡套餐(鸡腿堡/中薯条/中杯可乐)",30,0,500},
{
4,"金凤来福鸡排堡 ",21.5,0,500},
{
5,"麦辣鸡腿堡 ",17.5,0,500},
{
6,"板烧鸡腿堡 ", 19,0,500},
{
7,"苹果派 ",8,0,500},
{
8,"那么大鸡排 ",12,0,500},
{
9,"中薯条 ",11.5,0,500},
{
10,"黑糖珍珠奶茶(冷) ",14,0,500},
{
11,"原味奶茶(冷) ",13,0,500} ,
};
菜单显示操作
//---------------------------------------------------------------------------------------------
//-------------------------------------食物菜单显示--------------------------------------------
//---------------------------------------------------------------------------------------------
void Food::Foodmenu() //食物菜单
{
system("CLS"); //清屏
cout << setw(80) << "-------------------菜单-------------------" << endl
<< setw(80) << " 1.套餐 " << endl
<< setw(80) << " 2.单点 " << endl //点餐子菜单
<< setw(80) << " 3.点餐 " << endl
<< setw(80) << " 0.返回 " << endl
<< setw(80) << "------------------------------------------" << endl;
cout << "请输入你的选择:(浏览完后输入3进行点餐)";
int a;
while (cin >> a) {
//-----------------------------------套餐--------------------------------------------------------
if (a == 1) {
cout << "-----------------------------------------------------------" << endl;
cout << "编号" << " 类别" << setw(15) << "菜名" << setw(36) << "价格" << endl;
Food f1, f2, f3;
f1.foodshow(1, " 套餐 ", "巨无霸升级四件套(巨无霸/中薯条/中杯可乐) ¥", 32);
f1.printf(