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

📄 goodsapp.cpp

📁 一个不错库存管理算法
💻 CPP
字号:
//Goods, list, listIterator类使用示例

#include <iostream.h>
#include "goods.h"
#include "list_link.h"

void init(list<Goods> &lst)
{	
	//用list::add()建表
	int m,flag;
	listiterator<Goods>  iterlst(lst);
	Goods gds;
	do {
		cout<<"请再输入结点数(>0):"; cin>>m;
	}while (m<=0);
	for (;m>0;m--) {
		cin>>gds;
		while(gds.GetValue()<=0){
			cout<<"请输入结点数据(数量应大于0):";
			cin>>gds;
		}
		//用遍历器判定表中是否已经存在该名称的货物
		for (flag=0,iterlst.init();!flag&&!iterlst;++iterlst) 
			if (iterlst().GetName()==gds.GetName()) {
				flag=1; break;
			}
		if (flag) {
			//表中已经存在该货物名称,可作数量相加
			cout<<gds.GetName()<<"在本库存已经存在,是否增加数量?(y表示增加数量)";
			char yorn='n';
			cin>>yorn;
			if (yorn=='y'||yorn=='Y') 
				iterlst=iterlst()+gds.GetValue();
				//调用(1)Goods Goods::operator+(int cnt);
				//    (2)void Goods::operator=(Goods &v);
				//请分析Goods中对+和=的重载是否必要,可否不要?
		}
		else  iterlst.addafter(gds);
	}
	cout<<"当前结点数据:"<<endl;
	for (iterlst.init();!iterlst;++iterlst) {
		cout<<iterlst()<<endl;
	}
}

void query(list<Goods> &lst)
{
    int flag;
	char c;
	string g;
	listiterator<Goods>  iter(lst);
    if(!iter)
	{
		cout<<"本店现有货品: "<<endl;
		do{
		    for(iter.init();!iter;++iter)
	 	    cout<<iter()<<endl;
	        cout<<"请输入要查询的货品: ";
	        cin>>g;
	        for (flag=0,iter.init();!flag && !iter;++iter)
				if(iter().GetName()==g)
				{
					flag=1;break;
				}
				if(flag)
				{
					cout<<iter()<<endl;
                    cout<<"是否继续查找?(Y继续,N结束)";
				}
				else{
			        cout<<"对不起,本店没有你要的货品,我们已经记录了你的需求,请你明天来采购!谢谢!"<<endl;
		            cout<<"是否继续查找?(Y继续,N结束)";
				}cin>>c;
		}while(c=='Y'||c=='y');
	}
	else 		
		cout<<"对不起,仓库无存货 ";
}

void input(list<Goods> &lst)
{
    int flag,i;
	char c;
	Goods g;
	string s;
	listiterator<Goods>  iter(lst);
    cout<<"本店现有货品: "<<endl;
	do{
		for (iter.init();!iter;++iter) 
		   cout<<iter()<<endl;
	       cout<<"请输入进货货品的名称: ";
		   cin>>s;
		   cout<<"请输入数量:";
		   cin>>i;
     	for (flag=0,iter.init();!flag&&!iter;++iter)
//		   if (iter().GetName()==g.GetName()) 
		   if (iter().GetName()==s) 
		   {
			   flag=1;break;
		   }
		   if(flag)
		   {
//                iter=iter()+g.GetValue();
                 iter=iter()+i;
				 cout<<"现有存货: ";
				 cout<<iter();
				 cout<<"是否继续进货?(Y继续,N结束)";
		   }
		   else
		   {
			   cout<<"您输入的物品名称在本库现有的库存还没有,是否增加货品?(y表示继续,n表示结束)"<<endl;
			   char n;
			   cin>>n;
			   if(n=='Y'||n=='y')
			   {
				  cout<<"请输入进货货品的名称: ";
		          cin>>s;
		          cout<<"请输入数量:";
		          cin>>i;
				  Goods g(s,i);
				  iter.addafter(g);
		          cout<<"是否继续进货?(Y继续,N结束)";
			   }
		}
		   cin>>c;
	}while(c=='Y'||c=='y');
}

