⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.cpp

📁 这是本人的课程设计,自动售货机,内容有文件的操作,向量与迭代器的使用,友元函数的使用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -