物品库存管理源代码.docx
- 文档编号:29862576
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:36
- 大小:22.08KB
物品库存管理源代码.docx
《物品库存管理源代码.docx》由会员分享,可在线阅读,更多相关《物品库存管理源代码.docx(36页珍藏版)》请在冰豆网上搜索。
物品库存管理源代码
/********物品库存管理********/
//fileoperations
#include
#include
#include
#include
#include
#include
#include
#include
#include
(1)
#defineMAXNUM10//运用宏定义,规定品牌数最大为10
time_ttimer;
inlineistream&Flush(istream&stream)//清空缓冲区的函数。
可以解决过多输入
{
stream.clear();
intchars_to_skip=stream.rdbuf()->in_avail();
returnstream.ignore(chars_to_skip);
}
classBrand//品牌类
{
private:
charbrnd_name[20];//品牌名称
intBrand_code;//品牌代号
intquantity;//数量
floatbrnd_price;//价格
public:
Brand(){quantity=0;strcpy(brnd_name,"0");}
friendclassCItem;//定义友元类
friendclassCNode;
friendclassCList;
};
classCItem//品种类
{
private:
charItem_name[10];//品种名称
intItem_code;//品种代号
charcolour[10];//颜色
intquantity;//数量
Brandbrnd[MAXNUM];//最多MAXNUM个品牌
intnBrnd;//品牌的数量( public: CItem(){strcpy(Item_name,"\0");quantity=0;nBrnd=0;}//缺省构造函数 CItem(char*name){strcpy(Item_name,name);Item_code=0;}//用品种名称构造 CItem(intcode){Item_code=code;strcpy(Item_name,"\0");}//用品种代码构造 intSetItem(intn=0);//置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件 char*GetItemName(){returnItem_name;}//返回品种名 intGetItemCode(){returnItem_code;}//返回品种代码 intCompare(CItem&);//比较品种名称,供查找用,比较结果为1,0 intCompareCode(CItem&);//比较品种代码,比较结果为1,0 voidShow();//显示品种数据 voidOutModify();//出货,修改结点中的数据部分 voidInModify();//已有商品,再次进货,修改结点中的数据部分 }; classCNode//结点类 { private: CNode*pNext;//指向链表下一结点的指针 CItem*pData;//用于指向数据类的指针 public: CNode(){pData=0;pNext=0;}//结点构造函数 CNode(CNode&node)//用于拷贝的构造函数 { pData=node.pData; pNext=node.pNext; } voidInputData(CItem*pSal){pData=pSal;}//输入数据 voidShowNode(){pData->Show();}//输出结点中的数据 CItem*GetData(){returnpData;}//返回下一结点的指针 friendclassCList;//定义链表类为友元类 }; classCList//定义链表类 { protected: CNode*pHead;//链表头结点指针 public: CList(){pHead=0;} ~CList(){DeleteList();} voidAddNode(CNode*pnode);//首部添加结点 CNode*DeleteNode(CNode*);//删除一个指定的结点,返回该结点的指针 CNode*LookUp(CItem&);/*查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找 到返回0*/ voidShowList();//打印整个链表 voidDeleteList();//删除整个链表 CNode*GetListHead(){returnpHead;}//返回链表首结点 CNode*GetListNextNode(CNode*);//返回链表指定结点的下一个结点 voidInsert(CNode*);//按代码的顺序插入一个结点 }; classcustomer//仿品牌类增加客户类 { private: charcustomer_name[10];//客户姓名 intcustomer_code;//客户代码 charcustomer_tel[15];//客户电话 charcustomer_Item_name[10];//客户选择的品种名称 charcustomer_brnd_name[20];//客户选择的品牌名称 voidgetdata(); voidshowdata(); public: voidadd();//新增 voidremove();//移除 voidsearch();//搜索 voidshowab();//显示 friendclassCItem;//定义友元类 friendclassBrand; }; intCItem: : Compare(CItem&pitem)//比较品种名称,供查找用,比较结果为1,0 { intn; n=strcmp(Item_name,pitem.Item_name);//两个字符串相等,n=0 if(n! =0)return0; elsereturn1; } intCItem: : CompareCode(CItem&pitem)//比较品种代码,比较结果为1,0 { return(Item_code==pitem.Item_code); } intCItem: : SetItem(intn)//置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件 { cout<<"\n输入商品名称: "; Flush(cin);//把输入流固化,不会对程序造成太大的影响 cin.getline(Item_name,20); cout<<"\n输入商品代码: "; cin>>Item_code; cout<<"\n输入商品颜色: "; Flush(cin); cin.getline(colour,20); cout<<"\n输入品牌数: "<<"(不超过"< cin>>nBrnd; //循环实现品牌数据的输入,count为商品总数 for(inti=0,count=0;i { cout<<"\n输入品牌"< cout<<"\n输入品牌名称: "; Flush(cin); cin.getline(brnd[i].brnd_name,20); cout<<"\n输入品牌代码: "; cin>>brnd[i].Brand_code; cout<<"\n输入数量: "; cin>>brnd[i].quantity; cout<<"\n输入价格: "; cin>>brnd[i].brnd_price; voidcustomer: : getdata(); count+=brnd[i].quantity; } quantity=count; if(n==1) { ofstreamfile("进货清单.txt",ios: : out|ios: : ate); if(! file) { cout<<"错误,不能打开文件."; getch(); exit (1); } timer=time(NULL); file< file<<"品种"<<"\t"<<"代码"<<"\t"<<"颜色"<<"\n"; file< file<<"品牌"<<"\t"<<"代码"<<"\t"<<"数量"<<"\t"<<"价格"<<"\n"; for(inti=0;i { file< < } file<<"\n"; file.close(); } return1; } voidCItem: : Show()//显示品种数据 { cout<<"品种"<<"\t"<<"代码"<<"\t"<<"颜色"<<"\n"; cout< cout<<"品牌"<<"\t"<<"代码"<<"\t"<<"数量"<<"\t"<<"价格"<<"\n"; for(inti=0;i { cout< < } cout<<"\n\n"< system("pause");//命令行上输出一行类似于“pressanykeytoexit”的字,等待用户按一个键,然后返回 cout<<"\n"; } voidCItem: : OutModify()//出货,修改结点中的数据部分 { intchoice,count,chuhuo; floatprice=0;//chuhuo为出货量,price为总价格 int*num; num=newint[nBrnd]; if(quantity==0) { cout<<"数量为0."; exit (1);//随时结束程序 } for(inti=0;i { num[i]=brnd[i].quantity; } cout<<"品牌"<<"\t"<<"代码"<<"\t"<<"数量"<<"\t"<<"价格"<<"\n"; for(i=0;i { cout< < } cout<<"\n\n"; cout<<"输入数字选择出货商品或按0退出.\n"; cin>>choice; while(choice>=1&&choice<=nBrnd) { cout<<"输入商品数量: "; cin>>count; while(count>brnd[choice-1].quantity) { cout<<"库存不足,重新输入: "; cin>>count; } brnd[choice-1].quantity-=count; cout<<"出货成功,按0退出或按数字继续出货.\n"; cin>>choice; } ofstreamfile("出货清单.txt",ios: : out|ios: : ate); if(! file) { cout<<"错误,不能打开文件."; getch(); exit (1); } timer=time(NULL); file< file<<"品种"<<"\t"<<"代码"<<"\t"<<"颜色"<<"\n"; file< file<<"品牌"<<"\t"<<"代码"<<"\t"<<"价格"<<"\t"<<"出货量"<<"\n"; for(i=0;i { if(chuhuo=num[i]-brnd[i].quantity) { price=chuhuo*brnd[i].brnd_price; file< < } } file<<"总价格为: "< delete[]num; file.close(); } voidCItem: : InModify()//已有商品,再次进货,修改结点中的数据部分 { charname[20]; charchoice; intcount,jinhuo=0; intprenBrnd=nBrnd;//原先品牌数 intn=1;//用于判断是否继续进货 intflag=0;//用于判断是否新品牌 int*num; num=newint[prenBrnd]; for(inti=0;i { num[i]=brnd[i].quantity; } while(n) { cout<<"\n\n输入品牌名称: "; Flush(cin); cin.getline(name,20); for(inti=0;i { if(strcmp(brnd[i].brnd_name,name)==0) { cout<<"\n\n输入进货数量: "; cin>>count; brnd[i].quantity+=count; quantity+=count; flag=1; break; } } if(flag==0) { strcpy(brnd[nBrnd].brnd_name,name); cout<<"\n输入品牌代码: "; cin>>brnd[nBrnd].Brand_code; cout<<"\n输入数量: "; cin>>brnd[nBrnd].quantity; cout<<"\n输入价格: "; cin>>brnd[nBrnd].brnd_price; quantity+=brnd[nBrnd].quantity; nBrnd++; } cout<<"\n继续进货: y/n"; cin>>choice; if(choice=='y'||choice=='Y') n=1; elsen=0; } ofstreamfile("进货清单.txt",ios: : out|ios: : ate); if(! file) { cout<<"错误,不能打开文件."; getch(); exit (1); } timer=time(NULL); file< file<<"品种"<<"\t"<<"代码"<<"\t"<<"颜色"<<"\n"; file< file<<"品牌"<<"\t"<<"代码"<<"\t"<<"价格"<<"\t"<<"进货量"<<"\n"; for(i=0;i { if(jinhuo=brnd[i].quantity-num[i]) { file< < } } if(nBrnd>prenBrnd) { for(i=prenBrnd;i { file< < } } file<<"\n\n"; delete[]num; file.close(); } voidCList: : AddNode(CNode*pnode)//首部添加结点 { if(pHead==0) { pHead=pnode; pnode->pNext=0; } else { pnode->pNext=pHead; pHead=pnode; } } CNode*CList: : DeleteNode(CNode*pnode)//删除一个指定的结点,返回该结点的指针 { if(pnode==pHead)//删除的结点是链表的首结点 { pHead=pnode->pNext; pnode->pNext=0; } else { CNode*p=pHead; while(p->pNext! =pnode) p=p->pNext; p->pNext=pnode->pNext;//删除结点后将前后两个结点再连结起来 pnode->pNext=0; } return(pnode); } CNode*CList: : LookUp(CItem&pitem)/*查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找 到返回0*/ { CNode*pn=pHead; if(pitem.GetItemCode()==0) { while(pn) { if(pn->pData->Compare(pitem))returnpn;//按品种名称查找 pn=pn->pNext; } } else { while(pn) { if(pn->pData->CompareCode(pitem))returnpn;//按品种代码查找 pn=pn->pNext; } } return0; } voidCList: : ShowList()//打印整个链表 { CNode*p=pHead; while(p) { p->pData->Show(); p=p->pNext; } } voidCList: : DeleteList()//删除整个链表 { CNode*p,*q; p=pHead; while(p) { deletep->pData; q=p; p=p->pNext; deleteq; } } CNode*CList: : GetListNextNode(CNode*pnode)//返回链表指定结点的下一个结点 { returnpnode->pNext; } voidCList: : Insert(CNode*pnode)//按代码的顺序插入一个结点 { CNode*p1,*p2; if(pHead==0) { pHead=pnode; pnode->pNext=0; } elseif(pHead->pData->GetItemCode()>=pnode->pData->GetItemCode()) { pnode->pNext=pHead; pHead=pnode; } else { p2=p1=pHead; while(p2->pNext&&p2->pData->GetItemCode() { p1=p2; p2=p2->pNext; } if(p2->pData->GetItemCode() { p2->pNext=pnode; pnode->pNext=0; } else { pnode->pNext=p2; p1->pNext=pnode; } } } voidcustomer: : getdata()//获取客户资料 { cout<<"\n输入客户名称: "; cin.getline(customer_name,10); cout<<"\n输入客户代码: "; cin>>customer_code; cout<<"\n输入客户电话: "; cin>>customer_tel; cout<<"\n输入客户选择的品种名称: "; Flush(cin); cin.getline(customer_Item_nam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物品 库存 管理 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)