void output(list<Goods> &lst)
{
    int flag,i;
	char c;
	Goods g;
	string s;
	listiterator<Goods>  iter(lst);
	do{
		cout<<"本店现有货品:"<<endl;
		for (iter.init();!iter;++iter) 
			cout<<iter()<<endl;
		    cout<<"请输入出货";
			cin>>s;
			cout<<"请输入数量:";
			cin>>i;
		for (flag=0,iter.init();!flag&&!iter;++iter) 
//			if (iter().GetName()==g.GetName())
			if (iter().GetName()==s)
			{
				flag=1; break;
			}
			if(flag)
//               if(iter().GetValue()>=g.GetValue())
               if(iter().GetValue()>=i)
			   {
//				  iter=iter()-g.GetValue();
				  iter=iter()-i;
                  cout<<iter();
			   }
			   else cout<<"库存量不足,不能出货"<<endl;
			   else cout<<"库存中无此物品,不能出货"<<endl;
               cout<<"是否继续出货(y继续,n结束)";
			   cin>>c;
	}while(c=='Y'||c=='y');
}

void del(list<Goods> &lst)
{
    int flag;
	char c;
	string g;
	listiterator<Goods>  iter(lst);
    do{
		cout<<"本店现有货品:"<<endl;
		for (iter.init();!iter;++iter) 
			cout<<iter()<<endl;
		    cout<<"请输入销货货品名称:";
		    cin>>g;
		for (flag=0,iter.init();!flag&&!iter;++iter) 
			if (iter().GetName()==g) 
			{
				flag=1; break;
			}
			if(flag)
			   if(iter().GetValue()==0)
				  iter.removecurrent();
			   else cout<<"现存货品存货未清空,不能销货!"<<endl;
			else cout<<"库存中无此物品,不能销货!"<<endl;
			cout<<"是否继续销货(y继续,n结束)";		
		    cin>>c;
	}while(c=='Y'||c=='y');
}

void main(){
	list<Goods>  linklist;
	int m=0,flag,choice;
	cout<<"*库存信息管理系统*"<<endl;
	cout<<"请先对库存数据进行初始化!"<<endl;
	do {
		cout<<"*库存信息管理系统*"<<endl;
		cout<<"请选择操作:"<<endl;
		cout<<"0 --------- 退出本系统"<<endl;
		cout<<"1 --------- 初始化库存数据"<<endl;
		cout<<"2 --------- 查询"<<endl;
		cout<<"3 --------- 进货"<<endl;
		cout<<"4 --------- 出货"<<endl;
		cout<<"5 --------- 销货"<<endl;
		cout<<"请输入您的选择:"; cin>>choice;
		switch (choice) {
		case 0 : flag=0; break;
		case 1 : if (!m) {init(linklist); m=1; }
				 else {
					 cout<<"你已经进行了初始化处理,重新初始化将失去原有数据,继续吗?(y表示进行初始化)";
					 char yorn='n';
					 cin>>yorn;
					 if (yorn=='y'||yorn=='Y') init(linklist);
				 }
				break;
		case 2 : if (m) query(linklist);
				 else cout<<"请先进行数据初始化处理!"<<endl;
				 break;
		case 3 : if (m) input(linklist); 
				 else cout<<"请先进行数据初始化处理!"<<endl;
				 break;
		case 4 : if (m) output(linklist);
				 else cout<<"请先进行数据初始化处理!"<<endl;
		  		 break;
		case 5 : if (m) del(linklist);
				 else cout<<"请先进行数据初始化处理!"<<endl;
				 break;
		default: cout<<"对不起,没有对应操作,请重新选择!"<<endl;
		}
	}while(flag);
	cout<<"谢谢您使用本系统,再见!"<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -