公司库存管理系统C++_第1页
公司库存管理系统C++_第2页
公司库存管理系统C++_第3页
公司库存管理系统C++_第4页
公司库存管理系统C++_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计内容公司库存管理系统之樊仲川亿创作一、设计要求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、派生1、显示物品信息、耳2、派生查找物品信廿一2、公司库存管理系统中各功能模块的实现:a.显示物品模块:a.显示物品模块:在输入好库存信息后,库存信息就会被保管到“库存清单。txt”文本中,然后根据菜单显示选择“1、显示物品信息”,就会直接调用文本文件中的所有信息并加以显示。b.查找物品信息:c.或者设备名称来查找名需要入库的具体设备。如果该设备存在于库存当中,则输c.或者设备名称来查找名需要入库的具体设备。如果该设备存在于库存当中,则输入入库数量,提示入库成功;如果仓库中没有该种设备,则提示“对不起,没有找到该库存物品。”入库成功后,该物品库存数量增加,库存记录增加。如图:d.出库物品信息:出库物品信息和入库物品信息操纵原理一样,显示相同;只不过一个增加一个减少,在此就不再赘述。e/保管效果:3、具体程序代码书写思路:因为用的C++编程语言和环境,所以针对于面向对象的程序书写理念。我将程序模块化,把类的实现进行了封装,运用创建一个工程的方式把程序做的更为具体和清晰。在关键地方,在程序后面做有注释,便于其他人阅读和分析。四、总结本公司库存管理系统很好的实现了“显示、查找、入库、出库、保管”的主要功能,较为完美的实现了本次程序设计的主要要求。除此之外,我还在程序中增加了一定的纠错能力,比方当出库数量大于现有库存是会提示“库存缺乏,请重新输入”的提示,直到用户输入正确的数值为止。而且,在用户对于菜单的属于操纵出现失误时,系统也会根据具体情况进行相应的提示,防止了死循环的出现,方便了用户的操纵、增加了系统的健壮性。对于程序的书写,可以说这个程序的封装以及模块化结构做的很好,主程序很简单,需要运用函数的时候直接调用相应部分即可。这对于程序书写时的修改、校正也极为方便,防止了“牵一发而动全身”的麻烦。我觉得这种模块化的思想应该继续坚持,运用到今后的程序设计当中,既防止了主程序过于繁杂的麻烦,也为其他人的阅读、分析和今后的程序改良提供了方便。在程序应用中,菜单选项仅是对于现有库存的各种操纵和处理,但并没有提供外部接口让用户主动添加其它的物品信息。对于此,我们特意增加了文本修改功能,可以从后台的地方增加或删减现有库存信息。弥补了库存不成变动的缺陷。也体现了,重要信息需要掌握在公司内部人员手中,而不克不及随意进行修改的理念。五、调试及其测试(调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整)由于本次设计用到了类,而类中有受呵护的对像和私有对象,他们都不成以在类外使用。于是使得下边一些数据不克不及使用。最后我只能将数据全改成公有数据。这样也让继承的时候不会出现问题。本次程序几经修改才做到了现在这个样子,起初是一个长达700多行的程序,没有运用封装和工程,显得程序比较冗长。但是有个严重的问题就是每次程序重新启动的时候上次录入的信息和记录就全部清零,必须重新录入才可以进行出、入库处理,这样就使程序丧失了实用性,所以针对这个问题我特意书写的录入代码,让程序可以在一开始运行的时候就把库存清单里的信息先读入系统,然后再在这个基础上进行添加删除等操纵,这样才干真正做到一个实用的系统。因为系统要求必须把库存的信息保管到文本文件,这个操纵我们课上只做了简单的介绍,而且凭借现有的知识还有所欠缺,我在查阅了大量资料和请教他人之后才逐步搞懂了这个环节。由此经过修改写出了第二个程序,能够调用文本文件而且可以进行复杂操纵的程序。除此之外,一开始我保管和显示库存信息的文件方式也有所欠缺,没有做到空间的合理利用,经过老师的点拨和修改后,我设立了“string”字符串,让所有信息以字符串的形式显示和保管,并控制了每一个字段的长度,这样在现实的时候就显得十分美观,也便于读取和观察。之后,我又在这个程序的基础上,进行了进一步的延伸。因为程序要求必须把每一个库存信息都要储存,为了防止重复与欠好记录的方面,我只好把添加信息的菜单隐藏,放于后台处理。对于用户界面只对现有库存信息进行显示、查找、入库、出库的操纵。如果想要添加信息,那就得在“”的这个文件里直接进行输入。这样修改的好处在于,我可以把信息做的系统化,而且能够记录每一次的出、入库记录,并加以显示。最后,我将四个类封装处理,设立工程,程序模块化设计,真正的体现了一个c++程序设计的思想。六、用户手册1、显示菜单在这里输入“1、2、3、4、5”进行菜单操纵,每一步都会有系统字样提示,根据提示进行信息录入即可。如果录入错误,系统会有自动提示,重新录入正确信息即可。2、显示信息。在主菜单中直接输入数字1,进行菜单显示,因为显示信息较多,所以最好调整一下显示框大小,防止出现显示错位的现象。显示后,根据菜单提示输入“1”返回主菜单,输入“2”退出程序。(以下相同,不再提示)3、查找物品信息在主菜单中直接输入数字2,进行物品查找,在查找选项中可以通过入库编码和设备名称两样分别进行查找。查找后,显示该物品的详细信息而且显示近期来针对于本物品的出、入库信息。4、出、入库物品信息在主菜单中直接输入数字3或4,进行物品出、入库。选择物品出、入库后,系统会自动把所有库存信息进行显示,让用户可以看到能够入库的设备名称和入库编码,然后进行选择。首先要选择进行出、入库的设备,之后按提示输入出、入库的数量。(注:在出库时,如果出库数量大于现有库存就会提示“库存缺乏”)。等到屏幕显示“入(出)库成功!”时,物品入(出)库成功。5、退出程序在主菜单中直接输入数字5,退出程序。七、附录:(程序源代码)Device类#include<iostream>#include<fstream>#include<cstring>#include<windows.h>#include<string>usingnamespacestd;classDevice{public:boolmask[11];〃定义字段是否应该被屏蔽(true:字段无效,false:字段有效)void*fs; //指向全局fileSystem对象的指针stringstrCategory;//设备分类:1-普通电视机,2-DVD,3-DVD电视机stringstrName; //货物名称stringstrDate; //日期//stringstrSize; //仅对TV有效,TV尺寸//stringstrType; //仅对TV有效,TV类型//stringstrCharactor; //仅对DVD有效,DVD规格string strWeight; //重量string strPrice; //价格string strBrand; //品牌intnTotal; //数量string strCode; //入库编码Device();virtual~Device();virtualvoidUpdate(intn)=0; //出入库n台设备的操纵,n>0:入库;n<0:出库virtualvoidShow()=0;//展示当前库存和出入库记录};#include"stdafx.h"#include"Device.h"Device::Device(){}Device::~Device(){}DVD类#include"Device.h"classDVD:virtualpublicDevice{public:stringstrCharactor; //仅对DVD有效,规格DVD();virtual~DVD();voidUpdate(intn);//入库n台设备的操纵voidShow();//展示当前库存和出入库记录};#include"stdafx.h"#include"DVD.h"#include"fileSystem.h"DVD::DVD(){strCategory="DVD";for(inti=0;i<FIELDNUM;i++){mask[i]=false;}mask[3]=true;mask[4]=true;}DVD::~DVD(){}voidDVD::Update(intn)//出入库n台设备的操纵{nTotal+=n;charbuf[BUFSIZE];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);//进行物品记录保管}voidDVD::Show()//展示当前库存和出入库记录{//显示当前库存//显示题目行for(inti=0;i<FIELDNUM;i++){if(mask[i]){continue;}cout<<((fileSystem*)fs)->strTitles[i];}cout<<endl;//显示全部数据stringvalues[FIELDNUM];chartotal[BUFSIZE];values[0]=strCategory;values[1]=strName;values[2]=strDate;values[6]=strPrice;values[7]=strWeight;values[8]=strBrand;sprintf(total,"%d",nTotal);values[9]=total;values[10]=strCode;values[3]="NA";values[4]="NA";values[5]=strCharactor;for(intii=0;ii<FIELDNUM;ii++){if(mask[ii]){continue;}for(intj=values[ii].size();j<COL_WIDTH;j++){values[ii].append("");}cout<<values[ii];}cout<<endl;//显示出入库记录cout<<endl<<"出入库记录如下:"<<endl;((fileSystem*)fs)->ShowLog(strName);}3、TV类#include"Device.h"#include<cstring>#include<windows.h>#include<string>classTV:virtualpublicDevice{public:stringstrSize;//仅对TV有效,尺寸stringstrType;//仅对TV有效,类型TV();virtual~TV();voidUpdate(intn);//出入库n台设备的操纵,n>0:入库;n<0:出库voidShow();//展示当前库存和出入库记录};#include"stdafx.h"#include"TV.h"#include"fileSystem.h"TV::TV(){strCategory="普通电视机";for(inti=0;i<FIELDNUM;i++){mask[i]=false;}mask[5]=true;}TV::~TV(){}voidTV::Update(intn)//出入库n台设备的操纵{nTotal+=n;charbuf[BUFSIZE];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);}voidTV::Show()//展示当前库存和出入库记录{//显示当前库存//显示题目行for(inti=0;i<FIELDNUM;i++){if(mask[i]){continue;}cout<<((fileSystem*)fs)->strTitles[i];}cout<<endl;//显示全部数据stringvalues[FIELDNUM];chartotal[BUFSIZE];values[0]=strCategory;values[1]=strName;values[2]=strDate;values[6]=strPrice;values[7]=strWeight;values[8]=strBrand;sprintf(total,"%d",nTotal);values[9]=total;values[10]=strCode;values[3]=strSize;values[4]=strType;values[5]="NA";for(intii=0;ii<FIELDNUM;ii++){if(mask[ii]){continue;}for(intj=values[ii].size();j<COL_WIDTH;j++){values[ii].append("");}cout<<values[ii];}cout<<endl;//显示出入库记录cout<<endl<<"出入库记录如下:"<<endl;((fileSystem*)fs)->ShowLog(strName);}4、TV_DVD类#include"DVD.h"#include"TV.h"classTV_DVD:virtualpublicTV{public:DVDinnerDvd;TV_DVD();virtual~TV_DVD();voidShow();//展示当前库存和出入库记录};#include"stdafx.h"#include"TV_DVD.h"#include"fileSystem.h"TV_DVD::TV_DVD(){strCategory=""DVD电视机〃;for(inti=0;i<FIELDNUM;i++){mask[i]=false;}TV_DVD::~TV_DVD(){}voidTV_DVD::Show()//展示当前库存和出入库记录{//显示当前库存//显示题目行for(inti=0;i<FIELDNUM;i++){if(mask[i]){continue;}cout<<((fileSystem*)fs)->strTitles[i];}cout<<endl;//显示全部数据stringvalues[FIELDNUM];chartotal[BUFSIZE];values[0]=strCategory;values[1]=strName;values[2]=strDate;values[6]=strPrice;values[7]=strWeight;values[8]=strBrand;sprintf(total,"%d",nTotal);values[9]=total;values[10]=strCode;values[3]=strSize;values[4]=strType;values[5]=innerDvd.strCharactor;for(intii=0;ii<FIELDNUM;ii++){if(mask[ii]){continue;}for(intj=values[ii].size();j<COL_WIDTH;j++){values[ii].append("");}cout<<values[ii];}cout<<endl;//显示出入库记录cout<<endl<<"出入库记录如下:"<<endl;((fileSystem*)fs)->ShowLog(strName);}5、fileSystem函数#include<iostream>#include<fstream>#include<cstring>#include<windows.h>#include<string>usingnamespacestd;defineFIELDNUM11 //库存数据文件的字段数量defineBUFSIZE100//库存数据文件的每行最大字数defineCOL_WIDTH12//用于显示的列宽defineMAXDEVICE20 //系统最大允许设备数量#include"Device.h"#include"TV.h"#include"DVD.h"#include"TV_DVD.h"#include"time.h"#include"stdio.h"classfileSystem{public:voidShowLog(stringstrName);voidSave(stringstrMsg);voidShow();stringstrTitles[FIELDNUM];voidInitAllDevices();void*devs[MAXDEVICE];intdevsCategory[MAXDEVICE];//设备分类:1-普通电视机,2-DVD3-DVD电视机intnDevs; //库存设备个数stringstrKCFileName; //库存数据文件名stringstrLogFileName; //出入库日志文件名fileSystem();virtual~fileSystem();private:voidrelease();stringstrValues[FIELDNUM];};#include"stdafx.h"#include"fileSystem.h"usingnamespacestd;fileSystem::fileSystem(){strKCFileName="库存清单.txt”;strLogFileName="出入库日志.txt”;nDevs=0;InitAllDevices();//Show();//Save("save");//ShowLog(〃A型电视机〃);//((DVD*)devs[5])->Update(-5);//((TV*)devs[5])->Show();}fileSystem::~fileSystem(){release();}voidfileSystem::InitAllDevices(){release();ifstreamin(strKCFileName.c_str());//第一行是字段题目for(inti=0;i<FIELDNUM;i++){in>>strTitles[i];for(intj=strTitles[i].size();j<COL_WIDTH;j++){strTitles[i].append(〃〃);}//cout<<strTitles[i];}//cout<<endl;//读取全部库存记录nDevs=0;boolbRead=true;while(bRead){for(inti=0;i<FIELDNUM;i++){in>>strValues[i];if(strValues[i].size()==0){bRead=false;break;}//cout<<strValues[i];}if(!bRead){break;}if(strValues[5]==〃NA〃){//createTVclassTV*tvTemp=newTV();devs[nDevs]=tvTemp;tvTemp->strName=strValues[1];tvTemp->strDate=strValues[2];tvTemp->strSize=strValues[3];tvTemp->strType=strValues[4];tvTemp->strPrice=strValues[6];tvTemp->strWeight=strValues[7];tvTemp->strBrand=strValues[8];tvTemp->nTotal=atoi(strValues[9].c_str());tvTemp->strCode=strValues[10];devsCategory[nDevs]=1;tvTemp->f

温馨提示

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

评论

0/150

提交评论