//食堂菜谱管理
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
struct Cai{//结构体:菜名+价格
string caiming;
int price;
};
class A{//相关操作类
private:
Cai *Menu0;//菜单
Cai *Menu1;//账单
int Num;
public:
A(string caishuzu[],int prishuzu[],int num){//构造函数:传入结构体数组、数组长度 组成菜单
Num=num;
Menu0=new Cai[100];
for(int i=0;i<Num;i++){//菜单赋初值
Menu0[i].caiming=caishuzu[i];
Menu0[i].price=prishuzu[i];
}
Menu1=new Cai[20];
for(int j=0;j<20;j++){//账单赋初值
Menu1[j].caiming="";
Menu1[j].price=NULL;
}
}
void paixu(){//选择排序 选择最大的价格放在最前面
Cai *line=new Cai[Num];
int i;
for(i=0;i<Num;i++){
line[i].caiming=Menu0[i].caiming;
line[i].price=Menu0[i].price;
}
int max;
int j;
string t1; int t2;
for(i=0;i<Num;i++){
max=i;
for(j=i;j<Num-1;j++){
if(line[max].price<line[j+1].price ){
t1=line[j+1].caiming;
line[j+1].caiming=line[max].caiming;
line[max].caiming=t1;
t2=line[j+1].price;
line[j+1].price=line[max].price;
line[max].price=t2;
}
}
}
cout<<"按价格降序排列:"<<endl;
cout<<setw(16)<<"菜名:"<<setw(16)<<"价格:"<<endl;
for(j=0;j<Num;j++){
cout<<setw(16)<<line[j].caiming<<setw(14)<<line[j].price<<endl;
}
}
void add0(string cai1,int price1){//菜单增加菜
int count;
for(int i=0;i<Num;i++){
if(cai1==Menu0[i].caiming){
count++;
}
}
if(count==0){
Menu0[Num].caiming=cai1;
Menu0[Num].price=price1;
Num++;
}
else{
cout<<"已存在该菜"<<endl;
}
}
void del0(int n){//菜单减少菜
for(int i=n-1;i<Num-1;i++){
Menu0[i].caiming=Menu0[i+1].caiming;
Menu0[i].price=Menu0[i+1].price;
}
Num--;
}
void menushow0(){//保存到 d:\\菜单.txt 并显示菜单
ofstream file("d:\\菜单.txt");
file<<setw(16)<<"编号:"<<setw(16)<<"菜名:"<<setw(16)<<"价格:"<<endl;
int j=0;
for(int i=0;i<Num;i++){
file<<setw(14)<<i+1<<setw(18)<<Menu0[i].caiming<<setw(14)<<Menu0[i].price<<endl;
}
file.close();
ifstream file1("d:\\菜单.txt");
string s;
while( getline(file1,s) ){
cout<<s<<endl;
}
file1.close();
}
void fix(int i,string cai1,int price1){//修改菜单
Menu0[i-1].caiming=cai1;
Menu0[i-1].price=price1;
}
void fin(int x){//按价格查询
int count=0;
for(int i=0;i<Num;i++){
if(Menu0[i].price==x){
cout<<Menu0[i].caiming<<" ";
count++;
}
}
if(count==0) cout<<"没有该价格的菜"<<endl;
cout<<endl;
}
int add1(int n,int &num){//账单增加菜 返回价格
int count=0;
for(int i=0;i<num;i++){
if(Menu0[n-1].caiming==Menu1[i].caiming)
count++;
}
if(count==0){
Menu1[num].caiming=Menu0[n-1].caiming;
Menu1[num].price=Menu0[n-1].price;
num++;
return Menu1[num-1].price;
}
else{
cout<<"已存在该菜"<<endl;
return 0;
}
}
int del1(int n,int num){//账单减少菜 返回价格
if(n>num) cout<<"没有该菜"<<endl;
int m=Menu1[n-1].price;
for(int i=n-1;i<Num-1;i++){
Menu1[i].caiming=Menu1[i+1].caiming;
Menu1[i].price=Menu1[i+1].price;
}
num--;
return m;
}
void menushow1(int num,int sum){//保存到 d:\\账单.txt 并显示账单
ofstream file("d:\\账单.txt");
file<<setw(17)<<"菜名:"<<setw(16)<<"价格:"<<endl;
int j=0;
for(int i=0;i<num;i++){
file<<setw(17)<<Menu1[i].caiming<<setw(13)<<Menu1[i].price<<endl;
}
file.close();
ifstream file1("d:\\账单.txt");
string s;
while( getline(file1,s) ){
cout<<s<<endl;
}
file1.close();
}
};
void mainshow(){//主界面
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━";
cout<<" 《主界面》 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━┓ "<<endl;
cout<<" ┃ 1--------显示菜单 ┃ "<<endl;
cout<<" ┃ 2--------修改菜单 ┃ "<<endl;
cout<<" ┃ 3--------价格排序 ┃ "<<endl;
cout<<" ┃ 4--------点菜操作 ┃ "<<endl;
cout<<" ┃ 5--------输出账单并保存 ┃ "<<endl;
cout<<" ┃ 0--------退出系统 ┃ "<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━┛ "<<endl;
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<endl;
}
void fun1show(){//修改菜单界面
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━";
cout<<" 《修改菜单界面》 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━┓ "<<endl;
cout<<" ┃ 1--------菜单增加菜 ┃ "<<endl;
cout<<" ┃ 2--------菜单减少菜 ┃ "<<endl;
cout<<" ┃ 3--------修改菜单 ┃ "<<endl;
cout<<" ┃ 0--------返回上一层 ┃ "<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━┛ "<<endl;
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<endl;
}
void fun2show(){//点菜界面
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━";
cout<<" 《点菜界面》 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━┓ "<<endl;
cout<<" ┃ 1--------按价格查询 ┃ "<<endl;
cout<<" ┃ 2--------账单增加菜 ┃ "<<endl;
cout<<" ┃ 3--------账单减少菜 ┃ "<<endl;
cout<<" ┃ 0--------返回上一层 ┃ "<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━┛ "<<endl;
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<endl;
}
int main(){
string caishuzu[12]={"麻辣豆腐","烧茄子","香辣肉丝","锅包肉","蛋炒饭","扬州炒饭","火腿炒饭","鱿鱼炒饭","刀削面","羊肉面","热干面","手擀面"};
int prishuzu[12]={8,10,15,15,5,6,6,7,5,8,5,6};
A b(caishuzu,prishuzu,12);
int x1,x2,x3,x4,x5,x6,x7,x8;
string cai2;int price2;
int sum=0,num=0;
string cai3;int price3;
while(1){
system("cls"); //清屏操作
mainshow();
cin>>x1;
switch(x1){
case 1://显示菜单
system("cls"); //清屏操作
b.menushow0();
system("pause");//按任意键继续
break;
case 2://修改菜单
system("cls");
fun1show();
while(1){
cin>>x2;
if(x2==0){ system("cls"); break; }
switch(x2){
case 1://菜单增加菜
cout<<"请输入菜名+价格"<<endl;
cin>>cai2>>price2;
b.add0(cai2,price2);
system("pause");
break;
case 2://菜单减少菜
cout<<"请输入菜名编号"<<endl;
cin>>x3;
b.del0(x3);
system("pause");
break;
case 3://修改菜单信息
cout<<"请输入修改菜的编号+菜名+价格:";
cin>>x4>>cai3>>price3;
b.fix(x4,cai3,price3);
system("pause");
break;
default :
cout<<"请输入正确序号"<<endl;
system("pause");
break;
}
}
break;
case 3://价格将序排列
system("cls");
b.paixu();
system("pause");
break;
case 4://点菜
system("cls");
fun2show();
while(1){
cin>>x5;
if(x5==0){ break; }
switch(x5){
case 1://按价格查询
cout<<"请输入菜价"<<endl;
cin>>x6;
b.fin(x6);
system("pause");
break;
case 2://账单增加菜
cout<<"请输入菜名编号"<<endl;
cin>>x7;
sum+=b.add1(x7,num);
system("pause");
break;
case 3://账单减少菜
cout<<"请输入菜的编号"<<endl;
cin>>x8;
sum=sum-b.del1(x8,num);
num--;
system("pause");
break;
default :
cout<<"请输入正确序号"<<endl;
system("pause");
break;
}
}
break;
case 5://输出账单并保存
system("cls");
b.menushow1(num,sum);
system("pause");
break;
case 0://退出
exit(0);
break;
default :
cout<<"请输入正确序号"<<endl;
system("pause");
system("cls");
break;
}
}
return 0;
}