物流管理系统(共13页).doc
精选优质文档-倾情为你奉上 物流管理系统 一 . 引言 实习目的:通过实习,参与具体的java开发项目,进一步提高了java开发的基本技术,丰富java开发的实战经验。过学习,巩固大学所学专业的基础知识,提高分析,判断和处理实际问题的能力,锻炼自己的实际动手能力,增强自己的团队协作意识,了解计算机专业软件开发的具体流程,完善了自己的知识结构。为毕业之后能够更快地进入工作状态并且能够更好地工作,打好一定的基础。 实习要求:能够熟练运用Java,独立设计和编制一个具有一定难度的、解决实际应用问题的物流管理系统的应用程序。2 系统设计 软件系统的总体设计大约要经历可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试以及维护等七个阶段。可行性分析和项目开发计划在前面已经叙述,下面所要做的是进行软件需求分析,概要设计和详细设计。编码过程将在下一章节论述,而测试和维护过程不在本文中叙述。 系统需求分析在经过前一阶段的分析之后,我确定了我的开发课题为仓库物流管理系统。现在所要做的是要准确定义系统必须做什么以及系统必须具备的功能。软件需求分析中我采用结构化分析方法(Structured Analysis,简称SA),SA是面向数据流进行需求分析的方法,像所有的软件分析方法(如面向对象分析方法、IDEF方法等等)一样,SA也是一种建模活动,它使用简单易读的符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘满足功能要求的软件模型。在系统中我采用数据流图(DFD)这种半形式化的描述方式表达需求。它是一种功能模型,以图形的方式描绘数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能。它有四种基本图形符号: :箭头,表示数据流; :圆或椭圆,表示加工; :双杠,表示数据存储; :方框,表示数据的源点或终点。为了表达较为复杂问题的数据处理过程,用一张数据流图是不够的,要按照问题的层次结构进行逐步分解,并以一套分层的数据流图反映这种结构关系。在这里我一共使用了三层数据流图,即顶层图,0层图和1层图(也是底层图)。在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输出流是该系统的输出数据;底层流图是指其加工不需要再做分解的数据流图,中间层流图表示对其上层父图的细化,它的每一步加工可能继续细化成子图。经过对系统的分析首先得到系统的顶层DFD,如图1-1:物流管理员工作人员工作人员物品入库、物品出库、物品报损、物品查询、物品汇总、物品报表等操作仓库物流管理系统物流管理员物品查询、物品汇总、物品报表等信息 图1-1物流管理系统顶层图进一步细化得到系统的0层DFD,如图1-2:工作人员管理物流管理员工作人员工作人员物品登记与物流处理管理物流情况查询物流情况汇总物品类别管理数据维护管理物流管理员人员信息表物品类别信息表物品登记信息表物品流通信息表图1-2 物流管理系统的0层图再进一步细化每一个数据加工功能,得到系统的1层DFD图(略)。在这里只给出有关顶层和0层数据流图,它们体现出了系统的功能部分,而1层DFD图暂略,后面具体说明其内容。通过以上对数据流图的分析之后,我们已大体地了解了系统的功能和目标,接下来所要做的就是系统功能模块的划分和数据库的设计,也就是系统的概要设计。系统概要设计在软件需求分析阶段,搞清楚了软件“做什么”的问题,形成了目标系统的逻辑模型。现在我们所要做的就是要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求。首先,我们需要描述的是系统的总的体系结构。1.1.1 系统结构设计系统的概要设计中最重要的就是系统的模块化。模块化是指解决一个复杂问题时自项向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。 将系统划分为多个模块是为了降低软件系统的复杂性,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。在系统的概要设计中我采用结构化设计(Structure Design,简称SD),SD以需求分析阶段产生的数据流图DFD为基础,按一定的步骤映射成软件结构。我首先将整个系统化分为几个小问题,小模块,在系统中,我设计了工作人员管理,物品类别管理,数据维护管理,物品登记与物流处理管理,物流情况查询和物流情况汇总6个模块。然后,进一步细分模块,添加细节。比如,工作人员管理我又将其分为工作人员注册、工作人员注销、授权、密码修改、增加照片等;物品登记与物流处理管理分为物品登记、进库、出库、报损等。以下就是系统功能模块图,如图1-3: 图1-3 系统功能模块图1.1.2 数据库设计在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就是数据库的设计问题,软件设计的一个核心。1. E-R图设计在系统设计的开始,我首先考虑的是如何用数据模型来数据库的结构与语义,以对现实世界进行抽象。目前广泛使用的数据模型可分为两种类型,一种是独立于计算机系统的“概念数据模型”,如“实体联系模型”;另一种是直接面向数据库逻辑结构的“结构数据模型”。在本系统中我采用“实体联系模型”(E-R模型)来描述数据库的结构与语义,以对现实世界进行第一次抽象。E-R模型直接从现实世界抽象出实体类型及实体间联系,然后用E-R图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。但E-R模型只能说明实体间语义的联系,不能进一步说明详细的数据结构,它只是数据库设计的第一步。ER图是直观表示概念模型的工具,它有四个基本成分: 矩形框,表示实体类型(考虑问题的对象)。 菱形框,表示联系类型(实体间的联系)。 椭圆形框,表示实体类型和联系类型的属性。对于关键码的属性,在属性名下划一横线。直线,联系类型与其涉及的实体类型之间以直线连接。本系统为仓库物流管理,主要管理物品的登记、流通以及种类和工作人员等事项。仓库根据需要可以查询物品的信息,同时还需要了解在库存流通中员工的参与情况。依据物流管理的实际情况,考虑了多方面的因素以后,确定系统的E-R图如下:停用说明密码工作人员职员ID姓名照片联系电话操作权限日期图1-4 工作人员表E-R图物品登记照片说明单价类别ID名称物品ID图1-5 物品登记表E-R图物品流通物流ID物品ID物流类型经手人日期说明数量图1-6 物品流通表E-R图物品种类类别ID说明图1-7 物品种类表E-R图图1-8 数据库表关系图在该数据库中,本系统中的物品流通是核心,也是基本,没有了物品流通其它的也就没有什么意义了。经手人的添加是考虑到责任问题,也就是说,在物流管理的实际运用中,出现了责任不清的现象,特别是由于仓库的进出物品数量都比较大时产生了一系列问题,所以在设计数据库时,我特别考虑到这一点,在物品流通表中加入了经手人。2. 数据库表格设计在完成系统的E-R图之后,需要将E-R模型转化为关系模型,也就是说,要设计出数据库所需要的表格。在这里,我选用的是关系数据库。因为关系数据库中的二维表格可以很清楚地描述数据之间的联系。根据系统E-R图,针对本系统的特点,在对所搜集的数据进行规范化之后,定义了如下四张表格,分别是工作人员信息表,物品流通信息表,物品登记信息表和物品种类信息表。通过对这四张表格的操作可以较好地完成系统设计的各项功能,四张表格之间有着不同程度的联系。工作人员信息表(图1-9):图1-9 工作人员信息表图工作人员信息表主要用于记录物流管理人员的详细信息,包括职员ID、姓名、密码、操作权限、停用、联系电话、说明、照片和日期类型等有关工作人员的各类信息。在该表中职员ID是主键,它是工作人员的值是登记时自行填写的,它会和经手人相对应的,体现出物品是经谁的手出入库的。姓名和密码的值也是登记时自行填写的,但必须要记住。它们是在用户登陆时用来确定用户和密码的正确性,以防止非法用户登陆。操作权限则是工作人员在操作系统的时所授权的范围,分为物品登记、物流处理、物流查询和物流汇总。停用则是指该注册工作人员是否可以操作本系统。联系电话、说明和照片则是介绍个人情况的。日期则是系统当时默认时间的,是不可以修改的。物品流通信息表(图1-10):图1-10物品流通信息表图物品流通信息表主要用于记录各物品经仓库和物流管理人员的详细信息,包括物流ID、物品ID、物流类型、数量、经手人、日期、说明和记录特征类型等各类信息。该信息表是数据库的主表,是不可缺少的。在该表中物流ID是主键,它是记录每一次物品流动时的唯一编号,不会有重复,而且是计算机自动编号。物品ID则是记录每一件物品本身的编号,它跟物流ID是有区别的。数量则是每次流通数量的多少。而经手人前面已经说过,这里就不在叙述了。日期则是记录当时物流的时间,是当时的默认时间,是系统给定的。说明是指记录物品当时的情况或物品的特征的。记录特征就很好理解了,就是该操作是否被记录。物流类型则是记录物品流通的一种形式,包括:"进库" Or "出库" Or "报损"。值得提出的一点是入库记录和出库记录的添加不仅仅是单表操作,由于它们都与库存记录相联系,所以,无论您是添中入库记录还是添加出库记录,都必须同时修改库存记录,以保持数据的一致性,否则将引发系统出错而这些我都让其在系统中自动完成。无论您是添加入库记录,还是添加出库记录,系统都将自动修改库存中物品的数量,而且,在您出库的数量大于库存数量时,系统还会自动提示错误,这样就可以防止一定错误的发生。物品登记信息表(图1-11):图1-11物品登记信息表图物品登记信息表主要用于记录仓库中各各物品的详细信息,包括物品ID、名称、类别ID、单价、说明和照片类型等有关物品的各类信息。在该表中物品ID作为主键,它是管理员每增加一件物品时,物品ID就会自动为其编上一个号码。类别ID则是说明该物品属于某一物品种类的。而名称、单价、说明和照片是介绍物品本身的信息。物品种类信息表(图1-12):图1-12物品种类信息表图物品种类信息表主要用于记录仓库中物品种类的信息,包括类别ID和说明两个类型的信息。类别ID是指创建一类物品的种类的称呼。而说明则是对类别ID进行描述。3 系统实现 登录窗体的设计及实现登录界面是一个系统的开始,所以我就从系统的开始进行说明。登录窗体是系统的一个门,只有通过它才能进入主界面,所以登录界面是非常关键的。如下图2-1:图2-1 登录窗体图该窗体主要是完成职员ID和密码的校对,所以下面这段代码就是校对职员ID和密码,其与数据库的链接采用代码来完成。 Dim strZyID As String, strMm As String Dim rs As ADODB.Recordset strZyID = Trim(txtZyID) strMm = Trim(txtMm) Set rs = mCdt.rsGZRYDL(strZyID, strMm) '验证用户 If rs.EOF Then MsgBox "登录失败!", vbInformation txtZyID.SetFocus txtZyID.SelStart = 0 txtZyID.SelLength = Len(txtZyID.Text) Else gbytZyQX = rs("操作权限") gstrZyID = strZyID gblnOK = True Hide End If 下图2-2是“修改密码窗体”,只有通过鼠标点击登录窗体中的修改密码键,才能进入其窗体。 图2-2 修改密码窗体图其下面代码如上图所示“确定鍵”的代码。 '更新密码 mCdt.UpdataMm lblZyID, Trim(txtYmm), Trim(txtXmm) Unload Me但在修改密码之前一定要解决两个问题,一是身份验证过程,二是更新密码前调用身份验证过程。这两点很重要,只有通过这两点,才可以修改密码。下面是解决这两点的代码程序,如下:Public Function checkMm(strZyID As String, strMm As String) As Integer '身份验证过程 On Error Resume Next Dim rs As ADODB.Recordset Dim I As Integer Set rs = mCdt.rsGzryYzmm(strZyID, strMm) I = rs(0) rs.Close checkMm = IEnd FunctionPrivate Sub txtYmm_LostFocus() '更新密码前调用身份验证过程 If checkMm(lblZyID, txtYmm) = 1 Then txtYmm.Enabled = False txtXmm.Enabled = True cmdOK.Enabled = True txtXmm.SetFocus Else MsgBox "该职员身份或密码验证无效!", vbInformation txtYmm.SetFocus End IfEnd Sub系统主窗体的设计及实现系统主窗体的主要设计结构有菜单栏、工具栏和状态栏三部分。如下图2-3所示:图2-3 系统主窗体图为了实现这三部分的功能,就必须赋于它们相对应功能的代码。下面就一一列举:显示工作人员登记窗的代码是:Private Sub mnuXtGzrydj_Click() Dim frmNewWin As New frmGZRYDJ frmNewWin.Show vbModal '显示工作人员登记窗 Set frmNewWin = NothingEnd Sub显示物品类别登记窗的代码是:Private Sub mnuXtWplbdj_Click() Dim frmNewWin As New frmWpzldj frmNewWin.Show vbModal '显示物品类别登记窗 Set frmNewWin = NothingEnd Sub显示数据维护窗的代码是:Private Sub mnuXtSjwh_Click() Dim frmNewWin As New frmSJWH frmNewWin.Show vbModal '显示数据维护窗 Set frmNewWin = NothingEnd Sub显示打印设置的代码是:Private Sub mnuXtSetPrint_Click() SetPrintEnd Sub显示物品登记与物流处理窗体的代码是:Private Sub mnuWlcl_Click() frmWlcl.SetFocusEnd Sub显示物品流通查询窗体的代码是:Private Sub mnuWlcx_Click() frmWlcx.SetFocusEnd Sub显示物品流通汇总窗体的代码是:Private Sub mnuWlhz_Click() frmWlhz.ShowEnd Sub显示或隐藏工具栏的代码是:Private Sub mnuWindowToolbar_Click() '显示或隐藏工具栏 If mnuWindowToolbar.Checked Then tbToolBar.Visible = False mnuWindowToolbar.Checked = False Else tbToolBar.Visible = True mnuWindowToolbar.Checked = True End IfEnd Sub'显示或隐藏状态栏的代码是:Private Sub mnuWindowStatusBar_Click() '显示或隐藏状态栏 If mnuWindowStatusBar.Checked Then sbStatusBar.Visible = False mnuWindowStatusBar.Checked = False Else sbStatusBar.Visible = True mnuWindowStatusBar.Checked = True End IfEnd Sub以上就是对菜单栏内各项其功能所编写的代码。下面是对工具栏所编写的代码。如下:Private Sub tbToolBar_ButtonClick(ByVal Button As MSComctlLib.Button) '选择执行工具栏命令 Select Case Button.Index Case 1 mnuXtGzrydj_Click Case 2 mnuXtWplbdj_Click Case 3 mnuXtSjwh_Click Case 4 mnuWlcl_Click Case 5 mnuWlcx_Click Case 6 mnuWlhz_Click Case 7 mnuHelpSearch_Click End SelectEnd Sub本界面引用了几个组件,分别是Imagelist, Toolbar,StatusBar,CommonDialog和MDIForm菜单编辑器。这里我分别介绍一下他们各自的用途。1.Windows 窗体 ImageList 组件用于在控件(如 ListView、TreeView、ToolBar、Button 和 TabControl 控件)上显示图像。图像列表使您能够为一致的单个图像目录编写代码。其下图2-4就是通过该组件对工具栏上的按键添加图像的。 3. Windows 窗体 StatusBar 控件用作窗体中的一块区域,通常显示在窗口的底部,应用程序可在该区域中显示各种状态信息。StatusBar 控件可包含状态栏面板,用以显示指示状态的图标,或一系列指示进程正在执行的动画图标(如 Microsoft Word 指示正在保存文档)。其下图2-6就是状态栏的各窗格设置其属性的对话框。图2-6 属性页图4. CommonDialog控件提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。在应用程序中要使用 CommonDialog 控件,可将其添加到窗体中并设置其属性。控件所显示的对话框由控件的方法确定。在运行时,当相应的方法被调用时,将显示一个对话框或是执行帮助引擎;在设计时,CommonDialog 控件是以图标的形式显示在窗体中。该图标的大小不能改变。使用指定的方法,CommonDialog 控件能够显示下列对话:方法 所显示的对话框 ShowOpen 显示“打开”对话框 ShowSave 显示“另存为”对话框 ShowColor 显示“颜色”对话框 ShowFont 显示“字体”对话框 ShowPrinter 显示“打印”或“打印选项”对话框ShowHelp 调用 Windows 帮助引擎5菜单编辑器主要是提供了一个设计菜单的工具。下图2-7就是菜单编辑器对话框。 工作人员登记窗体的设计及实现工作人员登记窗体上放置一个DataList控件,一个Image控件,一个ListBox控件,四个TextBox控件,七个CommandButton控件,七个Label控件和一个CheckBox控件。而数据库的链接采用代码来完成。其窗体如图2-8所示:图2-8 工作人员登记窗体图该窗体主要是完成工作人员登记的,所以重要完成添加工作人员登记的编码是本窗体。其代码如下:Private Sub cmdAdd_Click() '追加新记录 On Error Resume Next rs.AddNew rs("职员ID") = "新职员" rs("姓名") = "" rs("操作权限") = "00000" rs("停用") = False rs("联系电话") = "" rs("日期") = Date rs("说明") = "" txtZyID.Enabled = True txtZyID.SetFocusEnd Sub四 结束语本系统是一个面向通用型企业仓管系统,具有一定实用性的数据库信息管理系统。它主要完成对仓库的一系列管理,包括物品登记以及物品流通和工作人员信息管理。主要目的是熟悉数据库管理系统的开发过程和对数据库管理软件Microsoft Access2000的熟悉和使用。由于时间关系,只给出简单的分析和设计过程,没给出太多细节的处理。本系统具有相当的实用功能。不管是在物品流通处理方面,还是在查询和汇总方面都大胆采用搜索树的方式,只不过在物品流通处理方面是采用不计时的浏览信息,而在查询和汇总方面则是采用计时(按一定时间范围)进行浏览信息的,这样浏览信息相当直观准确些。在汇总方面还可以以二维三维图表的形式表示出来,这样浏览信息就更加直观了。入库、出库、报损也更为灵活方便。工作人员对系统的操作绝对权限制,不会越权。系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关VB许多细节问题都要靠自己去摸索,加之本人水平有限,并没有完全地理解VB的强大功能,而且还存在着许多不足之处。如:1. 受开发条件和开发时间的限制,本系统只利用了本地数据库Access,它同应用程序处于同一系统中,能存储的数据量也有一定限制,并没有发挥出其数据库方面的优势;2. 报表打印功能尚不够全面完善,不能实现二三维报表打印;3. 在登录数据输入时没有及时的对数据库进行数据校验,不能保证程序的流畅性,但后来调整已基本解决;4. 由于时间关系,系统功能实现不够完善,使用不是很方便,还会留有一些BUG等。这些都是需要完善的地方,该系统离实际使用也还有相当的距离,需要进行不断地补充和完善。通过本次毕业设计我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。专心-专注-专业