#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
using namespace std;
class menu
{
int num; //菜式的编号
string name; //菜名
float price; //价格
string kind; //种类
int sort; //数量
public:
void num(int i); //录入编号
void getname(string Name); //录入名字
void getprice(float Price); //录入价格
void getkind(string Kind); // 录入类别
void getsort(int Sort); //录入点菜数量
void menudisplay(); //菜谱显示
void selectdisplay(); //输出菜单
float returnnum() //返回编号
{ return num; }
string returnname() //返回菜名
{ return name; }
float returnprice() //返回菜式单价
{ return price; }
string returnkind() //返回菜式类别
{ returnkind; }
int returnsort() //返回点菜数量
{ return sort; }
}
void Cmenu::getnum(int i)
{
num=i;
} //菜式编号录入函数
void cmenu::getname(string Name) //菜名录入
{ name=Name; }
void cmenu::getprice(float Price) //菜价录入
{ price=Price; }
void cmenu::getkind(string Kind) //类别录入
{ kind=Kind; }
void cmenu::getsort(int Sort) //数量录入
{ sort=Sort; }
void cmenu::menudisplay() //菜单信息显示
{ cout<<setw(3)<<num<<setw(22)<<name<<stew(16)<<kind<<setw(16)kind<<
price<<endl; }
void Cmenu::selectdisplay() //输出菜单
{ cout<<setw(3)<<num<<setw(24)<<name<<setw(16)<<kind<<setw(16)<<kind<<
setw(16)<<price<<setw(19)<<sort<<endl; }
class array
{
public:
void getnum(int Num); //初始化num的函数
void getsort(int Sort); //初始化sort的函数
int returnnum() //返回num的函数
{ return num; }
int returnsort() //返回sort的函数
{ return sort; }
private:
int sort,num;
}
void array::getnum(int Num) //初始化num的函数体
{ num=Num; }
void array::getsort(int Sort) //初始化sort的函数体
{ sort=Sort; }
void main()
{
int i,d,m,q,z,sort,b;
char j;
int g;
int Num;
string Name,Kind;
float Price,Point,sum=0;
Cmenu food[30]; //创建Cmenu类的对象数组
ifstream f1("menu.txt"); //文件输入菜单信息
for(j=0;j<30;j++)
{
f1>>Num;
f1>>Kind;
f1>>Name;
f1>>Price;
food[j].num(Num);
food[j].kind(Kind);
food[j].name(Name);
food[j].price(Price);
food[0].num(1);
food[0].kind("星冰乐");
food[0].name("摩卡星冰乐");
food[0].price(25);
food[1].num(2);
food[1].kind("星冰乐");
food[1].name("奶油星冰乐");
food[1].price(26);
food[2].num(3);
food[2].kind("星冰乐");
food[2].name("焦糖星冰乐");
food[2].price(25);
food[3].num(4);
food[3].kind("星冰乐");
food[3].name("咖啡星冰乐");
food[3].price(28);
food[4].num(5);
food[4].kind("甜品");
food[4].name("马卡龙");
food[4].price(30);
food[5].num(6);
food[5].kind("甜品");
food[5].name("焦糖布丁");
food[5].price(15);
food[6].num(7);
food[6].kind("甜品");
food[6].name("手工巧克力");
food[6].price(30);
food[7].num(8);
food[7].kind("甜品");
food[7].name("曲奇");
food[7].price(18);
food[8].num(9);
food[8].kind("甜品");
food[8].name("萨芭雍");
food[8].price(22);
food[9].num(10);
food[9].kind("蛋糕");
food[9].name("提拉米苏");
food[9].price(23);
food[10].num(11);
food[10].kind("蛋糕");
food[10].tname("起司蛋糕");
food[10].price(25);
food[11].num(12);
food[11].kind("蛋糕");
food[11].name("酸奶乳酪蛋糕");
food[11].price(24);
}
f1.close();
cout<<"o(╯□╰)oo(╯□╰)oo(╯□╰)oo(╯□╰)o星爸爸欢迎你o(╯□╰)oo(╯□╰)oo(╯□╰)oo(╯□╰)o"<<endl;
cout<<"
1--------显示菜单信息
2--------分类查找
3--------下单
"<<endl;
cout<<"( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) ( ⊙o⊙ ) "<<endl;
if(q==0) //显示菜单里所有的商品名字
{
cout<<"-------------------------------菜单---------------------------"<<endl;
cout<<"编号 名字 类别 单价/元 "<<endl;
for(j=0;j<30;j++)
food[j].menudisplay();
cout<<"-------------------------------------------------------------"<<endl;
}
if(q==2) // 在菜单里按类查找
{
cout<<"1--------------星冰乐"<<endl;
cout<<"2--------------甜品"<<endl;
cout<<"3--------------蛋糕"<<endl;
cin>>z;
if(z>3)
{
system("cls");
cout<<"请输入正确序号"<<endl;
}
switch(z)
{
case 1: //输出星冰乐类
for(j=0;j<30;j++)
{
if(food[j].returnkind()=="星冰乐")
food[j].menudisplay();
}
break;
case 2: //输出甜品类
for(j=0;j<30;j++)
{
if(food[j].returnkind()=="甜品")
food[j].menudisplay();
}
break;
case 3: //输出蛋糕类
for(j=0;j<40;j++)
{
if(food[j].returnkind()=="蛋糕")
food[j].menudisplay();
}
break;
}
}
if(q>3)
{
system("cls");
cout<<"请输入正确序号"<<endl;
}
if(q==3) break; //退出进入点菜环节
}
cout<<"你要下单的数量?"<<endl; //下单
cin>>i;
array *a=new array[i] ; //动态创建i个array类的数组来储存编号和数量
for(j=0;j<i;j++)
{
cout<<"请选择第"<<j+1<<"个商品的编号:"<<endl;
cin>>id; //输入每个编号
cout<<"请输入数量:"<<endl;
cin>>sort; //输入所点商品的数量
a[j].num(d);
a[j].sort(sort);
}
for(;;) //对定的菜进行操作
{
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" 1--------增加商品 "<<endl;
cout<<" 2--------删除一个菜 "<<endl;
cout<<" 3--------输出点菜信息并保存 "<<endl;
cout<<" 4--------计算消费金额 "<<endl;
cout<<" 0--------退出系统 "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cin>>b;
if(b==1)
{
cout<<"你要增加什么食物?"<<endl; //增加多少个
cin>>g;
array *p=new array[i];
for(j=0;j<i;j++)
{
p[j].num(a[j].returnnum());
p[j].sort(a[j].returnsort());
}
delete [] a;
i=i+g;
a=new array[i];
for(j=0;j<i-g;j++)
{ a[j].num(p[j].returnnum());
a[j].sort(p[j].returnsort());
}
delete [] p;
for(j=i-g;j<i;j++)
{
cout<<"请输入增加的一个商品的编号和数量:"<<endl;
cin>>d;
cin>>sort;
a[j].num(d);
a[j].sort(sort);
}
cout<<"增加点菜成功。"<<endl;
}
if(b==2)
{
cout<<"请输入要删除的商品的编号:"<<endl; //删除操作
cin>>d;
for(j=0;j<i;j++)
{
if(a[j].returnnum()==d)
{
m=j;
for(j=m;j<i;j++)
{
a[j]=a[j+1];
}
i--;
cout<<"删除成功。"<<endl;break;
}
}
if(j==i)
{
cout<<"你没有点这个!!错误。"<<endl;
}
}
if(b==3) //输出所点商品的信息
{
char baocun;
cout<<"编号 名字 类别 单价/元 数量"<<endl;
for(m=0;m<i;m++)
{
for(j=0;j<30;j++)
{
if(a[m].returnnum()==food[j].returnnum())
{ food[j].sort(a[m].returnsort());
food[j].selectdisplay();
}
}
}
cout<<"是否保存并退出?"<<endl;
cout<<"请按y(是)或n(否)"<<endl;
cin>>baocun;
if(baocun=='y')
{ ofstream file("select.txt");
file<<"编号 名字 类别 单价/元 数量"<<endl;
for(m=0;m<i;m++)
{
for(j=0;j<30;j++)
{
if(a[m].returnnum()==food[j].returnnum())
{ file<<food[j].returnnum()<<" "<<food[j].returnname()<<" "<<food[j].returnkind()<<
" "<<food[j].returnprice()<<" "<<food[j].returnsort()<<endl;
}
}
}
file.close();
cout<<"已成功保存!"<<endl;
break;}
if(b==4) {
sum=0;
cin>>q;
for(m=0;m<i;m++)
{
for(j=0;j<30;j++)
{
if(a[m].returnnum()==food[j].returnnum())
{ food[j].gsort(a[m].returnsort());
sum=sum+food[j].returnprice()*food[j].returnsort(); //计算所点总金
}
}
}
if(q>1) {system("cls");cout<<"请输入正确序号"<<endl;}
if(q==1)
{
cout<<"总的金额是:"<<sum<<"元"<<endl;}
}
}
if(b==0)
{system("cls"); //退出
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"*****************谢谢使用************谢谢使用****************谢谢使用****************"<<endl;
cout<<endl;
cout<<endl;
break;}
if(b>4) {system("cls");cout<<"请输入正确序号"<<endl;}
}
}
这是主界面窗口
这是全部商品显示
这是下单界面
这是下单确认输出界面
这是按分类查找界面
一开始看到题目的时候,因为自己之前好奇了一下看了后面第九章的内容,所以我立马感觉到这是要类与对象来实现商品的分类、储存与输出功能。在加上之前所学的结构体,和第十章的多重继承。但在编写的过程中慢慢出现许多问题,像对象的指定不符合(这个是用翻译直译的导致我也不知道问题究竟是哪里!!),在查阅了资料后,终于把前面的40多行对象确定下来。后来在软件专业朋友的协助下,慢慢调试,修改终于写出来如下版本。但是还有一个问题实现不了。当在操作界面按4的时候,不能直接输出消费金额,只有执行了3输出商品后,按4才会输出金额,不知道问题出现在哪里。通过这次课程设计,我明白我们所学的东西只是皮毛,我们要不断开拓我们的知识面,才能适应以后在学习和工作中出现的各种问题。