物品库存管理源代码.docx
- 文档编号:24000235
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:43
- 大小:22.18KB
物品库存管理源代码.docx
《物品库存管理源代码.docx》由会员分享,可在线阅读,更多相关《物品库存管理源代码.docx(43页珍藏版)》请在冰豆网上搜索。
物品库存管理源代码
/********物品库存管理********/
//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,
friendclassCItem;//定义友元类
friendclassCNode;
friendclassCList;
};
classCItem//品种类
{
private:
charItem_name[10];//品种名称
intItem_code;//品种代号
charcolour[10];//颜色
intquantity;//数量
个品牌MAXNUM最多//Brandbrnd[MAXNUM];
intnBrnd;//品牌的数量( public: CItem(){strcpy(Item_name,\//缺省构造函数 CItem(char*name){strcpy(Item_name,name);Item_code=0;}//用品种名称构造 CItem(intcode){Item_code=code;strcpy(Item_name,\//用品种代码构造 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<<\ 输入商品名称: ; Flush(cin);//把输入流固化,不会对程序造成太大的影响 cin.getline(Item_name,20); cout<<\ 输入商品代码: ; cin>>Item_code; cout<<\ 输入商品颜色: ; Flush(cin); cin.getline(colour,20); cout<<\ 输入品牌数: <<(不超过? ? 塁啎? 尼个); cin>>nBrnd; //循环实现品牌数据的输入,count为商品总数 for(inti=0,count=0;i { cout<<\ 输入品牌? 椼? ? 的数据\n; cout<<\ 输入品牌名称: ; Flush(cin); cin.getline(brnd[i].brnd_name,20); cout<<\ 输入品牌代码: ; cin>>brnd[i].Brand_code; cout<<\ 输入数量: ; cin>>brnd[i].quantity; cout<<\ 输入价格: ; cin>>brnd[i].brnd_price; voidcustomer: : getdata(); count+=brnd[i].quantity; } quantity=count; if(n==1) { 景瑳敲浡映汩? 进货清单.txt,ios: : out|ios: : ate); if(! file) { 潣瑵? 错误,不能打开文件.; getch(); exit (1); } timer=time(NULL); file< 楦敬? 品种? 尼屜屴? 代码? 尼屜屴? 颜色<<\ ; file< ; <<\ ; 价格? 尼屜屴? 数量? 尼屜屴? 代码? 尼屜屴? 品牌楦敬? for(inti=0;i { file< < ; } file<<\ ; file.close(); } return1; } voidCItem: : Show()//显示品种数据 { 潣瑵? 品种? 尼屜屴? 代码? 尼屜屴? 颜色<<\ ; cout< ; 潣瑵? 品牌? 尼屜屴? 代码? 尼屜屴? 数量? 尼屜屴? 价格<<\ ; for(inti=0;i { cout< < ; } cout<<\ \n< system(pause);//命令行上输出一行类似于“pressanykeytoexit”的字,等待用户按一个键,然后返回 cout<<\ ; } voidCItem: : OutModify()//出货,修改结点中的数据部分 { intchoice,count,chuhuo; floatprice=0;//chuhuo为出货量,price为总价格 int*num; num=newint[nBrnd]; if(quantity==0) { 潣瑵? 数量为0.; exit (1);//随时结束程序 } for(inti=0;i { num[i]=brnd[i].quantity; } 潣瑵? 品牌? 尼屜屴? 代码? 尼屜屴? 数量? 尼屜屴? 价格<<\ ; for(i=0;i { cout< < ; } cout<<\ \n; 潣瑵? 输入数字选择出货商品或按0退出.\n; cin>>choice; while(choice>=1&&choice<=nBrnd) { 潣瑵? 输入商品数量: ; cin>>count; while(count>brnd[choice-1].quantity) { 潣瑵? 库存不足,重新输入: ; cin>>count; } brnd[choice-1].quantity-=count; 潣瑵? 出货成功,按0退出或按数字继续出货.\n; cin>>choice; } 景瑳敲浡映汩? 出货清单.txt,ios: : out|ios: : ate); if(! file) { 潣瑵? 错误,不能打开文件.; getch(); exit (1); } timer=time(NULL); file< 楦敬? 品种? 尼屜屴? 代码? 尼屜屴? 颜色<<\ ; file< \n; 楦敬? 品牌? 尼屜屴? 代码? 尼屜屴? 价格? 尼屜屴? 出货量<<\ ; for(i=0;i { if(chuhuo=num[i]-brnd[i].quantity) { price=chuhuo*brnd[i].brnd_price; file< < ; } } 楦敬? 总价格为: < \n; 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输入品牌名称: ; Flush(cin); cin.getline(name,20); for(inti=0;i { if(strcmp(brnd[i].brnd_name,name)==0) { cout<<\ \n输入进货数量: ; cin>>count; brnd[i].quantity+=count; quantity+=count; flag=1; break; } } if(flag==0) { strcpy(brnd[nBrnd].brnd_name,name); cout<<\ 输入品牌代码: ; cin>>brnd[nBrnd].Brand_code; : ; 输入数量cout<<\ cin>>brnd[nBrnd].quantity; cout<<\ 输入价格: ; cin>>brnd[nBrnd].brnd_price; quantity+=brnd[nBrnd].quantity; nBrnd++; } cout<<\ 继续进货: y/n; cin>>choice; if(choice=='y'||choice=='Y') n=1; elsen=0; } 景瑳敲浡映汩? 进货清单.txt,ios: : out|ios: : ate); if(! file) { 潣瑵? 错误,不能打开文件.; getch(); exit (1); } timer=time(NULL); file< 楦敬? 品种? 尼屜屴? 代码? 尼屜屴? 颜色<<\ ; file< \n; 楦敬? 品牌? 尼屜屴? 代码? 尼屜屴? 价格? 尼屜屴? 进货量<<\ ; for(i=0;i { if(jinhuo=brnd[i].quantity-num[i]) { file< < ; } } if(nBrnd>prenBrnd) { for(i=prenBrnd;i { file< < ; } } file<<\ \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<<\ 输入客户名称: ; cin.getline(customer_name,10); cout<<\ 输入客户代码: ; cin>>customer_code; cout<<\ 输入客户电话: ; cin>>customer_tel; cout<<\ 输入客户选择的品种名称: ; Flush(cin); cin.getline(customer_Item_name,10); : ;输入客户选择的品牌名称cout<<\ cin.getline(customer_brnd_name,10); } voidcustomer: : showdata()//显示客户资料 { cout<<\ 客户名称: ; cout< cout<<\ 客户代码: ;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物品 库存 管理 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)