版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.进销存管理系统实战 序 如今企业管理软件种类繁多,从最初的财务软件到进销存财务一体,到现在的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、Col4=备注 Char Width 20 费用 Col1=编号 Char Width 10 Col2=日期 Date Col3=摘要 Char Width 40 Col4=金额 Currency Col5=付款
9、方式 Char Width 4 Col6=备注 Char Width 20 付款方式 Col1=编号 Char Width 10 Col2=付款方式 Char Width 4 Col3=备注 Char Width 20
10、60; 供应商 Col1=编号 Char Width 10 Col2=名称 Char Width 20 Col3=联系人 Char Width 8 Col4=电话 Char Width 20 Col5=传真 Char Width 20 &
11、#160; 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、60; Col4=存放仓库 Char Width 8 Col5=数量 Integer Col6=单价 Currency Col7=金额 Currency Col8=业务员 Char Width 8 Col9=进货单号 Char Width 20 Col10=日期 Date
14、160; 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、160; 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、 库存 Col1=商品编号 Char Width 10 Col2=商品名称 Char Width 20 Col3=单位 Char Width 4 Col4=数量 Integer Col5=仓库 Char Width 8
18、60; 类别 Col1=编号 Char Width 10 Col2=类别名称 Char Width 20 Col3=备注 Char Width 20 商品 Col1=编号 Char Wi
19、dth 10 Col2=名称 Char Width 20 Col3=单位 Char Width 4 Col4=类别 Char Width 8 Col5=进货价 Currency Col6=销售价 Currency Col7=供应商 Char Width 20 Co
20、l8=备注 Char Width 20 销售记录 Col1=商品编号 Char Width 10 Col2=商品名称 Char Width 20 Col3=单位 Char Width 4 Col4=存放仓库 Char Width 8
21、160; 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、#160; Col4=个人电话 Char Width 20 Col5=家庭住址 Char Width 20 Col6=身份证号码 Char Width 40 Col7=备注 Char Width 20 员工档案 Col1=编
24、号 Char Width 10 Col2=姓名 Char Width 8 Col3=姓别 Char Width 2 Col4=所属部门 Char Width 20 Col5=工种 Char Width 10 Col6=上工时间 Char Width 20 Col7=身份证号码 Char Width 40
25、0; Col8=个人电话 Char Width 20 Col9=家庭住址 Char Width 40 Col10=Email Char Width 20 Col11=婚否 Bit Col12=生日 Date Col13=爱好 Char Width 10 Col14=忠诚度 C
26、har Width 10 Col15=备注 Char Width 20
27、; 一:进货管理 此模块的技术关键是在保存记录上,在为“销售记录”表中存数据时应同时向“库存记录”表添加,如果有此商品则在原有的基础上进行加法运算,否则添加新记录。在销售管理中原理也是这样,不过如果库存里没有此类商品就不允许用户进行销售操作。 frmjhgl(进货管理)模块中所有控件的相关设置: &
28、#160; (1)TextBox:本模块共用8个文本框,其Name属性分别为: txtname(商品名称)、txtliang(数量)、txtdanjia(单价)、txtbianhao(商品编号)、txtjhdata(操作日期)、txtjine(金额)、txtjine(金额)、txtshuiq(税前金额)、txtshui(税率) datasource属性分别为:data1,datafield为空。
29、0; 另添加三个combobox控件(cmbcj、cmbywy、 cmbjie), 用来显示厂家、业务员及结算方式(即结、欠付等) (2)四个command控件,name属性分别为:cmdaddnew、cmdsave、cmdcancel、cmdquit。caption属性分别为:新单、保存、取消、退出 代码: Dim zxh As Boolean '判断用户输入数据是否为空
30、; Private Sub addywy()'为combobox控件添加内容 Dim db As Database Dim rs As Recordset Set db = OpenDatabase(App.Path & "jxc.mdb") Set rs = db.OpenRecordset("业务员")
31、0; While Not rs.EOF cmbywy.AddItem rs.Fields("业务员名称").Value rs.MoveNext Wend rs.Close Set rs = Nothing db.Close
32、; Set db = Nothing End Sub Private Sub addcj() Dim db As Database Dim rs As Recordset Set db = OpenDatabase(App.Path & "jxc.mdb") Set rs
33、 = db.OpenRecordset("厂家") While Not rs.EOF cmbcj.AddItem rs.Fields("厂家名称").Value rs.MoveNext Wend rs.Close Set rs = Nothing &
34、#160; db.Close Set db = Nothing End Sub Private Sub notnull() If txtbianhao.Text = "" Then zxh = True MsgBox "商品编号不能为空", vbInforma
35、tion, "试图添加空记录" End If If txtname.Text = "" Then zxh = True MsgBox "商品名称不能为空", vbInformation, "试图添加空记录" End If If tx
36、tliang.Text = "" Then zxh = True MsgBox "数量不能为空", vbInformation, "试图添加空记录" End If End Sub Private Sub cmdaddnew_Click()
37、 Data1.Recordset.AddNew txtjhdata.Text = Date cmdsave.Enabled = True cmdcancel.Enabled = True cmdaddnew.Enabled = False End Sub
38、0; Private Sub 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 =
40、 False On Error GoTo err txtliang_value = txtliang.Text jhbh = txtbianhao.Text jhna = txtname.Text Call notnull If zxh = True Then &
41、#160; Data1.Recordset.CancelUpdate Else '执行 Me.MousePointer = 11 Data1.Recordset.Update '必须初始化绑定字段 txtdanj
42、ia.datafield = "" txtjhdata.datafield = "" txtjine.datafield = "" cmbcj.datafield = "" cmbywy.datafield = "&quo
43、t; cmbjie.datafield = "" '向库存添加 Data1.RecordSource = "即时库存" Data1.Refresh Data1.Recordset.MoveFirst
44、60; While ccbh <> jhbh And Not Data1.Recordset.EOF ccbh = Data1.Recordset.Fields("商品编号").Value If ccbh = jhbh Then
45、160; ccbh = Data1.Recordset.Fields("商品编号").Value Else
46、Data1.Recordset.MoveNext End If Wend If ccbh = jhbh Then Data1.Recordset.Edit
47、 field_value = Data1.Recordset.Fields("数量").Value Data1.Recordset.Fields("数量").Value = field_value + txtliang_value Data1.Recordset.Update &
48、#160; Else '添加新记录 With Data1.Recordset .AddNew .Fields("
49、商品编号").Value = jhbh .Fields("商品名称").Value = jhna .Fields("数量").Value = txtliang_value
50、160; .Update vs.Refresh End With End If '返回开单,重新绑定字段
51、160; Data1.RecordSource = "进货记录" Data1.Refresh txtname.datafield = "商品名称" txtliang.datafield = "数量"
52、160;txtdanjia.datafield = "单价" txtbianhao.datafield = "商品编号" txtjhdata.datafield = "操作日期" txtjine.datafield = "金额" c
53、mbcj.datafield = "厂家名称" cmbywy.datafield = "业务员名称" Data1.Recordset.MoveLast Me.MousePointer = 0 End If Exit Sub &
54、#160; err: 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 Wi
56、th '数据库"jxc.mdb"中表"进货记录"中的内容如下 txtname.datafield = "商品名称" txtliang.datafield = "数量" txtdanjia.datafield = "单价" txtbianhao.data
57、field = "商品编号" txtjhdata.datafield = "操作日期" txtjine.datafield = "金额" cmbcj.datafield = "厂家名称" cmbywy.datafield = "业务员名称" cmbjie.da
58、tafield = "支付方式" Call addcj '添加厂家名称 Call addywy
59、 '添加业务员名称 End Sub Private Sub txtdanjia_GotFocus() With txtdanjia .SelStart = 0 .SelLength = Len(.Text) End With
60、60; End Sub Private Sub txtdanjia_KeyPress(KeyAscii As Integer) '只能输入数字 If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii >= 32 _ And KeyAscii <&g
61、t; Asc(".") Then KeyAscii = 0 Beep End If End Sub Private Sub txtliang_GotFocus() With txtliang .
62、SelStart = 0 .SelLength = Len(.Text) End With End Sub Private Sub txtliang_KeyPress(KeyAscii As Integer) If (KeyAscii < 48 Or KeyAscii > 57) And KeyA
63、scii >= 32 _ And KeyAscii <> Asc(".") Then KeyAscii = 0 Beep End Sub Private Sub txtliang_LostFocus() On Error G
64、oTo err If txtdanjia <> "" And txtliang <> "" Then txtjine.Text = txtdanjia * txtliang Else MsgBox "字段不能为空", vbExclamation, "Error&qu
65、ot; End If Exit Sub err: MsgBox "请确认数据的正确性", vbCritical, "错误" End Sub Private Sub txtshui_LostFocus()
66、0; Dim shui '计算税额 If txtjine <> "" And txtshui <> "" Then shui = 1 - (txtshui.Text / 100) txtshuiq.Text = shui * txtjine End If End
67、Sub 二:销售管理
68、 销售管理与进货管理模块中记录的操作大体一致,所不同的是库存的增减,还要添加两个功能:查找商品(见frmfindsp)及检测库存量 说明:此处textbox控件:txtspbh 显示商品编号、txtstore 显示当前库存量 Private Sub Cmdfindsp_Click() '查找商品,代码请参考“查找商品”
69、160; frmfindsp.Show 1 End Sub Private Sub Cmdkc_Click() '检测库存量 Dim db As Database Dim rs As Recordset Dim fieldspbh_value
70、 Set db = OpenDatabase(App.Path & "jxc.mdb") Set rs = db.OpenRecordset("即时库存") While txtspbh <> fieldspbh_value And Not rs.EOF fieldspbh_value = rs.Fields("商品编号").V
71、alue If fieldspbh_value = txtspbh Then fieldspbh_value = rs.Fields("商品编号").Value Else rs.MoveNext End If Wend&
72、#160; If fieldspbh_value = txtspbh Then txtstore.Text = rs.Fields("数量").Value Else MsgBox "库存中没有此类商品", vbInformation, "检测结果" End If
73、 rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub
74、60; 三:查找商品 .在销售管理中查找某商品的信息(frmfindsp),不应让用户手工输入商品的信息 .添加treeview控件,name属性为:tv &
75、#160; .添加textbox控件数组,name属性为:text1(0)-text(6),用来分别显示商品编号、商品名称、单价(元)、单位 、类别、质保期等必要的商品信息 .treeview.nodes.add(relative,relationship,key,text,image,selectedimage)参数解释如下: relative,可选,node的索引或键值; relationship,node的相应位置关系;&
76、#160; key,用item方法提取node的唯一字符串; text,node显示的字符串; image,图像索引(注:本例没有图像索引); selectedimage,被选中时,与image控件相关联的图像索引。 relationship的值: tvwfirst,0,第
77、一个对象,该节点放在所有同级节点的前面; tvwlast,1,最后一个; tvwnext,2,(缺省)下一个,该节点放在relative命名的节点之后; tvwprevious,3,前一个,该节点放在relative命名的节点之前; tvwchild,4,子节点,为relative命名节点的子节点。 代码如下
78、: 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
79、0; frmxsgl.txtspname.Text = Text1(1).Text frmxsgl.txtdanjia.Text = Text1(2).Text Unload Me End Sub Private Sub Form_Load() '加载窗体后,根据商品表中的“类
80、别”标记,将商品名称显示在treeview中,其它字段显示在textbox数组中,使用户能够清楚地查看需要出售的商品相关信息 Dim mysql$, mysqlone$ Set db = OpenDatabase(App.Path & "jxc.mdb") mysql = "select * from 类别" Set rs = db.OpenRecordse
81、t(mysql) 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 = "
82、select * from 商品 where 类别 =" & "'" & 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
84、_QueryUnload(Cancel As Integer, UnloadMode As Integer) rs1.Close Set rs1 = Nothing rs.Close Set rs = Nothing db.Close Set db = Nothing
85、0; End Sub Private Sub tv_NodeClick(ByVal Node As MSComctlLib.Node) On Error GoTo err If Node.Children = 0 Then mysql = "select * from 商品 where 商品名称 =" & "'
86、" & Node.Text & "'" 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).Val
87、ue End If Next End If Exit Sub err: MsgBox err.Description End Sub
88、0; 四:查询记录(图二) 在进销存管理中,还应设有查询功能,包括进货、销售记录,现仅就查询进货记录为例,其它依此类推,还可进行更为复杂的查询。
89、 添加控件: data(data1)、msflexgrid(绑定至data1控件); txtfind(文本框控件,用来保存SQL语句,visible属性为false) ; 三个combobox控件:name属性分别为:cmbfield、cmbcompare、cmbdata 作用为:欲查询的字段(如商品名称、进货时间等)、比较符号( >、&l
90、t;、=、like等); 四个按钮控件,name属性分别为:cmdjians(检索字段)、cmdfindnow(执行SQL语句)、cmdback(重画)cmdprint(打印记录集) 代码如下: Public Sub makefind() '添加此过程主要是为了解决SQL语句中的引号问题
91、 txtfind = cmbfield & cmbcompare Select Case Data1.Recordset.Fields(cmbfield.Text).Type Case 10 ' 文本
92、 txtfind = txtfind & " '" & txtdata & "'" Case 8 ' 日期
93、; txtfind = txtfind & " #" & txtdata & "#" Case Else txtfind = txtfind
94、& " " & txtdata End Select End Sub Private Sub cmbcompare_Click() makefind End Sub Privat
95、e Sub cmbfield_Click() makefind End Sub Private Sub cmdfindnow_Click() If cmbfield.Text <> "" And cmbcompare <> "" And txtdata <> ""
96、; Then Data1.RecordSource = "select * from 进货记录 where" & " " & txtfind.Text Data1.Refresh End If End Sub Private Sub cmdjinas_C
97、lick() cmbfield.Clear For i = 0 To Data1.Recordset.Fields.Count - 1 cmbfield.AddItem Data1.Recordset.Fields(i).Name Next cmbfield.Li
98、stIndex = 0 cmbcompare.Enabled = True End Sub Private Sub Cmdback_Click() Data1.RecordSource = "进货记录" Data1.Refresh End S
99、ub Private Sub Form_Load() Data1.DatabaseName = App.Path & "jxc.mdb" Data1.RecordSource = "进货记录" End Sub P
100、rivate Sub Form_Unload(Cancel As Integer) Data1.Database.Close Set Data1.Recordset = Nothing End Sub Private Sub txtdata_Change() makefind
101、; End Sub private sub cmdprint() Prnrecord(data1.recordset As Recordset) '请见打印模块modprint end sub
102、 五:打印模块 .新建一标准模块modprint,以便其它窗体可以共享其过程,此模块只适用于DA
103、O,特此说明: Public Sub Prnrecord(recRecordset As Recordset) On Error GoTo err Dim LeftMargin As Integer Dim HeadTopPosition As Integer Dim FieldNum As Integer D
104、im PageCounter As Integer 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JNJ-47965567-Standard-生命科学试剂-MCE
- 2026年红旗谱阅读测试题及答案
- 2026年孤单心理小测试题及答案
- 2026年littlefuse 面试测试题及答案
- 2026暑假开学前自查报告(2篇)
- 2026年人口教育测试题及答案
- 2026年公司excel 测试题及答案
- 2026年变态心态犯罪测试题及答案
- 2026年关键冲突测试题及答案
- 智力测试烧脑题目及答案
- 心理调适提升学习状态主题班会
- 2024年7月1日实施新版医疗器械采购、收货、验收、贮存、销售、出库、运输和售后服务工作程序
- DLT 572-2021 电力变压器运行规程
- 概率论与数理统计(天津理工大学)智慧树知到期末考试答案2024年
- 电梯安装工操作培训教材
- 中建装配式结构吊装施工方案
- 传统民居的艺术魅力3
- 煤矿机电考核制度
- 服饰鉴赏-河南科技学院中国大学mooc课后章节答案期末考试题库2023年
- 2023学年完整公开课版五年级下册Unit2myfavouriteseason2
- 萤火虫pte真题机经806分装与整合版版一致10sst
评论
0/150
提交评论