奶茶订单系统

 头文件.h

 1、cuslist.h

#ifndef CUSLIST_H_INCLUDED
#define CUSLIST_H_INCLUDED
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#include<string>
#include<iostream>
using namespace std;

typedef int Status;
// 定义饮品结构体

typedef struct{
    char name[20];//饮品名称
    char taste[20];//口味
    int num;//序号,唯一
    int count;//畅销量
    double price;//价格
    double sale;//销售额
    //增加其他成员变量
}Drink;

//定义饮品结构体,使用的是顺序表
typedef struct{
    Drink elem[MAXSIZE];
    int length;
}DrinkList;

void AddDrink(DrinkList &ddd,int num);//添加饮品种类
void Print(DrinkList ddd);//打印
void Revise(DrinkList &ddd);//修改饮品信息
void Delete(DrinkList &ddd);//单个删除

#endif // CUSLIST_H_INCLUDED

2、file.h

#ifndef FILE_H_INCLUDED
#define FILE_H_INCLUDED
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"



//读写文件声明,在需要使用该文件的源程序文件中,均需使用#include "file.h" 引入
void WriteDrinkData(DrinkList L);     //将饮品表L中的数据全部写入到饮品文件中(覆盖原文件)
void ReadDrinkData(DrinkList &L);     //从饮品文件读取饮品信息 到 类型为SqList的饮品表L
void WriteOrderData(order ord);    //将类型为Order的订单信息ord追加到订单文件末尾
void ReadOrderData(OrderList &OL); //从订单文件读取订单信息到类型为OrderList 的订单表OL


#endif // FILE_H_INCLUDED

 3、menu.h

#ifndef MENU_H_INCLUDED
#define MENU_H_INCLUDED

void Drinkinfo_menu();
void CalMenu();
void MainMenu();

#endif // MENU_H_INCLUDED

4、orderqueue.h

#ifndef ORDERQUEUE_H_INCLUDED
#define ORDERQUEUE_H_INCLUDED
#define MAXQSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"

//订单结构定义
typedef struct{
    char name[20];//饮品名称
    char taste[20];//口味
    //增加其他成员变量
}order;

struct OrderList{
    order* base;//队列
    int front;//队头 出
    int rear;//队列 进
    int length;
};

//订单相关操作函数声明
void InitQueue(OrderList &O);
void enter(OrderList &O,DrinkList &ddd);
void outer(OrderList &O);

//统计分析函数声明
void statistic(DrinkList &ddd,OrderList O);//统计销售量
void ReviseSale(DrinkList &ddd);//修改销售量
void BubbleSor(DrinkList &ddd);//

#endif // ORDERQUEUE_H_INCLUDED

源代码.cpp

1、drinkman.cpp

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"
#define EPSILON 1e-10
using  namespace std;

/*  饮品管理相关函数实现 */
void AddDrink(DrinkList &ddd,int num)
{
    for(int i=0;i<num;i++)
    {
        cout<<"请输入要添加"<<i+1<<"号饮品的序号"<<endl;
        int Num;
        cin>>Num;

        for(int j=0;j<=ddd.length;j++)
        {
            if(Num==ddd.elem[j].num)
            {
                cout<<"输入的序号重复,请重新选择!"<<endl;
                return;
            }
        }

        ddd.elem[ddd.length].num=Num;

        cout<<"请输入要添加"<<i+1<<"号饮品的名字"<<endl;
        cin>>ddd.elem[ddd.length].name;

        cout<<"请输入要添加"<<i+1<<"号饮品的口味"<<endl;
        cin>>ddd.elem[ddd.length].taste;

        cout<<"请输入要添加"<<i+1<<"号饮品的价格"<<endl;
        cin>>ddd.elem[ddd.length].price;

        ddd.elem[ddd.length].count=0;
        ddd.elem[ddd.length].sale=0;
        ddd.length++;

        //WriteDrinkData(ddd);
    }
    //WriteDrinkData(ddd);
    return ;
}

