1、中文摘要库存管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起一个数据一致性和完整性强、数据安全性好的库;而对于后者则要求应用程序具有功能完备、易使用等特点。 经过分析以上情况,我采用微软公司的Visual C#.NET作为前端应用程序开发工具,SQL Server 2000建立后台数据库,在本次毕业设计中开发了这套库存管理系统。本系统利用Visual C#.NET提供的各种面向对象的开发工具,尤其是ADO,能方便而简洁地实现应用程序和数据库的互访,是一款能让用户满意的可行系统。关键词:库存管理,ADO,面向对象,数据
2、库ABSTRACTInventory management system is a typical management information system (MIS) , Which mainly includes database creation and maintenance, and front-end application development aspects. The former requires a strong consistency and integrity of data, and data with good security; while the latte
3、r requires the application functional, easy to use and so on.After analyzing of the above, I use Microsofts Visual C #. NET as a front-end application development tool, SQL Server 2000 establishing the background database, to develop the inventory management system in this graduation project. The sy
4、stem uses a variety of object-oriented development tools which Visual C #. NET Provides, especially the ADO, which can be simple and easy to manipulate the database, so it is a viable system which allows the users satisfaction. Key words: Inventory Management, ADO, Object-oriented, Database目 录中文摘要1A
5、BSTRACT2目 录3第一章 系统分析11.1选题的背景11.2系统需求分析11.2.1.应用程序结构确定11.2.2.确定系统开发环境11.2.3开发工具的选择11.3可行性分析21.3.1经济可行性分析21.3.2.技术可行性分析21.3.3.操作可行性分析21.4系统的开发及功能描述31.4.1.开发方法的选择31.4.2.系统功能描述及系统安全性31.5系统逻辑模型3第二章 系统设计62.1系统总体结构设计62.1.1.系统功能分析62 .1.2系统功能模块图62.2数据库设计72.2.1数据库概念结构设计72.2.2.数据库逻辑结构设计72.2.3.设置引用完整性82.2.4.数据
6、库链接的实现82.3系统功能模块的详细设计102.3.1身份验证模块的设计102.3.2系统主界面的实现122.3.3进货管理模块的实现122.3.4出库管理模块的实现132.3.5.报表统计模块的实现132.3.6.信息查询模块的实现14第三章 系统实现153.1 用户登录界面153.2 密码修改界面153.3 入库管理界面163.4 出库管理界面183.5 BorrowGoods表193.6 GoodsInfo表19第四章 系统开发总结20参考文献21致谢22第一章 系统分析1.1选题的背景企业的库存物资管理往往是很复杂、很繁琐的。由于所掌握的物资种类众多,订货、管理、发放的渠道各有差异,
7、各个企业之间的管理体制不尽相同,各类统计报表繁多,因此仓库的库存管理必须编制一套库存管理信息系统,实现计算机化操作,而且必须根据企业的具体情况制定相应的方案。 由于超市的行业特殊性,产品种类繁多,业务量巨大,若仍然采用人工记账的方式,必然不能满足企业的需求,企业需要利用计算机来进行库存管理,因此需要构造一个库存管理系统。一个完整的企业物资供应管理系统应包括采购计划管理,合同收托管理、仓库库存管理、定额管理、统计管理、财务管理等模块。其中仓库的库存管理是整个物资供应管理系统的核心。因此有必要开发一套独立的库存管理系统来提高企业工作效率, 而所使用的这套库存管理系统是企业生产经营管理活动中的核心,
8、此系统必须可以用来控制合理的库存费用、适时适量的库存数量,使企业生产活动效率最大化。通过对这些情况的仔细调查,我开发了下面的仓库库存管理系统。1.2系统需求分析系统需求分析就是在用户需求调研的基础上,确定系统的总体结构方案,完成相应的需求分析报告。在确定系统的总体结构方案过程中,包括确定应用程序的结构、系统开发环境和开发工具的选择。1.2.1.应用程序结构确定 从用户应用角度来看,可把应用程序系统的组成部分分成数据存储层、业务处理层和界面表示层等3个层次,而应用程序结构可归纳为:集中式应用程序结构、单机板应用程序结构、多层服务器应用程序结构、浏览器服务器应用程序结构、客户机服务器应用程序结构等
9、5种类型。 本库存管理系统就采用了单机版应用程序结构,将数据库和应用程序置于一台机器上,这样更加节约成本,适合中小规模的超市使用。用户可以轻松将其拷贝到其他计算机上,可以同时运行程序。1.2.2.确定系统开发环境 由于大多数公司内部使用的计算机平台都是基于Windows环境的。为了降低系统成本,应最大程度地利用现有的资源、兼容现有的环境,可确定使用下面的开发环境: 数据库:Microsoft SQL Server 2000; 前端开发工具:Visual C#.NET;数据访问对象:ADO。1.2.3开发工具的选择可视化(visual)程序设计是一种全新的程序设计方法,全面采用面向对象的程序设计
10、技术,使用事件驱动机制进行程序设计。利用可视化开发工具可以快速、高效地开发应用程序。可视化的开发工具很多,如Microsoft公司推出的Visual Studio软件系列,Borland公司的Delphi、C+ Builder系列等。Visual Studio 是微软公司推出的集成开发环境,是目前最流行的 Windows 平台应用程序开发环境。它是把代码的编写、程序的调试、编译、运行以及其他的相关操作都集成在一起的“编程工具”。 作用是程序员通过它这个平台,利用编程语言来写程序,调试,运行。SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统。该
11、版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。经分析,本库存管理系统选用Visual C#.NET来设计界面,选用SQL Server 2000来建立后台数据库。1.3可行性分析可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能
12、带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。一般来说,可行性分析应从经济可行性、技术可行性、操作可行性等方面进行研究。本系统的可行性分析如下:1.3.1经济可行性分析由于本库存管理系统所要求的硬件(计算机及相关硬件)和软件环境(Visual C#.NET+SQL Server 2000),市场上都容易购买到或从相关网站下载,系统成本主要集中在本管理系统的开发与维护上,对用户不造成过重的经济负担。而一旦此系统投入使用,不仅可以减少库存的工作强度,提高工作效率,而且
13、方便了库存对信息的管理,延续了传统的管理模式,极大限度地方便了库存管理人员,而且,目标系统不是很复杂,开发的周期较短,人员经济支出不大,所节省的大量人力、财力产生的效益将远远大于本系统的开发成本,所以从经济方面讲开发此系统是可行的。1.3.2.技术可行性分析技术上的可行性分析要考虑现有技术条件能否顺利完成开发工作及将来要采用的硬件和软件技术能否满足用户提出的要求(如计算机的容量、速度等)。本系统采用Visual C#.NET作为系统前台应用程序开发工具,采用SQL Server 2000工具建立数据库,并通过Visual C#.NET中的ADO控件使两者进行连接从而进行系统软件开发。Visua
14、l C#.NET不仅能帮助软件开发者提高软件开发的质量和效率,缩短开发周期,而且还具备强大的数据库管理功能,完全能够满足本系统的开发需求。 此外,从开发人员的水平考虑,作为计算机科学与技术专业毕业的学生,大学四年所积累的专业知识使我们从一定程度上具备了开发一个小型系统的能力,而且学校现有的计算机设备也完全能够满足开发的需要。1.3.3.操作可行性分析传统的库存管理系统,一般有两种方式:一是手工管理,这种方式应用最传统的“笔纸操作系统”,将库存的货物信息、销售信息、厂商信息管理及单据管理等均以纯手工的形式进行,将信息以表格文件的表现形式记录在纸上,再进行统一保存。这种方式虽然在简单信息查询时会有
15、一定的方便,但是存在着更多的不便:信息保存时间和条件很受限制、容易被损坏、信息查询不便、信息传达容易造成失误等。另一种常见的信息管理方法是应用单机版的管理系统,本系统就是一款做的相对到位的单机版的库存管理系统,在库存信息处理方面做得很精准规范。因为库存管理人员已经有丰富的信息管理经验,加之有相当的计算机应用经验,所以对于此系统一定很容易就可操作熟练。综上所述,本库存管理系统投资少、收益大,且其运行操作简单易学,具备了开发的可行性。1.4系统的开发及功能描述1.4.1.开发方法的选择信息系统的开发是一项比较复杂的工作,因此我们必须选用科学有效的开发方法。本系统的开发采用了生命周期法。在系统设计时
16、遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,则通过在系统的使用及对系统了解的不断加深中,对某一部分或几部分进行重新分析、设计、实施,使系统逐步完善。1.4.2.系统功能描述及系统安全性本库存管理系统是一套对货品入库、出库、库存进行全面管理的系统。在管理内容上,它的主要功能包括:进货管理:进行填写货品信息,货品采购入库,入库单据的填写和修改最低库存量。 出货管理:进行货品出库,出货单据的填写和获取采购员信息。信息查询:货品信息查询,库存信息查询,入库、出库单据查询,日报表、月报表查询。统计报表:完整的日报表、月报表统计查询功能,每张单据每次业务金额都可以
17、清楚地反映。系统管理:身份验证,修改本人密码,注册用户,修改删除用户。由于库存管理系统包含比较重要的信息,因此,在系统设计时除了注重用户的需求,还要保证系统的安全性和一致性,体现如下:(1)安全性:本系统中共分为三类不同的用户,分别具有不同的权限。(2)一致性:系统的数据要保证一致性、准确性,当某一数据库中记录发生改变时,与之相关联的数据库也随之变化。1.5系统逻辑模型本系统的逻辑模型以系统的数据流图为主要描述工具。数据流图是组织中信息运动的抽象,是在调研的基础上,从系统的科学性、管理的合理性、实际运动的可行性角度出发,将信息处理功能和彼此之间的联系自顶向下,逐层分解,从逻辑上精确地描述系统应
18、具有的数据加工功能、数据输入、数据输出、数据存储及数据来源和去向(外部实体)等项目,它表达了数据和处理的关系。为了叙述方便,我们用不同的符号代表这四个元素:表示数据流;表示文件(数据存储);表示加工;表示数据流的源点和终点。通过分析调查有关库存管理需要,并针对一般库存管理系统的功能需求,设计出库存管理系统顶层数据流程图如图1-1所示:业务输入业务结果查询结果查询要求 注册用户修改要求修改结果系统管理员仓库管理员返回结果库存管理系统经理查询要求查询结果图1-1:库存管理系统顶层DFD根据系统的顶层数据流图,进一步分析,画出系统的第二层数据流图如图1-2所示:出货结果出货管理进货管理采购员表仓库信
19、息表 操作员个人信息表客户信息表采购员表查询结果修改结果修改要求信息查询操作员个人信息表密码用户编号用户编号密码数据维护信息查询系统管理员仓库管理员进货管理身份验证身份验证操作员个人信息表系统管理员库存管理系统出货管理进货结果月报表统计报表统计统计结果采购员表库存信息表表货品信息表表库存信息表表日报表经理身份验证用户编号密码信息查询经理货品信息表库存信息表入库单出库单信息查询查询结果日报表月报表操作员个人信息表图1-2库存管理系统的第二层DFD图第二章 系统设计2.1系统总体结构设计2.1.1.系统功能分析系统开发的总体任务是实现企业物资设备管理的系统化、规范化和自动化,从而达到企业仓库库存管
20、理效率的目的。系统功能分析是在系统开发总体任务的基础上完成的。本库存管理系统需要完成的功能有:(1)库存管理的各种信息的输入,包括入库、出库、货品信息的输入等。 (2)库存管理的各种信息的查询、修改和维护。 (3)入库单、出库单的生成,日报表、月报表的生成。 (4)在货品库存中加入所允许的最低库存字段,对所有库存物资实现监控和报警。 2 .1.2系统功能模块图根据系统功能分析,画出系统功能模块图如下:库存管理系统身份验证注册用户修改删除用户修改密码信息查询报表统计进货管理出货管理系统管理入库单填写填写货品信息修改最低库存出库单填写获取采购员信息日报表月报表货品查询报表查询图2-1系统总体功能模
21、块图2.2数据库设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。同时,合理的数据库结构也将有利于程序的实现。设计数据库时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。2.2.1数据库概念结构设计本系统将货品分类,每类货品都有一名采购员负责采购,每名采购员只负责采购一类货品,每类货品都放在一个仓库中,一个仓库中可以放不同种类的货品,每个客户可以订购不同的货品,每种货品可以卖给不同的客户。货品采购仓库客户存储订购采购员n1mnn1货品编号规格
22、型号单位货品名称客户编号客户名称仓库名称负责人联系电话采购员编号采购的货品类别图2-2库存管理系统E-R图2.2.2.数据库逻辑结构设计根据系统功能需求与数据流程图,本数据库管理系统需要11个数据表,分别是操作员个人信息表、登录表、仓库信息表、货品信息表、库存信息表、入库单、出库单、采购员表、客户信息表、日报表、月报表。11个表的数据库逻辑结构如下: 操作员个人信息表(UID, Uname, Sex, Tel); 登录表(UID ,PWD, Limit); 仓库信息表(仓库名称,负责人,联系电话,联系地址,备注); 货品信息表(货品编号,货品名称,货品类别,单位,规格型号,颜色); 库存信息表
23、(库别,货品编号,最低库存,数量,进货单价,出货单价); 入库单(凭证编号,库别,货品编号,数量,进货单价,合计,入库时间,制单人,采购人编号); 出库单(凭证编号,库别,货品编号,数量,出货单价,合计,出库时间,制单人,客户编号); 采购员表(UID, Uname, 采购的货品类别,Tel); 客户信息表(客户编号,客户名称,联系人,联系电话,联系地址,备注); 日报表(日期,货品编号,本日入库数量,本日入库金额,本日出库数量,本日出库金额,本日出库利润); 月报表(月初日期,月末日期,货品编号,本月入库金额,本月出库金额,本月出库利润); 2.2.3.设置引用完整性为了防止用户不小心删除有
24、用的数据,或者输入错误的数据,就需要设置引用完整性 (Referential Integrity)。例如本系统用到的数据库中,入库单中输入的货品编号必须现存在于货品信息表中。通过设置引用完整性对数据库进行约束,能够帮助程序员和用户确保使用的数据是合法的。2.2.4.数据库链接的实现为了充分展现对象编程的思想,系统中利用ADO.NET中的组件SqlConnection实现数据库和前台应用程序之间的连接,利用connection对象和command对象实现随时访问数据库的功能。ADO控件较灵活,它使用SQL表达式,通过SQL属性来和数据库文件相连并显示要显示的字段,可以方便地对一个或多个数据表中的
25、记录进行访问。记录客户资料的情况(如表2-1)客户信息表 表2-1:客户信息表(client)序号字段中文名字段英文名类型、宽度、精度取值约束空否默认值主键/外键索引否1客户编号cidint可空无主键2客户名称cnamevarchar非空无3客户类型ctypetinyint可空无4联系人contactvarchar(30)可空无5通信地址caddressvarchar(50)可空无6邮政编码postcodevarchar(10)可空无7联系电话phonevarchar(30)可空无8传真电话faxvarchar(30)可空无9备注信息memovarchar(100)可空无 记录仓库信息的表(如
26、表2-2)仓库信息表 表2-2:仓库信息表(storehouse)序号字段中文名字段英文名类型、宽度、精度取值约束空否默认值主键/外键索引否1仓库编号stidint可空无主键2仓库名称snamevarchar(50)非空无3仓库说明memovarchar(100)可空无记录用户个人资料的表(如表2-3)用户信息表表2-3:用户信息表(users)序号字段中文名字段英文名类型、宽度、精度取值约束空否默认值主键/外键索引否1用户名usernamevarchar(40)可空无主键2密码pwdvarchar(40)非空无3用户类型usertypetinyint非空无用于区分产品类别的表(如表2-4)产
27、品类别信息表表2-4:产品类别信息表(protype)序号字段中文名字段英文名类型、宽度、精度取值约束空否默认值主键/外键索引否1产品类别编号typeidint序列可空无主键2产品类别名称typenamevarchar(50)序列非空无3上级产品类别upperidint无可空无用来记录产品信息和区分产品类别的表(如表2-5)产品信息表表2-5:产品信息表(product)序号字段中文名字段英文名类型、宽度、精度取值约束空否默认值主键/外键索引否1产品编号pidint可空无主键2产品名称pnamevarchar(50)非空无3产品类型编号typeidint可空无4产品规格pstylevarcha
28、r(50)可空无5计量单位punitvarchar(10)可空无6参考价格ppricedecimal(15,2)可空无7产品数量下限plowint可空无8产品数量上限phighint可空无9有效期validint可空无10在到达有效期前几天发出警告alarmdaysint可空无2.3系统功能模块的详细设计本库存管理系统是本着用户操作界面友好、清晰、易学易用的原则进行设计的。2.3.1身份验证模块的设计在进入系统主界面之前,会出现一个身份验证对话框,要验证用户的身份。本系统中用户分为管理员、仓库管理员和经理三种。不同用户其权限也不同。库存管理系统用户名称:用户密码:退出登陆图2-3 用户登录模块
29、界面设计该模块的流程图如图2-4所示:是否用 户登 录是否为合法用户?否选择身份判断用户类型进入系统开 始结 束图2-4用户登录模块流程图此外,对一个完整的系统而言,用户是应该可以修改自己的密码的,因此系统中应该具有修改密码的功能,提高数据的安全性,用户可以在进入系统主界面后可以修改自己的密码。当用户输入完成之后,按“确定”按钮来关闭对话框,系统会自动检查用户两次输入的密码是否一致,如果不一致,会出现出错提示并建议用户重新输入。请输入新密码请确认新密码确认取消图2-5修改密码界面设计2.3.2系统主界面的实现 系统主界面分为三个,根据用户的权限不同进入不同的主界面,分别是系统管理员界面、仓库管
30、理员界面、经理界面。各自主界面自然有不同的功能。 系统管理基本档案查询统计系统维护图2-6主界面(admin)设计2.3.3进货管理模块的实现 进货管理模块包括填写货品信息、入库单、修改最低库存三个子模块。(1)填写货品信息盘点管理货品编号仓库名称计量单位盘点货物盘点数量盈亏数量确定取消图2-7填写货品信息设计(2)入库单 货物管理货物编号货品名称供应商名称仓库名称货物规格计量单位确定取消入库数量货物单价图2-8入库单设计2.3.4出库管理模块的实现出库管理包括填写出库单,获取采购员信息两个子模块。(1)出库单出库单仓库名称货品名称计量单位货物规格出库数量货物单价确定取消出货总金额提货人图2-
31、9出库单设计2.3.5.报表统计模块的实现本系统的报表分为日报表和月报表,日报表在添加入库单和出库单时就已经自动添加进数据库中的日报表了,所以在此只需再手动添加月报表。月报表月初日期月末日期确定取消仓库设置图2-10月报表的设计2.3.6.信息查询模块的实现该模块三种用户都会用到,用户根据不同的权限分别可以查询不同的内容,如系统管理员为了修改仓库信息表、采购员信息表、客户信息表而查询相关信息,仓库管理员为了通知采购员及时采购而查询采购员信息,经理查询仓库管理的各种信息等。第三章 系统实现系统实现包括用户需求实现,系统界面实现和数据库实现三方面。3.1 用户登录界面用户通过该界面登录进入系统。在
32、其输入用户编号与密码之后,单击“确定”按钮登录数据库(为了方便用户,本系统允许用户在输入密码之后直接按回车键登录数据库,而无须使用鼠标单击“确定”按钮)。此时触发“确定”按钮的Click事件相应函数。图3-1系统登录界面3.2 密码修改界面图3-2密码修改界面修改用户密码程序private void btnSure_Click(object sender, EventArgs e) if (txtFUNPwd.Text.Trim() != txtUNPwd.Text.Trim() errorPrPwd.SetError(txtFUNPwd, 输入密码不一致!); else if (txtUOP
33、wd.Text.Trim() != SMS.frmLogin.M_str_pwd) MessageBox.Show(用户旧密码输入错误,请重新输入!, 错误提示, MessageBoxButtons.OK, MessageBoxIcon.Error); else datacon.getcom(update tb_User set UserPwd=+txtUNPwd.Text.Trim()+where UserName=+txtUName.Text.Trim()+); MessageBox.Show(密码修改成功!, 信息, MessageBoxButtons.OK, MessageBoxIco
34、n.Information); End Sub3.3 入库管理界面 图3-3入库管理界面private void frmISManage_Load(object sender, EventArgs e) 设备入库程序 dgvISManage.Controls.Add(hScrollBar1); doperate.cboxBind(select StoreName from tb_Storage, tb_Storage, StoreName, cboxSName); doperate.cboxBind(select PrName from tb_Provider, tb_Provider, Pr
35、Name, cboxPName); DataSet myds = datacon.getds(select ISID as 入库编号,GoodsID as 货物编号,GoodsName as 货物名称,PrName as 供应商名称, + StoreName as 仓库名称,GoodsSpec as 货物规格,GoodsUnit as 计量单位,GoodsNum as 入库数量, + GoodsPrice as 进货价格,GoodsAPrice as 总金额,ISDate as 入库日期,HandlePeople as 经手人, + ISRemark as 备注from tb_InStore,
36、 tb_InStore); dgvISManage.DataSource = myds.Tables0; private void btnAdd_Click(object sender, EventArgs e) if (txtISGID.Text = ) MessageBox.Show(货物编号不能为空!, 信息, MessageBoxButtons.OK, MessageBoxIcon.Information); if (txtGIPrice.Text = ) MessageBox.Show(货物单价不能为空!, 信息, MessageBoxButtons.OK, MessageBoxIc
37、on.Information); else int P_int_returnValue = doperate.InsertGoods(Convert.ToInt32(txtISGID.Text.Trim(), txtISGName.Text.Trim(), cboxPName.Text.Trim(), cboxSName.Text.Trim(), txtGSpec.Text.Trim(), cboxGUnit.Text.Trim(), Convert.ToInt32(txtISGNum.Text.Trim(), Convert.ToDecimal(txtGIPrice.Text.Trim(),
38、 txtHPeople.Text.Trim(), txtISRemark.Text.Trim(); if (P_int_returnValue = 100) MessageBox.Show(该货物号已经被占用!, 信息, MessageBoxButtons.OK, MessageBoxIcon.Information); else if (P_int_returnValue = 200) MessageBox.Show(这类货物已经存在惟一编号!, 信息, MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Sh
39、ow(货物入库成功!, 信息, MessageBoxButtons.OK, MessageBoxIcon.Information); frmISManage_Load(sender, e); private void btnDel_Click(object sender, EventArgs e) 删除入库表中记录 try datacon.getcom(delete from tb_InStore where ISID= + Convert.ToString(dgvISManage0, dgvISManage.CurrentCell.RowIndex.Value).Trim() + ); Me
40、ssageBox.Show(货物删除成功!, 信息, MessageBoxButtons.OK, MessageBoxIcon.Information); frmISManage_Load(sender, e); catch (Exception ex) MessageBox.Show(ex.Message, 警告, MessageBoxButtons.OK, MessageBoxIcon.Warning); 3.4 出库管理界面 图3-4出库管理界面private void frmOSManage_Load(object sender, EventArgs e) 设备出库程序 dgvOSMa
41、nage.Controls.Add(hScrollBar1); doperate.cboxBind(select distinct StoreName from tb_InStore, tb_InStore, StoreName, cboxSName); DataSet myds = datacon.getds(select OSID as 出库编号,StoreName as 仓库名称,GoodsName as 货物名称, + GoodsSpec as 规格,GoodsUnit as 计量单位,GoodsNum as 出库数量,GoodsPrice as 价格,GoodsAPrice as 总金额, + OSDate as 出库