药店管理信息系统报告.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date药店管理信息系统报告一成绩管理信息系统课程设计报告系统名称 药店信息管理系统 班级 管093 姓名 张新萌、田新驰、李新雷 学号 04 、 06 、 12 装订线 2011年 12月 14 日一、 系统分析系统名称:药店管理信息系统. 开发背景、目的、意义:随着人们生活水平的提高,健康意识的增强,对医药产品的需求也迅速增加。药店作为医药产品的主要销售渠道,也处于高速发展时期,同时也加剧了产业间的竞争。为了加强企业的内部管理,提高运营效率,利用现代信息技术提高企业的管理水平已非常迫切。另外,由于医药产品种类繁多、销售模式特殊、业务量大,单凭手工记账已很难适应工作的需要。医药作为一个关系到人们健良的特殊行业,国家对医药行业又有一些不同于其他行业的管理政策,这些都加大了管理的难度。如何尽快建立和完善现代企业的信息化管理机制问题,已成为医药企业发展的关键所在。本课题以提高药店的医药管理水平和效率为目标,建立了管理信息系统。该系统能集中处理药品的进销存业务及其应付账目,实现了药店的现代化管理。实现目标:面对医药行业的高速发展及其发展过程中出现的各种情况,药店管理信息系统在实施后,应能够达到以下目标:(1) 实现多点操作的信息共享,相互之间的信息传递准确,快捷和顺畅。(2) 全面自动化管理,可随时掌握药品的库存、销售等情况。(3) 系统界面友好美观,操作简单易行,查询灵活方便,数据存储安全。(4) 能够快速、准确地处理药品进、销、存、退、盘点、变价、折扣等多种业务模式。(5) 提供助记码及支持多种结算方式。(6) 系统维护方便可靠,有较高的安全性,满足实用性,先进性的要求。(5)系统功能:本系统由系统设置、日常业务、查询统计、库存管理、基础信息管理五大分系统组成。主要功能如下:(1)系统设置:初期建账,密码设置,数据备份,数据恢复。(2)日常业务:入库单,销售单,入库退单,销售退单。(3)查询统计:入库查询,销售查询,入库退货查询,销售退货查询。(5)库存管理:库存盘点,库存查询,价格管理。(6)基础信息管理:客户管理,供应商管理。药店管理信息系统E-R 图2.2概念模型通过对用户需求分析进行综合、归纳与抽象、形成一个独立于具体DBMS 的概念模型。在本药店管理系统中涉及到了2种概念模型的抽象Is part of 聚集模型 概况模型2.3用例图和顶层数据流图 总体分析的用例图 经理与供货商的用例图 顾客与经理间的用例图 顶层数据流图1. 系统总体设计(1) 分解的数据流图 处理消费 处理采购组织结构或数学方法、构造模型。 药店管理信息系统库存管理查询统计日常业务基础信息系统设置供应商管理客户管理初期建账密码设置数据备份数据恢复销售退货查询入库退货查询销售查询入库查询库存盘点价格管理库存查询销售退单入库退单销售单入库单 二、系统设计说明:系统设计较为复杂,源程序代码较长,所以报告中只摘录了一小部分程序代码,其余代码详见程序中,程序先进入登陆界面,登陆后进入主界面,登陆到主界面后即可点击进入相应的窗口。该系统采用Access数据库,数据库名称为yyjxc,它包括以下8个表:供应商基础信息表gys,库存表kc,客户基础信息表kh,入库表rkd,入库退单表rktd,密码表ma,销售表xsd,销售退单表xstd。1、系统登录模块及主程序界面设计(1)系统登录模块(窗体名:系统登录.frm)源程序代码较长,此处省略,详见程序中实现目标:程序启动后,首先进入系统登录界面验证操作员密码。其实现的功能如下:a. 可选择操作员,支持鼠标和键盘操作b. 操作员和密码验证成功后,进入主界面c. 操作员错误或密码错误提醒并返回错误点。d. 输入三次错误的密码,系统自动退出(2)主程序界面设计(窗体名:主界面.frm)Public Sub entercell() Dim x, y As String If Text1.Text = "1" Then Set myform = main_rcyw_rk If Text1.Text = "2" Then Set myform = main_rcyw_rktd If Text1.Text = "3" Then Set myform = main_rcyw_xs If Text1.Text = "4" Then Set myform = main_rcyw_xstd If myform.mf1.CellWidth <= 0 Or myform.mf1.CellHeight <= 0 Then Exit Sub x = myform.mf1.TextMatrix(myform.mf1.FixedRows, myform.mf1.Col) y = myform.mf1.TextMatrix(myform.mf1.Row, 0) If y <> "" Then If myform.mf1.Col - myform.mf1.LeftCol <= 3 Then myform.mf1.LeftCol = myform.mf1.LeftCol + 1 End If If myform.mf1.CellWidth > 0 And myform.mf1.CellHeight > 0 Then myform.Text1.Width = myform.mf1.CellWidth myform.Text1.Height = myform.mf1.CellHeight myform.Text1.Left = myform.mf1.CellLeft + myform.mf1.Left myform.Text1.Top = myform.mf1.CellTop + myform.mf1.Top End If x = myform.mf1.TextMatrix(myform.mf1.FixedRows, myform.mf1.Col) y = myform.mf1.TextMatrix(myform.mf1.Row, 0) p = myform.mf1.TextMatrix(myform.mf1.Row, myform.mf1.Col) myform.Text1.Text = myform.mf1.Text myform.Text1.SelStart = 0 myform.Text1.SelLength = Len(myform.Text1.Text) End IfEnd SubPublic Sub moveright() If Text1.Text = "1" Then Set myform = main_rcyw_rk If Text1.Text = "2" Then Set myform = main_rcyw_rktd If Text1.Text = "3" Then Set myform = main_rcyw_xs If Text1.Text = "4" Then Set myform = main_rcyw_xstd If myform.Text1.Text <> "" Then myform.Text1.SelStart = 0 myform.Text1.SelLength = Len(myform.Text1.Text) End If If myform.mf1.Col + 1 <= myform.mf1.Cols - 1 Then myform.mf1.Col = myform.mf1.Col + 1 Else If myform.mf1.Row + 1 <= myform.mf1.Rows - 1 Then myform.mf1.Row = myform.mf1.Row + 1 myform.mf1.Col = 1 End If End IfEnd SubPublic Sub moveleft() If Text1.Text = "1" Then Set myform = main_rcyw_rk If Text1.Text = "2" Then Set myform = main_rcyw_rktd If Text1.Text = "3" Then Set myform = main_rcyw_xs If Text1.Text = "4" Then Set myform = main_rcyw_xstd If myform.Text1.Text <> "" Then myform.Text1.SelStart = 0 myform.Text1.SelLength = Len(myform.Text1.Text) End If If myform.mf1.Col - 11 <= myform.mf1.Cols + 1 Then myform.mf1.Col = myform.mf1.Col - 1 If myform.mf1.Col = 0 Then myform.mf1.Col = 1 Else If myform.mf1.Row + 1 <= myform.mf1.Row - 1 Then myform.mf1.Row = myform.mf1.Row + 1 myform.mf1.Col = 1 End If End IfEnd SubPublic Sub movereturn() If Text1.Text = "1" Then Set myform = main_rcyw_rk If Text1.Text = "2" Then Set myform = main_rcyw_rktd If Text1.Text = "3" Then Set myform = main_rcyw_xs If Text1.Text = "4" Then Set myform = main_rcyw_xstd If myform.mf1.Col = 10 Then myform.mf1.Row = myform.mf1.Row + 1 myform.mf1.Col = 1 Else If myform.mf1.Col + 1 <= myform.mf1.Cols - 1 Then myform.mf1.Col = myform.mf1.Col + 1 Else If myform.mf1.Row + 1 <= myform.mf1.Rows - 1 Then myform.mf1.Row = myform.mf1.Row + 1 myform.mf1.Col = 1 End If End If End IfEnd SubPrivate Sub Form_Load()'在标题栏上显示软件名称及版本 Me.Caption = App.Title & " 版本: V" & App.Major & "." & App.Minor & "." & App.Revision Dim i As Integer '定义一个整型变量 For i = 0 To 1 Label1(i).Caption = App.Title Next i Label2.Caption = "版本: V" & App.Major & "." & App.Minor & "." & App.RevisionEnd SubPrivate Sub rkd_Click() '调入入库单 Load main_rcyw_rk main_rcyw_rk.Show frm_main.Enabled = FalseEnd SubPrivate Sub xsd_Click() '调入销售单 Load main_rcyw_xs main_rcyw_xs.Show frm_main.Enabled = FalseEnd SubPrivate Sub xsth_Click() '调入销售退货 Load main_rcyw_xstd main_rcyw_xstd.Show frm_main.Enabled = FalseEnd SubPrivate Sub rkth_Click() '调入退货返厂 Load main_rcyw_rktd main_rcyw_rktd.Show frm_main.Enabled = FalseEnd SubPrivate Sub kccx_Click() '调入库存查询 Load main_kcgl_kccx main_kcgl_kccx.Show frm_main.Enabled = FalseEnd SubPrivate Sub kcpd_Click() '调入库存盘点 Load main_kcgl_kcpd main_kcgl_kcpd.Show frm_main.Enabled = FalseEnd SubPrivate Sub jggl_Click() '调入价格管理 Load main_kcgl_jggl main_kcgl_jggl.Show frm_main.Enabled = FalseEnd SubPrivate Sub rkcx_Click() '调入入库查询 Load main_rqDialog main_rqDialog.Show main_rqDialog.Text1.Text = "0" frm_main.Enabled = FalseEnd SubPrivate Sub thfccx_Click() '调入退货返厂 Load main_rqDialog main_rqDialog.Show main_rqDialog.Text1.Text = "1" frm_main.Enabled = FalseEnd SubPrivate Sub xscx_Click() '调入销售查询 Load main_rqDialog main_rqDialog.Show main_rqDialog.Text1.Text = "2" frm_main.Enabled = FalseEnd SubPrivate Sub xsthcx_Click() '调入销售退货查询 Load main_rqDialog main_rqDialog.Show main_rqDialog.Text1.Text = "3" frm_main.Enabled = FalseEnd SubPrivate Sub gysgl_Click() '调入供应商管理 Load main_jbxx_gys main_jbxx_gys.Show frm_main.Enabled = FalseEnd SubPrivate Sub khgl_Click() '调入客户管理 Load main_jbxx_kh main_jbxx_kh.Show frm_main.Enabled = FalseEnd SubPrivate Sub cqjz_Click() '调入初期建帐 Load main_xt_cqjz main_xt_cqjz.Show frm_main.Enabled = FalseEnd SubPrivate Sub mmsz_Click() '调入密码设置 Load main_xt_mmsz main_xt_mmsz.Show frm_main.Enabled = FalseEnd SubPrivate Sub sjbf_Click() '调入数据备份 Load main_xt_sjbf main_xt_sjbf.Show frm_main.Enabled = FalseEnd SubPrivate Sub sjhf_Click() '调入数据恢复 Load main_xt_sjhf main_xt_sjhf.Show frm_main.Enabled = FalseEnd SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case Is = "rkd" '调入入库单 rkd_Click Case Is = "xsd" '调入销售单 xsd_Click Case Is = "xscx" '调入销售查询 xscx_Click Case Is = "kccx" '调入库存查询 kccx_Click Case Is = "gys" '调入供应商管理 gysgl_Click Case Is = "kh" '调入客户管理 khgl_Click Case Is = "cqjz" '调入初期建帐 cqjz_Click End SelectEnd Sub 实现目标:密码验证成功后,进入程序主界面。其实现的功能如下:a. 选择主界面的菜单或工具栏,调用相应程序,进行相应操作。b. 显示开发者信息、系统日期和时间。2、日常业务设计(1)入库单模块设计(窗体名:入库单.frm)程序代码过长,内容较多,详见程序中程序启动后,选择“日常业务”菜单下的“入库单”项,将进入入库单模块。其实现的功能如下:a. 完成药品入库工作,入库采用智能化表单式录入。b. 自动生成入库票号,可利用键在列表框中选择供应商信息c. 系统自动统计入库品种、入库数量、入库金额。(2)销售单模块设计(窗体名:销售单.frm)程序代码过长,内容较多,详见程序中程序启动后,选择“日常业务”菜单下的“销售单”项,将进入销售单模块。其实现的功能如下:a.完成药品销售的功能。b.自动生成销售票号、销售日期;统计销售品种、销售数量、销售金额。c.根据商品名称或简称自动检索相应的商品信息。(3)销售退单模块设计(窗体名:销售退单.frm)程序代码过长,内容较多,详见程序中程序启动后,选择“日常业务”菜单下的“销售退单”项,将进入销售退单模块。其实现的功能如下:a.完成药品销售退货功能。b.自动生成销售退单票号、销售退单日期;统计退货品种、退货数量、退货金额。c.根据商品名称或简称自动检索相应的商品信息。3、库存管理设计(1)库存查询模块设计(窗体名:库存查询.frm)Private Sub Form_Activate()' 向combo1添加查询项目列表 Combo1.AddItem ("商品名称") Combo1.AddItem ("简称") Combo1.AddItem ("批号") Combo1.ListIndex = 0End SubPrivate Sub Form_Load() Data1.DatabaseName = App.Path & "yyjxc.mdb" '自动识别数据库路径End SubPrivate Sub Form_Unload(Cancel As Integer) frm_main.Enabled = TrueEnd SubPrivate Sub Command1_Click()'查询库存信息 Data1.RecordSource = "select * from kc where (kc." & Combo1.Text & " " & "like " + Chr(34) + Text1.Text + "*" + Chr(34) + ")" Data1.RefreshEnd SubPrivate Sub Command2_Click() '删除库存信息 On Error Resume Next Data1.Recordset.Delete Data1.Refresh Data2.RefreshEnd SubPrivate Sub Command3_Click() frm_main.Enabled = True Unload MeEnd Sub程序启动后,选择“库存管理”菜单下的“库存查询”项,将进入库存查询模块。其实现的功能如下:a.选择字段查询库存商品信息,可模糊查询。b.删除库存商品信息。(2)库存盘点模块设计(窗体名:库存盘点.frm)Private Sub Form_Activate()'设置ms1表格的列宽 MS1.ColWidth(0) = 12 * 25 * 0: MS1.ColWidth(1) = 12 * 25 * 8 MS1.ColWidth(2) = 12 * 25 * 0: MS1.ColWidth(5) = 12 * 25 * 5 MS1.ColWidth(9) = 12 * 25 * 3: MS1.ColWidth(10) = 12 * 25 * 0End SubPrivate Sub Form_Load() Data1.DatabaseName = App.Path & "yyjxc.mdb" '自动识别数据库路径End SubPrivate Sub Form_Unload(Cancel As Integer) frm_main.Enabled = TrueEnd SubPrivate Sub Command1_Click()'盘点库存大于零的库存信息 Data1.RecordSource = "select * from kc where kc.库存>0 " Data1.Refresh MS1.Col = 9: MS1.Sort = flexSortNumericAscending '第9行按升序排序End SubPrivate Sub Command2_Click() frm_main.Enabled = True Unload MeEnd SubPrivate Sub MS1_Click()End Sub程序启动后,选择“库存管理”菜单下的“库存盘点”项,将进入库存盘点模块。其实现的功能是盘点库存商品信息。(3)价格管理模块设计(窗体名:价格管理.frm)Public Sub eval() '定义赋值函数 If Data2.Recordset(0) <> "" Then pz.Caption = Data2.Recordset(0) Else pz.Caption = "0" If Data2.Recordset(1) <> "" Then hjsl.Caption = Data2.Recordset(1) Else hjsl.Caption = "0" If Data2.Recordset(2) <> "" Then hjje.Caption = Data2.Recordset(2) Else hjje.Caption = "0"End SubPrivate Sub Form_Load() '自动识别数据库路径 Data1.DatabaseName = App.Path & "yyjxc.mdb" Data2.DatabaseName = App.Path & "yyjxc.mdb"End SubPrivate Sub Form_Activate()' 向combo1添加查询项目列表 Combo1.AddItem ("商品名称") Combo1.AddItem ("简称") Combo1.AddItem ("批号") Combo1.ListIndex = 0 '初始化查询统计库存商品信息 Data2.RecordSource = "select count(*)as 品种,sum(库存)as 合计库存,sum(库存金额)as 合计库存金额 from kc " Data2.Refresh Call eval '调用函数End SubPrivate Sub Form_Unload(Cancel As Integer) frm_main.Enabled = TrueEnd SubPrivate Sub texgjj_Change() texgje.Text = Val(texgkc.Text) * Val(texgjj.Text) '计算库存金额 Data2.Refresh Call eval '调用函数End SubPrivate Sub texgkc_Change() texgje.Text = Val(texgkc.Text) * Val(texgjj.Text) '计算库存金额 Data2.Refresh Call eval '调用函数End SubPrivate Sub Command1_Click()'查询统计库存商品信息 Data1.RecordSource = "select * from kc where (kc." & Combo1.Text & " " & "like " + Chr(34) + Text1.Text + "*" + Chr(34) + ")" Data1.Refresh Data2.RecordSource = "select count(*)as 品种,sum(库存)as 合计库存,sum(库存金额)as 合计库存金额 from kc where (kc." & Combo1.Text & " " & "like " + Chr(34) + Text1.Text + "*" + Chr(34) + ")" Data2.Refresh Call eval '调用函数End SubPrivate Sub Command2_Click() frm_main.Enabled = True Unload MeEnd Sub程序启动后,选择“库存管理”菜单下的“价格管理”项,将进入价格管理模块。其实现的功能如下:a.选择任意字段查询库存商品信息。b.完成库存商品的进价、库存数量的修改。c.统计库存品种、库存数量、库存金额。4、查询统计设计 (1)入库查询模块设计(窗体名:入库查询.frm)Private Sub DBGrid1_Click()End SubPrivate Sub Form_Activate()'向combo1添加查询项目列表 Combo1.AddItem ("商品名称") Combo1.AddItem ("批号") Combo1.AddItem ("票号") Combo1.ListIndex = 1 Data1.RecordSource = "select * from rkd where (rkd.日期 between " + Chr(35) + rq1.Text + Chr(35) + "and " + Chr(35) + rq2.Text + Chr(35) + ")" Data1.RefreshEnd SubPrivate Sub Form_Load() '自动识别数据库路径 Data1.DatabaseName = App.Path & "yyjxc.mdb"End SubPrivate Sub Form_Unload(Cancel As Integer) frm_main.Enabled = TrueEnd SubPrivate Sub Command1_Click() '入库查询 Data1.RecordSource = "select * from rkd where (rkd.日期 between " + Chr(35) + rq1.Text + Chr(35) + "and " + Chr(35) + rq2.Text + Chr(35) + ")and(rkd." & Combo1.Text & " " & "like " + Chr(34) + Text1.Text + "*" + Chr(34) + ")" Data1.RefreshEnd SubPrivate Sub Command2_Click() '删除入库信息 On Error Resume Next Data1.Recordset.Delete Data1.RefreshEnd SubPrivate Sub Command3_Click() frm_main.Enabled = True Unload MeEnd Sub程序启动后,选择“查询统计”菜单下的“入库查询”项,将进入入库查询模块。其实现的功能如下:a.按任意时间段、任意字段查询入库商品信息。b.删除入库商品信息。(2)销售查询模块设计(窗体名:销售查询.frm)Private Sub DBGrid1_Click()End SubPrivate Sub Form_Activate()'向combo1添加查询项目列表 Combo1.AddItem ("商品名称") Combo1.AddItem ("批号") Combo1.AddItem ("票号") Combo1.ListIndex = 0 Data1.RecordSource = "select * from xsd where (xsd.日期 between " + Chr(35) + rq1.Text + Chr(35) + "and " + Chr(35) + rq2.Text + Chr(35) + ")" Data1.RefreshEnd SubPrivate Sub Form_Load() '自动识别数据库路径 Data1.DatabaseName = App.Path & "yyjxc.mdb"End SubPrivate Sub Form_Unload(Cancel As Integer) frm_main.Enabled = TrueEnd SubPrivate Sub Command1_Click() '查询销售信息 Data1.RecordSource = "select * from xsd where (xsd.日期 between " + Chr(35) + rq1.Text + Chr(35) + "and " + Chr(35) + rq2.Text + Chr(35) + ")and(xsd." & Combo1.Text & " " & "like " + Chr(34) + Text1.Text + "*" + Chr(34) + ")" Data1.RefreshEnd SubPrivate Sub Command2_Click() '删除销售信息 On Error Resume Next Data1.Recordset.Delete Data1.RefreshEnd SubPrivate Sub Command3_Click() frm_main.Enabled = True Unload MeEnd Su