void Print(DrinkList ddd)
{
    //ReadDrinkData(ddd);
    if(ddd.length==0)
    {
        cout<<"该饮品种类为空!"<<endl;
        return ;
    }

    for(int i=0;i<ddd.length;i++)
    {
        for(int j=0;j<ddd.length-i;j++)
        {
            if(ddd.elem[j].price<ddd.elem[j+1].price)
            {
                DrinkList ccc;
                ccc.elem[0]=ddd.elem[j];
                ddd.elem[j]=ddd.elem[j+1];
                ddd.elem[j+1]=ccc.elem[0];
            }
        }
    }

    for(int i=0;i<ddd.length;i++)
    {
        cout<<"饮品序号:"<<ddd.elem[i].num
        <<"  饮品名称:"<<ddd.elem[i].name
        <<"  饮品口味:"<<ddd.elem[i].taste
        <<"  饮品价格:"<<ddd.elem[i].price
        <<"  饮品销量:"<<ddd.elem[i].count
        <<endl;
    }
    //WriteDrinkData(ddd);
    return;
}

void Revise(DrinkList &ddd)
{
    Print(ddd);
    int e;
    cout<<"请输入要修改的饮品序号"<<endl;
    cin>>e;

    if(ddd.length==0)
    {
        system("cls");
        cout<<"该店铺的商品为空,请添加饮品种类!"<<endl;
        system("pause");
        return;
    }

        for(int i=0;i<=ddd.length;i++)//查找
        {
            if(i==ddd.length)
            {
                cout<<"想要修改的值不存在!"<<endl;
                return;
            }

            if(e==ddd.elem[i].num)//找到情况下
            {
                int select;int ret=i;
                cout<<"修改的饮品信息如下:"<<endl;

                cout<<"饮品名称:"<<ddd.elem[ret].name
                    <<"  饮品序号: "<<ddd.elem[ret].num
                    <<"  饮品口味:"<<ddd.elem[ret].taste
                    <<"  饮品价格:"<<ddd.elem[ret].price
                    <<"  饮品销售:"<<ddd.elem[ret].count
                    <<endl;

                cout<<"是否进行修改 (1)Yes (2)NO"<<endl;
                cin>>select;
                if(select==1)
                {
                    cout<<"请输入要修改的序号"<<endl;
                    cin>>ddd.elem[ret].num;

                    cout<<"请输入要修改的名字"<<endl;
                    cin>>ddd.elem[ret].name;

                    cout<<"请输入要修改的口味"<<endl;
                    cin>>ddd.elem[ret].taste;

                    cout<<"请输入要修改的价格"<<endl;
                    cin>>ddd.elem[ret].price;

                    cout<<"请输入要修改的销量"<<endl;
                    cin>>ddd.elem[ret].count;

                    //WriteDrinkData(ddd);
                    return;
                }
                else if(select==2)
                {
                    return;
                }
                else
                {
                    cout<<"请选1或2"<<endl;
                    return;
                }
            }
        }
}

void Delete(DrinkList &ddd)
{
    Print(ddd);
    int e;
    cout<<"请输入要删除的饮品序号"<<endl;
    cin>>e;

    if(ddd.length==0)
    {
        system("cls");
        cout<<"该店铺的商品为空,请添加饮品种类!"<<endl;
        system("pause");
        return;
    }

    for(int i=0;i<=ddd.length;i++)//
        {
            if(i==ddd.length)
            {
                cout<<"想要删除的值不存在!"<<endl;
                return;
            }

            if(e==ddd.elem[i].num)//找到情况下
            {
                int select;int ret=i;
                cout<<"删除的饮品信息如下:"<<endl;

                cout<<"  饮品名称:"<<ddd.elem[i].name
                    <<"  饮品口味:"<<ddd.elem[i].taste
                    <<"  饮品价格:"<<ddd.elem[i].price
                    <<"  饮品销量:"<<ddd.elem[i].count
                    <<endl;

                cout<<"是否进行删除 (1)Yes (2)YES"<<endl;
                cin>>select;
                if(select==1||select==2)
                {
                    for(int j=ret;j<ddd.length;j++)
                    {
                        strcpy(ddd.elem[j].name,ddd.elem[j+1].name);
                        ddd.elem[j].num=ddd.elem[j+1].num;
                        ddd.elem[j].price=ddd.elem[j+1].price;
                        strcpy(ddd.elem[j].taste,ddd.elem[j+1].taste);
                        ddd.elem[j].count=ddd.elem[j+1].count;
                    }
                    ddd.length--;

                    cout<<"删除成功,请继续操作!"<<endl;

                    //WriteDrinkData(ddd);
                    return;
                }
                else
                {
                    cout<<"请重新选择!"<<endl;

                    return;
                }
            }
        }
}

