📄 function.cpp
字号:
#include<iostream>
#include"fstream"
#include<windows.h>
#include"class_declaration.h"
#define N 15
double payment; //记录货款
int num; //记录容器元素个数,也就是商品各类的数量
vector<Product>books; //定义一个以product为类型的向量
vector<Product>::iterator point,end_point; //定义一个以product为类型的迭代器
//*****************************************************
void show_menu(const Product & pp) //显示菜单
{
cout<<pp.get_name()<<'\t'<<pp.get_cubage()<<'\t'<<"\t";
cout<<pp.get_price()<<'\t'<<'\t'<<pp.get_amount()<<endl;
}
//*****************************************************
void exit_operate() //退出操作系统
{ cout<<endl;
cout<<"\t********************"<<endl;
cout<<"\t 谢谢惠顾!"<<endl;
cout<<"\t********************"<<endl;
Sleep(5000);
exit(1);
}
//*****************************************************
void input_menu(Product & pp) //自定义菜单
{
int m;
cout<<"请输入菜单:"<<endl;
while(pp.set_menu()) //运用向量把菜单保存在内存中
books.push_back(pp);
num=books.size();
cout<<num<<endl;
cout<<"序号"<<'\t'<<"商品名称"<<'\t';
cout<<"体积(ml)"<<'\t'<<"价格(元)"<<'\t'<<"数量"<<endl;
for(m=0,point=books.begin();point!=books.end();point++,m++)//运用迭代器显示菜单
{ cout<<m+1<<'\t';
show_menu(*point);
}
}
//********************************************************
/* 菜单的文件操作 */
//********************************************************
void save_menu()
{ string n;
cout<<"\n"<<"保菜单请按 1 ,否则请按 0 : ";
cin>>n;
if(n=="1")
{
ofstream outfile("menu.txt",ios::out);
if(!outfile)
{
cout<<"open error!"<<endl;
exit(1);
}
outfile<<num<<endl; //保存容器的大小
for(int i=0;i<num;i++) //保存自定义菜单
{
outfile<<books[i].get_name()<<"\t"<<books[i].get_cubage()<<"\t";
outfile<<books[i].get_price()<<"\t"<<books[i].get_amount()<<endl;
}
outfile.close();
cout<<"保存成功!"<<endl;
}
else cout<<"您没有保存菜单!"<<endl;
}
//******************************************************
void read_menu(Product & pp)
{ int i;
string n;
int c;
double p;
int a;
ifstream infile("menu.txt",ios::in);
if(!infile)
{
cout<<"open error!"<<endl;
exit(1);
}
infile>>num;
cout<<"\t商品种类有"<<num<<"种"<<endl;
for(i=0;i<N;i++) //从文件中读取容器的大小和菜单
{
infile>>n>>c>>p>>a; //把它们放进内存中
books.push_back(pp);//它将元素添加到矢量末尾.
//它将负责内在管理,增加矢量的长度
//便之能够容纳新的成员
books[i].set_menu2(n,c,p);
books[i].set_amount(a);
}
cout<<endl;
infile.close();
cout<<"序号"<<'\t'<<"商品名称"<<'\t'<<"体积(ml)"<<'\t';
cout<<"价格(元)"<<'\t'<<"数量"<<endl;
for(i=0,point=books.begin();i<num;point++,i++)
{ cout<<i+1<<'\t';
show_menu(*point);
}
}
//***********************************************************
void add_product(Product & pp)
{
int m;
while(pp.set_menu()) //运用向量把菜单保存在内在中
{
books.push_back(pp);
//num=books.size();
num++;
}
system("cls");
cout<<"序号"<<'\t'<<"商品名称"<<'\t';
cout<<"体积(ml)"<<'\t'<<"价格(元)"<<'\t'<<"数量"<<endl;
for(m=0,point=books.begin();point<books.end();++point,m++)//运用迭代器显示菜单
{ cout<<m+1<<'\t';
show_menu(*point);
}
save_menu();
}
//***********************************************************
void modify_menu(Product & pp)
{
int i;
char n,k;
int m;
while(k)
{ //修改菜单
system("cls");
cout<<"序号"<<'\t'<<"商品名称"<<'\t'<<"体积(ml)";
cout<<'\t'<<"价格(元)"<<'\t'<<"数量"<<endl;
for(i=0,point=books.begin();i<num;point++,i++)
{ cout<<i+1<<'\t';
show_menu(*point);
}
cout<<"\n删除商品请按 1"<<endl;
cout<<"增加商品请按 2"<<endl;
cout<<"增加商品数量请按 3"<<endl;
cout<<"减少商品数量 4"<<endl;
cout<<"返回上一级菜单请按 0 "<<endl;
cout<<"\n请输入: ";
cin>>n;
i=0;
while(n!='1'&&n!='2'&&n!='3'&&n!='4'&&n!='0'&&i<=2)
{
if(i==2) //检测输入是否错误
{
cout<<"\n对不起,您连续3次输入错误,退出系统!\n"<<endl;
exit_operate();
}
cout<<"对不起,您输入错误,请重新输入! ";
i++;
cin>>n;
}
switch(n)
{
case '0':break;
case '1':{ while(n!='0')
{ //删除商品操作
if(num==1)
{
cout<<"\n对不起,自动售贷机不能为空!"<<endl;
n='0';
}
if(num>15)
{
cout<<"\n对不起,售货机已最多只能存15种商品!"<<endl;
cout<<"系统将自动保存刚才添加的商品!"<<endl;
n='0';
}
if(n=='1')
{
cout<<"\n请输入商品的序号:";
cin>>m;
while(m>num)
{
cout<<"\n对不起,无法找到商品的序号,请重新输入商品的序号! ";
cin>>m;
}
books.erase(books.begin()+m-1,books.begin()+m);
//用函数erase()来删除商品
--num; //记录删除后的商品各类的数量
//books.pop_back();//删除最后一个元素
//问题:删除后怎样把向量末尾指针提前
system("cls");
cout<<"\n修改后的菜单:"<<endl;
cout<<'\n'<<"序号"<<'\t'<<"名称"<<'\t';
cout<<"体积"<<'\t'<<"价格"<<'\t'<<"数量"<<endl;
for(i=0,point=books.begin();i<num;point++,i++)
{ cout<<i+1<<'\t';
show_menu(*point);
}
cout<<"\n现有"<<num<<"种商品!"<<endl;
cout<<"\n继续删除商品请按 1 ,退出请 0 :"<<" ";
cin>>n;
}
}
if(n=='0')
save_menu();}break; //保存修改后的菜单
case '3':{ int n,q;
cout<<"请输入商品序号: ";
cin>>n;
cout<<"请输入增加的数量: "; //增加商品数量请按操作
cin>>q;
if(books[n-1].get_amount()+q>15)
{cout<<"商品数量最多是15,超过最大数量!"<<endl;
break;}
else {books[n-1].set_amount(books[n-1].get_amount()+q);
save_menu();} //保存添加后商品数量
}break;
case '4':{
int n,q;
cout<<"请输入商品序号: "; //减少商品数量操作
cin>>n;
cout<<"请输入减少的数量: ";
cin>>q;
if(books[n-1].get_amount()-q<0)
{
cout<<"要减少的数量大于剩余的数量"<<endl;
break;
}
else {books[n-1].set_amount(books[n-1].get_amount()-q);
save_menu();} //保存减少后剩余商品数量
}break;
case '2':{
point=books.begin();
for(point=books.end();point>books.begin()+num;point--)
books.pop_back();
add_product(pp);
}break;
}
cout<<"\n继续操作请按 1 ,退出系统请按 0 : ";
{ cin>>k;
if(k=='0')
exit_operate() ;
}
}
}
//*******************************************************
int initialize_menu()
{
num=N;
struct merchdise
{
char *name;
int cubage;
double price;
int amout;
};
merchdise att[N]={
"百事可乐",350,2.0,15, //菜单初始化
"百事可乐",600,2.5,15,
"可口可乐",350,2.2,15,
"可口可乐",600,2.5,15,
"统一奶茶",350,2.7,15,
"王老吉 ",310,3.5,15,
"咖啡可乐",600,2.5,15,
"漓泉纯生",600,4.5,15,
"营养快线",500,3.8,15,
"统一绿茶",500,2.5,15,
"茉莉清茶",500,2.5,15,
"矿泉水 ",596,1.2,15,
"鲜橙多 ",450,2.7,15,
"伊利牛奶",250,2.5,15,
"汇源果汁",600,4.5,15
};
ofstream outfile("menu.txt",ios::out);
if(!outfile)
{
cout<<"open error!"<<endl;
exit(1);
}
outfile<<num<<endl;
for(int i=0;i<num;i++) //以结构体形式输入菜单
{
outfile<<att[i].name<<"\t"<<att[i].cubage<<"\t";
outfile<<att[i].price<<"\t"<<att[i].amout<<endl;
}
outfile.close();
return 0;
}
//*************************************************
void take_payment()
{
string n;
int i,m;
read_payment();
system("cls");
cout<<"现有货款金额:"<<payment<<"元"<<endl;
cout<<"全部取出请按 1 ,部分取出请按 2 , 退出请按 0 : ";
cin>>n;
while(n!="0"&&n!="1"&&n!="2"&&i<=2)
{
if(i==2)
{
cout<<"\n对不起,您连续3次输入错误,退出系统!\n"<<endl;
exit_operate();
}
cout<<"对不起,您输入错误,请重新输入! ";
i++;
cin>>n;
} //管理员取出货款操作
if(n=="1")
{ cout<<"现有金额: "<<payment<<"元"<<endl;
payment=payment-payment; //取出全部货款
save_payment();
cout<<"系统正在处理,请等待..."<<endl;
for(long l=0;l<=250000000;l++)
;
cout<<"操作成功! 货款已全部取出!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -