资源描述
吉林省明日科技有限公司监制
摘要
【摘要】
生产部门如果没有专业化管理的工具,都会受到如周期、库存、人力、发货、废品、引入新产品和满足客户要求等问题的困扰。如果没有一个有效的计划,生产部门对以上这些问题以及其他一些类似的问题是很难回答的。由于缺乏公认的专业工具和知识体系以及其有效系统,也很难准确的衡量生产部门的工作业绩。由此可见,生产管理系统的引入迫在眉睫。在应用生产管理系统的环境下,在制定销售与运作规划时先要通过资源计划来估算为生产一定数量的某类产品所需的资源,以保证销售与运作规划的合理性。
【关键词】 生产部门 问题 生产管理系统
– 27 –
目录
摘要 1
目录 1
0 引言 1
1 系统分析 2
1.1 需求分析 2
1.2 可行性分析 2
2 总体设计 2
2.1 项目规划 2
2.2 系统功能架构图 3
3 系统设计 3
3.1 设计目标 3
3.2 开发及运行环境 4
3.3 数据库设计 4
4 主要功能模块设计 4
4.1 公共模块设计 4
4.2 主窗体 5
4.3 系统登录窗体 7
4.4 物料信息设置 10
4.5 生产计划单管理 14
4.6 设备报废信息 16
附录A 参考文献 18
附录B 数据表 19
附录C 文件架构图 27
0 引言
20世纪60年代以来,一种以“既要降低库存,又要不出现物料短缺”的计划方法逐渐发展起来,主要解决间歇生产的生产计划和控制问题。在间歇生产的情况下,如何保证生产计划的高校运行,保证及时供应物料以满足生产需要,是生产管理中的重要问题,这个问题处理不好,就会造成又库存积压,又物料短缺的情况。
目前,无论是企业还是工厂都实行了信息化管理,以提高管理水平和工作效率,同时也可以最大限度的减少手工操作带来的错误。于是生产管理系统应运而生。
随着我国改革开放的不断深入,企业发展已经从面向区域市场转向面对国内外广阔的市场。过去长期采用的传统手工或手工加微机的管理方式已无法对经营过程中多层次、多品种、多批量的生产计划进行管理,也无法对任何一种产品生产全过程的动态信息进行管理。各部门之间的信息传递不流畅,而且大量冗余,决策者常常得不到他们所需要的准确信息,结果造成了生产过程中库存、资金严重积压,原材料时常短缺,零部件生产不配套,计划不准确等不良现象。这在很大程度上影响了公司的进一步发展。本系统正是在这种背景之下提出的。本系统的功能特点集中表现在:
q 提高了企业的经营质量和效率。
q 降低了企业的生产成本,增强了企业的市场竞争力。
q 强化了企业的资金流管理,提高了资金利用率。
q 优化生产管理,疏通生产渠道。
q 提高了生产效率。
1 系统分析
1.1 需求分析
通过调查,要求本系统需要有以下功能:
q 由于操作人员的计算机操作能力普遍较差,因此要求系统具有良好的人机交互界面。
q 由于本系统的使用对象较多,因此要有完备的权限管理功能。
q 完全人性化设计,无需专业人士指导,即可操作本系统。
q 系统具有数据备份及数据还原功能,能够保证系统数据的安全性。
q 方便的、全方位的数据查询功能。
q 自动完成数据计算,尽量减少人工干预。
q 强大的报表打印功能。
1.2 可行性分析
生产管理系统后台数据库采用SQL Server 2000数据库,以保证数据的安全、高效和稳定。前台采用Microsoft公司的Visual Basic 6.0作为主要的开发工具,该工具可与SQL Server 2000数据库无缝链接。
2 总体设计
2.1 项目规划
生产管理系统是一个典型的数据库开发应用程序,由基础信息管理模块、计划信息管理模块、生产设备管理模块、产品库存管理模块、辅助功能模块、系统维护模块、帮助信息模块7个功能模块组成,规划系统功能模块如下:
q 基础信息管理模块
该模块主要包括产品基础信息、物料基本信息、设备状态设置、设备类型设置、设备摊销时间设置、车间部门设置6部分组成。
q 计划信息管理模块
该模块主要包括生产计划单管理、生产计划单查询、物料需求计划、物料需求查询4部分。
q 生产设备管理模块
该模块主要由生产设备档案、生产设备查询、生产设备报废、生产设备报废查询、生产设备维修、生产设备维修查询6部分组成。
q 产品库存管理模块
该模块主要由产品完工入库、产品入库查询、物料入库、物料入库查询、生产领料、生产领料查询、物料库存信息查询7部分组成。
q 辅助功能模块
该模块主要包括调用Word、调用Excel、调用计算器、登录Internet、工作备忘5部分。
q 系统维护模块
该模块主要由操作员设置、密码修改、操作权限设置、数据清理、数据备份与恢复、设置主窗口图片6部分组成。
q 帮助信息模块
该模块主要有:本单位信息、关于、帮助。
2.2 系统功能架构图
图1 生产管理系统功能架构图
3 系统设计
3.1 设计目标
本系统属于典型的数据库管理系统,是针对中小型企业生产管理开发设计的,实现进一步的计算机化的管理。通过本系统可以达到以下目标:
q 灵活的运用表格批量输入数据,使信息传递更快捷。
q 系统采用良好的人机对话模式,界面设计美观友好,信息查询灵活、方便、快捷、准确,数据存储安全可靠。
q 键盘操作,快速响应。
q 实现各种查询及打印功能。
q 操作员可以随时修改自己的口令。
q 管理员可以设置操作员的权限。
q 对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。
q 数据保密性强,为每个用户设置权限级别。
q 系统运行稳定、安全可靠。
3.2 开发及运行环境
系统开发平台:Visual Basic 6.0。
数据库管理系统软件:SQL Server 2000。
运行平台:Windows xp/ Windows 2000。
分辨率:最佳效果800*600。
3.3 数据库设计
本系统数据库采用SQL Server 2000数据库,系统数据库名称为db_SCGL。数据库db_SCGL中包含19张数据表。下面分别给出数据表概要说明和数据表的结构。
1.数据表概要说明
如图2所示的即为本系统中数据库中的数据表的树形结构图,该数据表树型结构图包含系统所有数据表。可以清晰地反应数据库信息。
图2 数据表树型结构图
2.数据表的结构
由于篇幅所限,关于数据库中的数据表请参见附录二。
4 主要功能模块设计
4.1 公共模块设计
为了节省系统资源,实现代码重用,可以在系统中创建一个Modulel模块。就本系统而言,该模块主要用于共享数据库连接。
在公共模块中定义了一些公共的变量、数据连接以及Toolbar控件中的相关设置。由于本系统中的大部分窗体都采用Toolbar控件的风格模式,因此,在这里出模块中关于Toolbar控件中按钮设置的代码。其他相关代码请参见源程序。
'定义设置Toolbar控件上按钮状态的函数
Public Function tlbState(tlb As Toolbar, state As Boolean)
With tlb
If state = True Then '如果状态变量为True
.Buttons(1).Enabled = False : .Buttons(2).Enabled = False : .Buttons(3).Enabled = False
.Buttons(6).Enabled = False : .Buttons(4).Enabled = True : .Buttons(5).Enabled = True
Else '如果状态变量为False
.Buttons(1).Enabled = True : .Buttons(2).Enabled = True : .Buttons(3).Enabled = True
.Buttons(6).Enabled = True : .Buttons(4).Enabled = False : Buttons(5).Enabled = False
End If
End With
End Function
4.2 主窗体
主窗体主要是对生产管理系统的各个子功能模块进行调用,并在主窗体中显示操作员的姓名及日期,其运行结果如图3所示。
图3 主窗体运行结果
1.窗体设计
(1)在“工程”中新建一个窗体,将窗体的“名称”设置为frm_Main,MaxButton属性设置为False,Caption属性设置为“生产管理系统”,StartUpPosition属性设置为2-屏幕中心。
(2)利用VB提供的菜单编辑器设计窗体菜单。如图4所示。
图4 生产管理系统菜单设计
(3)向窗体上添加1个Toolbar控件,和1个ImageList控件,并将这两个控件连接。
(4)向窗体上添加1个TreeView控件。添加完成后将其与ImageList控件连接,同时设置其“热跟踪”属性为True。并将其MousePointer属性设置为99–Custom,MouseIcon属性为“生产管理系统\Program\窗体\Image\鼠标.ico”。
(5)向窗体上添加1个Image控件。设置其Picture属性,设置Stretch属性为True。该控件用于显示系统的主界面。
(6)向窗体上添加1个StatusBar控件。
(7)向窗体上添加1个Timer控件,设置其Interval属性为60,Enabled属性为True。用于显示系统当前的时间。
(8)向窗体上添加1个CommonDialog控件。由于CommonDialog控件属于ActiveX控件,在使用之前必须从“部件”对话框中添加到工具箱。添加方法如下:
在“工程”/“部件”对话框中勾选“Microsoft Common Dialog Controls6.0(SP6)”列表项,单击【确定】按钮之后即可将CommonDialog控件添加到工具箱当中。该控件用于打开相应的对话框。
2.代码设计
在窗体加载时,调用自定义过程Tree_Change,设置TreeView控件中的数据信息。其设计思路是:首先将菜单中的项目存储到数据表tb_SCGL_menu中,在窗体启动时,利用嵌套循环向TreeView控件中添加数据信息。其实现的代码如下:
'自定义一个过程,用于显示TreeView控件中的数据
Public Sub Tree_change()
Dim key, Text, BH, StrTemp As String
Dim Nod As Node '定义一个节点变量
rs1.Open "select distinct menu_menu,menu_menuid from tb_SCGL_menu order by menu_menuid", cnn, adOpenKeyset
If rs1.RecordCount > 0 Then '如果记录数大于零
rs1.MoveFirst ' 移至第一条记录集
Do While rs1.EOF = False '循环读取第1层节点中的数据信息
key = Trim(rs1.Fields("menu_menu"))
Text = rs1.Fields("menu_menu")
StrTemp = rs1.Fields("menu_menu")
Set node1 = TreeView1.Nodes.Add(, tvwChild, key, Text, 1) '给第1层节点赋与数值
rs2.Open "select * from tb_SCGL_menu where menu_menu ='" + StrTemp + "'", cnn, adOpenKeyset
If rs2.RecordCount > 0 Then
rs2.MoveFirst
Do While rs2.EOF = False '循环读取第2层节点中的数据信息
key = Trim(rs2.Fields("menu_submenu"))
Text = rs2.Fields("menu_submenu")
'给第2层节点赋与数值
Set Node2 = TreeView1.Nodes.Add(node1.Index, tvwChild, key, Text, 2)
rs2.MoveNext
Loop
End If
rs2.Close
rs1.MoveNext
Loop
End If
rs1.Close
End Sub
4.3 系统登录窗体
系统登录主要用于对登录生产管理系统的用户进行安全性检查,以防止非法用户进入该系统。只有合法的用户,才可以登录本系统,同时系统根据操作员的不同,给予这个操作员相应的操作权限。
验证操作员及其密码,主要通过对数据表tb_user的查询,结合If语句判断用户选定的操作员及其输入的密码是否符合数据库中的操作员和密码,如果符合则允许登录,并给予相应的权限,否则提示错误信息。如果错误超过3次,则强行退出系统。生产管理系统登录界面如图5所示。
图5 系统登录界面
1.窗体设计
(1)在“工程”中新建一个窗体,将窗体的“名称”设置为Frm_mm,BorderStyle属性设置为0–None,StartUpPosition属性设置为2–屏幕中心。
(2)向窗体上添加1个PictureBox控件,设置其Picture属性。
(3)向窗体上添加1个ListView控件,1个ImageList控件,设置ListView控件的Picture属性,并将ListView控件与ImageList控件连接在一起。用于显示操作员头像和姓名。
(4)分别向窗体上添加Label控件、TextBox控件、Image控件。本窗体应用到的主要控件的相关属性请参见表1。
图6 生产管理系统登录界面
表1 主要控件对象的属性列表
对象
属性
值
功能
Image
Name
Strech
Img_Tx
True
显示登录的操作员头像
ImageList
Name
Imt_Tx
用于存储图片
ListView
Name
ListView1
显示操作员列表
PictureBox
Name
Picture1
显示图片
TextBox
Name
PasswordChar
Text
Txt_mm
*
空
输入操作员密码
TextBox
Name
Text
Visible
Txt_Time
Txt_Time
False
存储错误输入次数
2.代码设计
在窗体加载时,向ListView控件中添加所有的操作员信息,并将显示在前面的操作员头像、操作员编号、操作员姓名显示在操作员信息中,其实现的代码如下:
Private Sub Form_Load()
Lbl_Infor.Caption = "初始用户名为:mr 密码为:mrsoft " + Chr(10) + Chr(10) + "本软件由明日科技有限公司开发,欢迎各界朋友来电来函垂询!" '设置标签内容
rs.Open "select * from tb_user", cnn, adOpenKeyset '打开对象
If rs.RecordCount > 0 Then
rs.MoveFirst '移至第一条记录
'将第一条记录的信息显示在相应的控件中
Lbl_Czyid.Caption = rs.Fields("user_id")
Lbl_Name.Caption = rs.Fields("user_name")
MyIcon = Val(Right(rs.Fields("user_tx"), Val(Len(rs.Fields("user_tx")) - 2)))
Set Img_Tx.Picture = Imt_Tx.ListImages(MyIcon).Picture
'向ListView中添加图片
Do While rs.EOF = False
Mystr = rs.Fields("user_name")
MyIcon = Val(Right(rs.Fields("user_tx"), Val(Len(rs.Fields("user_tx")) - 2)))
Set itmX = ListView1.ListItems.Add(, , Mystr, MyIcon)
rs.MoveNext
Loop
End If
rs.Close '关闭对象
Txt_mm.Text = ""
End Sub
当用户单击ListView控件中操作员列表项时,系统会自动将用户所选择的操作员的头像、操作员编号、操作员姓名显示在相应的位置,以便用户确认该信息是否正确。其实现的代码如下:
Private Sub ListView1_Click()
If ListView1.ListItems.Count > 0 Then
'查询操作员信息
rs.Open "select * from tb_user where user_Name ='" + ListView1.SelectedItem + "'", cnn, adOpenKeyset
If rs.RecordCount > 0 Then '如果记录数大于零
'显示操作员信息
Lbl_Czyid.Caption = rs.Fields("user_id") : Lbl_Name.Caption = rs.Fields("user_Name")
MyIcon = Val(Right(rs.Fields("user_tx"), Val(Len(rs.Fields("user_tx")) - 2)))
'将所选择的操作员头像添加到Image控件中
Set Img_Tx.Picture = Imt_Tx.ListImages(MyIcon).Picture
End If
rs.Close '关闭数据集对象
End If
End Sub
当用户选定相应的操作员,并在文本框中输入密码,单击【确定】按钮或在Txt_mm文本框中按〈Enter〉键,系统会核实其输入的密码是否正确,如果正确即进入到生产管理系统内部,否则提示用户输入错误。如果用户输入的错误密码超过3次,系统将强行退出。其实现代码如下:
Private Sub Label7_Click()
rs.Open "select * from tb_user where user_name ='" + Trim(Lbl_Name.Caption) + "'", cnn, adOpenKeyset
If rs.RecordCount > 0 Then '如果记录数大于零
'验证操作员及密码
If Txt_mm.Text = rs.Fields("user_mm") Then '如果输入密码正确
Load Frm_Main '加载窗体
Frm_Main.Show
Frm_Main.StatusBar1.Panels(2).Text = Lbl_Name.Caption '设置状态栏信息
Unload Me '关闭本窗体
Else '否则
If Lbl_Name.Caption = "" Then '如果操作员姓名为空
MsgBox "请选择操作员!", , "信息提示"
ListView1.SetFocus '设置焦点
Else
If Txt_mm.Text <> rs.Fields("user_mm") Then '如果密码输入错误
MsgBox "密码错误,请重新输入密码!", , "信息提示"
Txt_Time.Text = Val(Txt_Time.Text) + 1 '计数文本框中的数量加一
Txt_mm.SetFocus '将焦点设置在密码文本框中
End If
End If
If Txt_Time.Text = "3" Then '密码错误3次,退出系统
MyMsg = MsgBox("密码输入错误,请向系统管理员查询!", , "信息提示")
If MyMsg = vbOK Then End
End If
End If
End If
rs.Close
End Sub
4.4 物料信息设置
物料信息设置窗体可以用于对本企业所需要的物料信息进行增加、删除、修改、查找操作,并可以通过下面的列表浏览所有的物料信息。物料信息设置窗体的运行结果如图7所示。
图7 物料信息设置窗体运行结果
1.窗体设计
(1)在“工程”中新建一个窗体,将窗体的“名称”设置为Frm_Jcxx_Wlxx,Caption属性设置为“物料信息设置”,MaxButton属性设置为False。
(2)在窗体上添加1个Toolbar控件,1个ImageList控件。向ImageList1控件中添加图片,并将其与Toolbar控件相连接。
(3)向窗体上添加1个ADO控件,1个DataGrid控件。设置DataGrid控件的“名称”为Dgr_Wlxx,DataSource属性为Adodc1。设置Adodc1控件的CommandType属性为1 – adCmdText,RecordSource属性设置为select * from tb_SCGL_wlxx order by wlxx_id。其中DataGrid控件用于显示物料信息,ADO控件用于数据连接。
(4)向窗体上添加ComboBox控件,设置其“名称”为Cbx_Cpbh,Style属性为0–Dropdown Combo。该控件用于显示产品编号。
(5)向窗体上添加若干Label控件和TextBox控件。设置TextBox控件为“名称”为Text1的控件数组。
图8 物料信息设置设计窗体
2.代码设计
在程序运行时,数据的增加、删除、修改、查找操作都是通过Toolbar控件上的按钮来实现的。其实现的关键代码如下:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.key
Case "add" '添加
blnAdd = True '设置变量,如果为True,则在【保存】按钮中作插入操作
tlbState Toolbar1, True '调用模块中的过程
'打开数据集连接
rs1.Open "select * from tb_SCGL_wlxx order by wlxx_id", cnn, adOpenStatic
If rs1.RecordCount > 0 Then '如果数据记录大于零
rs1.MoveLast '移至最后一条记录
Text1(0) = "WL" + Format(Val(Right(Trim(rs1.Fields("wlxx_id")), 3)) + 1, "###000") '编号自动加1
Else '如果没有记录
Text1(0) = "WL001"
End If
rs1.Close '关闭数据对象
For i = 1 To Text1.UBound
Text1(i) = ""
Text1(i).Locked = False
Next i
Cbx_Cpbh.Locked = False
For i = 1 To Text1.UBound
Text1(i).Enabled = True
Next i
Cbx_Cpbh.Enabled = True : Text1(1).SetFocus
Case "modify" '修改
If Adodc1.Recordset.RecordCount > 0 Then
blnAdd = False '设置变量,如果为False,则在【保存】按钮中作修改操作
tlbState Toolbar1, True '调用模块中的过程
For i = 1 To Text1.UBound
Text1(i).Locked = False
Next i
Cbx_Cpbh.Locked = False
view_data '调用自定义的过程
mybookmark = Dgr_Wlxx.Bookmark
For i = 1 To Text1.UBound
Text1(i).Enabled = True
Next i
Cbx_Cpbh.Enabled = True
Else
MsgBox "系统没有要修改的数据!", , "提示窗口"
End If
Case "delete" '删除
If Adodc1.Recordset.RecordCount > 0 Then
'查询其他表中是否有相关的信息正在使用,如果有这不能删除该信息
Dim rs2 As New ADODB.Recordset
rs2.Open "select * from tb_SCGL_wlxq where wlxq_wlbh='" + Adodc1.Recordset.Fields("wlxx_id") + "'", cnn, adOpenKeyset
If rs2.RecordCount > 0 Then
MsgBox "该信息正在使用,不能删除!", , "信息提示"
Exit Sub
Else
Adodc1.Recordset.Delete
Adodc1.Refresh
For i = 0 To Text1.UBound
Text1(i).Text = ""
Next i
Cbx_Cpbh.Text = ""
Call view_data '调用数据显示自定义过程
Call Dgr_Title '调用设置表头的字定义过程
End If
Else
MsgBox "系统没有要删除的数据!", , "提示窗口"
End If
Case "save" '保存
On Error GoTo SaveErr '错误处理
If Text1(1).Text = "" Then
MsgBox "系统不允许" & Label2 & "为空!", , "提示窗口"
Exit Sub
End If
If blnAdd = True Then '添加新记录
cnn.Execute ("insert into tb_SCGL_wlxx(wlxx_id,wlxx_wlmc,wlxx_wlgg,wlxx_wldw,wlxx_cpbh,wlxx_cpmc,wlxx_cpgg,wlxx_bz,wlxx_wlsl) values('" + Text1(0) + "','" + Text1(1) + "','" + Text1(2) + "','" + Text1(3) + "','" + Cbx_Cpbh.Text + "','" + Text1(4).Text + "','" + Text1(5).Text + "','" + Text1(6) + "','" + Text1(7) + "')")
Unload Me
Frm_Jcxx_Wlxx.Show 1 : tlbState Toolbar1, False
For i = 1 To Text1.UBound
Text1(i).Locked = True
Next i
Cbx_Cpbh.Locked = True
Else '修改原有记录
cnn.Execute ("update tb_SCGL_wlxx set wlxx_wlmc ='" + Text1(1) + "',wlxx_wlgg='" + Text1(2) + "',wlxx_wldw='" + Text1(3) + "',wlxx_cpbh='" + Cbx_Cpbh.Text + "',wlxx_cpmc='" + Text1(4) + "',wlxx_cpgg='" + Text1(5) + "',wlxx_bz='" + Text1(6) + "',wlxx_wlsl='" + Text1(7) + "' where wlxx_id='" + Text1(0).Text + "'")
Unload Me
Frm_Jcxx_Wlxx.Show 1 : Dgr_Wlxx.Bookmark = mybookmark
tlbState Toolbar1, False '调用模块中的自定义过程
For i = 1 To Text1.UBound
Text1(i).Locked = True
Next i
Cbx_Cpbh.Locked = True
End If
Exit Sub
SaveErr: '出错处理程序
MsgBox Err.Description, , "信息提示"
Case "cancel" ' 取消
tlbState Toolbar1, False
For i = 1 To Text1.UBound
Text1(i).Locked = True
Next i
Cbx_Cpbh.Locked = True : Call view_data
Case "find" '查询
Mystr = InputBox("请输入要查询的物料信息编号", "物料信息查询", "WL001")
rs1.Open "select * from tb_SCGL_wlxx where wlxx_id ='" + Mystr + "'", cnn, adOpenKeyset
If rs1.RecordCount > 0 Then
For i = 0 To 3
If rs1.Fields(i) <> "" Then Text1(i).Text = rs1.Fields(i) Else Text1(i).Text = ""
Cbx_Cpbh.Text = ""
Next i
If rs1.Fields(4) <> "" Then Cbx_Cpbh.Text = rs1.Fields(4) Else Cbx_Cpbh.Text = ""
If rs1.Fields(5) <> "" Then Text1(4).Text = rs1.Fields(5) Else Text1(4).Text = ""
If rs1.Fields(6) <> "" Then Text1(5).Text = rs1.Fields(6) Else Text1(5).Text = ""
If rs1.Fields(7) <> "" Then Text1(6).Text = rs1.Fields(7) Else Text1(6).Text = ""
If rs1.Fields(8) <> "" Then Text1(7).Text = rs1.Fields(8) Else Text1(7).Text = ""
End If
rs1.Close
Case "close" '关闭
Unload Me
End Select
End Sub
4.5 生产计划单管理
生产计划单管理窗体是生产管理系统中一个比较重要的部分。后面的物料计划管理模块、产品入库模块都与生产计划单有着密切的联系。在生产计划单中可以完成对生产计划单的增加、删除、修改、查找操作。
在生产计划单管理中,当用户单击【增加】按钮时,系统会自动生成生产计划单编号,并将企业所生产的产品添加到产品编号组合框中,当用户选择要生产的产品编号后,系统会自动将产品名称、产品规格、计量单位自动添加到相应的文本框中,用户只需添入计划数量、投产日期、计划日期等即可。无须用户查找相应的产品信息,使用户操作更加简便。生产计划单窗体的运行结果
展开阅读全文