2、main.cpp

#include <iostream>
#include <stdio.h>
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"
using namespace std;

int main(){

    MainMenu();
}

3、menu.cpp

#include <iostream>
#include <stdio.h>
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"
using namespace std;

//饮品管理子菜单
void Drinkinfo_menu(){
    int fnum;
    DrinkList ddd;
    ddd.length=0;
    ReadDrinkData(ddd);
    printf("\n");
    printf("-----------------------------------------\n");
    printf("|        欢迎使用奶茶点餐叫号系统        |\n");
    printf("-----------------------------------------\n");
    while(1){
        printf("\n饮品管理\n");
        printf("*****************************************\n");
        printf("*              1、新增饮品              *\n");
        printf("*              2、查看饮品              *\n");
        printf("*              3、修改饮品              *\n");
        printf("*              4、删除饮品              *\n");
        printf("*              0、返回主界面            *\n");
        printf("*****************************************\n");
        printf("请输入功能编号(0-4):");
        scanf("%d",&fnum);
        switch(fnum){
        case 1:
            {
                cout<<"请输入要录取的饮品总数"<<endl;
                int e;
                cin>>e;
                AddDrink(ddd,e);
                WriteDrinkData(ddd);
                system("pause");
                system("cls");
            }
            break;
        case 2:
            {
                //ReadDrinkData(ddd);
                Print(ddd);
                WriteDrinkData(ddd);
                system("pause");
                system("cls");
            }
            break;
        case 3:
            {
                Revise(ddd);
                WriteDrinkData(ddd);
                system("pause");
                system("cls");
            }
            break;
        case 4:
            {
                Delete(ddd);
                WriteDrinkData(ddd);
                system("pause");
                system("cls");
            }
            break;
        case 0:
            {
             WriteDrinkData(ddd);
             system("pause");
             system("cls");
            return;
            }
            break;
        }
    }
}

void CalMenu(){
DrinkList ddd;
    //ReadDrinkData(ddd);
    OrderList O;
    InitQueue(O);
    //ReadOrderData(O);
    printf("\n");
    printf("-----------------------------------------\n");
    printf("|        欢迎使用奶茶点餐叫号系统        |\n");
    printf("-----------------------------------------\n");
    int fnum;
    while(1){
        printf("\n统计分析\n");
        printf("*******************************************\n");
        printf("*               1、畅销排行               *\n");
        printf("*               2、销售数据               *\n");
        printf("*               3、修改销售数据           *\n");
        printf("*               0、返回主界面             *\n");
        printf("*******************************************\n");
        printf("请输入功能编号(0-3):");
        scanf("%d",&fnum);
        switch(fnum){
        case 1:
            {
               ReadDrinkData(ddd);
               BubbleSor(ddd);
            }

            break;
        case 2:
            {
                ReadDrinkData(ddd);
                ReadOrderData(O);
                statistic(ddd,O);
            }

            break;
        case 3:
            {
                ReadDrinkData(ddd);
                ReviseSale(ddd);
            //WriteDrinkData(ddd);
            }
            break;
        case 0:
            {
            //WriteDrinkData(ddd);
            system("cls");
            return;
            }
            break;
        }
    }
}

void MainMenu(){
    DrinkList ddd;
    ReadDrinkData(ddd);
    OrderList O;
    InitQueue(O);
    ReadOrderData(O);
    printf("-----------------------------------------\n");
    printf("|        欢迎使用奶茶点餐叫号系统        |\n");
    printf("-----------------------------------------\n");
    int fnum;
    while(1){
        printf("*****************************************\n");
        printf("*              1、自助点餐              *\n");
        printf("*              2、叫号取餐              *\n");
        printf("*              3、饮品管理              *\n");
        printf("*              4、统计分析              *\n");
        printf("*              0、退出                  *\n");
        printf("*****************************************\n");
        printf("请输入功能编号(0-4):");
        scanf("%d",&fnum);
        int i=0;
        switch(fnum){
        case 1:
            {
                ReadDrinkData(ddd);
                ReadOrderData(O);
                enter(O,ddd);
            }
            break;
        case 2:
            {
                ReadOrderData(O);
                outer(O);
            }
            break;
        case 3:
            system("cls");
            Drinkinfo_menu();
            break;
        case 4:
            system("cls");
            CalMenu();
            break;
        case 0:
            {
            WriteDrinkData(ddd);
            printf("Good bye!");
            exit(-2);  //退出系统
            }
            break;
        }
    }
}

4、orderqueue.cpp

#include <iostream>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"
using namespace std;

/*点餐 叫号相关函数实现*/
void InitQueue(OrderList &O)//初始化
{
    O.base= new order [MAXQSIZE];
    O.front=O.rear=0;
    O.length=0;
}

void enter(OrderList &O,DrinkList &ddd)//num代表要输入的饮料的数量
{
//    ReadDrinkData(ddd);
//    ReadOrderData(O);

    int num;
    int Ordernum;
    int ret;

    if(ddd.length==0)
    {
        cout<<"该店铺饮料为空,请添加商品种类!"<<endl;
        system("pause");
        system("cls");
        return;
    }

    for(int i=0;i<ddd.length;i++)//打印
    {
        cout<<"饮品序号:"<<ddd.elem[i].num
        <<"  饮品名称:"<<ddd.elem[i].name
        <<"  饮品口味:"<<ddd.elem[i].taste
        <<"  饮品价格:"<<ddd.elem[i].price
        <<"  饮品销量:"<<ddd.elem[i].count
        <<endl;
    }

    cout<<"请输入要订餐的杯数:"<<endl;
    cin>>num;
    cout<<"-----------------------------------------"<<endl;
    //输入预定的饮品
    for(int i=0;i<num;i++)
    {
        if((O.rear+1)%MAXQSIZE!=O.front)
        {
            cout<<"请输入要预定第"<<i+1<<"杯饮品的序号:"<<endl;
            cin>>Ordernum;

            for(int j=0;j<=ddd.length;j++)
            {
                if(j==ddd.length)
                {
                    cout<<"请重新选择,并输入饮品对应的正确序号!"<<endl;
                    break;
                }

                if(Ordernum==ddd.elem[j].num)
                {
                    ret=j;
                    ddd.elem[ret].count++;

                    strcpy(O.base[O.rear].name,ddd.elem[ret].name);
                    strcpy(O.base[O.rear].taste,ddd.elem[ret].taste);

                    WriteDrinkData(ddd);//记录饮品数量
                    WriteOrderData(O.base[O.rear]);//记录订单消息

                    O.rear=(O.rear+1)%MAXQSIZE;
                    O.length++;

                    break;
                }
            }
        }
        else
        {
            cout<<"该队列已满,请勿点餐!"<<endl;
            return;
        }
    }
    return;
}

void outer(OrderList &O)
{
    //ReadOrderData(O);
    if(O.front==O.rear)
    {
        cout<<"队列为空!请勿进行出队操作!"<<endl;
        return;
    }
    else
    {
        int num;//出队数量
        cout<<"请输入即将出队的饮品数量"<<endl;
        cin>>num;

        if(num>(O.rear-O.front+MAXQSIZE)%MAXQSIZE)
            {
                cout<<"该队列内的饮品数量为:"<<(O.rear-O.front+MAXQSIZE)%MAXQSIZE<<" 请勿输入大于该数量的值"<<endl;

                return;
            }

        for(int i=0;i<num;i++)
        {

            cout<<"第"<<i+1<<"杯饮品已制作完成:"<<O.base[O.front].name<<"  口味:"<<O.base[O.front].taste<<endl;

            O.front=(O.front+1)%MAXQSIZE;

            //WriteOrderData(O.base[O.front]);
        }
        cout<<"剩余杯数为:"<<(O.rear-O.front+MAXQSIZE)%MAXQSIZE<<endl;
    }

    return;

}

5、rwfile.cpp

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"
using namespace std;


