C++方式实现餐饮管理系统

1.main.cpp文件

#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <string.h>
using namespace std;

class Customer//顾客类
{
private:
    char table[20];//桌号
    int queues;//排队号码
    char dishes[20];//菜品
    int amount;//账户余额
    static int total;//顾客总数
public:
    Customer();
    void order();//点菜函数
    void Printf();//输出顾客信息
    friend class LQueue;
};

class LQueue;
class Menus//菜单类
{
private:
    int number;//菜单编号
    int price;//价格
    char dish_name[30];//菜名
    static int sums;//菜品总数
public:
    void Set();//增加菜品
    void show();//显示菜品信息
    void correct_menus();//修改菜品
    void delete_menus();//删除菜品
    void renew_menus();//恢复菜单
    friend class LQueue;
    friend void Customer::order();
};
int Customer::total=0;
int Menus::sums=5;

struct QNode
{
    Customer data;
    QNode *next;
};

class LQueue//队列类
{
private:
    QNode *front,*rear;//队头和队尾
public:
    LQueue();
    void InLQueue();//增加顾客
    int EmptyLQueue();//判队空
    void OutLQueue();//删除队头元素
    void PrintQueue();//输出队伍信息
    void correct_customer(LQueue *L);//修改队伍信息
    void delete_customer(LQueue *L);//删除队伍元素
    ~LQueue();
};

int menu()
{
    char i;
    puts("**********************主菜单**********************\t\n");
    puts("\t\t1.增加新菜品\n");
    puts("\t\t2.增加新顾客\n");
    puts("\t\t3.顾客结账\n");
    puts("\t\t4.显示顾客信息\n");
    puts("\t\t5.显示菜品信息\n");
    puts("\t\t6.修改顾客点菜信息\n");
    puts("\t\t7.修改菜品信息\n");
    puts("\t\t8.删除顾客\n");
    puts("\t\t9.删除菜品\n");
    puts("\t\t0.退出\n");
    puts("**************************************************\t\n");
    i=getchar();
    system("cls");
    return i;
}

int main()
{
    LQueue L;
    Menus m;
    while(1)
    {
        switch(menu())
        {
        case'1':
            m.Set();
            break;
        case'2':
            L.InLQueue();
            break;
        case'3':
            L.OutLQueue();
            break;
        case'4':
            L.PrintQueue();
            break;
        case'5':
            m.show();
            break;
        case'6':
            L.correct_customer(&L);
            break;
        case'7':
            m.correct_menus();
            break;
        case'8':
            L.delete_customer(&L);
            break;
        case'9':
            m.delete_menus();
            break;
        case'0':
            m.renew_menus();
            return 0;
        }
    }
    return 0;
}

LQueue::LQueue()
{
    rear=0;
    front=0;
}

void LQueue::PrintQueue()
{
    QNode *p;
    p=front;
    if(p==NULL)
        {
            cout<<"队内无顾客!"<<endl;
            getchar();
            getchar();
            system("cls");
            return;
        }
    else
        cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
    while(p!=NULL)
    {
        p->data.Printf();
        p=p->next;
    }
    getchar();
    getchar();
    system("cls");
}

void LQueue::InLQueue()
{
    QNode *p;
    p=new QNode;
    p->next=NULL;
    p->data.order();
    if(front==0)
    {
        front=p;
        rear=p;
    }
    else
    {
        rear->next=p;
        rear=p;
    }
    getchar();
    getchar();
    system("cls");
}

int LQueue::EmptyLQueue()
{
    if(front==NULL&&rear==NULL)
        return 1;
    else
        return 0;
}

void LQueue::OutLQueue()
{
    int i=0;
    QNode *p;
    Menus menu[50];
    if(EmptyLQueue()==1)
        {
            cout<<"队内无顾客!"<<endl;
            getchar();
            getchar();
            system("cls");
            return;
        }
    else
    {
        p=front;
        front=p->next;
        ifstream in("Menus.txt");
        while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
        {
            if(strcmp(p->data.dishes,menu[i].dish_name)==0)
            {
                p->data.amount-=menu[i].price;
                break;
            }
            i++;
        }
        cout<<"首位顾客点餐之后的信息:\n"<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
        cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl;
    }
    if(front==NULL)
        rear=front;
    getchar();
    getchar();
    system("cls");
}

void LQueue::correct_customer(LQueue *L)
{
    int i=0,temp,numb,flag=0,flag1=0;
    QNode *p,*q;
    p=L->front;
    q=front;
    if(q==NULL)
        cout<<"队列中无顾客!"<<endl;
    else
    {
        cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
        while(q!=NULL)
        {
            q->data.Printf();
            q=q->next;
        }
        cout<<endl<<"请输入需要修改顾客的排队号码:"<<endl;
        cin>>numb;
        cout<<endl;
        Menus menu[50];
        cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
        ifstream in("Menus.txt");
        while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
        {
            cout<<"    "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
            i++;
        }
        i=i-1;
        temp=i;
        cout<<endl;
        while(p!=NULL)
        {
            if(numb==p->data.queues)
            {
                cout<<"当前顾客信息为:"<<endl;
                cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
                cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl<<endl;
                flag1=1;
                while(flag==0)
                {
                    i=temp;
                    cout<<"请输入修改后的桌号、菜品、账户余额:"<<endl;
                    cin>>p->data.table>>p->data.dishes>>p->data.amount;
                    while(i>=0)
                    {
                        if(strcmp(menu[i].dish_name,p->data.dishes)==0)
                        {
                            flag=1;
                            break;
                        }
                        else
                            flag=0;
                        i--;
                    }
                    if(flag==1)
                        cout<<"输入成功!"<<endl;
                    else
                        cout<<"菜单中没有此菜!"<<endl;
                }
                break;
            }
            else
                p=p->next;
        }
        if(flag1==0)
            cout<<"队伍中无此号码!"<<endl;
    }
    getchar();
    getchar();
    system("cls");
}

void LQueue::delete_customer(LQueue *L)

{
    int numb,flag=0;
    QNode *p,*q,*r;
    p=L->front;
    r=front;
    if(r==NULL)
        cout<<"队列中无顾客!"<<endl;
    else
    {
        cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
        while(r!=NULL)
        {
            r->data.Printf();
            r=r->next;
        }
        cout<<"请输入需要删除顾客的排队号码:"<<endl;
        cin>>numb;
        cout<<endl;
        while(p!=NULL)
        {
            if(numb==p->data.queues)
            {
                if(flag==0)
                {
                    cout<<"此顾客信息为:"<<endl;
                    cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
                    cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl<<endl;
                    L->front=p->next;
                }
                else
                {
                    cout<<"此顾客信息为:"<<endl;
                    cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
                    cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl<<endl;
                    q->next=p->next;
                }
                flag=1;
                break;
            }
            else
            {
                if(flag==0)
                    q=L->front;
                else
                    q=q->next;
                p=p->next;
            }
            flag++;
        }
        if(flag==0)
            cout<<"队伍中无此号码!"<<endl;
    }
    getchar();
    getchar();
    system("cls");
}

LQueue::~LQueue()
{
    delete rear;
}

Customer::Customer()
{
    total++;
    queues=total;
    cout<<"您当前的排队号码为:"<<queues<<endl;
}

void Customer::order()
{
    int i=0,temp,flag=0;
    Menus menu[50];
    cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
    ifstream in("Menus.txt");
    while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
    {
        cout<<"    "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
        i++;
    }
    i=i-1;
    temp=i;
    while(flag==0)
    {
        i=temp;
        cout<<"请输入该顾客桌号、菜品、账户余额:"<<endl;
        cin>>table>>dishes>>amount;
        while(i>=0)
        {
            if(strcmp(menu[i].dish_name,dishes)==0)
            {
                flag=1;
                break;
            }
            else
                flag=0;
            i--;
        }
        if(flag==1)
            cout<<"输入成功!"<<endl;
        else
            cout<<"菜单中没有此菜!"<<endl;
    }
}

void Customer::Printf()
{
    cout<<table<<setw(10)<<queues<<setw(10)<<dishes<<setw(10)<<amount<<endl;
}

void Menus::show()
{
    int i=0;
    Menus menu[50];
    cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
    ifstream in("Menus.txt");
    while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
    {
        cout<<"    "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
        i++;
    }
    getchar();
    getchar();
    system("cls");
}

void Menus::Set()
{
    sums++;
    cout<<"请分别输入所增加的菜名和价格:"<<endl;
    cin>>dish_name>>price;
    number=sums;
    ofstream out("Menus.txt",ios::app);
    out<<number<<" "<<dish_name<<" "<<price<<" "<<endl;
    cout<<"输入成功!"<<endl;
    out.close();
    getchar();
    getchar();
    system("cls");
}

void Menus::correct_menus()
{
    int i=0,temp;
    char name[20];
    Menus menu[50];
    cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
    ifstream in("Menus.txt");
    while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
    {
        cout<<"    "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
        i++;
    }
    cout<<endl<<"请输入想要修改的菜品名:"<<endl;
    cin>>name;
    temp=i;
    i=0;
    ofstream outf("Menus.txt",ios::trunc);
    while(1)
    {
        in>>menu[i].number>>menu[i].dish_name>>menu[i].price;
        if(strcmp(name,menu[i].dish_name)==0)
            {
                cout<<"请输入修改后的菜品编号、菜名、价格:"<<endl;
                cin>>menu[i].number>>menu[i].dish_name>>menu[i].price;
                outf<<endl;
                break;
            }
        i++;
    }
    ofstream out("Menus.txt",ios::app);
    for(i=0;i<temp;i++)
        out<<menu[i].number<<" "<<menu[i].dish_name<<" "<<menu[i].price<<endl;
    cout<<"输入成功!"<<endl;
    getchar();
    getchar();
    system("cls");
}

void Menus::delete_menus()
{
    int i=0,temp,tempi;
    char name[20];
    Menus menu[50];
    cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
    ifstream in("Menus.txt");
    while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
    {
        cout<<"    "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
        i++;
    }
    cout<<endl<<"请输入想要删除的菜品名:"<<endl;
    cin>>name;
    temp=i;
    i=0;
    ofstream outf("Menus.txt",ios::trunc);
    while(1)
    {
        in>>menu[i].number>>menu[i].dish_name>>menu[i].price;
        if(strcmp(name,menu[i].dish_name)==0)
            {
                tempi=i;
                outf<<endl;
                break;
            }
        i++;
    }
    ofstream out("Menus.txt",ios::app);
    for(i=0;i<temp;i++)
        {
            if(tempi==i)
                continue;
            out<<menu[i].number<<" "<<menu[i].dish_name<<" "<<menu[i].price<<endl;
        }
    cout<<"输入成功!"<<endl;
    getchar();
    getchar();
    system("cls");
}

void Menus::renew_menus()
{
    int i=0,temp;
    Menus menu[50];
    ifstream in("Menus_renew.txt");
    while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
        i++;
    temp=i;
    ofstream outf("Menus.txt",ios::trunc);
    ofstream out("Menus.txt",ios::app);
    for(i=0;i<temp;i++)
        out<<menu[i].number<<" "<<menu[i].dish_name<<" "<<menu[i].price<<endl;
    cout<<"谢谢使用本系统!"<<endl;
}

2.Menus.txt文件

1 水煮肉片 18
2 鱼香肉丝 25
3 鱼头 16
4 刀拍黄瓜 16
5 鲍鱼 20

3.Menus_renew.txt

1 水煮肉片 18
2 鱼香肉丝 25
3 鱼头 16
4 刀拍黄瓜 16
5 鲍鱼 20
 

  • 21
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的小威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值