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

📄 家电管理.cpp

📁 这是用c++制作的一个家电管理系统
💻 CPP
字号:


//                               链表的维护与文件形式的保存   
//   以链表结构的有序表表示某商场家电部的库存模型。当有货 或进货时需要对该链表及时进行维护。
//   每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需 将以文件形式保
//   存的数据恢复成链表结构的有序表。       
//   链表结点的数据域包括家电名称、品牌、单价、和数量,以单价的升序体现链表的有序性。
//   程序功能包括:初始化、创 建表、插入、删除、更新数,查询及链表数据与文件之间的  转换问题。

         
//   作者  陆玥玥  学号06010811  


#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <string.h>
#include <fstream.h>
const int MaxSize=50;
struct goods
{
	char name[15];  //家电名称 
	char code[5];  //家电品牌 
	int value;    //单价 
	int num;     //数量
	    
};
typedef goods ElemType;
//运算符重载
int operator==(const ElemType&e1,const ElemType&e2)
{
	return(strcmp(e1.name,e2.name)==0&&strcmp(e1.code,e2.code)==0);
}
int operator<(const ElemType&e1,const ElemType&e2)
{
	return(strcmp(e1.name,e2.name)==-1&&strcmp(e1.code,e2.code)==-1);
}
ostream & operator<<(ostream& ostr,const ElemType& x)
{
	ostr<<x.name<<setw(12)<<x.code<<setw(12)<<x.value<<setw(12)<<x.num<<endl;
	return ostr;
}
#include"link.h"
//数据流的输入输出
void SetupGoodsList(LNode *&L,char *fname)
{
	ifstream ifstr(fname,ios::nocreate);
	if(!ifstr)
	{
		cerr<<"File 'goods' not found!"<<endl;
		exit(1);
	}
	goods g;
	while(ifstr>>g.name)
	{
		ifstr>>g.code>>g.value>>g.num;
		InsertRear(L,g);
	}
	ifstr.close();
}
void WriteGoodsFile(char*fname,LNode* &L)
{
	ofstream ofstr(fname);
	if(!ofstr)
	{
		cerr<<"File 'goods' no create!"<<endl;
		exit(1);
	}
	goods g;
	int n=ListSize(L);
	for(int i=1;i<=n;i++)
	{
		g=GetElem(L,i);
		ofstr<<g.name<<" "<<g.code<<" "<<g.value<<" " <<g.num<<endl;
		
	}
	ofstr.close();
}
void main()
{

 loop1:	LNode *L1;
	InitList(L1);
	SetupGoodsList(L1,"goods.txt");
    OrderSort(L1);
	int i,flag=1;
	while (flag)
	{
		cout<<"             家电库存管理"<<endl;
		cout<<"       ***************************"<<endl;
		cout<<"       *  1 打印                 *"<<endl;
		cout<<"       *  2 更新库存表中的记录   *"<<endl;
		cout<<"       *  3 删除库存表中的记录   *"<<endl;
		cout<<"       *  4 插入新的的纪录       *"<<endl;
        cout<<"       *  5 查找库存表中的纪录   *"<<endl;
		cout<<"       *  6 保存操作后的库存表   *"<<endl;
		cout<<"       *  7 退出                 *"<<endl;
		cout<<"       ***************************"<<endl;
		
		cout<<"请输入你的选择:";
		cin>>i;
		while (i<1||i>7)
		{
			cout<<"重新输入选择(1~7):";
			cin>>i;
		}
		cout<<endl;
		switch (i)
		{
		case 1:      //打印库存表的内容
			cout<<"家电库存表内容如下:"<<endl;
			TraverseList(L1);
			break;
		case 2:      //修改纪录的单价或者数量
			goods g;
			int x,price,number;
    loop2:	cout<<"输入待修改的家电的名称和品牌 :";
			cin>>g.name>>g.code;
			if(Find(L1,g))     //判断库存表中是否由此商品
			{
				int flag1=1;
				while(flag1)
				{
					cout<<" 1.更改商品单价:"<<endl;
				    cout<<" 2.更改商品数量:"<<endl;
					cout<<" 3.退出更改:"<<endl;
				    cout<<" 请选择需要更改的项目:"<<endl;
				    cin>>x;
                     while (x<1||i>3)
					 {
			           cout<<"重新输入选择(1~3):";
		        	  cin>>i;
					 }
		             cout<<endl;
			      switch(x)
				  {
			         case 1:
					      cout<<"请输入新的单价:";
					      cin>>price;
				          g.value=price;
				          Update(L1,g);
						  OrderSort(L1);
                          cout<<"单价更改后的纪录为:"<<endl;
                          TraverseList(L1);
					    break;
			         case 2:
						int temp;
                        loop: cout<<"请输入进出货物数量(进货用正数,出货用负数):";
				        cin>>number;
                        temp=g.num;
						g.num+=number;
				        if(g.num<0)   //判断库存中是否有那么多货可以取出
						{
						  int y;
					      cout<<"库存中没有这么多货!"<<endl;
						  cout<<"你需要再次输入出货量请按0,若要退出对货物的数量更改请按1:"<<endl;
						  cin>>y;
 						  if(!y)
						  {
							  g.num=temp;
                              goto loop;
						  }
						  else
						  { 
							  g.num=temp;
							  break;
						  }
						}
					  Update(L1,g);
                      cout<<"数量更改后的纪录为:"<<endl;
                      TraverseList(L1);
				      break;
					 case 3:
						 cout<<"更改操作处理结束,请重新选择其他操作!"<<endl;
						 flag1=0;

				  }
				}
			}
            else
			{
				int z;
			   cout<<"没有此商品,重新输入需要更新的商品请按0,需要在库存表中另外插入此种商品请按1:";
			   cin>>z;
				   if(!z)
			        goto loop2;
				   else
					   goto loop3;
			}
			cout<<"更改后的家电纪录为:"<<endl;
			TraverseList(L1);
			break;
		case 3:  //删除纪录
			cout<<"输入待删除商品的名称和品牌:";
			cin>>g.name>>g.code;
			if(Find(L1,g))
			{
				Delete(L1,g);
			    cout<<"删除此商品后的库存表为:"<<endl;
			}
			else
              cout<<"您输入的商品不存在!"<<endl;
            TraverseList(L1);
			break;
		case 4:    //插入纪录
    loop3:  cout<<"请输入需要插入的商品的名称和品牌:";
			cin>>g.name>>g.code;
			if(Find(L1,g))//万一插入的商品已经在库存表中存在,则回到主菜单选择更新操作
				cout<<"库存中已有此纪录请选择2 更新纪录:"<<endl;
			else
			{
				cout<<"请输入新商品的单价和数量:";
				cin>>g.value>>g.num;
				Insert(L1,g);
				OrderSort(L1);
			}
			cout<<"插入新商品后的库存表为:"<<endl;
            TraverseList(L1);
			break;
        case 5:   //查找纪录
            cout<<"输入需查找的商品的名称和品牌:";
			cin>>g.name>>g.code;
			if(Find(L1,g))
			{
				cout<<"已经找到,此商品的单价和数量如下:"<<endl;
                cout<<g.name<<" "<<g.code<<" "<<g.value<<" "<<g.num<<endl;
			}
			else
			  cout<<"库存表中没有此家电!"<<endl;
			break;
		case 6:  //把修改后的库存表存入goods.txt中
			WriteGoodsFile("goods.txt",L1);
			cout<<"新的库存表已经保存!"<<endl;
		    TraverseList(L1); 
            break;
		case 7:   //退出操作
			char save;
			cout<<"是否要保存上述操作?(Y/N):";//万一用户没有保存的一种提醒
			cin>>save;
            while(save!='y'&&save!='n')
			{
			   cout<<"请重新输入选择(Y/N):";
			   cin>>save;
			}
            if(save=='y')
			{
				char esc;
				WriteGoodsFile("goods.txt",L1);
				cout<<"已经保存!是否真的要退出(Y/N):";//万一用户想继续操作的一种挽回
				cin>>esc;
				if(esc=='y')
				{ cout<<"本次处理结束,再见!"<<endl;
			        flag=0;
				}
				else
				{
					goto loop1;
				}  
			}
			else
			{
				char esc;
				cout<<"是否真的要退出?(Y/N):";
		        cin>>esc;
	         	if(esc=='y')
				{ cout<<"本次处理结束,再见!"<<endl;
			        flag=0;
				}
				else
				{
					goto loop1;
				}  
			}
		}
	}
}


⌨️ 快捷键说明

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