药品库房管理系统毕业设计

上传人:仙*** 文档编号:79808149 上传时间:2022-04-24 格式:DOC 页数:33 大小:7.80MB
返回 下载 相关 举报
药品库房管理系统毕业设计_第1页
第1页 / 共33页
药品库房管理系统毕业设计_第2页
第2页 / 共33页
药品库房管理系统毕业设计_第3页
第3页 / 共33页
点击查看更多>>
资源描述
学校代码:12904学 号:1004109112中图分类: 密 级:无吉林农业工程职业技术学院毕 业 论 文药品库房管理系统学生姓名: 指导教师: 所在学院(系):信息工程系学科专业:计算机信息管理吉林农业工程职业技术学院中国四平2013年5月题 目:药品库房管理系统摘 要在药店里,药品库房管理是一项非常重要的工作,使用人工方式管理各项品信息不仅效率低下,而且容易出错、安全性很差。并且在实际操作中,数据的查找和维护都不容易实现。药品库房管理系统,就是为了解决这些问题而设计的。其目的是实现药品信息管理和出入库记录的快速高效检索,使操作简单安全,提高工作效率和质量。本系统的主要功能是完成品库房管理的日常工作,包括材料的入库、出库以及库存材料信息的管理维护等。目 录第一章 技术背景和分析.1第二章 系统实施.1 2.1 系统设计.1 2.1.1系统分析.2 2.1.1.1用户需求分析.2 2.1.1.2系统可行性分析.2 2.1.2系统功能模块划分.3 2.2数据库设计.4 2.2.1数据库需求分析.4 2.2.2数据库逻辑设计.4 2.2.3数据库实现.5 2.3表单设计.7 2.3.1材料信息维护表单.7 2.3.2材料信息查询表单.14 2.3.3出入库管理表单.15 2.3.4用户向导制作报表.23 2.3.5主表单设计.25 2.4主控程序设计.26第三章 问题讨论.27 3.1系统功能设计的不完善.27 3.2代码维护.27 3.3数据维护.27 3.3.1数据库的安全问题.27 3.3.2数据的安全问题.27第四章 总结.284.1论文总结 284.2工作展望 28参考文献 29 致谢30 第一章 技术背景和分析Visual FoxPro是为数据库结构和应用程序开发而设计的功能强大的面向对象的软件。无论是组织信息、运行查询、创建集成的关系型数据库系统,还是为最终用户编写功能全面的数据管理应用程序,Visual FoxPro都可以提管理数据所需的工具,可以在应用程序或数据库开发的任何一个领域中提供帮助。本系统使用Visual FoxPro来设计开发的原因是Visual FoxPro具有三大特点。一、强大的管理功能VFP提了一种称为“项目管理器”(program manager)的管理工具,可供用户对所开发项目中的数据、文档、源代码和类库(class library)等资源进行集中高效的管理,开发与维护均更加方便。二、大量使用可视化的界面操作工具VFP 6.0提供向导(wizard)、 设计器(designer)、生成器(builder)等3类界面操作工具,达40种之多。它们普遍采用图形界面,能帮助用户简便快捷地完成各种查询和设计任务。VFP的设计器普遍配有工具栏和弹出式的快捷菜单。每个工具按钮对应一项功能;用户可通过它们方便地完成操作或设计控件,不必编程或很少编程即可实现美观实用的应用程序界面。大多数设计器还提快捷菜单,内含最常用的菜单选项,供用户随时调用。三、支持面向对象的程序设计VFP除继续使用传统的面向过程的程序设计外,还支持面向对象的程序设计。允许用户对“对象”(object)和“类”(class)进行定义,并编写相应的代码。由于VFP预先定义和提供了一批基类,用户可以在基类的基础上定义自己的类和子类(subclass),从而利用类的继承性(inheritance),减少编程的工作量,加快软件的开发过程。使用结构化的程序设计,同时应用面向对象的程序设计,构成了VFP程序设计的特点,同时为用户的编程带来了很大的方便。第二章 系统实施2.1系统设计本系统设计包括两个部分:系统分析和系统功能模块设计。2.1.1系统分析2.1.1.1用户需求分析某药店根据业务发展的要求,选定建立一个“药品库房管理系统”,以取代人工管理。开发目的如下:l、必须要指定的专门人员才能对药品仓库的日常事务进行管理。2、能够对药品库房内的有关各种药品材料的数据进行输入、修改与查询。3、当有药品入库或出库时,能够更新药品的数据进行输入、修改与查询。4、要求有专门的报表存储药品材料的出入库信息,能够打印报表。2.1.1.2 系统可行性分析1、四项基本内容的实现用户在该药品库房管理系统中需要的四项基本内容完全可以利用VFP进行的相关设置(主要是表单设置)来加以实现。例如可以用VFP进行登录界面设计,在表单上添加命令按钮以实现对用户身份的验证,达到用户要求的“必须要指定的专门人才对药品仓库的日常事务进行管理”的目的。2、数据库分析药店中所有药品材料的信息都可以在VFP项目管理器的数据库中建立与维护。该药品仓库管理系统查询药品信息只需要两张数据表(即材料信息表和出入库信息表)就可以满足需求。3、系统的发布及其运行环境。(1)系统的发布:VFP项目管理器提供了一个管理应用系统的集成环境,而且VFP提供的安装向导,支持用户为所开发的项目创建一套“安装(磁)盘”,供系统发布使用。(2)系统的运行环境:操作系统Windows9x系列、用户自定义安装需要85MB硬盘空间,完全安装需要90MB硬盘空间,内存要求16MB以上。推荐使用VGA或更高分辨率的显示器。2.1.2 系统功能模块划分根据以上分析,可以进行系统的功能模块划分,如图21所示: 图21系统功能模块功能模块划分图中各个模块的功能如下:1、登录界面通过输入管理员的用户名和密码进入系统。2、主表单用户可以在主表单上根据需要进行选择以实现各种不同的操作。3、库存材料信息的维护新材料入库时,系统允许管理员添加新材料的记录。材料出库或产品过期需要清除时,管理员可以删除产品信息。记录有误时管理员可以修改数据表中的记录。4、库存材料信息的查询信息查询是仓库管理系统的重要组成部分。用户可以按照材料编号和材料名称等查询条件查询仓库中的材料信息。5、材料的入库、出库新产品或材料需要出入库时,管理员可以直接进行出入库操作;出入库操作后,程序自动修改库存材料的信息。6、报表打印功能可以打印库存表,出入库记录的报表。2.2 数据库设计2.2.1数据库需求分析根据上一节的系统分析,本系统主要是实现仓库药品信息和出入库信息的管理。因此,该药品仓库管理系统的数据关系比较简单,只需要两张数据表:材料信息表和出入库记录信息表。2.2.2 数据库逻辑设计本系统中需要两个数据表:材料信息表和出入库信息表,数据表的字段和结构如表1和表2所示:表1材料信息表表2出入库信息表2.2.3 数据库实现本系统开发中,首先创建库房管理系统的数据库,然后在数据库中创建需要的数据表,为数据表添加记录。如果需要,还可以设计视图和存储过程以及触发器等。下面设计本系统数据库,详细步骤如下:1、创建项目文件“库房管理.pjx”,保存路径为project库房管理系统。2、在该项目中新建数据库“仓库管理”,保存路径为project仓库管理系统data。3、在数据库中新建材料信息表,保存路径为project仓库管理系统data材料信息.dbf。在Table Designer的Fields选项卡中根据表1的内容设置数据表的字段及其属性,如22图所示:图22 “材料信息”表的字段设置切换到Indexes选项卡,设置表索引。如图23所示。将“材料编号”设置为主索引,索引类型为Primary。将“材料名称”设置为普通索引,索引类型为Regular。图23 “材料信息”表的索引设置关闭Table Designer,在“材料信息”表中添加记录。具体做法是:在Project Designer中选中材料信息表,单击Browse按钮,浏览数据表。然后在Visual FoxPro 6.0的主窗口中选取Table | Append New Record菜单命令,在数据表中添加新的记录。出入库信息的创建方法与材料信息表相似,保存路径也与材料信息表相同。表的字段设置和索引分别如图24、图25所示:图24 “出入库信息”表的字段设置图25 “出入库信息”表的索引设置表建立完成后,打开Database Designer,创建数据表之间的关联关系。其结果如图26所示。其中,材料信息表和出入库信息表之间通过索引“材料编号”相关联。图26 数据表的关联关系至此,数据库和数据表的设计完成。下面进入库房管理系统的表单设计。2.3 表单设计本系统主要功能模块的实现由4个表单完成,分别是:材料信息维护表单、材料信息查询表单、出入库管理表单和用于选择操作类型的主界面。2.3.1 材料信息维护表单材料信息维护表单的功能主要是完成材料信息的添加、修改和删除等操作。1、材料信息维护表单设计在项目中新建表单,保存路径为“project仓库管理系统forms材料信息.scx”,在表单的Data Environment中添加“材料信息”表。在表单上添加控件并设置控件的属性,得到如图27所示的表单。图27材料信息维护表单整个“材料信息维护”表单分为3部分,最上面的一部分是在一个Container控件中显示当前材料记录的信息,如材料编号、材料名称、规格、单位和单价等。中间是4个命令按钮分别表示第一条记录、上一条记录、下一条记录、和最后一条记录。下面是维护操作功能按钮,包括添加、修改、删除、保存和退出5种功能按钮。2、添加响应代码下面为表单添加响应代码,实现上述各项功能。“首记录”按钮。单击按钮时,显示“材料信息”表的第一记录。即表中第一条记录被设为当前记录。该按钮的Click事件代码如下:Go topThisform.Refresh“末记录”按钮。单击按钮时,显示“材料信息”表的最后一条记录,即表中最后一条记录被设置为当前记录。该按钮的Click事件代码如下:Go bottomThisform.Refresh“上一条”按钮。单击按钮时,显示当前记录上一条记录。该按钮的Click事件代码如下:thisform.text1.readonly=.t.thisform.text2.readonly=.t.thisform.text3.readonly=.t.thisform.text4.readonly=.t.thisform.text5.readonly=.t. thisform.text6.readonly=.t. thisform.text7.readonly=.t.thisform.text8.readonly=.t.thisform.edit1.readonly=.t.&设置各Text Box和Edit的ReadOnly属性if eof() go bottomelse skip 1endifthisform.refresh“下一条”按钮。单击按钮时,显示当前记录的下一条记录。该按钮的Click事件代码如下:thisform.text1.readonly=.t.thisform.text2.readonly=.t.thisform.text3.readonly=.t.thisform.text4.readonly=.t.thisform.text5.readonly=.t.thisform.text6.readonly=.t.thisform.text7.readonly=.t.thisform.text8.readonly=.t.thisform.edit1.readonly=.t.&设置各Text Box控件的属性if eof() go topelse skip 1endifthisform.refresh“添加”按钮。单击按钮时,完成材料添加功能,在材料信息表中加入一条新记录。该按钮的Click事件代码如下:go bottomtempnum=val(材料信息.材料编号)&获取最后一条记录的材料编号字段append blankgo bottomreplace 材料信息.材料编号 with alltrim(str(tempnum+1)&在表尾添加一条新记录mand1.enabled=.f.mand2.enabled=.f.mand3.enabled=.f.mand4.enabled=.f.mand5.enabled=.f.mand6.enabled=.f.mand7.enabled=.f.mand8.enabled=.f.mand9.enabled=.f.&设置各按钮的有效状态,在添加新记录的过程中,为防止出错,应设置除“保存”按钮之外的其他按钮为无效。这样,在输入完成后,只能使用“保存”按钮来保存记录。thisform.text1.readonly=.f.thisform.text2.readonly=.f.thisform.text3.readonly=.f.thisform.text4.readonly=.f.thisform.text5.readonly=.f.thisform.text6.readonly=.f.thisform.text7.readonly=.f.thisform.text8.readonly=.f.thisform.edit1.readonly=.f.&设置各TextBox控件的属性thisform.refresh“修改”按钮。单击按钮时,修改当前记录。该按钮的Click事件代码如下:mand1.enabled=.f.mand2.enabled=.f.mand3.enabled=.f.mand4.enabled=.f.mand5.enabled=.f.mand6.enabled=.f.mand7.enabled=.f.mand8.enabled=.f.mand9.enabled=.f.thisform.text1.readonly=.f.thisform.text2.readonly=.f.thisform.text3.readonly=.f.thisform.text4.readonly=.f.thisform.text5.readonly=.f.thisform.text6.readonly=.f.thisform.text7.readonly=.f.thisform.text8.readonly=.f.thisform.edit1.readonly=.f.thisform.refresh&本段代码主要功能是设置表单上各控件的可读写状态。“删除”按钮。单击按钮时,删除表中当前记录。该按钮的Click事件代码如下:tempstr=messagebox(“是否删除记录?”,4+32+256,”删除对话框”)if tempstr=6set exclusive ondeletepackset exclusive offthisform.refreshendif&在删除记录之前,首先设置表的操作方式为Exclusive(独占方式),然后用Delete语句为当前记录加上删除标记,最后使用Pack语句删除有标记的记录。“保存”按钮。单击按钮时,将表单中用户输入的信息保存到“材料信息”表。该按钮的Click事件代码如下:dimension aaa(9)&定义数组aaa(1)=thisform.text1.valueaaa(2)=thisform.text2.valueaaa(3)=thisform.text3.valueaaa(4)=thisform.text4.valueaaa(5)=thisform.text5.valueaaa(6)=thisform.text6.valueaaa(7)=thisform.text7.valueaaa(8)=thisform.text8.valueaaa(9)=thisform.text9.value&将表单中的输入值存储到数组中replace 材料信息.材料编号 with aaa(1)replace 材料信息.规格 with aaa(2)replace 材料信息.单价 with aaa(3)replace 材料信息.产地 with aaa(4)replace 材料信息.生产厂家 with aaa(5)replace 材料信息.材料名称 with aaa(6)replace 材料信息.单位 with aaa(7)replace 材料信息.数量 with aaa(8)replace 材料信息.备注 with aaa(9)&用数组修改表记录的各字段mand1.enabled=.t.mand2.enabled=.t.mand3.enabled=.t.mand4.enabled=.t.mand5.enabled=.t.mand6.enabled=.t.mand7.enabled=.t.mand8.enabled=.t.mand9.enabled=.t.&设置各按钮的有效状态thisform.text1.readonly=.t.thisform.text2.readonly=.t.thisform.text3.readonly=.t.thisform.text4.readonly=.t.thisform.text5.readonly=.t.thisform.text6.readonly=.t.thisform.text7.readonly=.t.thisform.text8.readonly=.t.thisform.edit1.readonly=.t.thisform.refresh&设置TextBox控件为只读“退出”按钮。单击该按钮,退出表单。该按钮的Click事件代码如下:Thisform.Release另外表单初始化时“保存”按钮应该为不可用,且显示的内容应该处于只读状态,因此为表单的Init事件添加如下代码:thisform.text1.readonly=.t.thisform.text2.readonly=.t.thisform.text3.readonly=.t.thisform.text4.readonly=.t.thisform.text5.readonly=.t.thisform.text6.readonly=.t.thisform.text7.readonly=.t.thisform.text8.readonly=.t.thisform.edit1.readonly=.t.mand8.enabled=.f.设计完成后,运行表单。如图28所示:图28材料信息维护表单的运行结果2.3.2材料信息查询表单材料信息查询表单的功能是实现材料信息的快速检索。当用户输入材料编号或名称后,可快速检索出所有符合条件的材料记录。1、材料信息查询表单设计新建表单“材料信息查询”,保存路径为“project库房管理系统forms材料信息查询.scx”,在表单的Data Environment中添加“材料信息表”。在表单上添加控件并设置相应的属性,得到如图29所示的表单。图29材料信息查询表单在表单上添加了一个Grid控件,用来显示查询的结果,将Grid的Readonly属性设置为.t.。并且通过一个Combo下拉框控件来实现多依据的查询,本系统中根据材料编号和材料名称实现名称查询,将Combo的Readonly属性设置为.t.。2、添加响应代码Combo用于选择查询依据。此处用户分别选择“材料编号”或“材料名称”进行查询。因此,在表单初始化时,要为Combo Box控件输入初始值。为存储查询结果,还要定义一个在表单运行过程中有效的Cursor公共变量。因此,为表单的Init事件添加如下代码:Public tempcursorThisform.Combo1.additem(“材料编号”)Thisform.Combo1.additem(“材料名称”)Thisform.refresh“查询”按钮完成材料信息的查询。根据用户选择的查询依据和输入的查询数据的值,在表中查找符合条件的记录,显示在表格中。“查询”按钮的Click事件代码如下:if thisform.Combo1.text=”材料编号” select *;from project库房管理系统data材料信息.dbf;where 材料编号=alltrim(thisform.text1.value);into cursor tempcursor; thisform.grid1.recordsource=tempcursor;endifthisform.refresh&按照材料编号查询if thisform.Combol,text=“材料名称”select *;from project仓库管理系统data材料信息.dbf;where 材料名称=alltrim(thisform.text1.value);into cursor tempcursor; thisform.grid1.recordsource=tempcursor;endifthisform.refresh&按照材料名称查询3、运行表单设计完成后,运行表单,结果如图210所示:图210材料信息查询表单的运行结果2.3.3出入库管理表单出入库管理表单实现的功能是记录材料的出入库信息,并修改相应材料信息表。1、出入库管理表单设计出库和入库的功能、结构都比较相似,因而这里用一个表单来实现它们。表单中使用PageFrame控件,分两个页面分别实现入库和出库的功能。新建表单“出入库管理”,保存路径为“project仓库管理系统forms出入库管理.scx”。在表单的Data Environment中添加“出入库信息”数据表。该表单使用了一个PageFrame控件Pageframe1,将Pageframe的PageCount属性值设置为2,即PageFrame设置为两页,分别用于“入库”管理和“出库”管理。将Page1的标题设为“入库管理”;将Page2的标题设为“出库管理”。2、入库管理(1)入库管理表单设计在表单的PageFrame控件单击鼠标右键,在弹出的菜单中选取Edit命令,使其处于编辑状态。切换到Page1页面,添加所需控件并设置其相应属性,界面如图211所示。图211入库管理表单在Page1上添加的控件类型有Label、Text、Command Button、Container和Edit Box。Edit Box控件和Text Box控件类似,不同之处在于Edit Box控件可以对多行字符串进行编辑,并且有垂直滚动条,通常用来显示或设置备注字段。下面首先介绍Edit Box控件特有的属性。如表3所示:表3 Edit Box控件的常用属性Edit Box控件具有的与Text Box控件一样的属性,这里不再赘述。(2)添加响应代码“确定” 按钮的Click事件代码如下:select材料编号;from project仓库管理系统data材料信息.dbf; where 材料编号=alltrim(thisform.pageframe1.page1.text1.value);into cursor tempcursor&根据材料编号在材料信息表中查找记录 temp 材料编号=tempcursor.材料编号 if empty(temp 材料编号) then messagebox(“你要添加的材料在材料库中”+chr(13)+chr(10)+”没有找到,请先到材料库中”+chr(13)+chr(10)+”登记新材料 ”+temp材料编号,0+64,”材料检测”) thisform.pageframe1.page1.text2.readonly=.t.thisform.pageframe1.page1.text3.readonly=.t.thisform.pageframe1.page1.text4.readonly=.t.thisform.pageframe1.page1.text5.readonly=.t.thisform.pageframe1.page1.edit1.readonly=.t.&材料信息表中没有该编号的材料,提示用户更新材料信息表,并设置各Text控件为只读。elsemessagebox(“继续下面的入库信息填写”,0+64,”材料检测”)thisform.pageframe1.page1.text2.readonly=.f.thisform.pageframe1.page1.text3.readonly=.f.thisform.pageframe1.page1.text4.readonly=.f.thisform.pageframe1.page1.text5.readonly=.f.thisform.pageframe1.page1.edit1.readonly=.f.endif&材料编号正确,允许用户继续输入。Close tablesthisform.pageframe1.page1.refresh当进行入库登记时,用户首先输入“入库材料编号”。如果材料信息表中有该材料的信息,且“Txt出入库编号”、“Txt出入库日期”、“Txt经手人”、“Txt数量”、“Txt备注”的ReadOnly属性为.F.,用户才可以继续输入。如果该材料不在材料信息表中,将提示用户首先检查材料信息表。如图212所示,当输入的“入库材料编号”不在材料表中时,提示用户检查材料表。图212材料编号不在材料表中时的运行结果如果材料编号正确,用户可以进行“入库”操作。单击“入库”按钮时,根据用户的输入完成入库操作并更新入库信息表。“入库”按钮的Click事件代码如下:dimension bbb(7)&定义数组temp 数量=val(alltrim(thisform.pageframe1.page1.text4.value)bbb(1)= alltrim(thisform.pageframe1.page1.text2.value)bbb(2)= “i”bbb(3)= alltrim(thisform.pageframe1.page1.text1.value)bbb(4)= alltrim(thisform.pageframe1.page1.text3.value)bbb(5)= alltrim(thisform.pageframe1.page1.text4.value)bbb(6)= alltrim(thisform.pageframe1.page1.text5.value)bbb(7)= alltrim(thisform.pageframe1.page1.editt1.value)&将入库信息存储在数组中replace 出入库信息.出入库编号 with bbb(1)replace 出入库信息.类型 with bbb(2)replace 出入库信息.材料编号 with bbb(3)replace 出入库信息.出入库日期 with bbb(4)replace 出入库信息.数量 with bbb(5)replace 出入库信息.经手人 with bbb(6)replace 出入库信息.备注 with bbb(7)&将记录插入出入库信息表中select *;from “project仓库管理系统data材料信息.dbf”; where 材料编号=alltrim(thisform.pageframe1.page1.text1.value);into cursor tempcursornum1= tempcursor.数量在材料信息表中按“材料编号”查找记录update project仓库管理系统data材料信息.dbf set;数量=num1+temp数量;where 材料编号=alltrim(thisform.pageframe1.page1.text1.value);&修改材料信息表thisform.pageframe1.page1.text1.value=”thisform.pageframe1.page1.text2.value=”thisform.pageframe1.page1.text3.value=”thisform.pageframe1.page1.text4.value=”thisform.pageframe1.page1.text5.value=”thisform.pageframe1.page1.text6.value=”thisform.pageframe1.page1.edit1.value=”&重置Text Box控件和Edit值thisform.pageframe1.page1.text2.readonly=.t.thisform.pageframe1.page1.text3.readonly=.t.thisform.pageframe1.page1.text4.readonly=.t.thisform.pageframe1.page1.text5.readonly=.t.thisform.pageframe1.page1.edit1.readonly=.t.&重置控件的ReadOnly属性thisform.refresh单击“取消”按钮时,取消用户的前一次操作,表单恢复为初始状态。“取消”按钮的Click事件代码如下:thisform.pageframe1.page1.text1.value=”thisform.pageframe1.page1.text2.value=”thisform.pageframe1.page1.text3.value=”thisform.pageframe1.page1.text4.value=”thisform.pageframe1.page1.text5.value=”thisform.pageframe1.page1.text6.value=”thisform.pageframe1.page1.edit1.value=”&重置Text Box控件和Edit值thisform.pageframe1.page1.text2.readonly=.t.thisform.pageframe1.page1.text3.readonly=.t.thisform.pageframe1.page1.text4.readonly=.t.thisform.pageframe1.page1.text5.readonly=.t.thisform.pageframe1.page1.edit1.readonly=.t.&重置控件的ReadOnly属性thisform. pageframe1.page1.refresh“退出”按钮的功能是返回主控界面。该按钮的Click事件代码如下:do form project仓库管理系统forms主表单.scxthisform.release3、出库管理(1)出库管理表单设计出库管理的页面设计与入库管理的页面相似,如图213所示:图213出库管理表进行出库管理时,用户必须先输入“出库材料编号”,然后单击“确定”按钮。如果该材料编号在材料信息表中,允许用户继续完成出入库信息输入,否则提示错误,要求用户重新输入材料编号。(2)添加响应代码“确定” 按钮的Click事件代码如下:select材料编号;from project仓库管理系统data材料信息.dbf; where 材料编号=alltrim(thisform.pageframe1.page2.text1.value);into cursor tempcursor&根据材料编号在材料信息表中查找记录 temp 材料编号=tempcursor.材料编号 if empty(temp 材料编号) then messagebox(“你要添加的材料在材料库中”+chr(13)+chr(10)+”没有找到,请先到材料库中”+chr(13)+chr(10)+”登记新材料 ”+temp材料编号,0+64,”材料检测”)&提示错误elsethisform.pageframe1.page2.text2.readonly=.f.thisform.pageframe1.page2.text3.readonly=.f.thisform.pageframe1.page2.text4.readonly=.f.thisform.pageframe1.page2.text5.readonly=.f.thisform.pageframe1.page2.edit1.readonly=.f.endif&材料编号正确,允许用户继续输入。thisform.pageframe1.page2.refresh出库信息输完后,单击“出库”按钮,将完成材料的出库操作。如果库存材料足够,将出库信息加入出入库信息表中,并更新相应的材料信息表中的记录。如果库存材料不足,提示用户出错。要求用户重新输入。“出库”按钮的Click事件代码如下:dimension ccc(7)&定义数组temp 数量=val(alltrim(thisform.pageframe1.page2.text5.value)&记录需要出库的材料数量select *;from “project仓库管理系统data材料信息.dbf”; where 材料编号=alltrim(thisform.pageframe1.page2.text1.value);into cursor tempcursornum1= tempcursor.数量&记录原有材料的数量if (num1-temp数量)0 thenmessagebox(“出库数量大于库存数量!”,0+64,”入库”)thisform.pageframe1.page2.text5.value=&库存不足,提示用户出错elseupdate project库房管理系统data材料信息.dbf set;数量=num1-temp数量;where 材料编号=alltrim(thisform.pageframe1.page2.text1.value);&修改材料数量信息ccc(1)= alltrim(thisform.pageframe1.page2.text2.value)ccc(2)= “0”ccc(3)= alltrim(thisform.pageframe1.page2.text1.value)ccc(4)= alltrim(thisform.pageframe1.page2.text3.value)ccc(5)= alltrim(thisform.pageframe1.page2.text4.value)ccc(6)= alltrim(thisform.pageframe1.page2.text5.value)ccc(7)= alltrim(thisform.pageframe1.page2.edit1.value)&将记录插入出入库信息表insert into project库房管理系统data出入库信息.dbf from array ccc;thisform.pageframe1.page2.text1.value=”thisform.pageframe1.page2.text2.value=”thisform.pageframe1.page2.text3.value=”thisform.pageframe1.page2.text4.value=”thisform.pageframe1.page2.text5.value=”thisform.pageframe1.page2.edit1.value=”&重置Text Box控件和Edit值thisform.pageframe1.page2.text2.readonly=.t.thisform.pageframe1.page2.text3.readonly=.t.thisform.pageframe1.page2.text4.readonly=.t.thisform.pageframe1.page2.text5.readonly=.t.thisform.pageframe1.page2.edit1.readonly=.t.&重置控件的ReadOnly属性endifthisform.refresh&表单刷新“取消”按钮和“退出”按钮的功能和实现方法与入库页面中基本相同,不再赘述。2 3.4用户向导制作报表首先利用向导快速生成报表,然后对生成的报表进一步编辑和修改。材料信息报表的内容包括材料信息表的各字段记录,并在表头打印日期信息,统计材料总数,在表尾进行显示。生成报表的步骤为:1、选取ToolsWizardReports菜单命令,弹出如图214所示对话框,选中Report Wizard,单击ok按钮,进入报表设计窗口。图214 报表向导2、选择数据表为“材料信息”,表字段为材料信息表的全部字段,如图215所示。图215选择表和字段3、在表尾加入统计信息,具体做法是在第2步时单击右侧的Summary Option按钮,在Summary Option选项卡中选取Summary Only选项,并选取“材料编号”字段的Count属性。如图216所示。这样报表会自动对村料编号进行计数,统计材料种类。图216设置报表的Summary4、选择报表风格为Excutive,进入下一步。5、报表的Layout属性选择默认选项,进入下一步。排序则选择“材料名称”为索引项,如图217所示。图217排序规则选择6、单击Next按钮,输入报表的Title信息,并选中Save report and modify it in the report designer,单击Finish按钮,保存报表为“D:project库房管理系统reports材料信息.frx”,进入报表设计器对报表界面作进一步的调整,如图218所示。图218完成报表制作本设计中,需要在Report Designer中调整列的宽度,使一条记录的所有字段显示在同一行即可2.3.5主表单设计1、主表单界面设计新建表单,保存为“主表单.scx”,保存路径为“D:project库房管理系统forms主表单.scx”。在表单上添加控件,设置其相应的属性。得到如图219所示的界面。图219 主表单2、添加响应代码单击“进入”按钮时,根据选中的OptionGroup的选项进入不同的表单。“进入”按钮的Click事件代码如下:if thisform.optiongroup1.option1.value=ldo form project库房管理系统forms材料信息查询.scxendif&进入材料信息查询表单if thisform.optiongroup1.option2.value=l do form project库房管理系统forms材料信息维护.scxendif&进入材料信息维护表单if thisform.optiongroup1.option3.value=ldo form project库房管理系统firms出入库管理.scxendif&进入出入库管理表单if thisform.optiongroup1.option4.value=luse project库房管理系统reports材料信息.frxreport form project库房管理系统repots材料信息.frx preview nowaitendif&打印报表2.4主控程序设计在Project Manager中选取code选项卡,选中Program选项,单击右侧的New按钮,新建一个程序,保存路径为“d:project库房管理系统pro.prg”,在代码框中输入如下代码:clear allset talk offdo form project库房管理系统库房管理forms欢迎界面.scxread events编译项目,生成.exe文件。完成药品库房管理系统的开发。第3章 问题分析3.1 系统功能设计的不完整任何一个应用程序都不可能设计得十全十美,它必须经历设计、开发、应用、反馈、修改、再修改如此反复的过程,在实践应用中不断完善。该药品库房管理系统当然也不例外。考虑到该系统中出库和入库的操作非常类似,为节约时间,本人将它们设计在同一张表单上,并且将出库和入库信息记录在同一张表里。这样的设计在设计阶段用时较少;但在使用阶段,用户容易混淆出库和入库信息,对出库和入库信息的识别验证都可能产生不必要的麻烦,降低工作效率。这是以后要修改的一个方面。3.2代码维护在源代码的开发过程中,我已经使用了大量的注释和阶段性测试语句,以保证程序的可读性和可维护性。在应用中出现需要修改代码的问题出现时,方便程序人员维护。但由于时间的关系,软件没有提供详细的说明书等,给用户和系统维护人员带来一定的不便。这也是以后修正的一个方面。3.3数据维护3.3.1数据库安全问题由于时间及本人知识局限的原因,系统还没有涉及数据库安全问题。如系统访问权限、用户的身份验证、最大连接限制等都是系统的不稳定因素。系统应在这些方面加以改进。同时,数据库的存放没有专用的SERVER,也给数据库的操作和维护带来一定地不便。3.3.2数据的安全问题这样一个应用系统,数据的更新是实时的,对数据的安全、备份工作要求应该很高,但这里并没有考虑这些问题。因此,在系统的进一步开发和应用推广之前,应该充分考虑到数据的安全问题,如数据的备份工作等。第四章 总结4.1 论文总结一、建立科学、合理的数据库关系该药品仓库管理系统只适用于小型药店的仓库管理。从数据库所建立的关联关系以及表字段的索引来看,该药品仓库管理系统的数据库一旦扩大,势必会影响查找药品信息的速度。如果系统要被用于大型药店的仓库管理就必须在建立科学合理的数据库方面狠下工夫,特别是要在药品的编号及出入库编号的科学性方面动脑筋。如果只一种药就有成千上万的数量,那么用一个数据表来存储药店中所有药品的数量显然是不可取的,应该将药品进行分门别类的管理与存储,力图提高药品信息的查找速度。二、认真分析药品实际的管理流程,做更加详细的系统分析和设计要作为一个使用的药品仓库管理系统,我们在药品的实际管
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!