




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.系统开发背景随着科技的不断进步,企业都在不断的注重管理的信息化以完善企业管理,增强企业自身的竞争力。药品销售业也不例外,通过较完善的信息系统实现自身企业对内部管理的方便性、合理性、快捷性、高效性等要求。以前的手工管理效率低使最明显的缺陷,另外,数据的一致性不好维护,如某个药品信息的记录有所改动(如更改编号),那么该要品的其他记录就与此不一致,造成查询的费时费力。要把全部数据都更改又相当不方便。对药品库存的盘点也很不方便,而且需要较多的人来进行管理操作,而且容易出错,造成数据的不一致。而药品业是关民生的行业,错误信息可能会造成不可收拾的严重后果。因此,运用高效、准确的信息管理系统来替代手工管理是完善药品销售业管理的有效手段。2.系统开发意义利用数据库系统可以很好的对数据进行维护,减少由于数据不一致等错误带来的麻烦。方便数据的更新和查询,降低错误率,方便药品信息的维护及库存的盘点。还可以运用较少的人员,高效的完成对药品销售的管理。由于社会的发展不断趋于信息化,各个行业都要加强自身的信息化程度以适应社会的发展。而管理信息化正迎合了这个趋势,数据库系统在药品销售业的应用业实现了药品销售业执行工具、业务管理等的信息化,在这个信息化社会为药品销售业的发展增加了新的动力。相信随着社会的不断发展对该类系统的需求会越来越高。药品销售管理信息系统,即服务于个人,又服务于企业,并最终服务于社会,这是让科技为人类服务的最好例证,其开发意义显而易见。.各实例的E-R图整体实体E-R图:药品管理系统系统管理出库入库药物详况药物汇总用户管理密码管理出库管理入库管理货物管理药物查询日期汇总客户汇总货号汇总综合汇总 出入库信息实体E-R图:编号日期入库日期备注经手人货单号货源地入出库信息实体 货物信息实体E-R图:货物信息实体货单号货源地货物名称客户号 用户信息实体E-R图:用户信息实体用户号密码权限 人员配置E-R图:组长组员组员组员3.结构设计入库出库模块: 用来实现货物流通的查询。货物详况模块: 用来实现货物浏览的查询。货物汇总模块:用来实现货物质料的增加、删除、修改等操作。系统管理模块:用来实现客户的增加、删除以及用户信息和密码的修改等操作。4.数据库设计这里的数据库采用access,用ADO作为连接数据对象。 启动access建立一个数据库如图所示货源地表格: 客户名表格: 货物详况表:入库表:系统管理表:数据连接。在vb环境下连接数据:在程序设计的公共模块中,先定义ADO连接对象。语句如下:Public conn new ADODB connection然后在子程序中,用如下的语句即可打开数据库Dim connectionstring as stringConnectionstring=“provider=microsoft.jet.oledb.4.0;&-data source=cangku.mdb”Conn.open connectionstring4.界面设计设计好的界面如图所示:菜单程序中,有5个菜单选项你,每个菜单选项对应着E-R图的一个子项目。1.创建主窗体。首先创建一个工程,命名为药品管理系统,选择 工程-添加MDI窗体 命令,则在项目中添加了子窗体该窗体属性如下表所示:创建各菜单项的属性如下表所示:2.创建各子窗体。选择 工程-添加窗体 命令,添加子窗体,其属性如下:入库子窗体如下图所示:各控件属性如下表:增加用户子窗体如下图所示:其各控件属性如下表所示:修改密码窗体如下图所示:库房管理子窗体如下图所示:库房管理子窗体控件如下表所示:查询子窗体及其控件如下所示:货物汇总子窗体及其属性如下:关于窗体主要是列出关于系统的版本信息如下图5.建立公共模块在菜单中选择 工程-添加模块 命令,则出现添加模块对话框,选中模块后单击打开,则模块添加到目录中,在模块中定义整个项目的公共变量。Option ExplicitPublic conn As New ADODB.Connection Public userID As String Public userpow As String Public find As Boolean Public sqlfind As String Public rs_data1 As New ADODB.RecordsetPublic findok As BooleanPublic summary_menu As String Public frmdata As BooleanPublic Const keyenter = 13 6.代码设计子窗体中都是click事件1.主窗体代码如下:Private Sub about_Click()frmabout.ShowEnd SubPrivate Sub add_user_Click()adduser.ShowEnd SubPrivate Sub check_find_Click()chaxun.ShowEnd SubPrivate Sub data_manage_Click()sqlfind = select * from 入出库rs_data1.Open sqlfind, conn, adOpenKeyset, adLockPessimistickumanage.ShowEnd SubPrivate Sub exit_Click()Unload MeEnd SubPrivate Sub in_check_Click()jinku.Caption = 入库jinku.ShowEnd Sub在MIDFORM1中主要代码如下:Private Sub MDIForm_Load()frmdata = Falsefind = FalseEnd SubPrivate Sub modify_pw_Click()changpwd.ShowEnd SubPrivate Sub out_check_Click()jinku.Caption = 出库jinku.ShowEnd SubPrivate Sub sum_check_date_Click()summary_menu = check_datehuizong.Show 1End SubPrivate Sub sum_date_custom_Click()summary_menu = date_customhuizong.Show 1End SubPrivate Sub summary_check_Click()summary_menu = checkhuizong.Show 1End SubPrivate Sub summary_custom_Click()summary_menu = customhuizong.Show 1End SubPrivate Sub summary_date_Click()summary_menu = datehuizong.Show 1End SubPrivate Sub Timer1_Timer()End Sub2.各子窗体代码:入库子窗体代码。本窗体用来查询货物入库的信息,下面的代码是定义几个变量:Option ExplicitDim rs_checkname As New ADODB.Recordset Dim rs_custom As New ADODB.Recordset Const row_num = 10 Const col_num = 6 确定按钮代码;Private Sub Command1_Click()Dim rs_save As New ADODB.RecordsetDim sql As StringDim i As IntegerDim s As String On Error GoTo saveerrorIf Trim(Text1.Text) = Then MsgBox 货单不能为空!, vbOKOnly + vbExclamation, Text1.SetFocus Exit SubEnd IfIf Combo1.Text = Then MsgBox 请选择货源地!, vbOKOnly + vbExclamation, Combo1.SetFocus Exit SubEnd IfIf comboy.Text = Then MsgBox 请选择年份!, vbOKOnly + vbExclamation, comboy.SetFocus Exit SubEnd IfIf combom.Text = Then MsgBox 请选择月份!, vbOKOnly + vbExclamation, combom.SetFocus Exit SubEnd IfIf combod.Text = Then MsgBox 请选择日期!, vbOKOnly + vbExclamation, combod.SetFocus Exit SubEnd IfIf Text2.Text = Then MsgBox 请填写凭证号!, vbOKOnly + vbExclamation, Text2.SetFocus Exit SubEnd IfIf Text3.Text = Then MsgBox 请填写经手人!, vbOKOnly + vbExclamation, Text3.SetFocus Exit SubEnd IfIf MSFlexGrid1.Col 0 Then MsgBox 请输入完整的物品信息!, vbOKOnly + vbExclamation, MSFlexGrid1.SetFocus Exit SubEnd If 数据库比较代码:sql = select * from 入出库 where 货单号= & Text1.Text & rs_save.Open sql, conn, adOpenKeyset, adLockPessimisticIf rs_save.EOF Then rs_save.AddNew rs_save.Fields(0) = Trim(Text1.Text) rs_save.Fields(1) = CDate(Trim(comboy.Text) & - & Trim(combom.Text) & - & Trim(combod.Text) rs_save.Fields(2) = Trim(Combo1.Text) rs_save.Fields(3) = Trim(Text2.Text) rs_save.Fields(4) = Trim(Text3.Text) rs_save.Fields(5) = Trim(Text4.Text) If jinku.Caption = 入库 Then rs_save.Fields(6) = True Else rs_save.Fields(6) = False End If rs_save.Update rs_save.CloseElse MsgBox 货单号重复!, vbOKOnly + vbExclamation, Text1.SetFocus Text1.Text = rs_save.Close Exit SubEnd Ifsql = select * from 货物详况rs_save.Open sql, conn, adOpenKeyset, adLockPessimisticFor i = 1 To MSFlexGrid1.Row - 1 rs_save.AddNew rs_save.Fields(0) = Trim(Text1.Text) rs_save.Fields(1) = CDate(Trim(comboy.Text) & - & Trim(combom.Text) & - & Trim(combod.Text) rs_save.Fields(2) = Trim(Combo1.Text) MSFlexGrid1.Row = i MSFlexGrid1.Col = 0 rs_save.Fields(3) = Trim(MSFlexGrid1.Text) MSFlexGrid1.Col = 1 If jinku.Caption = 出库 Then s = - & Trim(MSFlexGrid1.Text) rs_save.Fields(4) = CDbl(s) Else rs_save.Fields(4) = CDbl(Trim(MSFlexGrid1.Text) End If MSFlexGrid1.Col = 2 rs_save.Fields(5) = Trim(MSFlexGrid1.Text) MSFlexGrid1.Col = 3 rs_save.Fields(6) = Trim(MSFlexGrid1.Text) MSFlexGrid1.Col = 4 If jinku.Caption = 出库 Then s = - & Trim(MSFlexGrid1.Text) rs_save.Fields(7) = CDbl(s) Else rs_save.Fields(7) = CDbl(Trim(MSFlexGrid1.Text) End If MSFlexGrid1.Col = 5 rs_save.Fields(8) = Trim(MSFlexGrid1.Text)Next irs_save.Updaters_save.CloseMsgBox 添加成功!, vbOKOnly + vbExclamation, Unload MeExit Subsaveerror: MsgBox Err.DescriptionEnd SubPrivate Sub Command2_Click()Unload MeEnd SubPrivate Sub Form_Load()Dim sql As StringDim i As IntegerOn Error GoTo loaderrorsql = select * from 货源地rs_checkname.CursorLocation = adUseClientrs_checkname.Open sql, conn, adOpenKeyset, adLockPessimisticsql = select * from 客户名rs_custom.CursorLocation = adUseClientrs_custom.Open sql, conn, adOpenKeyset, adLockPessimisticWhile Not rs_custom.EOF Combo2.AddItem rs_custom.Fields(0) rs_custom.MoveNextWendIf Not rs_checkname.EOF Then rs_checkname.MoveFirst While Not rs_checkname.EOF Combo1.AddItem rs_checkname.Fields(0) rs_checkname.MoveNext WendEnd Ifcomboy.AddItem 2002 comboy.AddItem 2003comboy.AddItem 2004comboy.AddItem 2005comboy.AddItem 2006comboy.AddItem 2007comboy.AddItem 2008comboy.AddItem 2009comboy.AddItem 2010comboy.AddItem 2011For i = 1 To 12 combom.AddItem iNext iFor i = 1 To 31 combod.AddItem iNext isetgridsetgrid_headText5.Visible = Falseclear_gridExit Subloaderror: MsgBox Err.DescriptionEnd SubPrivate Sub Form_Unload(Cancel As Integer)关闭数据对象rs_checkname.Closers_custom.CloseEnd SubPublic Sub setgrid() Dim i As IntegerOn Error GoTo seterrorMSFlexGrid1.ScrollBars = flexScrollBarBothMSFlexGrid1.FixedCols = 0MSFlexGrid1.Rows = row_numMSFlexGrid1.Cols = col_numMSFlexGrid1.SelectionMode = flexSelectionByRowFor i = 0 To row_num - 1 MSFlexGrid1.RowHeight(i) = 315NextFor i = 0 To col_num - 1 MSFlexGrid1.ColWidth(i) = 1300Next iExit Subseterror: MsgBox Err.DescriptionEnd SubPublic Sub setgrid_head()On Error GoTo setheaderrorMSFlexGrid1.Row = 0MSFlexGrid1.Col = 0MSFlexGrid1.Text = 物品名称MSFlexGrid1.Col = 1MSFlexGrid1.Text = 单价MSFlexGrid1.Col = 2MSFlexGrid1.Text = 数量MSFlexGrid1.Col = 3MSFlexGrid1.Text = 单位MSFlexGrid1.Col = 4MSFlexGrid1.Text = 金额MSFlexGrid1.Col = 5MSFlexGrid1.Text = 客户名Exit Subsetheaderror: MsgBox Err.DescriptionEnd SubPublic Sub clear_grid()Dim i As Integer, j As IntegerFor i = 1 To row_num - 1 MSFlexGrid1.Row = i For j = 0 To col_num - 1 MSFlexGrid1.Col = j MSFlexGrid1.Text = Next jNext iEnd SubPublic Sub nextposition(ByVal r As Integer, ByVal c As Integer)On Error GoTo nexterrorText5.Width = MSFlexGrid1.CellWidthText5.Height = MSFlexGrid1.CellHeightText5.Left = MSFlexGrid1.Left + MSFlexGrid1.ColPos(c)Text5.Top = MSFlexGrid1.Top + MSFlexGrid1.RowPos(r)Text5.Text = MSFlexGrid1.TextText5.Visible = TrueText5.SetFocusExit Subnexterror: MsgBox Err.DescriptionEnd SubPrivate Sub MSFlexGrid1_Click()If Combo2.Visible = True Then Exit SubEnd Ifnextposition MSFlexGrid1.Row, MSFlexGrid1.ColEnd SubPrivate Sub Text5_KeyPress(KeyAscii As Integer)Dim i As Integer, j As IntegerDim price As Double, coun As IntegerOn Error GoTo texterrorIf KeyAscii = keyenter Then MSFlexGrid1.Text = Text5.Text i = MSFlexGrid1.Row j = MSFlexGrid1.Col If j = 0 And Trim(Text5.Text) = Then MsgBox 物品名称不能为空, vbOKOnly + vbExclamation, Text5.SetFocus Exit Sub End If If j = 1 And Not IsNumeric(Text5.Text) Then MsgBox 单价请输入数字!, vbOKOnly + vbExclamation, Text5.SetFocus Exit Sub End If If j = 2 And Not IsNumeric(Text5.Text) Then MsgBox 数量请输入数字!, vbOKOnly + vbExclamation, Text5.SetFocus Exit Sub End If If j = 3 And Trim(Text5.Text) = Then MsgBox 单位不能为空!, vbOKOnly + vbExclamation, Text5.SetFocus Exit Sub End If If j = 3 And Not IsNull(Text5.Text) Then MSFlexGrid1.Col = 1 price = CDbl(MSFlexGrid1.Text) MSFlexGrid1.Col = 2 coun = CInt(MSFlexGrid1.Text) MSFlexGrid1.Col = 4 MSFlexGrid1.Text = price * coun MSFlexGrid1.Col = MSFlexGrid1.Col + 1 Text5.Visible = False setcombo2 MSFlexGrid1.Row, MSFlexGrid1.Col KeyAscii = 0 Exit Sub End IfMSFlexGrid1.Col = MSFlexGrid1.Col + 1KeyAscii = 0nextposition MSFlexGrid1.Row, MSFlexGrid1.ColEnd IfExit Subtexterror: MsgBox Err.DescriptionEnd SubPublic Sub setcombo2(ByVal r As Integer, ByVal c As Integer)On Error GoTo seterrorCombo2.Width = MSFlexGrid1.CellWidthCombo2.Left = MSFlexGrid1.Left + MSFlexGrid1.ColPos(c)Combo2.Top = MSFlexGrid1.Top + MSFlexGrid1.RowPos(r)Combo2.Text = MSFlexGrid1.TextCombo2.Visible = TrueCombo2.SetFocusExit Subseterror: MsgBox Err.DescriptionEnd Sub增加用户子窗体代码If Trim(Text1.Text) = Then MsgBox 用户名不能为空, vbOKOnly + vbExclamation, Exit Sub Text1.SetFocusElseIf Trim(Text2.Text) = Then MsgBox 密码不能为空, vbOKOnly + vbExclamation, Exit Sub Text2.SetFocusElse sql = select * from 系统管理 rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic While (rs_add.EOF = False) If Trim(rs_add.Fields(0) = Trim(Text1.Text) Then MsgBox 已有这个用户, vbOKOnly + vbExclamation, Text1.SetFocus Text1.Text = Text2.Text = Text3.Text = Combo1.Text = Exit Sub Else rs_add.MoveNext End If Wend If Trim(Text2.Text) Trim(Text3.Text) Then MsgBox 两次密码不一致, vbOKOnly + vbExclamation, Text2.SetFocus Text2.Text = Text3.Text = Exit Sub ElseIf Trim(Combo1.Text) system And Trim(Combo1.Text) guest Then MsgBox 请选择正确的用户权限, vbOKOnly + vbExclamation, Combo1.SetFocus Combo1.Text = Exit Sub Else rs_add.AddNew rs_add.Fields(0) = Text1.Text rs_add.Fields(1) = Text2.Text rs_add.Fields(2) = Combo1.Text rs_add.Update rs_add.Close下面是返回成功信息对话框的代码 MsgBox 添加用户成功, vbOKOnly + vbExclamation, Unload Me End IfEnd IfEnd IfEnd SubPrivate Sub Command2_Click()Unload MeEnd SubPrivate Sub Form_Load()Combo1.AddItem systemCombo1.AddItem guestEnd Sub修改密码子窗体代码Private Sub Command1_Click()Dim rs_chang As New ADODB.RecordsetDim sql As StringIf Trim(Text3.Text = ) Then MsgBox 旧密码不能为空,请重新输入!, vbOKOnly + vbExclamation, 警告 Text3.SetFocus Text3.Text = Exit Sub End If If Trim(Text1.Text = ) Then MsgBox 新密码不能为空,请重新输入!, vbOKOnly + vbExclamation, 警告 Text1.SetFocus Text1.Text = Exit Sub End If If Text1.Text Text2.Text Then MsgBox 两次输入的新密码不同,请重新输入!, vbOKOnly + vbExclamation, 警告 Text1.SetFocus Text1.Text = Text2.Text = Exit Sub End If Dim strSql As String Dim rs As New ADODB.Recordset strSql = Select * from 系统管理 where 用户名 = & userID & rs.Open strSql, conn, adOpenForwardOnly, adLockReadOnly If Trim(rs.Fields(密码) Trim(Text3.Text) Then MsgBox 旧密码不对,请重新输入!, vbOKOnly + vbExclamation, 警告 Text3.SetFocus Text3.Text = Else strSql = Update 系统管理 set 密码 = & Text2.Text & where 用户名 = & userID & conn.Execute strSql MsgBox 密码修改成功!, vbOKOnly + vbInformation, 提示 Text3.Text = Text1.Text = Text2.Text = Unload Me End If rs.Close Set rs = NothingEnd SubPrivate Sub Command2_Click()Unload MeEnd Sub库房管理子窗体代码:检查代码如下:Public Sub displaygrid1()Dim i As IntegerOn Error GoTo displayerrorsetgridsetgridheadMSFlexGrid1.Row = 0If Not rs_data1.EOF Then rs_data1.MoveFirst Do While Not rs_data1.EOF MSFlexGrid1.Row = MSFlexGrid1.Row + 1 MSFlexGrid1.Col = 0 If Not IsNull(rs_data1.Fields(0) Then MSFlexGrid1.Text = rs_data1.Fields(0) Else MSFlexGrid1.Text = MSFlexGrid1.Col = 1 If Not IsNull(rs_data1.Fields(1) Then MSFlexGrid1.Text = rs_data1.Fields(1) Else MSFlexGrid1.Text = MSFlexGrid1.Col = 2 If Not IsNull(rs_data1.Fields(2) Then MSFlexGrid1.Text = rs_data1.Fields(2) Else MSFlexGrid1.Text = MSFlexGrid1.Col = 3 If Not IsNull(rs_data1.Fields(3) Then MSFlexGrid1.Text = rs_data1.Fields(3) Else MSFlexGrid1.Text = MSFlexGrid1.Col = 4 If Not IsNull(rs_data1.Fields(4) Then MSFlexGrid1.Text = rs_data1.Fields(4) Else MSFlexGrid1.Text = MSFlexGrid1.Col = 5 If Not IsNull(rs_data1.Fields(5) Then MSFlexGrid1.Text = rs_data1.Fields(5) Else MSFlexGrid1.Text = MSFlexGrid1.Col = 6 If rs_data1.Fields(6) = True Then MSFlexGrid1.Text = 入库 Else MSFlexGrid1.Text = 出库 rs_data1.MoveNext LoopEnd Ifdisplayerror:If Err.Number 0 Then MsgBox Err.DescriptionEnd IfEnd Sub下面是增加明细按钮的click事件:Private Sub cmdmodify_Click()On Error GoTo modifyerrorDim i As IntegerDim j As IntegerIf rs_data2.BOF = True Then MsgBox 没有明细记录无法修改!, vbOKOnly Exit SubElse If modify = False Then MsgBox 无法修改,请选择货物!, vbOKOnly + vbExclamation, Exit Sub Else If cmdmodify.Caption = 修改明细 Then cmdmodify.Caption = 确定 cmdexit.Enabled = False cmdadd.Enabled = False cmddel.Enabled = False cmdcancel.Enabled = True MSFlexGrid2.Row = 1 MSFlexGrid2.Col = 3 Text1.Text = MSFlexGrid2.Text nextpos MSFlexGrid2.Row, MSFlexGrid2.Col Else MSFlexGrid2.Row = 1 For i = 0 To rs_data2.RecordCount - 1 MSFlexGrid2.Row = i + 1 For j = 0 To 8 MSFlexGrid2.Col = j If j = 4 Or j = 7 Then If jinchu = 出库 Then rs_data2.Fields(j) = -CDbl(Trim(MSFlexGrid2.Text) Else rs_data2.Fields(j) = CDbl(Trim(MSFlexGrid2.Text) End If Else rs_data2.Fields(j) = MSFlexGrid2.Text End If Next j Next i rs_data2.Update MsgBox 修改信息成功!, vbOKOnly + vbExclamation, cmdmodify.Caption = 修改明细 cmdadd.Enabled = True cmddel.Enabled = True cmdexit.Enabled = True cmdcancel.Enabled = False Combo1.Visible = False Text1.Visible = False End If End IfEnd Ifmodifyerror:If Err.Number 0 Then MsgBox Err.DescriptionEnd IfEnd Sub下面是各个明细显的代码:If Not rs_data2.EOF Then rs_data2.MoveFir
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论