C++大作业 商品库存管理系统

 利用c++做的课程设计(链表),在DEV C++等编译器上可通过

运行完毕后可自动保存信息输出文件

觉得还可以的话请点赞收藏哦

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<windows.h>
using namespace std;

enum GoodsType//商品类别
{
	Food=1,//食品
    Cosmetic,//化妆品
	Commodity,//日用品
	Drink//饮料
};

struct Date
{
	int year;
	int month;
	int day;
};

struct Goods//商品基本信息
{
	string code;//商品编号
	string name;//商品名称
	string brand;//生产厂家
	double price;//商品价格
	int num;//商品数量
	GoodsType type;//商品类别
	Date date;//入库时间
	Goods *next;
};


class GoodsManage//商品管理
{
public:
	GoodsManage();
	~GoodsManage(){}
	void DisplayMainMenu();//主菜单显示
	void AddGoodsInfo();//添加商品信息
	void DisplayGoodsInfo();//浏览商品信息
	void SearchByCode();//按照商品编号搜索商品信息
	void SearchByName();//按照商品名称搜索商品信息
    void DeleteGoodsInfo();//删除商品信息
	void SellGoodsInfo();//出售商品信息
	void SaveGoodsInfo();//保存商品信息
private:
	int amount;//商品量
	int DeleteAmount;
	Goods *head;
	Goods *DeleteHead;
};

GoodsManage::GoodsManage()//定义构造函数
{
	amount=0;
	DeleteAmount=0;
	head=new Goods;
	head->next=NULL;
	DeleteHead=new Goods;
	DeleteHead->next=NULL;
}

void GoodsManage::DisplayMainMenu()//定义主菜单函数
{
	cout<<" ━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆━═☆\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ┋                   欢迎使用商品库存管理系统                     ┋\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【商品进货】…(a)                       ┋\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【商品编辑】…(b)                       ┋\n";
	cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【商品删除】…(c)                       ┋\n";
	cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【按照编号查询】…(d)                   ┋\n";
	cout<<" ┋                                                                ┋\n";
	cout<<" ┋                        【按照名称查询】…(e)                   ┋\n";
	cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【商品出货】…(h)                       ┋\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【商品统计】…(i)                       ┋\n";
	cout<<" ┋                                                                ┋\n";
    cout<<" ┋                        【信息保存】…(j)                       ┋\n";
	cout<<" ┋                                                                ┋\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ┋                          退出系统…(k)                         ┋\n";
    cout<<" ┋                                                                ┋\n";
    cout<<" ━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆┈━═☆━═☆\n";
    cout<<"\n                      请输入你要进行的操作编号:";           
}


void GoodsManage::AddGoodsInfo()//定义添加商品信息函数
{
	char c,c1;
	Goods *tail=head,*p;
	bool flag;
	cout<<"          ☆☆☆☆☆☆现在进行商品信息的添加☆☆☆☆☆☆          "<<endl;
	while(tail->next!=NULL)
		tail=tail->next;//令tail指向链表中最后一个节点
	do
	{
		flag=0;
		p=new Goods;
		cout<<"请选择商品类别:"<<endl;
		cout<<"1.食品 2.化妆品 3.日用品 4.饮料"<<endl;
		cout<<"请输入相应编号:";
		do
		{
			cin>>c1;
			if(c1>='1'&&c1<='4')//判断用户输入编号是否存在
				flag=1;
			else
			{
				cout<<"您输入的编号不存在!"<<endl;
			    cout<<"请选择正确的商品类别:"<<endl;
			}
		}while(flag==0);//输入编号存在时跳出循环
		if(c1=='1')p->type=Food;
		if(c1=='2')p->type=Cosmetic;
		if(c1=='3')p->type=Commodity;
		if(c1=='4')p->type=Drink;
		cout<<"商品类别("<<p->type<<")"<<endl;//表示商品类别
		cout<<"请输入商品编号: ";
        cin>>p->code;
		do
		{
			Goods *q=head->next;
			while(q!=NULL&&q->code!=p->code)//当q指向NULL或输入的编号与之前编号重复时跳出循环
				q=q->next;
			if(q==NULL)//当p指向NNULL且编号不重复时
				flag=1;
			else//编号重复时
			{
				cout<<"存在该编号的货物!!!请重新输入编号:";
			    cin>>p->code;
			}
		}while(flag==0);
		cout<<"请输入商品名称:";
		cin>>p->name;
		cout<<"请输入生产厂家:"; 
		cin>>p->brand;
		cout<<"请输入商品价格:";
		cin>>p->price;
		cout<<"请输入商品数量:";
		cin>>p->num;
        cout<<"请输入入库时间(年/月/日):";
		cin>>p->date.year>>p->date.month>>p->date.day;
		tail->next=p;//将p插入链表
		p->next=NULL;
		tail=p;
		amount++;//商品量加一
		cout<<"数据输入成功!!!想继续添加吗(y/n):";
		cin>>c;
		while(c!='y'&&c!='n')
		{
			cout<<"指令错误!!!!!<请输入y/n>"<<endl;
		    cout<<"数据添加成功!!!想继续输入吗(y/n):";
			cin>>c;
		}
	}while(c=='y');
	cout<<endl;
	cout<<"……信息处理完毕……"<<endl;
	cout<<"……按任意键返回主菜单……"<<endl;
	getchar();
	getchar();
}

void GoodsManage::DisplayGoodsInfo()//定义商品信息浏览函数
{
	Goods *p=head;
	cout<<"          ☆☆☆☆☆☆现在进行商品信息的浏览☆☆☆☆☆☆          "<<endl;
	cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
		"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
	while(p->next!=NULL)//直到p指向链表中最后一个结点
	{
		p=p->next;
		cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
		cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
		cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
	}
	cout<<endl;
    cout<<"……信息统计完毕……"<<endl;
	cout<<"……按任意键返回主菜单……"<<endl;
	getchar();
	getchar();
}



void GoodsManage::SearchByCode()//按照商品编号查找商品信息
{	
	Goods *p;
	bool flag;
	string FoundCode;
	cout<<"          ☆☆☆☆☆☆现在进行商品信息的查找☆☆☆☆☆☆          "<<endl;
	p=head;
	flag=0;
	cout<<"请输入您要查找的商品编号:";
	cin>>FoundCode;
	   while(p->next!=NULL)
		{
		
				p=p->next;
				if(p->code==FoundCode)//找到相应编号的商品
				{
				 flag=1;
				 cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
		"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
                 cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
		         cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
		         cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
				 break;
				}
		}
	   if(flag==0)
		{
			cout<<"对不起,您查询的商品不存在!!!"<<endl;				
		}
		cout<<endl;
		cout<<"……信息查找完毕……"<<endl;
	    cout<<"……按任意键返回主菜单……"<<endl;
		getchar();
		getchar();
}

void GoodsManage::SearchByName()//按照商品名称查找商品信息
{	
	Goods *p;
	bool flag;
	string FoundName;
	cout<<"          ☆☆☆☆☆☆现在进行商品信息的查找☆☆☆☆☆☆          "<<endl;
		p=head;
		flag=0;
		cout<<"请输入您要查找的商品名称:";
		cin>>FoundName;
		while(p->next!=NULL)
		{
		
				p=p->next;
				if(p->name==FoundName)//找到相应名称的商品
				{
				 flag=1;
				cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
		"商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
                 cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
		cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
		cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
				 break;
				}
		}
		if(flag==0)
		{
			cout<<"对不起,您查询的商品不存在!!!"<<endl;		
		}
		cout<<endl;
		cout<<"……信息查找完毕……"<<endl;
	    cout<<"……按任意键返回主菜单……"<<endl;
		getchar();
		getchar();
}




