C物品库存管理系统

上传人:痛*** 文档编号:98858826 上传时间:2022-05-30 格式:DOC 页数:13 大小:75KB
收藏 版权申诉 举报 下载
C物品库存管理系统_第1页
第1页 / 共13页
C物品库存管理系统_第2页
第2页 / 共13页
C物品库存管理系统_第3页
第3页 / 共13页
资源描述:

《C物品库存管理系统》由会员分享,可在线阅读,更多相关《C物品库存管理系统(13页珍藏版)》请在装配图网上搜索。

1、word实验容1程序功能介绍用文件系统实现的物品库存管理程序。一种商品的品种里面包括三个品牌,以品种为单位,可以实现商品品种的添加、删除、查找、显示等功能。2课程设计要求1组成商品品种的品牌不限数量,设置一个最大值比如10,增加一个成员变量指示品牌的具体数量。商品品种的数量是每个品牌的数量之和。2设计输出每日进货与出货的统计表,要求进货与出货分别为两个文本文件,清单上列有进出货物的时间、品种描述,具体品牌的进出货数量,如果是出货清单,在每笔出货的清单后还要有该次提取货物的总价格。3商品品种以品种代码的顺序存放。3程序设计思想该设计比拟复杂,要对原程序做较大的修改,首先是数据的存放形式,因为要求

2、数据按代码的顺序存放,并且进出货时对数据的各个组成成员都要做较大的修改。如果要用文件的形式存放,那么文件的读写就非常频繁,而且要使用大量的临时文件,因此建议使用链表的形式存放数据,在程序开始运行时读取固定文件中的数据,程序运行时全部数据都在存进展操作。在程序运行完毕前再将链表中的数据存放在原来的文件中,供下次运行程序时读取。建议首先将文件读取这局部程序调试好,这样在调试程序时就不用每次都从键盘输入数据了,可以节省大量的时间。同时,对链表中结点的操作有很多典型的程序可以参考,不同的结点只是数据局部类型不同,所以只要在上面稍加修改就可以使用。1)类的封装由于数据的存放形式使用链表的形式,所以对于程

3、序的很多操作实际上都是要求对链表进展一系列处理。其中吧Citem类作为一个结点,因此包含了大量对链表进展操作的函数,为了满足程序的完整性与可读性,应将对链表操作的所有程序封装在一起。 class Brand /品牌类 . friend class CItem; /定义品种类为友元类; class ode /结点类 . friend class CList; /定义链表类为友元类;注:省略局部详见源程序代码与课程设计教材提示局部2程序功能菜单的设置程序主题采用菜单项选择项的形式,输入相应的菜单项选择项后程序可以反复运行,而其中还要求3.4.5.6.项各有一个菜单,分别是:按照商品品种名称和按照商

