欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    公司库存管理系统C.doc

    • 资源ID:1173869       资源大小:187.61KB        全文页数:25页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    公司库存管理系统C.doc

    设计内容:公司库存管理系统一、设计要求1目的和要求1要求学生熟练掌握C+语言的根本知识和技能; 2要求利用面向对象的方法以及C+的编程思想来完成系统的设计,在设计的过程中,建立清晰的类层次; 3根本掌握面向对象程序设计的根本思路和方法; 4在系统中定义类,每个类中要有各自的属性和方法; 5在系统的设计中,至少要用到面向对象的一种机制。 6能够利用所学的根本知识和技能,解决简单的面向对象程序设计问题。 7写出设计说明书2设计容1、问题描述功能要求: *公司现有以下设备:普通电视机、DVD、带DVD的电视机,带DVD的电视机的售价为普通电视机和DVD单价之和的80%,要求对所有的库存设备都能按照品名进展显示、查找、入库和出库、保存的功能。普通电视机有以下属性:尺寸、类型液晶或等离子、售价、重量、品牌、入库数量、入库编号DVD有以下属性:规格高清、蓝光高清、普通、售价、重量、品牌、入库数量、入库编号带DVD的电视机是上两者的派生类,但请注意有些属性的重复问题。要求生成的相关库存数据结果以文件方式存放在硬盘中,或用链表、数组来进展管理。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: 1写出需求分析做什么,建立该系统的功能模块框图;2分析系统中的各个实体之间的关系及其属性和行为; 3根据问题描述,设计系统的类层次; 4完成类层次中各个类的描述包括属性和方法; 5完成类中各个成员函数的定义; 6完成系统的应用模块; 7功能调试; 8完成系统总结报告以及系统使用说明书。3设计环境Windows操作系统、VC+6.0、C语言4个人承担任务主要负责系统的显示、查找、入库、出库主要功能实现和系统封装。二、系统需求分析公司库存管理系统程序中,系统要求我们设计四个类:一个根底类Device,由Device类派生出来的普通电视机类和DVD类;再由普通电视机类和DVD类共同派生出来的带DVD的普通电视机类。在这个系统中我们需要实现主要的五个功能:1、显示物品功能;2、查找物品功能;3、入库物品功能;4、出库物品功能;5、保存物品功能。公司库存管理系统主要是为了让用户根据自己的需要自己想输入的一些物品,然后将其保存,当用户想查看所有物品时可以查看,想添加物品时可以添加自己想添加的相关物品信息;当用户根据实际物品的库存调整时,可以进展出入库操作,并且记录每一次的出入库的时间和数量,以便日后查看;当用户想查找*一物品时,用户可以输入这一物品的名称或入库编码,然后搜索并查看这一物品的所有信息。在这个系统中,用户可以根据系统的提示分别执行用户自己想实现的功能,比方:在显示物品功能中用户可以查看用户所保存的所有物品信息;在查找物品功能中用户可以根据自己的需要输入自己想查找的物品名称或入库编码,然后查找用户想查找的物品的所有相关信息;在出、入库物品功能中用户可以根据自己的需要输入自己想要出、入库的物品名称或入库编码,然后进展出、入库操作;在物品保存功能中,但凡用户每对库存系统部的信息进展一次操作,系统就会自动保存并记录相关信息。三、程序设计思路1、系统功能模块图:从系统的需求中我们可以看到:该系统要对产品进展显示、查找、入库、出库和保存功能。这就意味着这个系统需要一个show函数通过cout将数据显示在屏幕上来实现显示功能,而其他各个功能需要不同的模块来实现,也就意味着这个系统需要五个不同的功能模块。菜单1、显示物品信息2、查找物品信息3、入库物品信息4、出库物品信息5、退出系统派生派生2、公司库存管理系统中各功能模块的实现:a. 显示物品模块:在输入好库存信息后,库存信息就会被保存到"库存清单。t*t文本中,然后根据菜单显示选择"1、显示物品信息,就会直接调用文本文件中的所有信息并加以显示。b.查找物品信息:查找物品信息查找类型查找名称显示物品信息显示物品出、入库记录c.入库物品信息:选择"3、入库物品信息后,首先刷屏显示现有库存信息的全部容,方便用户观察需要入库的产品信息和具体库存数量。之后,可以根据选择入库编码或者设备名称来查找需要入库的具体设备。如果该设备存在于库存当中,则输入入库数量,提示入库成功;如果仓库中没有该种设备,则提示"对不起,没有找到该库存物品。入库成功后,该物品库存数量增加,库存记录增加。如图:d.出库物品信息:出库物品信息和入库物品信息操作原理一样,显示一样;只不过一个增加一个减少,在此就不再赘述。e.保存效果:3、具体程序代码书写思路:因为用的c+编程语言和环境,所以针对于面向对象的程序书写理念。我将程序模块化,把类的实现进展了封装,运用创立一个工程的方式把程序做的更为具体和清晰。在关键地方,在程序后面做有注释,便于其他人阅读和分析。四、总结本公司库存管理系统很好的实现了"显示、查找、入库、出库、保存的主要功能,较为完美的实现了本次程序设计的主要要求。除此之外,我还在程序中增加了一定的纠错能力,比方当出库数量大于现有库存是会提示"库存缺乏,请重新输入的提示,直到用户输入正确的数值为止。而且,在用户对于菜单的属于操作出现失误时,系统也会根据具体情况进展相应的提示,防止了死循环的出现,方便了用户的操作、增加了系统的强健性。对于程序的书写,可以说这个程序的封装以及模块化构造做的很好,主程序很简单,需要运用函数的时候直接调用相应局部即可。这对于程序书写时的修改、校正也极为方便,防止了"牵一发而动全身的麻烦。我觉得这种模块化的思想应该继续保持,运用到今后的程序设计当中,既防止了主程序过于繁杂的麻烦,也为其他人的阅读、分析和今后的程序改良提供了方便。在程序应用中,菜单项选择项仅是对于现有库存的各种操作和处理,但并没有提供外部接口让用户主动添加其它的物品信息。对于此,我们特意增加了文本修改功能,可以从后台的地方增加或删减现有库存信息。弥补了库存不可变动的缺陷。也表达了,重要信息需要掌握在公司部人员手中,而不能随意进展修改的理念。五、调试及其测试调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整1、 由于本次设计用到了类,而类中有受保护的对像和私有对象,他们都不可以在类外使用。于是使得下边一些数据不能使用。最后我只能将数据全改成公有数据。这样也让继承的时候不会出现问题。2、 本次程序几经修改才做到了现在这个样子,起初是一个长达700多行的程序,没有运用封装和工程,显得程序比较冗长。但是有个严重的问题就是每次程序重新启动的时候上次录入的信息和记录就全部清零,必须重新录入才可以进展出、入库处理,这样就使程序丧失了实用性,所以针对这个问题我特意书写的录入代码,让程序可以在一开场运行的时候就把库存清单里的信息先读入系统,然后再在这个根底上进展添加删除等操作,这样才能真正做到一个实用的系统。3、 因为系统要求必须把库存的信息保存到文本文件,这个操作我们课上只做了简单的介绍,而且凭借现有的知识还有所欠缺,我在查阅了大量资料和请教他人之后才逐步搞懂了这个环节。由此经过修改写出了第二个程序,能够调用文本文件并且可以进展复杂操作的程序。4、 除此之外,一开场我保存和显示库存信息的文件方式也有所欠缺,没有做到空间的合理利用,经过教师的点拨和修改后,我设立了"string字符串,让所有信息以字符串的形式显示和保存,并控制了每一个字段的长度,这样在现实的时候就显得十分美观,也便于读取和观察。5、 之后,我又在这个程序的根底上,进展了进一步的延伸。因为程序要求必须把每一个库存信息都要储存,为了防止重复与不好记录的方面,我只好把添加信息的菜单隐藏,放于后台处理。对于用户界面只对现有库存信息进展显示、查找、入库、出库的操作。如果想要添加信息,那就得在"库存菜单.t*t的这个文件里直接进展输入。这样修改的好处在于,我可以把信息做的系统化,并且能够记录每一次的出、入库记录,并加以显示。6、 最后,我将四个类封装处理,设立工程,程序模块化设计,真正的表达了一个c+程序设计的思想。六、用户手册1、显示菜单在这里输入"1、2、3、4、5进展菜单操作,每一步都会有系统字样提示,根据提示进展信息录入即可。如果录入错误,系统会有自动提示,重新录入正确信息即可。2、显示信息。 在主菜单中直接输入数字1,进展菜单显示,因为显示信息较多,所以最好调整一下显示框大小,防止出现显示错位的现象。 显示后,根据菜单提示输入"1”返回主菜单,输入"2”退出程序。以下一样,不再提示3、查找物品信息在主菜单中直接输入数字2,进展物品查找,在查找选项中可以通过入库编码和设备名称两样分别进展查找。查找后,显示该物品的详细信息并且显示近期来针对于本物品的出、入库信息。4、出、入库物品信息在主菜单中直接输入数字3或4,进展物品出、入库。选择物品出、入库后,系统会自动把所有库存信息进展显示,让用户可以看到能够入库的设备名称和入库编码,然后进展选择。首先要选择进展出、入库的设备,之后按提示输入出、入库的数量。注:在出库时,如果出库数量大于现有库存就会提示"库存缺乏。等到屏幕显示"入出库成功!时,物品入出库成功。5、退出程序在主菜单中直接输入数字5,退出程序。七、附录: (程序源代码)1、Device类*include<iostream>*include<fstream>*include<cstring>*include<windows.h>*include<string>using namespace std;class Device public:bool mask11;/定义字段是否应该被屏蔽true:字段无效,false:字段有效void *fs;/指向全局fileSystem对象的指针string strCategory; /设备分类:1-普通电视机, 2-DVD, 3-DVD电视机string strName; /货物名称string strDate; /日期/string strSize;/仅对TV有效,TV尺寸/string strType;/仅对TV有效,TV类型/string strCharactor;/仅对DVD有效,DVD规格string strWeight; /重量string strPrice; /价格string strBrand; /品牌int nTotal; /数量 string strCode; /入库编码Device();virtual Device();virtual void Update(int n) = 0;/ 出入库n台设备的操作,n>0:入库;n<0:出库virtual void Show() = 0;/ 展示当前库存和出入库记录;*include "stdaf*.h"*include "Device.h"Device:Device()Device:Device()2、DVD类*include "Device.h"class DVD : virtual public Device public:string strCharactor;/仅对DVD有效,规格DVD();virtual DVD();void Update(int n);/ 入库n台设备的操作void Show();/ 展示当前库存和出入库记录;*include "stdaf*.h"*include "DVD.h"*include "fileSystem.h"DVD:DVD()strCategory = "DVD"for (int i = 0; i < FIELDNUM; i +)maski = false;mask3 = true;mask4 = true;DVD:DVD()void DVD:Update(int n)/ 出入库n台设备的操作nTotal += n;char bufBUFSIZE;if (n > 0) sprintf(buf, "%s (%s) 入库 %d 台。 ", strName.c_str(), strCategory.c_str(), n); else sprintf(buf, "%s (%s) 出库 %d 台。 ", strName.c_str(), strCategory.c_str(), -n);(fileSystem *)fs)->Save(buf);/进展物品记录保存void DVD:Show()/ 展示当前库存和出入库记录/显示当前库存/显示标题行for(int i = 0; i < FIELDNUM; i +)if (maski) continue;cout << (fileSystem *)fs)->strTitlesi;cout << endl;/显示全部数据string valuesFIELDNUM;char totalBUFSIZE;values0 = strCategory;values1 = strName;values2 = strDate;values6 = strPrice;values7 = strWeight;values8 = strBrand;sprintf(total, "%d", nTotal);values9 = total;values10 = strCode;values3 = "NA"values4 = "NA"values5 = strCharactor;for(int ii = 0; ii < FIELDNUM; ii +)if (maskii) continue;for(int j = valuesii.size(); j < COL_WIDTH; j +) valuesii.append(" ");cout << valuesii;cout << endl;/显示出入库记录cout << endl << "出入库记录如下:" << endl;(fileSystem *)fs)->ShowLog(strName);3、TV类*include "Device.h"*include<cstring>*include<windows.h>*include<string>class TV : virtual public Device public:string strSize;/仅对TV有效, 尺寸string strType;/仅对TV有效,类型TV();virtual TV();void Update(int n);/ 出入库n台设备的操作,n>0:入库;n<0:出库void Show();/ 展示当前库存和出入库记录;*include "stdaf*.h"*include "TV.h"*include "fileSystem.h"TV:TV()strCategory = "普通电视机"for (int i = 0; i < FIELDNUM; i +)maski = false;mask5 = true;TV:TV()void TV:Update(int n)/ 出入库n台设备的操作nTotal += n;char bufBUFSIZE;if (n > 0) sprintf(buf, "%s (%s) 入库 %d 台。 ", strName.c_str(), strCategory.c_str(), n); else sprintf(buf, "%s (%s) 出库 %d 台。 ", strName.c_str(), strCategory.c_str(), -n);(fileSystem *)fs)->Save(buf);void TV:Show()/ 展示当前库存和出入库记录/显示当前库存/显示标题行for(int i = 0; i < FIELDNUM; i +)if (maski) continue;cout << (fileSystem *)fs)->strTitlesi;cout << endl;/显示全部数据string valuesFIELDNUM;char totalBUFSIZE;values0 = strCategory;values1 = strName;values2 = strDate;values6 = strPrice;values7 = strWeight;values8 = strBrand;sprintf(total, "%d", nTotal);values9 = total;values10 = strCode;values3 = strSize;values4 = strType;values5 = "NA"for(int ii = 0; ii < FIELDNUM; ii +)if (maskii) continue;for(int j = valuesii.size(); j < COL_WIDTH; j +) valuesii.append(" ");cout << valuesii;cout << endl;/显示出入库记录cout << endl << "出入库记录如下:" << endl;(fileSystem *)fs)->ShowLog(strName);4、TV_DVD类*include "DVD.h"*include "TV.h"class TV_DVD : virtual public TVpublic:DVD innerDvd;TV_DVD();virtual TV_DVD();void Show();/ 展示当前库存和出入库记录;*include "stdaf*.h"*include "TV_DVD.h"*include "fileSystem.h"TV_DVD:TV_DVD()strCategory = "DVD电视机"for (int i = 0; i < FIELDNUM; i +)maski = false;TV_DVD:TV_DVD()void TV_DVD:Show()/ 展示当前库存和出入库记录/显示当前库存/显示标题行for(int i = 0; i < FIELDNUM; i +)if (maski) continue;cout << (fileSystem *)fs)->strTitlesi;cout << endl;/显示全部数据string valuesFIELDNUM;char totalBUFSIZE;values0 = strCategory;values1 = strName;values2 = strDate;values6 = strPrice;values7 = strWeight;values8 = strBrand;sprintf(total, "%d", nTotal);values9 = total;values10 = strCode;values3 = strSize;values4 = strType;values5 = innerDvd.strCharactor;for(int ii = 0; ii < FIELDNUM; ii +)if (maskii) continue;for(int j = valuesii.size(); j < COL_WIDTH; j +) valuesii.append(" ");cout << valuesii;cout << endl;/显示出入库记录cout << endl << "出入库记录如下:" << endl;(fileSystem *)fs)->ShowLog(strName);5、fileSystem函数*include<iostream>*include<fstream>*include<cstring>*include<windows.h>*include<string>using namespace std;*define FIELDNUM11/库存数据文件的字段数量*define BUFSIZE100/库存数据文件的每行最大字数*define COL_WIDTH 12 /用于显示的列宽*define MA*DEVICE20/系统最大允许设备数量*include "Device.h"*include "TV.h"*include "DVD.h"*include "TV_DVD.h"*include "time.h"*include "stdio.h"class fileSystem public:void ShowLog(string strName);void Save(string strMsg);void Show();string strTitlesFIELDNUM;void InitAllDevices();void * devsMA*DEVICE;int devsCategoryMA*DEVICE;/设备分类:1-普通电视机, 2-DVD, 3-DVD电视机int nDevs;/库存设备个数string strKCFileName;/库存数据文件名string strLogFileName;/出入库日志文件名fileSystem();virtual fileSystem();private:void release();string strValuesFIELDNUM;*include "stdaf*.h"*include "fileSystem.h"using namespace std;fileSystem:fileSystem()strKCFileName = "库存清单.t*t"strLogFileName = "出入库日志.t*t"nDevs = 0;InitAllDevices();/Show();/Save("save");/ShowLog("A型电视机");/(DVD *)devs5)->Update(-5);/(TV *)devs5)->Show();fileSystem:fileSystem()release();void fileSystem:InitAllDevices()release();ifstream in(strKCFileName.c_str();/ 第一行是字段标题for (int i = 0; i < FIELDNUM; i +) in >> strTitlesi;for(int j = strTitlesi.size(); j < COL_WIDTH; j +) strTitlesi.append(" ");/cout << strTitlesi;/cout << endl;/ 读取全部库存记录nDevs = 0; bool bRead = true;while (bRead) for (int i = 0; i < FIELDNUM; i +) in >> strValuesi;if (strValuesi.size() = 0) bRead = false;break;/cout << strValuesi;if (!bRead) break;if (strValues5 = "NA") / create TV classTV *tvTemp = new TV();devsnDevs = tvTemp;tvTemp->strName = strValues1;tvTemp->strDate = strValues2;tvTemp->strSize = strValues3;tvTemp->strType = strValues4;tvTemp->strPrice = strValues6;tvTemp->strWeight = strValues7;tvTemp->strBrand = strValues8;tvTemp->nTotal = atoi(strValues9.c_str();tvTemp->strCode = strValues10;devsCategorynDevs = 1;tvTemp->fs = this; else if (strValues3 = "NA") / create DVD classDVD *dvdTemp = new DVD();devsnDevs = dvdTemp;dvdTemp->strName = strValues1;dvdTemp->strDate = strValues2;dvdTemp->strCharactor = strValues5;dvdTemp->strPrice = strValues6;dvdTemp->strWeight = strValues7;dvdTemp->strBrand = strValues8;dvdTemp->nTotal = atoi(strValues9.c_str();dvdTemp->strCode = strValues10;devsCategorynDevs = 2;dvdTemp->fs = this; else / create TV_DVD classTV_DVD *tdTemp = new TV_DVD();devsnDevs = tdTemp;tdTemp->strName = strValues1;tdTemp->strDate = strValues2;tdTemp->strSize = strValues3;tdTemp->strType = strValues4;tdTemp->strPrice = strValues6;tdTemp->strWeight = strValues7;tdTemp->strBrand = strValues8;tdTemp->nTotal = atoi(strValues9.c_str();tdTemp->strCode = strValues10;tdTemp->innerDvd.strCharactor = strValues5;devsCategorynDevs = 3;tdTemp->fs = this;/cout << endl;nDevs +;in.close();/Show();void fileSystem:release()for (int i = 0; i < nDevs; i +) delete(devsi);devsi = 0;devsCategoryi = 0;nDevs = 0;void fileSystem:Show()/显示标题行for(int i = 0; i < FIELDNUM; i +)cout << strTitlesi;cout << endl;/显示全部数据for (int n = 0; n < nDevs; n +) string valuesFIELDNUM;char totalBUFSIZE;switch (devsCategoryn) case 1: values0 = (TV *)devsn)->strCategory;values1 = (TV *)devsn)->strName;values2 = (TV *)devsn)->strDate;values6 = (TV *)devsn)->strPrice;values7 = (TV *)devsn)->strWeight;values8 = (TV *)devsn)->strBrand;sprintf(total, "%d", (TV *)devsn)->nTotal);values9 = total;values10 = (TV *)devsn)->strCode;values3 = (TV *)devsn)->strSize;values4 = (TV *)devsn)->strType;values5 = "NA"break;case 2:values0 = (DVD *)devsn)->strCategory;values1 = (DVD *)devsn)->strName;values2 = (DVD *)devsn)->strDate;values6 = (DVD *)devsn)->strPrice;values7 = (DVD *)devsn)->strWeight;values8 = (DVD *)devsn)->strBrand;sprintf(total, "%d", (DVD *)devsn)->nTotal);values9 = total;values10 = (DVD *)devsn)->strCode;values3 = "NA"values4 = "NA"values5 = (DVD *)devsn)->strCharactor;break;case 3:values0 = (TV_DVD *)devsn)->strCategory;values1 = (TV_DVD *)devsn)->strName;values2 = (TV_DVD *)devsn)->strDate;values6 = (TV_DVD *)devsn)->strPrice;values7 = (TV_DVD *)devsn)->strWeight;values8 = (TV_DVD *)devsn)->strBrand;sprintf(total, "%d", (TV_DVD *)devsn)->nTotal);values9 = total;values10 = (TV_DVD *)devsn)->strCode;values3 = (TV_DVD *)devsn)->strSize;values4 = (TV_DVD *)devsn)->strType;values5 = (TV_DVD *)devsn)->innerDvd.strCharactor;break;default:break;for(int i = 0; i < FIELDNUM; i +)for(int j = valuesi.size(); j < COL_WIDTH; j +) valuesi.append(" ");cout << valuesi;cout << endl;void fileSystem:Save(st

    注意事项

    本文(公司库存管理系统C.doc)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开