void GoodsManage::DeleteGoodsInfo()//定义商品信息删除函数
{
	Goods *q=head,*p,*tail=DeleteHead;
	p=new Goods;
	char c;
	string Dename;
	bool flag=0;
	while(tail->next!=NULL)//令tail指向链表中最后一个节点
		tail=tail->next;
	cout<<"          ☆☆☆☆☆☆现在进行商品信息的删除☆☆☆☆☆☆          "<<endl;
	do
	{
		
		cout<<"请输入您要删除的商品名称:";
		cin>>Dename;
		while(q->next!=NULL&&q->next->name!=Dename)//直到q指向链表中最后一个节点或者找到相应名称的商品时跳出循环
			q=q->next;
		if(q->next!=NULL)//找到相应名称的商品
		{
			flag=1;
			cout<<"确认删除吗?<y/n>";
			cin>>c;
			while(c!='y'&&c!='n')
			{
				cout<<"指令错误!!!!<请输入y/n>:";
				cin>>c;
			}
			if(c=='y')
			{  
				p=q->next;
				q->next=q->next->next;//q的下一个节点指向其后的节点
				tail->next=p;
				tail=p;
				tail->next=NULL;//在链表中删除指定节点
				DeleteAmount++;
				amount--;//商品量减一
				cout<<"删除成功!!"<<endl;
			}
			else cout<<"取消成功!!!"<<endl;

		}
		if(flag==0)
		{
			cout<<"对不起,您删除的商品不存在!!!"<<endl;

		}
		cout<<"您想要继续删除吗?(y/n):";
		cin>>c;
		while(c!='y'&&c!='n')
		{
			cout<<"指令错误!!!<请输入y/n>:"<<endl;
			cout<<"您想要继续删除吗?(y/n):";
			cin>>c;
		}
		flag=0;
		q=head;//令q指向链表中第一个结点再次搜索相应名称的商品

	}while(c=='y');
	cout<<endl;
	cout<<"……信息删除完毕……"<<endl;
	cout<<"……按任意键返回主菜单……"<<endl;
	getchar();
	getchar();
}


void GoodsManage::SellGoodsInfo()//定义商品出库函数
{
		int sellNum,year,month,day;
		double sellPrice,sum=0.0,profit=0.0;
	    char c;
		Goods *p;
		bool flag=0;
		string SellName;
		cout<<"          ☆☆☆☆☆☆现在进行商品的出售☆☆☆☆☆☆          "<<endl;
		do
		{
			p=head->next;
			flag=0;
			cout<<"请输入您要出售的商品名称:";
			cin>>SellName;
			while(p->next!=NULL&&p->name!=SellName)
				p=p->next;
			if(p->name==SellName)
			{
				flag=1;
				cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
		        "商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
		  
                cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
		        cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
		        cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
				cout<<"确认出售吗?<y/n>";
				cin>>c;
				while(c!='y'&&c!='n')
				{
					cout<<"指令错误!!!!<请输入y/n>:";
					cin>>c;
				}
				if(c=='y')
				{
					
		            cout<<"请输入出售的商品数量:";
		            cin>>sellNum;
					if(sellNum<=p->num)//库存量充足
					{
						p->num=p->num-sellNum;//计算商品出库后商品的库存量
						cout<<"请输入出售的商品价格:";
						cin>>sellPrice;
						cout<<"请输入出货日期:";
						cin>>year>>month>>day;
						sum=sellNum*sellPrice;//计算销售金额
						profit=sellNum*(sellPrice-p->price);//计算利润
						cout<<"此次销售额为: "<<sum<<endl;
						cout<<"此次利润为: "<<profit<<endl;
						cout<<"出货日期为:"<<year<<"/"<<month<<"/"<<day<<endl;
					}
					else
					{
						cout<<"库存不足!出库失败!"<<endl;
					}	
				}
				else cout<<"取消成功!"<<endl;
			}
			if(flag==0)
			{
				cout<<"对不起,您出售的货物不存在!!"<<endl;

			}
			cout<<"您想要继续出售吗?(y/n):";
			cin>>c;
			while(c!='y'&&c!='n')
			{
				cout<<"指令错误!!!<请输入y/n>:"<<endl;
				cout<<"您想要继续出售吗?(y/n):";
				cin>>c;
			}
		}while(c=='y');
		cout<<endl;
	    cout<<"……出库完毕……"<<endl;
	    cout<<"……按任意键返回主菜单……"<<endl;
		getchar();
		getchar();

}


