ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:152.56KB ,
资源ID:5860710      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5860710.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(仓库管理系统的设计与实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

仓库管理系统的设计与实现.docx

1、仓库管理系统的设计与实现数据库课程设计报告题目:仓库管理系统组长:组员:指导教师:曹永春计算机科学与信息工程学院仓库管理系统一、设计目标企业的仓库物资管理往往复杂、繁琐。本系统主要针对企业生产所需要的各种设备而设计,实施验收入库并填写入库单和入库登记;企业各个部门根据所需要提出物质申请,计划员根据整个企业的需求开出物资设备出库单,仓库管理员根据出库单核对发放设备;设备使用完毕需要及时归还入库,填写还入库单。系统还根据需要按照月、季、年进行统计分析,产生相应报表。根据系统功能的要求,仓库管理系统可以分为日志管理、入库、出库、还库、查询、报表等主要模块。企业的物资供应管理往往是很复杂、繁琐的。由于

2、掌握的物资种类众多,订货、管理、发放的渠道各有差异,各个企业之间的管理机制不尽相同,各类统计计划报表繁多,因此物资管理必须实现计算机化,而且必须根据企业的具体情况制定相应的方案以便提高工作效率。根据当前的企业管理体制,一般物资供应管理系统,总是根据所掌握的物资类别,相应分成几个科室来进行物资的计划、订货、核销托收、验收入库。根据企业各个部门的来发送物资设备,并随时按期进行库存盘点、做台帐、根据企业自身领导和自身管理的需要按月、季、年进行统计分析,产生相应的报表。为了加强相应物资、设备的管理,要定期掌握其储备、消耗情况,根据计划定额和实际消耗定额的比较,进行定额管理。仓库管理的物资在本章中主要是

3、企业生产所需的各种设备。进货时检查合同确认为有效托收之后,进行验收入库、填写入库单和入库登记。企业各个部门根据所需要的物资设备总额和部门生产活动所需要提出物资需求申请,计划员根据企业的需求开出物资设备出库单,仓库管理员根据出库单核对发放设备。设备使用完毕需要及时归还入库,填写还入库单。系统还根据需要按照月、季、年进行统计分析,产生相应报表。为了跟好的理解该系统和读懂该系统的源代码,读者应对以下的知识点有所了解:Access数据库操作的基础知识。ODBC数据源基础知识。基本的SQL语句,如添加、查询、修改和删除记录语句。Visual C+界面设计和关于数据库的基础知识。二、系统设计仓库管理的特点

4、是信息处理量比较大,所管理的物资设备种类繁多,而且入库单、出库单、需求单等单据的发生量特别大,关联信息多,查询和统计的方式各不相同,在管理上实现起来有一定的困难。在管理的过程中经常出现信息的重复传递;单据、报表的种类繁多,各个部门管理规格不统一等问题。在本系统的设计过程中,为了克服这些困难,满足计算机管理的需要,采取了下面的一些原则:统一各种原始单据的格式,统一账目和报表的格式。删除不必要的管理冗余,实现管理规范化、科学化。程序代码标准化,软件统一化,确保软件的可维护性和实用性。界面尽量简单化,做到实用、方便,尽量满足企业中不同层次员工的需要。建立操作日志,系统自动记录所进行的各种操作。1、系

5、统功能分析 本例中的仓库管理系统需要完成的功能主要有以下几点: 仓库管理各种信息的输入,包括入库、出库、还库、需求信息的输入等。 仓库管理各种信息的查询、修改和维护。 设备采购报表的生成。 在库存管理中加入最高储备和最低储备字段,对仓库中的物资设备实现监控和报警。 企业各部门的物资需求的管理。 操作日志的管理。 仓库管理系统的使用帮助。2、系统功能模块设计 在系统功能分析的基础上,结合Visual C+程序编制的特点,得到如图1所示的系统功能模块图。图1 系统功能模块图 系统主要界面及流程如下所示。 程序开始运行之后先出现如图2的登陆界面。成功输入用户名和密码后将进入主对话框。图2 登陆界面单

6、击“设备代码”按钮进入设备代码表(device_code)的管理。单击“库存信息”按钮进入现有库存表(device)的管理。单击“设备入库”按钮开始设备入库操作,若成功,则在设备入库表(device_in)中增加一条记录,同时修改现有的库存表(device)中的相关数据。单击“设备出库”按钮开始设备出库操作,如图3所示。若成功,则在设备出库表(device)中的相关数据。 图3 设备出库登记窗口单击下方的“出库信息”按钮进入设备出库表(device_out)的管理。如图4所示。图4 出库信息管理界面单击“设备还库”按钮开始设备还库操作。若成功,则在设备还库表(device_return)中增加

7、一条记录,同时修改现有库存表(device)中的相关数据。单击下方的“还库信息”按钮进入设备还库表(device_return)的管理。单击“设备需求”进入设备需求登记的界面,如图5所示。用户在这里填写设备需求。若成功,则在设备需求表(device_need)中增加一条设备需求记录。图5 设备需求登记窗口单击下方“需求信息”按钮进入设备需求表(device_need)的管理。如图6所示。单击“操作日志”按钮查看目前的所有操作日志记录,在里面还可以删除所有日志记录。单击“帮助”按钮进入联机帮助。单击“关于”按钮查看程序信息图6 需求信息管理窗口三、数据库设计1、数据库需求分析 在仔细调查企仓库物

8、资设备管理过程的基础上,得到本系统所处理的数据流程,如图7所示。 图 7 数据流程图针对本实例,通过对企业仓库管理的内容和数据流程的分析,设计的数据项和数据结构如下:设备代码信息:其数据项有设备号、设备名称现有库存信息:其数据项有现有设备、现有数目、总数目、最大库存和最小库存等设备使用信息:其数据项有使用的设备、使用部门、数目、使用时间和出库时状态等设备采购信息:其数据项有采购的设备、采购员、供应商、采购数目和采购时间等设备归还信息:其数据项归还设备、归还部门、归还数目、归还时间和经手人等设备需求信息:其数据项有需求的部门、需求设备、需求数目和需求时间等2、数据概念结构设计这一设计阶段是在需求

9、分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。本实例根据上面得设计规划出实体有库存实体,入库实体、出库实体、采购实体、还库实体和需求实体。各实体的E-R图及其关系描述如下:图8 库存实体E-R图图9 入库实体E-R图图10 出库实体E-R图 图11 部门需求实体E-R图图12 还库实体E-R图 图13 计划采购实体E-R图图 14 实体和实体之间的关系E-R图3、数据库逻辑结构设计在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系。仓库管理系统数据库中的各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的

10、一个表。 列名 数据类型 可否为空 说明 CodeVARCHAR2(6) NOTNULL 设备号(主键) NameVARVHAR2(20) NULL 设备名称设备代码表device_code 列名 数据类型 可否为空 说明CodeVARCHAR2(6)NOTNULL设备号In_dateDATENOTNULL入库时间(主键)ProviderVARCHAR2(20)NULL供应商TelenoVARCHAR2(20)NULL供应商电话In_numberNUMBER(6)NULL入库数量PriceNUMBER(6)NULL价格BuyerVARCHAR2(10)NULL采购设备库表device_in列名

11、 数据类型 可否为空 说明CodeVARCHAR2(6)NOTNULL设备号DepartmentVARCHAR2(20)NULL使用部门Out_dateDATENULL出库时间(主键)Out_stateNUMBER(1)NULL出库状况Out_personVARCHAR2(10)NULL经手人Out_numberNUMBER2(10)NOTNULL出库数量TakerVARCHAR2(10)NULL领取UsageVARCHAR2(20)NULL用途设备出库表device_out列名数据类型可否为空说明codeVARCHAR2(6)NOT NULL设备号(主键)now_numberNUMBER(6

12、)NULL现有库存high_numberNUMBER(6)NULL最大库存low_numberNUMBER(6)NULL最小库存total_numberNUMBER(6)NULL总数现有数据库表device列名数据类型可否为空说明codeVARCHAR2(6)NOT NULL设备号departmentVARCHAR2(20)NOT NULL部门名称need_numberNUMBER(6)NULL需要数量begin_dateDATENULL需求开始时间end_dateDATEMULL需求结束时间 设备需求表 device_need列名数据类型可否为空说明codeVARCHAR2(6)NOT NU

13、LL设备号return_dateDATENULL还库时间(主键)keeperVARCHAR2(10)NULL仓库管理员return_numberNUMBER(6)NULL归还数量return_personVARCHAR2(10)NULL归还人 设备还库表device_return列名数据类型可否为空说明do_userVARCHAR2(10)NOT NULL操作员do_whatVARCHAR2(40)NOT NULL操作内容do_dateDATENOT NULL操作时间操作日志表howdo列名数据类型可否为空说明codeVARCHAR2(6)NOT NULL设备号now_numberNUMBER

14、(6)NULL现有库存total_numberNUMBER(6)NULL总库存max_numberNUMBER(6)NULL购买数量providerVARCHAR(2)NULL供应商priceNUMBER(6)NULL价格buy_dateDATENULL计划采购时间(主键)设备采购计划表 device_wantbuy4、数据库结构的实现创建设备代码device_codeCREATE TABLE “DMS”.device_code(code VARCHAR2(6) NULL,name VARCHAR2(20) NULL,CONSTRANT code_code_pk PRIMARY KEY(cod

15、e)TABLESPACE”USER_DATA”;创建设备入库表 device_inCREATE TABLE “DMS”.device_in(code VARCHAR2(6) NOT NULL,in_date DATE NOT NULL,provider VARCHAR2(20) NULL,teleno VARCHAR2(10) NULL,in_number NUMBER(6) NULL,price NUMBER(6) NULL,buyer VARCHAR2(10) NULL,CONSTRAINT in_date_pk PRIMARY KEY(in_date)TABLESPACE “USER_D

16、ATA”;创建设备出库表 device_outCREATE TABLE “DMS”.device_out(code VARCHAR2(6) NOT NULL,department VARCHAR2(20) NULL,out_date DATE NULL,out_state NUMBER(1) NULL,out_penson VARCHAR2(20) NULL,out_number NUMBER(6) NOT NULL,taker VARCHAR2(10) NULL,usage VARCHAR2(20) NULL,CONSTRAINT out_date_pk PRIMARY KEY(out_da

17、te)TABLESPACE”USER_DATA”;创建现有库存表 deviceCREATETABLE ”DMS”.device(code VARCHAR2(6) NULL,now_number NUMBER(6) NULL,high_number NUMBER(6) NULL,low_ number NUMBER(6) NULL,total_ number NUMBER(6) NULL,CONSTRAINT device_code_pk PRIMARY KEY(code)TABLESPACE”USER_DATA”;创建部门需求表 device_needCREATE TABLE “DMS”,de

18、vice_need(code VARCHAR2(10) NOT NULL,department VARCHAR2(10) NOT NULL,need_number NUMBER(6) NULL,begin_date DATE NULL,end_date DATE NULL,)TABLESPACE ”USER_DATA”;创建设备还库表device_returnCREATE TABLE “DMS”,device_return(code VARHAR2(6) NOT NULL,department VARCHAR2(20) NULL,return_date DATE NULL,keeper VAR

19、CHAR2(10) NULL,return_number NUMBER(6) NULL,return_person VARCHAR2(10) NULL,CONSTRAINT return_date_pk PRIMARY KEY (return_date)TABLESPACE ”USER_DATA”;创建设备采购计划表 device_wantbuyCREATE TABLE “DMS”,device_wantbuy(code VARCHAR2(10) NOT NULL,now_number NUMBER(6) NULL,total_ number NUMBER(6) NULL,max_ numbe

20、r NUMBER(6) NULL,buy_ number NUMBER(6) NULL,provider VARCHAR2(20) NULL,price NUMBER(6) NULL,buy_date DATE NULL,CONSTRAINT wantbuy_date_pk PRIMARY KEY (buy_date)TABLESPACE ”USER_DATA”;创建操作日志表 howdoCREATE TABLE “DMS”,howdo(do_user VARCHAR2(10) NOT NULL,do_what VARCHAR2(40) NOT NULL,do_date DATE NOT NU

21、LL,)TABLESPACE “USER_DATA”;四、系统实现1、创建应用程序此仓库系统应用程序的创建步骤如下:、选择菜单“File|New”中的“新建项目”选项卡中“MFC AppWizard(exe)”,设置合适的目录和项目名,比如“E:Projects”目录下的“DMS”项目。、创建一个对话框应用程序(“Dialog Based”),单击“Next”按钮。、由于在这个项目中将要使用ADO,所以在MFC AppWizard 的第2步,需要选中“Automation”选项,使应用程序能够支持自动化对象,如图15所示。图15 使应用程序支持自动化(Automation)、单击“Finish

22、”按钮,结束项目的创建。至此一个基于对话框的应用程序框架就搭建好了。主对话框名为CDMSDlg。、项目创建完毕之后,在头文件stdafx.h中加入下面4行:#importc:programfilescommonfilessystemadomsado15.dllno_namespace rename(EOF, adoEOF) #include icrsint.hinline void TESTHR(HRESULT x) if FAILED(x) _com_issue_error(x);#define DATEFMT CString(%s)第1行中的路径可能根据Visual Studio安装路径的

23、不同而不同。其中的rename指令,把ADO中的EOF重命名为adoEOF,这是为了避免和其他库的常量名冲突。注意第3行,这里定义了一个inline函数TESTHER,它的作用是测试COM函数的返回值,在这个返回值包含一个错误的时候,抛出一个_com_error型的异常。ADO作为一个COM组件接口,它的许多函数都会返回一个HRESULT型的值作为结果。如果在每一步都用SUCCEEDED或FAILED宏测试返回值的话,将会不胜其烦,还有可能制造出一连串嵌套的if语句这样不美观的代码。这个函数简化了这种验证操作,利用C+的异常处理机制,使代码显得紧凑而高效,为后面的工作带来很大方便。第4行定义了

24、一个宏。这是不同的后台数据库对SQL语句中日期的用法要求不同引起的。比如Access数据库要求SQL语句中的日期用两个#字符括起,而其他的数据库可能需要使用单引号或者双引号。所以在这里定义了这个DATEFMT宏,为了方便程序在不同的后台数据库键切换。这是一个在开发的时候需要注意的细节,后面还会具体提到。2、COM知识准备下面介绍一些关于COM知识。这部分内容是针对那些没有学习过的COM技术的读者,目的是为他们理解ADO提供一些背景知识。COM技术在微软公司的应用中可以说是无处不在,Windows系统相当多的服务都以这种方式提供,例如着名的DirectX,还有在这一章中广泛应用的ADO。ADO的

25、底层是OLE DB,他本身则是对OLE DB的一个COM包装。所以具备一些COM的知识,对使用ADO是很有帮助的,但并不是说必须要精通COM才能使用ADO。事实上,在一般的应用中,只需要理解下面这段代码即可。/DlgViewReport.cpp_RecordsetPtr pRst = NULL;IADORecordBinding *picRs = NULL; /Interface Pointer declared.(VC+ Extensions) CDevBuyRs rs;try _bstr_t strSQL(SELECT * FROM DEVICE_WANTBUY); TESTHR(pRst

26、.CreateInstance(_uuidof(Recordset); pRst = m_DBCnt-Execute(strSQL, NULL, adCmdText); TESTHR(pRst-QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&picRs); TESTHR(picRs-BindToRecordset(&rs); int i = 0; while (!pRst-adoEOF) m_list.InsertItem(0, rs.m_sz_code); m_list.SetItemText(i, 1, rs.m_sz_now); m

27、_list.SetItemText(i, 2, rs.m_sz_total); m_list.SetItemText(i, 3, rs.m_sz_max); m_list.SetItemText(i, 4, rs.m_sz_buy); m_list.SetItemText(i, 5, rs.m_sz_provider); m_list.SetItemText(i, 6, rs.m_sz_price); m_list.SetItemText(i, 7, rs.m_sz_date); pRst-MoveNext(); picRs-Release(); pRst-Close(); catch(_co

28、m_error& e) AfxMessageBox(e.ErrorMessage(); m_list.SetRedraw(TRUE); return; 、BSTR和_bstr_t下面的语句声明了一个_bstr_t型的变量,_bstr_t是对BSTR类型的一个封装。_bstr_t strSQL(“SELETE *FROM DEVICE_WANTBUY”);对于BSTR,通俗地说,它是COM中使用的字符串,与普通C程序中的字符串的区别在于:它一个带有字符计数值的字符串。它的字符计数值在字符数组的前面。它保存的在字符是所谓的“宽字符”(Wide character)。所以,对于一个BSTR而言,下面

29、的语句就是错的。BSTR str=L”Some words”;正确的做法是:Wchar_t st_=L”Some words”BSTR str;Bstr=SysAllocString(str_)释放一个SBSTR指针时,则调用SysFreeString函数。每次都这样操控字符串未免太过麻烦,所以Visual C+ 里提供了_bstr_t这个类对BSTR做了封装,使程序员可以简单的对这种COM 字符串进行操作了。、IADORecordBinding和Iunkown一个COM组件包含了许多COM对象,程序员通过“接口”来操控这些对象,或者说,这些对象通过提供给程序员的接口来实现自己的功能。下面这行代码中的IADORecordBind就是一个指向这种接口的指针。IADORecordBingding *picRs=NULL; /Interface Pointer declared(VC+ Extension)每个接口都是从IUnkown这个接口派生出来的。IUkown接口声明了3个纯虚函数:HRESULT QueryInterface(REFID rilid,void

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1