




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 15 / 16进销存管理系统实战 序 如今企业管理软件种类繁多,从最初的财务软件到进销存财务一体,到现在的ERP(企业资源计划)、CRM(客户资源管理)等,单从技术来说,它的基础还是以数据为中心的,各种分析报告、财务报表等无不源于实际业务中产生的记录,所以本文考虑从初学者的角度出发来讲解进销存的初步知识,希望读者能从中总结出经验来。
2、0; 一个项目的实施首先要做好前期规划,这是必需的,也是非常重要的,如果这个没做好,那么修改代码将是一件非常麻烦、痛苦的事。本例仅从技术的实现讲解,首先确定需要实现的功能,其次进行数据库的设计。 主要模块如下: (1) 初始化,也就是基本资料的录入,其中分为商品资料、供应商资料、客户、业务员、商品类别、 员工档案、支付方式、库房资料
3、; (2)进货管理,包括进货单录入以与查询功能(按时间、商品编号、商品名称、数量、业务员、 供应商、支付方式等,应分为汇总与明细) (3)销售管理,基本同上,不同的是供应商改为客户即可 (4)库存管理,包括即时库存明细(汇总)、查询、库存盘盈整(本文略)等。 (5)财务管理,包括销售收益、支出、销售额明细(汇总)、应收、应付、已付、应付、费用明细(汇总)等 &
4、#160; (6)其他,包括定单管理、预测分析、整理数据、备份数据等功能(略) (见数据库设计) 本文容依次为:进货管理(frmjhgl)、销售管理(frmxsgl)、财务管理(frmcwgl)、查找商品(frmfindsp)、 查询记录与打印模块(modprint)。(如图一) 尾:怎么样,一
5、个比较实用的进销存管理程序产生了。限于篇幅,笔者只能刊登几个基础模块,当然这个程序与思路可能另大型软件公司的程序员不屑一顾,这就需要读者们自行根据实际来添加所需功能了。
6、60; 数据库设计 做这类程序其关键在于数据库的操作,下面列出本程序中的所用数据库的结构,以便大家阅读方便: 表名 col1=依次为字段名、字
7、段类型、长度等。 数据库容: 仓库 Col1=编号 Char Width 10 Col2=仓库名称 Char Width 8 Col3=所属类别 Char Width 8
8、160; Col4=备注 Char Width 20 费用 Col1=编号 Char Width 10 Col2=日期 Date Col3=摘要 Char Width 40 Col4=金额 Currency Co
9、l5=付款方式 Char Width 4 Col6=备注 Char Width 20 付款方式 Col1=编号 Char Width 10 Col2=付款方式 Char Width 4 Col3=备注 Char Width 20
10、0; 供应商 Col1=编号 Char Width 10 Col2=名称 Char Width 20 Col3=联系人 Char Width 8 Col4= Char Width 20 Col5= Char Width 20
11、 Col6=邮政编码 Char Width 12 Col7=地址 Char Width 50 Col8=Email Char Width 20 Col9=网址 Char Width 20 Col10=税号 Char Width 50 Col11= Char Width 50 Col12=
12、开户行 Char Width 50 Col13=备注 Char Width 20 进货记录 Col1=商品编号 Char Width 10 Col2=商品名称 Char Width 20 Col3=单位 Char Width 4
13、0; Col4=存放仓库 Char Width 8 Col5=数量 Integer Col6=单价 Currency Col7=金额 Currency Col8=业务员 Char Width 8 Col9=进货单号 Char Width 20 Col10=日期 Date
14、60; Col11=供应商 Char Width 30 Col12=付款方式 Char Width 10 Col13=备注 Char Width 20 客户 Col1=编号 Char Width 10 Col2=名称 Char Width 20
15、160; Col3=联系人 Char Width 8 Col4= Char Width 20 Col5= Char Width 20 Col6=邮政编码 Char Width 12 Col7=地址 Char Width 50 Col8=Email Char Width 30
16、Col9=网址 Char Width 30 Col10=税号 Char Width 50 Col11= Char Width 50 Col12=开户行 Char Width 50 Col13=信誉度 Char Width 10 Col14=备注 Char Width 20 &
17、#160; 库存 Col1=商品编号 Char Width 10 Col2=商品名称 Char Width 20 Col3=单位 Char Width 4 Col4=数量 Integer Col5=仓库 Char Width 8
18、0; 类别 Col1=编号 Char Width 10 Col2=类别名称 Char Width 20 Col3=备注 Char Width 20 商品 Col1=编号 Char Width 10&
19、#160; Col2=名称 Char Width 20 Col3=单位 Char Width 4 Col4=类别 Char Width 8 Col5=进货价 Currency Col6=销售价 Currency Col7=供应商 Char Width 20 Col8=备注 C
20、har Width 20 销售记录 Col1=商品编号 Char Width 10 Col2=商品名称 Char Width 20 Col3=单位 Char Width 4 Col4=存放仓库 Char Width 8
21、60; Col5=数量 Integer Col6=单价 Currency Col7=金额 Currency Col8=业务员 Char Width 8 Col9=出货单号 Char Width 20 Col10=日期 Date Col11=客户 Char Width 20
22、160; Col12=付款方式 Char Width 4 Col13=备注 Char Width 20 业务员 Col1=编号 Char Width 10 Col2= Char Width 8 Col3=所属部门 Char Width 20
23、0; Col4=个人 Char Width 20 Col5=家庭住址 Char Width 20 Col6= Char Width 40 Col7=备注 Char Width 20 员工档案 Col1=编号 Char Width 10&
24、#160; Col2= Char Width 8 Col3=姓别 Char Width 2 Col4=所属部门 Char Width 20 Col5=工种 Char Width 10 Col6=上工时间 Char Width 20 Col7= Char Width 40 Co
25、l8=个人 Char Width 20 Col9=家庭住址 Char Width 40 Col10=Email Char Width 20 Col11=婚否 Bit Col12=生日 Date Col13=爱好 Char Width 10 Col14=忠诚度 Char Width 10 &
26、#160; Col15=备注 Char Width 20
27、 一:进货管理 此模块的技术关键是在保存记录上,在为“销售记录”表中存数据时应同时向“库存记录”表添加,如果有此商品则在原有的基础上进行加法运算,否则添加新记录。在销售管理中原理也是这样,不过如果库存里没有此类商品就不允许用户进行销售操作。 frmjhgl(进货管理)模块中所有控件的相关设置: (1)Text
28、Box:本模块共用8个文本框,其Name属性分别为: txtname(商品名称)、txtliang(数量)、txtdanjia(单价)、txtbianhao(商品编号)、txtjhdata(操作日期)、txtjine(金额)、txtjine(金额)、txtshuiq(税前金额)、txtshui(税率) datasource属性分别为:data1,datafield为空。 另添加三个combobox控件(
29、cmbcj、cmbywy、 cmbjie), 用来显示厂家、业务员与结算方式(即结、欠付等) (2)四个command控件,name属性分别为:cmdaddnew、cmdsave、cmdcancel、cmdquit。caption属性分别为:新单、保存、取消、退出 代码: Dim zxh As Boolean '判断用户输入数据是否为空 Priva
30、te Sub addywy()'为combobox控件添加容 Dim db As Database Dim rs As Recordset Set db = OpenDatabase(App.Path & "jxc.mdb") Set rs = db.OpenRecordset("业务员") While
31、 Not rs.EOF cmbywy.AddItem rs.Fields("业务员名称").Value rs.MoveNext Wend rs.Close Set rs = Nothing db.Close Set db = Nothing
32、160; End Sub Private Sub addcj() Dim db As Database Dim rs As Recordset Set db = OpenDatabase(App.Path & "jxc.mdb") Set rs = db.OpenRecordset("
33、厂家") While Not rs.EOF cmbcj.AddItem rs.Fields("厂家名称").Value rs.MoveNext Wend rs.Close Set rs = Nothing db.Close
34、 Set db = Nothing End Sub Private Sub notnull() If txtbianhao.Text = "" Then zxh = True MsgBox "商品编号不能为空", vbInformation, "试图添加空记录"&
35、#160; End If If txtname.Text = "" Then zxh = True MsgBox "商品名称不能为空", vbInformation, "试图添加空记录" End If If txtliang.Text = ""
36、 Then zxh = True MsgBox "数量不能为空", vbInformation, "试图添加空记录" End If End Sub Private Sub cmdaddnew_Click() Data1.R
37、ecordset.AddNew txtjhdata.Text = Date cmdsave.Enabled = True cmdcancel.Enabled = True cmdaddnew.Enabled = False End Sub Private Sub
38、 cmdcancel_Click() Data1.Recordset.CancelUpdate cmdaddnew.Enabled = True cmdsave.Enabled = False cmdcancel.Enabled = False End Sub
39、Private Sub cmdsave_Click() Dim field_value$, txtliang_value$ Dim jhbh$, ccbh$, jhna$ cmdaddnew.Enabled = True cmdsave.Enabled = False cmdcancel.Enabled = False
40、160; On Error GoTo err txtliang_value = txtliang.Text jhbh = txtbianhao.Text jhna = txtname.Text Call notnull If zxh = True Then Da
41、ta1.Recordset.CancelUpdate Else '执行 Me.MousePointer = 11 Data1.Recordset.Update '必须初始化绑定字段 txtdanjia.datafield = ""
42、; txtjhdata.datafield = "" txtjine.datafield = "" cmbcj.datafield = "" cmbywy.datafield = ""
43、 cmbjie.datafield = "" '向库存添加 Data1.RecordSource = "即时库存" Data1.Refresh Data1.Recordset.MoveFirst
44、0; While ccbh <> jhbh And Not Data1.Recordset.EOF ccbh = Data1.Recordset.Fields("商品编号").Value If ccbh = jhbh Then
45、60; ccbh = Data1.Recordset.Fields("商品编号").Value Else Data1.Recordset.MoveNext
46、160; End If Wend If ccbh = jhbh Then Data1.Recordset.Edit &
47、#160; field_value = Data1.Recordset.Fields("数量").Value Data1.Recordset.Fields("数量").Value = field_value + txtliang_value Data1.Recordset.Update El
48、se '添加新记录 With Data1.Recordset .AddNew .Fields("商品编号").Value = jhbh
49、160; .Fields("商品名称").Value = jhna .Fields("数量").Value = txtliang_value
50、0; .Update vs.Refresh End With End If '返回开单,重新绑定字段
51、60; Data1.RecordSource = "进货记录" Data1.Refresh txtname.datafield = "商品名称" txtliang.datafield = "数量" txtdanjia.datafield =
52、"单价" txtbianhao.datafield = "商品编号" txtjhdata.datafield = "操作日期" txtjine.datafield = "金额" cmbcj.datafield = "厂家名
53、称" cmbywy.datafield = "业务员名称" Data1.Recordset.MoveLast Me.MousePointer = 0 End If Exit Sub err:
54、0; Me.MousePointer = 0 MsgBox err.Description End Sub Private Sub cmdquit_Click() Unload Me End Sub
55、160; Private Sub Form_Load() With Data1 .DatabaseName = App.Path & "jxc.mdb" .RecordSource = "进货记录" End With
56、 '数据库"jxc.mdb"中表"进货记录"中的容如下 txtname.datafield = "商品名称" txtliang.datafield = "数量" txtdanjia.datafield = "单价" txtbianhao.datafield = "商品编号"
57、60; txtjhdata.datafield = "操作日期" txtjine.datafield = "金额" cmbcj.datafield = "厂家名称" cmbywy.datafield = "业务员名称" cmbjie.datafield = "支付方式"&
58、#160; Call addcj '添加厂家名称 Call addywy '添加业务员名称
59、160; End Sub Private Sub txtdanjia_GotFocus() With txtdanjia .SelStart = 0 .SelLength = Len(.Text) End With End S
60、ub Private Sub txtdanjia_KeyPress(KeyAscii As Integer) '只能输入数字 If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii >= 32 _ And KeyAscii <> Asc(".") Then&
61、#160; KeyAscii = 0 Beep End If End Sub Private Sub txtliang_GotFocus() With txtliang .SelStart = 0
62、60; .SelLength = Len(.Text) End With End Sub Private Sub txtliang_KeyPress(KeyAscii As Integer) If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii >= 32 _
63、 And KeyAscii <> Asc(".") Then KeyAscii = 0 Beep End Sub Private Sub txtliang_LostFocus() On Error GoTo err
64、160; If txtdanjia <> "" And txtliang <> "" Then txtjine.Text = txtdanjia * txtliang Else MsgBox "字段不能为空", vbExclamation, "Error"
65、 End If Exit Sub err: MsgBox "请确认数据的正确性", vbCritical, "错误" End Sub Private Sub txtshui_LostFocus() Dim shui
66、9;计算税额 If txtjine <> "" And txtshui <> "" Then shui = 1 - (txtshui.Text / 100) txtshuiq.Text = shui * txtjine End If End Sub
67、 二:销售管理 销售管理与进货管理模块中记录的操作大体一致,所不同的
68、是库存的增减,还要添加两个功能:查找商品(见frmfindsp)与检测库存量 说明:此处textbox控件:txtspbh 显示商品编号、txtstore 显示当前库存量 Private Sub Cmdfindsp_Click() '查找商品,代码请参考“查找商品” frmfindsp.Show 1
69、 End Sub Private Sub Cmdkc_Click() '检测库存量 Dim db As Database Dim rs As Recordset Dim fieldspbh_value Se
70、t db = OpenDatabase(App.Path & "jxc.mdb") Set rs = db.OpenRecordset("即时库存") While txtspbh <> fieldspbh_value And Not rs.EOF fieldspbh_value = rs.Fields("商品编号").Value
71、; If fieldspbh_value = txtspbh Then fieldspbh_value = rs.Fields("商品编号").Value Else rs.MoveNext End If Wend If
72、fieldspbh_value = txtspbh Then txtstore.Text = rs.Fields("数量").Value Else MsgBox "库存中没有此类商品", vbInformation, "检测结果" End If rs.Close
73、 Set rs = Nothing db.Close Set db = Nothing End Sub
74、 三:查找商品 .在销售管理中查找某商品的信息(frmfindsp),不应让用户手工输入商品的信息 .添加treeview控件,name属性为:tv .添加textbo
75、x控件数组,name属性为:text1(0)-text(6),用来分别显示商品编号、商品名称、单价(元)、单位 、类别、质保期等必要的商品信息 .treeview.nodes.add(relative,relationship,key,text,image,selectedimage)参数解释如下: relative,可选,node的索引或键值; relationship,node的相应位置关系; key
76、,用item方法提取node的唯一字符串; text,node显示的字符串; image,图像索引(注:本例没有图像索引); selectedimage,被选中时,与image控件相关联的图像索引。 relationship的值: tvwfirst,0,第一个对象,该节点放在所有同级节点的前面; &
77、#160; tvwlast,1,最后一个; tvwnext,2,(缺省)下一个,该节点放在relative命名的节点之后; tvwprevious,3,前一个,该节点放在relative命名的节点之前; tvwchild,4,子节点,为relative命名节点的子节点。 代码如下: &
78、#160; Dim db As Database, rs As Recordset, rs1 As Recordset, mynode As Node, newnode As Node Private Sub Command1_Click()'此过程与销售管理呼应,将编号、名称与单价传递给frmxsgl窗体中。 frmxsgl.txtspbh.Text = Text1(0).Text frmxsgl.txts
79、pname.Text = Text1(1).Text frmxsgl.txtdanjia.Text = Text1(2).Text Unload Me End Sub Private Sub Form_Load() '加载窗体后,根据商品表中的“类别”标记,将商品名称显示在treeview中,其它字段
80、显示在textbox数组中,使用户能够清楚地查看需要出售的商品相关信息 Dim mysql$, mysqlone$ Set db = OpenDatabase(App.Path & "jxc.mdb") mysql = "select * from 类别" Set rs = db.OpenRecordset(mysql) &
81、#160; Set mynode = tv.Nodes.Add(, , "root", "商品分类") While Not rs.EOF Set newnode = tv.Nodes.Add("root", tvwChild, rs.Fields(1).Value, rs.Fields(1).Value) mysqlone = "select * from 商品 where 类别 =
82、" & "'" & newnode.Text & "'" Set rs1 = db.OpenRecordset(mysqlone) While Not rs1.EOF Set newnode = tv.Nodes.Add(rs.Fields(1).Value, tvwChild, rs1!商品名称, rs1!商品名称)
83、; rs1.MoveNext Wend rs.MoveNext Wend tv.Nodes("root").Expanded = True End Sub Private Sub Form_QueryUnload(Cancel As Inte
84、ger, UnloadMode As Integer) rs1.Close Set rs1 = Nothing rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub
85、; Private Sub tv_NodeClick(ByVal Node As MSComctlLib.Node) On Error GoTo err If Node.Children = 0 Then mysql = "select * from 商品 where 商品名称 =" & "'" & Node.Text &
86、; "'" Set rs = db.OpenRecordset(mysql) For i = 0 To rs.Fields.Count - 1 If TypeName(rs.Fields(i).Value) <> "" Then Text1(i).Text = rs.Fields(i).Value
87、End If Next End If Exit Sub err: MsgBox err.Description End Sub &
88、#160; 四:查询记录(图二) 在进销存管理中,还应设有查询功能,包括进货、销售记录,现仅就查询进货记录为例,其它依此类推,还可进行更为复杂的查询。
89、160; 添加控件: data(data1)、msflexgrid(绑定至data1控件); txtfind(文本框控件,用来保存SQL语句,visible属性为false) ; 三个combobox控件:name属性分别为:cmbfield、cmbcompare、cmbdata 作用为:欲查询的字段(如商品名称、进货时间等)、比较符号( >、<、=、like等);
90、60; 四个按钮控件,name属性分别为:cmdjians(检索字段)、cmdfindnow(执行SQL语句)、cmdback(重画)cmdprint(打印记录集) 代码如下: Public Sub makefind() '添加此过程主要是为了解决SQL语句中的引号问题 txtfind =
91、 cmbfield & cmbcompare Select Case Data1.Recordset.Fields(cmbfield.Text).Type Case 10 ' 文本
92、60; txtfind = txtfind & " '" & txtdata & "'" Case 8 ' 日期
93、160;txtfind = txtfind & " #" & txtdata & "#" Case Else txtfind = txtfind & " " & t
94、xtdata End Select End Sub Private Sub cmbcompare_Click() makefind End Sub Private Sub cmbfield_Click()
95、; makefind End Sub Private Sub cmdfindnow_Click() If cmbfield.Text <> "" And cmbcompare <> "" And txtdata <> "" Then
96、60; Data1.RecordSource = "select * from 进货记录 where" & " " & txtfind.Text Data1.Refresh End If End Sub Private Sub cmdjinas_Click()
97、60; cmbfield.Clear For i = 0 To Data1.Recordset.Fields.Count - 1 cmbfield.AddItem Data1.Recordset.Fields(i).Name Next cmbfield.ListIndex = 0
98、0; cmbcompare.Enabled = True End Sub Private Sub Cmdback_Click() Data1.RecordSource = "进货记录" Data1.Refresh End Sub
99、 Private Sub Form_Load() Data1.DatabaseName = App.Path & "jxc.mdb" Data1.RecordSource = "进货记录" End Sub Private Sub Form_Unload(Canc
100、el As Integer) Data1.Database.Close Set Data1.Recordset = Nothing End Sub Private Sub txtdata_Change() makefind End Sub
101、 private sub cmdprint() Prnrecord(data1.recordset As Recordset) '请见打印模块modprint end sub
102、60; 五:打印模块 .新建一标准模块modprint,以便其它窗体可以共享其过程,此模块只适用于DAO,特此说明:
103、160; Public Sub Prnrecord(recRecordset As Recordset) On Error GoTo err Dim LeftMargin As Integer Dim HeadTopPosition As Integer Dim FieldNum As Integer Dim PageCounter As Integer
104、160; Dim MyRecordset As Recordset Const FooterTopPosition = 24 Set MyRecordset = recRecordset PageCounter = 1 Printer.ScaleMode = vbCentimeters LeftMargin = 1.5 HeadTopPosition = 2 &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高级审计师应试技巧试题及答案
- 商铺转让居间协议书
- 员工借款赠送协议书
- 商场减免保密协议书
- 区域装修资格协议书
- 合同到期续签协议书
- 制药原料转让协议书
- 经济法概论实战模拟试题及答案
- 行政管理专业经济法应用试题及答案
- 跨文化项目管理试题及答案
- 2023-2024届高考作文模拟写作谚语中的经验与智慧导写及范文(含答案)
- DB4417T4-2022地理标志产品 阳江豆豉
- DL∕T 1819-2018 抽水蓄能电站静止变频装置技术条件
- 商场快闪门店装修合同模板
- 历年高考物理真题分类汇编合集
- 第5课时:精读引领课《纳米技术就在我们身边》+《纳米科技走进生活》课件
- TSG07-2019压力容器设计程序文件
- CJT511-2017 铸铁检查井盖
- 临床经尿道前列腺电切(TURP)护理查房
- 一年级下册口算题卡大全(口算练习题50套直接打印版)
- 军事理论-综合版智慧树知到期末考试答案章节答案2024年国防大学
评论
0/150
提交评论