1、C+物品库存管理信息技术系课程设计报告 课 程: 物品库存管理 年 级: 09级 专 业: 计算机应用 姓 名: 指导老师: 评语:得分: 指导老师签名: 二O一O年十一月三十日实验内容1程序功能介绍用文件系统实现的物品库存管理程序。一种商品的品种里面包括三个品牌,以品种为单位,可以实现商品品种的添加、删除、查找、显示等功能。2课程设计要求 (1)组成商品品种的品牌不限数量,设置一个最大值(比如10),增加一个成员变量指示品牌的具体数量。商品品种的数量是每个品牌的数量之和。 (2)设计输出每日进货与出货的统计表,要求进货与出货分别为两个文本文件,清单上列有进出货物的时间、品种描述,具体品牌的进
2、出货数量,如果是出货清单,在每笔出货的清单后还要有该次提取货物的总价格。 (3)商品品种以品种代码的顺序存放。3程序设计思想 该设计比较复杂,要对原程序做较大的修改,首先是数据的存放形式,因为要求数据按代码的顺序存放,并且进出货时对数据的各个组成成员都要做较大的修改。如果要用文件的形式存放,那么文件的读写就非常频繁,而且要使用大量的临时文件,因此建议使用链表的形式存放数据,在程序开始运行时读取固定文件中的数据,程序运行时全部数据都在内存进行操作。在程序运行结束前再将链表中的数据存放在原来的文件中,供下次运行程序时读取。建议首先将文件读取这部分程序调试好,这样在调试程序时就不用每次都从键盘输入数
3、据了,可以节省大量的时间。同时,对链表中结点的操作有很多典型的程序可以参考,不同的结点只是数据部分类型不同,所以只要在上面稍加修改就可以使用。 (1)类的封装 由于数据的存放形式使用链表的形式,所以对于程序的很多操作实际上都是要求对链表进行一系列处理。其中吧Citem类作为一个结点,因此包含了大量对链表进行操作的函数,为了满足程序的完整性与可读性,应将对链表操作的所有程序封装在一起。 class Brand /品牌类 . friend class CItem; /定义品种类为友元类; class CNode /结点类 . friend class CList; /定义链表类为友元类; 注:省略
4、部分详见源程序代码及课程设计教材提示部分 (2)程序功能菜单的设置 程序主题采用菜单选项的形式,输入相应的菜单选项后程序可以反复运行,而其中还要求3.4.5.6.项各有一个菜单,分别是:按照商品品种名称和按照商品代码进行操作。 &物品库存管理系统& * 1.添加商品品种 2.显示商品品种 3.查询商品 4.删除商品 5.商品出库 6.商品进库 0.退出系统 *4设计中所负责的部分商品的出库与入库部分int CItem:SetItem(int n) /置品种数据,正确返回1,当n为1时,是新进货物,输出至出清单文件 coutn输入商品名称:; Flush(cin); cin.getline(It
5、em_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输入品牌名称:; Flush(cin); cin.getline(brndi.brnd_name,20); coutbrndi.Brand_code; coutbrndi.quantity; coutbrndi.brnd_price; c
6、ount+=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_codetcolourn; file品牌t代码t数量t价格n; for(int i=0;inBrnd;i+) filebrndi.brnd_nametbrndi.Brand_codet brndi
7、.quantitytbrndi.brnd_pricen; filen; file.close(); return 1; 此函数的两个功能:第一个是在添加商品时从键盘输入商品的各种数据,调用这个功能时利用n的缺省值,在调用时不给n赋值;第二个是在进货时如果进的是新的品种,那么也要从键盘输入这个品种的各种数据,这部分与第一个功能相同,但是进货要输出进货清单,所以进货功能调用该函数时n设置为1,函数在运行时增加一个判断语句,若n为1时,将所键入的数据输出至进货清单。void CItem:Show()/显示品种数据 cout品种t代码t颜色n; coutItem_nametItem_codetcolo
8、urn; cout品牌t代码t数量t价格n; for(int i=0;inBrnd;i+) coutbrndi.brnd_nametbrndi.Brand_codet brndi.quantitytbrndi.brnd_pricen; coutnnflush; system(pause); coutn; 这个函数也是与出货功能有关,与InModify()的函数类似。因为是库中的商品出货,所以商品品种必须存在,若不存在,则输出提示信息,出货失败。还有一种可能是商品品种曾经存在,但已经全部出完了,这时,该品种的各种数据还存在,只是数量为零。所以,在函数开始执行时要判断库存量是否为零,若为零,则输出
9、提示信息,出货失败。在出货成功结束时同样要将本品种的各种品牌的出货数据输出到出货清单中。同样,该函数也是对链表中所存在的结点的数据部分的修改。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
10、(i=0;inBrnd;i+) couti+1.brndi.brnd_nametbrndi.Brand_codet brndi.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错误,不能打
11、开文件.; 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.quantity) price=chuhuo*brndi.brnd_price; filebrndi.brnd_nametbrndi.Brand_codet brndi.brnd_pricetchuhuon; file总价格为:pricenn; delete num; file.close();InModify()同样也与进货功能有关。因为所进的品种可能是也有的品种,只是增加其中的数量而已。所以,在输入进货品种或品种代码时要判断是否是库中已有的品种,若是就调用这个函数,只从键盘输入具体的品牌数量或新增品牌数据即可,而不用在键入品种的各种数据,同时,新键入的各种数据也输出到进货清单。实际上该函数是对链表中所存在的结点的数据部分的修改。此函数先判断出货量是不是大于库存量,如果大于将显示
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1