//饮品信息的读写
void WriteDrinkData(DrinkList L) {
    FILE *file = fopen("drink.txt", "w+");  //文件已存在,无需更改此语句
    int i=0;
    int size=sizeof(Drink);
    if (file != NULL) {
        for(i=0;i<L.length;i++) fwrite(&L.elem[i],sizeof(L.elem[i]),1,file);
    }
    else{
        printf("文件打开失败!");
    }
    fclose(file);
}

 // 从饮品文件读取信息到L
void ReadDrinkData(DrinkList &L){
    FILE *file = fopen("drink.txt", "r");
    int i=0;
    L.length=0;
    int size=sizeof(Drink);
    if (file != NULL) {
        while(!feof(file)){
            if (fread(&L.elem[i], 1, size, file)) {
                i++;
                L.length++;
            }
        }
        fclose(file);
    }
}

/*
    待设计好订单结构之后,自行修改以下两个函数,主要关注形参类型、变量名及类型等。

*/

void WriteOrderData(order ord) {
    FILE *file = fopen("order.txt", "a+"); //追加
    int size=sizeof(order);
    if (file != NULL) {
        fwrite(&ord,size,1,file);
    }else{
        printf("文件打开失败!");
    }
    fclose(file);
}

  //从订单文件读取信息到订单表OL
void ReadOrderData(OrderList &OL){
    FILE *file = fopen("order.txt", "r");
    int i=0;
    OL.length=0;
    int size=sizeof(order);
    if (file != NULL) {
        while(!feof(file)){
            if (fread(&OL.base[i], 1, size, file)) {
                i++;
                OL.length++;
            }
        }
        fclose(file);
    }
}

6、salesanalysis.cpp

#include <iostream>
#include <stdio.h>
#include <string.h>
#include "menu.h"
#include "file.h"
#include "cuslist.h"
#include "orderqueue.h"

/* 实现销售统计函数,包括畅销排行、销售数据统计、修改销售数据 */
void statistic(DrinkList &ddd,OrderList O)//统计销量
{
    ReadDrinkData(ddd);
    ReadOrderData(O);

    for(int i=0;i<ddd.length;i++)
    {
        ddd.elem[i].sale=ddd.elem[i].price*ddd.elem[i].count;

        WriteDrinkData(ddd);

        cout<<"饮品"<<ddd.elem[i].name<<"的销量为:"<<ddd.elem[i].count<<" 销售额为:"<<ddd.elem[i].sale<<endl;
    }

    double sum=0;

    for(int i=0;i<ddd.length;i++)
    {
        sum=sum+ddd.elem[i].sale;
    }

    cout<<"平均销售量为:"<<sum/O.length<<endl;
}

void ReviseSale(DrinkList &ddd)//修改销量
{
    ReadDrinkData(ddd);
    int num;
    cout<<"请输入要修改饮品的序号:"<<endl;
    cin>>num;
        for(int i=0;i<=ddd.length;i++)//
        {
            if(i==ddd.length)
            {
                cout<<"想要修改的值不存在!"<<endl;
                return;
            }

            if(num==ddd.elem[i].num)//找到情况下
            {
                int select;int ret=i;
                cout<<ddd.elem[i].name<<"的饮品销量如下:"<<endl;
                cout<<ddd.elem[i].count<<endl;

                cout<<"请输入要修改的销量"<<endl;
                cin>>ddd.elem[ret].count;

                WriteDrinkData(ddd);

                return;
            }
        }
        WriteDrinkData(ddd);
}

void BubbleSor(DrinkList &ddd)//销量排行
{
    ReadDrinkData(ddd);
    cout<<"销量排行(从大到小):"<<endl;

    DrinkList ccc=ddd;
    DrinkList bbb;

    for(int i=0;i<ccc.length-1;i++)
    {
        for(int j=0;j<ccc.length-i-1;j++)
        {
            if(ccc.elem[j].count<ccc.elem[j+1].count)
            {
                bbb.elem[0]=ccc.elem[j];
                ccc.elem[j]=ccc.elem[j+1];
                ccc.elem[j+1]=bbb.elem[0];
            }
        }
    }

    for(int i=0;i<ccc.length;i++)
    {
        cout<<"饮品"<<ccc.elem[i].name<<"的销量为:"<<ccc.elem[i].count<<endl;
    }
}

本人菜鸡一枚,请各位大佬轻喷!有不足麻烦各位指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值