void GoodsManage::SaveGoodsInfo()//定义商品信息保存函数
{
	 Goods *p=head;
	 cout<<"          ☆☆☆☆☆☆现在进行商品信息的保存☆☆☆☆☆☆          "<<endl;
	 ofstream output("货物信息.txt",ios::out);//定义输出文件"货物信息.txt"
	 if(!output)
	 {
		 cerr<<"打开文件<货物信息.txt>失败!!!"<<endl;
	 }
	 cout<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
		  "商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
	 output<<"商品总量为: "<<amount<<"\n";
     output<<setiosflags(ios::left)<<setw(10)<<"编号"<<setw(16)<<"名称"<<setw(10)<<"生产厂家"<<setw(10)<<"价格"<<setw(10)<<
		  "商品类别"<<setw(10)<<"数量"<<setw(10)<<"入库时间"<<endl;
	 while(p->next!=NULL)
	 {
		 p=p->next;
		 cout<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;
		 cout<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
		 cout<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
		 output<<setiosflags(ios::left)<<setw(10)<<p->code<<setw(16)<<p->name;//在文件中显示相应商品信息
		 output<<setw(10)<<p->brand<<setw(10)<<p->price<<setw(10)<<p->type;
		 output<<setw(10)<<p->num<<p->date.year<<"/"<<p->date.month<<"/"<<p->date.day<<endl;
	 }
	 cout<<endl;
	 cout<<"成功将货物信息保存到<货物信息.txt>"<<endl;
	 cout<<"……信息保存完毕……"<<endl;
	 cout<<"……按任意键返回主菜单……"<<endl;
	 getchar();
	 getchar();
	 output.close();//关闭输出文件
}
int main()//主函数
{
	char c;
	int i=0;
	bool flag=0;
	GoodsManage bm;//定义GoodsManage类对象
	system("color f8");
	cout<<endl<<endl<<endl<<endl<<endl<<endl<<"                  欢迎使用库存管理系统......系统正在加载中";
	Sleep(2000);
	system("cls");//清屏
	bm.DisplayMainMenu();
	for(;;)
	{
		do
		{
			cin>>c;
			if(c>='a'&&c<='k')//判断用户输入编号是否存在
				flag=1;
			else
			{
				cout<<"您输入的编号不存在!"<<endl;
			    cout<<"请选择相应的数字进行操作:"<<endl;
			}
		}while(flag==0);//输入编号存在时跳出循环进行相应操作
		system("cls");//清屏
		switch(c)
		{
		case'a':bm.AddGoodsInfo();
			break;
		case'c':bm.DeleteGoodsInfo();
			break;
		case'd':bm.SearchByCode();
			break;
		case'e':bm.SearchByName();
			break;
		case'h':bm.SellGoodsInfo();
			break;
		case'i':bm.DisplayGoodsInfo();
			break;
		case'j':bm.SaveGoodsInfo();
			break;
		case'k':exit(0);
			break;
		}
		system("cls");
			bm.DisplayMainMenu();
	}
}

  • 6
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
商品库存管理系统是一个常见的商业应用程序,它可以帮助商家追踪他们的库存情况、销售情况和库存成本等。下面是一个简单的C++程序示例,可以实现基本的商品库存管理功能。 ```c++ #include <iostream> #include <string> #include <vector> using namespace std; // 商品类 class Product { public: Product(string name, int quantity, double price) { this->name = name; this->quantity = quantity; this->price = price; } string getName() { return name; } int getQuantity() { return quantity; } double getPrice() { return price; } void setQuantity(int quantity) { this->quantity = quantity; } private: string name; // 商品名称 int quantity; // 商品数量 double price; // 商品价格 }; // 商品库存管理类 class Inventory { public: // 添加商品 void addProduct(Product product) { products.push_back(product); } // 删除商品 void removeProduct(int index) { if (index >= 0 && index < products.size()) { products.erase(products.begin() + index); } } // 获取商品数量 int getProductCount() { return products.size(); } // 获取商品 Product getProduct(int index) { if (index >= 0 && index < products.size()) { return products[index]; } } // 更新商品数量 void updateProductQuantity(int index, int quantity) { if (index >= 0 && index < products.size()) { products[index].setQuantity(quantity); } } private: vector<Product> products; // 商品列表 }; int main() { // 创建商品库存管理对象 Inventory inventory; // 添加商品 inventory.addProduct(Product("商品1", 10, 10.0)); inventory.addProduct(Product("商品2", 20, 20.0)); // 获取商品数量 cout << "商品数量: " << inventory.getProductCount() << endl; // 获取商品 Product product = inventory.getProduct(0); cout << "商品名称: " << product.getName() << endl; cout << "商品价格: " << product.getPrice() << endl; // 更新商品数量 inventory.updateProductQuantity(0, 5); product = inventory.getProduct(0); cout << "更新后商品数量: " << product.getQuantity() << endl; // 删除商品 inventory.removeProduct(0); cout << "删除后商品数量: " << inventory.getProductCount() << endl; return 0; } ``` 这个程序演示了如何创建一个简单的商品库存管理系统,通过Product和Inventory类来处理商品信息和库存信息。你可以根据自己的需求来扩展这个程序,比如添加更多的商品属性、实现更复杂的库存管理功能等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值