4、品代码进展操作。 &物品库存管理系统& * 1.添加商品品种 2.显示商品品种 3.查询商品 4.删除商品 5.商品出库 6.商品进库 0.退出系统 *4设计中所负责的局部商品的出库与入库局部int CItem:SetItem(int n) /置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件coutn输入商品名称:;Flush(cin);cin.getline(Item_name,20);coutItem_code;coutn输入商品颜色:;Flush(cin);cin.getline(colour,20);coutn输入品牌数:(不超过MAXnBrnd;/循环实现品牌数据的输

5、入,count为商品总数for(int i=0,count=0;inBrnd;i+)coutn输入品牌i+1的数据n;coutn输入品牌名称:;Flush(cin);cin.getline(brndi.brnd_name,20);coutbrndi.Brand_code;coutbrndi.quantity;coutbrndi.brnd_price;count+=brndi.quantity;quantity=count;if(n=1)ofstream file(进货清单.txt,ios:out|ios:ate);if(!file)cout错误,不能打开文件.;getch();exit(1);

6、timer=time(NULL);filectime(&timer);file品种t代码t颜色n;fileItem_nametItem_codetcolourn;file品牌t代码t数量t价格n;for(int i=0;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;filen;file.close();return 1; 此函数的两个功能:第一个是在添加商品时从键盘输入商品的各种数据,调用这个功能时利用n的缺省值,在调用时不给n赋值;第二个是在进货时如果进的是新的品种,那么也要从键

7、盘输入这个品种的各种数据,这局部与第一个功能一样,但是进货要输出进货清单,所以进货功能调用该函数时n设置为1,函数在运行时增加一个判断语句,假如n为1时,将所键入的数据输出至进货清单。void CItem:Show()/显示品种数据cout品种t代码t颜色n;coutItem_nametItem_codetcolourn;cout品牌t代码t数量t价格n;for(int i=0;inBrnd;i+)coutbrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnnflush;system(pause);cou

8、tn;这个函数也是与出货功能有关,与InModify()的函数类似。因为是库中的商品出货,所以商品品种必须存在,假如不存在,如此输出提示信息,出货失败。还有一种可能是商品品种曾经存在,但已经全部出完了,这时,该品种的各种数据还存在,只是数量为零。所以,在函数开始执行时要判断库存量是否为零,假如为零,如此输出提示信息,出货失败。在出货成功完毕时同样要将本品种的各种品牌的出货数据输出到出货清单中。同样,该函数也是对链表中所存在的结点的数据局部的修改。13 / 13void CItem:OutModify()/出货,修改结点中的数据局部int choice,count,chuhuo,price=0;

9、/chuhuo为出货量,price为总价格int *num;num=new intnBrnd;if(quantity=0)cout数量为0.;exit(1);for(int i=0;inBrnd;i+)/储存原来的数量numi=brndi.quantity;cout品牌t代码t数量t价格n;for(i=0;inBrnd;i+)couti+1.brndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnn;coutchoice;while(choice=1&choice=nBrnd)coutcount;while(

10、countbrndchoice-1.quantity)coutcount;brndchoice-1.quantity-=count;coutchoice;ofstream file(出货清单.txt,ios:out|ios:ate);if(!file)cout错误,不能打开文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品种t代码t颜色n;fileItem_nametItem_codetcolournn;file品牌t代码t价格t出货量n;for(i=0;inBrnd;i+)if(chuhuo=numi-brndi.quan

11、tity)price=chuhuo*brndi.brnd_price;filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetchuhuon;file总价格为:pricenn;delete num;file.close();InModify同样也与进货功能有关。因为所进的品种可能是也有的品种,只是增加其中的数量而已。所以,在输入进货品种或品种代码时要判断是否是库中已有的品种,假如是就调用这个函数,只从键盘输入具体的品牌数量或新增品牌数据即可,而不用在键入品种的各种数据,同时,新键入的各种数据也输出到进货清单。实际上该函数是对链表中所存在的结点

12、的数据局部的修改。此函数先判断出货量是不是大于库存量,如果大于将显示“库存不足,重新输入。如果小于的话将会继续程序,通过brndchoice-1.quantity-=count;把原有量减去省下剩余量。void CItem:InModify()/已有商品,再次进货,修改结点中的数据局部char name20;char choice;int count,jinhuo=0;int prenBrnd=nBrnd; /原先品牌数int n=1;/用于判断是否继续进货int flag=0;/用于判断是否新品牌int * num;num=new intprenBrnd;for(int i=0;inBrnd

13、;i+)/储存原来的数量numi=brndi.quantity;while(n)coutnn输入品牌名称:;Flush(cin);cin.getline(name,20);for(int i=0;inBrnd;i+)if(strcmp(brndi.brnd_name,name)=0)coutcount;brndi.quantity+=count;quantity+=count;flag=1;break;if(flag=0)strcpy(brndnBrnd.brnd_name,name);coutbrndnBrnd.Brand_code;coutbrndnBrnd.quantity;coutbr

14、ndnBrnd.brnd_price;quantity+=brndnBrnd.quantity;nBrnd+;coutchoice;if(choice=y|choice=Y)n=1;else n=0;Ofstreamfile(进货清单.txt,ios:out|ios:ate);if(!file)cout错误,不能打开文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品种t代码t颜色n;fileItem_nametItem_codetcolournn;file品牌t代码t价格t进货量n;for(i=0;iprenBrnd;i+)

15、if(jinhuo=brndi.quantity-numi)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetjinhuoprenBrnd)for(i=prenBrnd;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetbrndi.quantityn;filein_avail(); return stream.ignore(chars_to_skip);2. 怎样实现按任意键回到主菜单。为了使程序的可读性和使用的方便性更好,设计程序时,打算增加此功能。在设计过

16、程中,试图通过一段程序实现,但始终都要输入一个字符后按回车键才行,外表上已经实现了此功能,但其实并没有达到预期的效果。过了几天,在网上查找相关资料,终于在别人设计的一个小程序里面找到代码,原来只需要在利用库函数里面的一函数system(),当然这里要包含头文件,程序中参加system(“pause)即可达到要求。3.为保证程序界面的美观,如何清屏?在图书馆查阅了有关方面的书籍和文献,利用网络资源,使用函数system(cls)即可。程序完整代码 #include#include#include#include#include#include#include#include#include /e

17、xit(1)time_t timer;inline istream & Flush(istream & stream) /去除储存器中数据stream.clear();int chars_to_skip=stream.rdbuf()-in_avail();return stream.ignore(chars_to_skip);#define MAX 10 /运用宏定义,规定品牌数最大为10class Brand /品牌类private:charbrnd_name20;/品牌名称intBrand_code;/品牌代号intquantity;/数量floatbrnd_price;/价格public

18、:Brand()quantity=0;strcpy(brnd_name,0);friend class CItem; /定义友元类;ClassCItem /品种类private:char Item_name10;/品种名称int Item_code;/品种代号char colour10;/颜色int quantity;/数量Brand brndMAX;/最多MAX个品牌int nBrnd;/品牌的数量(MAX)public:CItem() strcpy(Item_name,0);quantity=0;nBrnd=0; /缺省构造函数CItem(char *name)strcpy(Item_na

19、me,name);Item_code=0; /用品种名称构造CItem(int code)Item_code=code;strcpy(Item_name,0); /用品种代码构造int SetItem(int n=0); /置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件char * GetItemName()return Item_name; /返回品种名int GetItemCode()return Item_code; /返回品种代码int pare(CItem &); /比拟品种名称,供查找用,比拟结果为1,0int pareCode(CItem &); /比拟品种代码

20、,比拟结果为1,0void Show(); /显示品种数据void OutModify(); /出货,修改结点中的数据局部void InModify(); /已有商品,再次进货,修改结点中的数据局部;int CItem:pare(CItem & pitem) /比拟品种名称,供查找用,比拟结果为1,0int n;n=strcmp(Item_name,pitem.Item_name);/两个字符串相等,n=0if(n!=0) return 0;else return 1;int CItem:pareCode(CItem & pitem) /比拟品种代码,比拟结果为1,0return (Item_

21、code=pitem.Item_code);int CItem:SetItem(int n) /置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件 coutn输入商品名称:;Flush(cin);cin.getline(Item_name,20);coutItem_code;coutn输入商品颜色:;Flush(cin);cin.getline(colour,20);coutn输入品牌数:(不超过MAXnBrnd;/循环实现品牌数据的输入,count为商品总数for(int i=0,count=0;inBrnd;i+)coutn输入品牌i+1的数据n;coutn输入品牌名称:;F

22、lush(cin);cin.getline(brndi.brnd_name,20);coutbrndi.Brand_code;coutbrndi.quantity;coutbrndi.brnd_price;count+=brndi.quantity;quantity=count;if(n=1)ofstream file(进货清单.txt,ios:out|ios:ate);if(!file)cout错误,不能打开文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品种t代码t颜色n;fileItem_nametItem_codet

23、colourn;file品牌t代码t数量t价格n;for(int i=0;inBrnd;i+)filebrndi.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;filen;file.close();return 1;void CItem:Show()/显示品种数据cout品种t代码t颜色n;coutItem_nametItem_codetcolourn;cout品牌t代码t数量t价格n;for(int i=0;inBrnd;i+) coutbrndi.brnd_nametbrndi.Brand_codetbrndi.qu

24、antitytbrndi.brnd_pricen;coutnnflush;system(pause);coutn;void CItem:OutModify()/出货,修改结点中的数据局部int choice,count,chuhuo,price=0;/chuhuo为出货量,price为总价格int *num;num=new intnBrnd;if(quantity=0)cout数量为0.;exit(1);for(int i=0;inBrnd;i+)/储存原来的数量numi=brndi.quantity;cout品牌t代码t数量t价格n;for(i=0;inBrnd;i+)couti+1.brn

25、di.brnd_nametbrndi.Brand_codetbrndi.quantitytbrndi.brnd_pricen;coutnn;coutchoice;while(choice=1&choice=nBrnd)coutcount;while(countbrndchoice-1.quantity)coutcount;brndchoice-1.quantity-=count;coutchoice;ofstream file(出货清单.txt,ios:out|ios:ate);if(!file)cout错误,不能打开文件.;getch();exit(1);timer=time(NULL);f

26、ilectime(&timer);file品种t代码t颜色n;fileItem_nametItem_codetcolournn;file品牌t代码t价格t出货量n;for(i=0;inBrnd;i+)if(chuhuo=numi-brndi.quantity)price=chuhuo*brndi.brnd_price;filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetchuhuon;file总价格为:pricenn;delete num;file.close();void CItem:InModify()/已有商品,再次进货,修改结点中

27、的数据局部char name20;char choice;int count,jinhuo=0;int prenBrnd=nBrnd; /原先品牌数int n=1;/用于判断是否继续进货int flag=0;/用于判断是否新品牌int * num;num=new intprenBrnd;for(int i=0;inBrnd;i+)/储存原来的数量numi=brndi.quantity;while(n)coutnn输入品牌名称:;Flush(cin);cin.getline(name,20);for(int i=0;inBrnd;i+)if(strcmp(brndi.brnd_name,name

28、)=0)coutcount;brndi.quantity+=count;quantity+=count;flag=1;break;if(flag=0)strcpy(brndnBrnd.brnd_name,name);coutbrndnBrnd.Brand_code;coutbrndnBrnd.quantity;coutbrndnBrnd.brnd_price;quantity+=brndnBrnd.quantity;nBrnd+;coutchoice;if(choice=y|choice=Y)n=1;else n=0;ofstream file(进货清单.txt,ios:out|ios:ate

29、);if(!file)cout错误,不能打开文件.;getch();exit(1);timer=time(NULL);filectime(&timer);file品种t代码t颜色n;fileItem_nametItem_codetcolournn;file品牌t代码t价格t进货量n;for(i=0;iprenBrnd;i+)if(jinhuo=brndi.quantity-numi)filebrndi.brnd_nametbrndi.Brand_codetbrndi.brnd_pricetjinhuoprenBrnd)for(i=prenBrnd;inBrnd;i+)filebrndi.brn

30、d_nametbrndi.Brand_codetbrndi.brnd_pricetbrndi.quantityn;fileShow(); /输出结点中的数据CItem * GetData() return pData;/返回下一结点的指针friend class CList;/定义链表类为友元类;class CList/定义链表类protected:ode * pHead;/链表头结点指针public:CList() pHead=0; CList() DeleteList(); void AddNode(ode * pnode);/首部添加结点ode * DeleteNode(ode *);/

31、删除一个指定的结点,返回该结点的指针ode * LookUp(CItem &);/*查找一个指定的数据,返回该数据所在结点在链表中的指针,假如未找到返回0 */void ShowList();/打印整个链表void DeleteList();/删除整个链表ode * GetListHead()return pHead;/返回链表首结点ode * GetListNextNode(ode *);/返回链表指定结点的下一个结点void Insert(ode *);/按代码的顺序插入一个结点;void CList:AddNode(ode *pnode)/首部添加结点if(pHead=0)pHead=p

32、node;pnode-pNext=0;else pnode-pNext=pHead;pHead=pnode;ode * CList:DeleteNode(ode *pnode)/删除一个指定的结点,返回该结点的指针if(pnode=pHead)/删除的结点是链表的首结点pHead=pnode-pNext;pnode-pNext=0;elseode *p=pHead;while(p-pNext!=pnode)p=p-pNext;p-pNext=pnode-pNext;/删除结点后将前后两个结点再连结起来pnode-pNext=0;return(pnode);ode * CList:LookUp(

33、CItem &pitem)/*查找一个指定的数据,返回该数据所在结点在链表中的指针,假如未找到返回0 */ode * pn=pHead;if(pitem.GetItemCode()=0)while(pn)if(pn-pData-pare(pitem) return pn;/按品种名称查找pn=pn-pNext;elsewhile(pn)if(pn-pData-pareCode(pitem) return pn;/按品种代码查找pn=pn-pNext;return 0;void CList:ShowList()/打印整个链表ode * p=pHead;while(p)p-pData-Show()

34、;p=p-pNext;void CList:DeleteList()/删除整个链表ode * p,* q;p=pHead;while(p)delete p-pData;q=p;p=p-pNext;delete q;ode * CList:GetListNextNode(ode *pnode)/返回链表指定结点的下一个结点return pnode-pNext;void CList:Insert(ode * pnode)/按代码的顺序插入一个结点ode * p1,* p2;if(pHead=0)pHead=pnode;pnode-pNext=0;else if(pHead-pData-GetIte

35、mCode()=pnode-pData-GetItemCode()pnode-pNext=pHead;pHead=pnode; else p2=p1=pHead;while(p2-pNext&p2-pData-GetItemCode()pData-GetItemCode()p1=p2;p2=p2-pNext;if(p2-pData-GetItemCode()pData-GetItemCode()p2-pNext=pnode;pnode-pNext=0;elsepnode-pNext=p2;p1-pNext=pnode; void main()int choice;CList list;CIte

36、m *p;ode *pn;char name20;/按商品名称操作时用于输入名称char str20;int code;/按商品代码操作时用于输入代码ifstream infile(TIS.txt,ios:in|ios:nocreate|ios:binary);if(!infile)cout数据文件不存在.nflush;system(pause);system(cls);else CItem pitem;infile.read(reinterpret_cast(&pitem),sizeof(CItem);while(! infile.eof()p=new CItem;*p=pitem;pn=n

37、ew ode;pn-InputData(p);list.Insert(pn);infile.read(reinterpret_cast(&pitem),sizeof(CItem);infile.close();docoutnt &物品库存管理系统& ;coutn*;coutnn1. 添加商品品种;coutnn2. 显示商品品种;coutnn3. 查询商品;coutnn4. 删除商品;coutnn5. 商品出库;coutnn6. 商品进库;coutnn0. 退出系统;coutn*;coutSetItem();pn=new ode;pn-InputData(p);list.Insert(pn);s

38、ystem(cls);break;case 2: /显示商品品种system(cls);pn=list.GetListHead();if(pn=0) cout无库存.endl;system(cls);elselist.ShowList();system(cls);break;case 3: /查询商品system(cls);coutnn1. 按商品品种名称查询商品 ;coutnn2. 按商品品种代码查询商品 ;coutnn0. 退出 ;coutchoice;if(choice=1)coutGetData()-Show();else coutn没找到商品 nnflush; system(paus

39、e);delete p;if(choice=2)coutcode;int n;n=code;p=new CItem(n);pn=list.LookUp(*p);if(pn) pn-GetData()-Show();else coutn没找到商品 nnflush; system(pause);delete p;system(cls);break;case 4: /删除商品system(cls);coutnn1. 按商品品种名称删除商品 ;coutnn2. 按商品品种代码删除商品 ;coutnn0. 退出 ;coutchoice;if(choice=1)coutnn输入品种名称:n;Flush(c

40、in);cin.getline(name,20);p=new CItem(name);pn=list.LookUp(*p);if(pn) list.DeleteNode(pn);else coutn没找到商品 nnflush; system(pause);delete p;if(choice=2)coutcode;p=new CItem(code);pn=list.LookUp(*p);if(pn) list.DeleteNode(pn);else coutn没找到商品 nnflush; system(pause);delete p;system(cls);break;case 5: /商品出库system(cls);coutnn1. 按商品品种名称进展商品出库 ;coutnn2. 按商品品种代码进展商品出库 ;coutnn0. 退出 ;coutchoice;if(choice=1)coutGetData()-OutModify();else coutn没找到商品 nnflush; system(p

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!