头文件.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;
}
}
本人菜鸡一枚,请各位大佬轻喷!有不足麻烦各位指出,谢谢!