第一章 公司介绍与系统的需求分析
1.1公司简介
佳雪公司是一个专销电动机的公司,主要业务是进行电动机的进货与分销,作为一个销售的中介公司,其要求有入库与出库的主要数据库,可以简单的记录数据,并且可以进行多方面的查询,使得公司有较详细的数据统计与分析。
其主要业务如以下图所示:
1. 厂商 仓库 顾客
图1.1.1
2.查询功能
1)按型号查询
有两个结果:A生成 入库量、出库量、节余量
B生成 两个数据来源表,包括出库来源与入库来源;
2)按单位查询
结果:生成 型号、产品名称、时间(入/出库)、单价
再生成出入库的两个基本情况表,包括供应商和顾客的基本情况,如型号、出/入库时间,单价,发票编号、结帐情况;
3.本系统主要运用Visual Basic的内嵌数据库Access来记录数据;
4.产品信息:
序号(自动生成)、型号(文本)、入库时间(日期)、出库时间(日期)、数量(数字)、发票编号(文本)、单价(货币)、厂商名称(文本)、供应商名称(文本)、厂商与供应商的电话(数字)、结帐情况(是/否)[是为0,否为-1]
1. 2分析与描述
一.
输入数据根据1.1章节的具体要求,总结出以下的数据流程:
一.
入库
增
加
修改
删除
查询
单位
型号
供应商
顾客
入库
出库
出库
增加
修改
删除 图1.2.1 数据流程
二.根据以上情况,按要求设计了几个相关的数据库
表:出库、入库
查询:查询结余、出库查询、入库查询、型号出库查询、型号入库查询
l 主要的出库表属性如以下表所示:
字段名
属性
字段大小
序号
自动生成
长整型
型号
文本
50
产品名称
文本
50
出库数量
数字
长整型
单价
货币
自动小数
出库时间
日期
年-月-日
发票编号
文本
50
顾客电话
文本
50
结帐情况
是/否
2
表1.2.1
l 由于入库表与出库想类似,所以在此不做详细介绍。
l 为了方便查询,因此在出库与入库的基础上增加了几个查询表,具体字段如下:
1.查询结余:型号、产品名称、出库数量、入库数量
1.出库查询:顾客名称、型号、出库时间、单价、出库数量OF SUM、发票编号、结帐情况
2.入库查询:供应商名称、型号、入库时间、单价、入库数量OF SUM、发票编号、结帐情况
3.出库型号查询:型号、产品名称、顾客名称、单价、发票编号、结帐情况
4.入库型号查询:型号、产品名称、供应商名称、单价、发票编号、结帐情况
1.3数据库的主要特点
u 数据库中的每一个表都必须符合下面几个特征:
*表中的每一个单元的内容只有一个值
*所有字段的名称都不相同
*记录的前后次序和字段的左右次序可以变化,不受限制
*数据库中的表的上下次序不受限制
*表中不应有内容完全相同的记录
*表中的每一个字段都必须有相同的数据类型
使用Visual Basic开发应用程序的两个主要思想:
*可视设计
*事件驱动编程
Visual Basic应用程序不同于其他语言开发的单一性程序。使用Visual Basic编程时,必须首先确定应用程序如何与用户交互,如鼠标单击,用户必须编写代码控制这些事件的响应方法。
使用Visual Basic开发数据库应用程序的一般步骤如下所示:
(1)建立数据库
(2)建立用户界面
(3)编写代码
(4)调试运行
(5)编译应用程序
(6)发布应用程序
界面设计
(1)控件的位置
(2)界面元素的一致性
(3)保持界面的简明
(4)使用颜色和图象:增加视觉的感染力
(5)图象和图标:增加应用程序的视觉上的趣味
(6)选取字体
Visual Basic应用程序的结构:
由于Visual Basic应用程序是基于对象的,所以应用程序的代码结构就是该程序在屏幕上物理表示的模型。根据定义,对象包含数据和代码。在屏幕上看到的窗体代表属性,这些属性定义了窗体的外观和内在特性。
本设计主要是运用Data控件。
Data控件主要是打开、访问并操作已有的数据库,它是Visual Basic 访问数据库的最常用的工具之一。由于Data控件使用Microsoft的Jet引擎来实现数据访问(与Microsoft Access 所用的数据库引擎相同),使用户可以无缝地访问很多标准的数据库格式,而且无需编写任何代码就可以创建数据应用程序,因此这种Visual
Basic 内部的Data控件最合适小的(桌面)数据库,诸如Access和ISAM数据库等。
由于Data控件是Visual Basic 的内部控件,因此可以直接在标准工具箱中找到该控件。
在程序运行过程中,只要用鼠标单击控件上的箭头按钮,系统将自动修改Data控件指向的记录和显示在约束控件中的数据,而不需要编写任何代码。
可以将多个Data控件同时添加到一个工程甚至是同一个窗体中。另外,每个控件可以连接到不同的数据库或同一个数据库的不同表上,还可以和代码一起查询满足的语句的表的记录集。
使用Data控件可以显示、编辑和更新来字各种已有的数据库信息。此外,还可以访问和操作远程的开放式数据库连接。
除了使用Data控件之外,还运用的Visual Basic 6.0的新增控件功能,Dblistbox它不象标准的列表框或组合框那样需要使用AddItem方法添加列表项。另外,它们还可以有选择地把某个选定的字段传递给另一个Data控件,使得它对于“查找表”应用程序很理想。
与其他的约束控件不同,这些控件可以同时显示多个记录。约束数据列表控件类似于普通的列表框控件,可以显示记录集中的数据,网格中的每一行代表记录集中的一个记录。
第二章 管理系统的设计与分析
2.1进入界面
l 由于系统的的界面比较单一,因此在设计过程中运用了许多网上下载的图片来增添界面的可观性。
在考虑到操作员的技术水平有限,因此在控件方面只运用了COMMAND,这
l 样不仅能是界面清楚,更能是操作者很快学会,简单易懂。
l 图2.1.1是进入本系统的状态图,单击“确定”可以进入界面,如按“系统信息”的话,将显示本系统的具体软硬件情况。
图2.1.1
当图2.1.1中的“确定”按钮被激活时,将进入图2.1.3的屏幕,界面的图片是图片引入的,接着将进入正式的编辑或查询状态。
具体的系统情况如图2.1.2所示:
图2.1.2
图2.1.3
1. 2入库界面
l 当激活入库按钮时将出现以下的界面(图2.2.1)
l 入库窗体(图2.2.1)及其各个控件的主要属性
控件类型
控件名
主要属性
Form
Frmrsg1
Caption=“入库情况”
Data
Data1
Databasename=“A\db2.mdb”
Recordsettype=1’Dynaset
Caption=“入库情况”
CommandDialog
Command1
Caption=“上一个”
Command2
Caption=“下一个”
Command3
Caption=“确定”
Command4
Caption=“取消”
Command5
Caption=“退出”
Command6
Caption=“增加”
Command7
Caption=“修改”
Command8
Caption=“删除”
Lable
Lable1
Caption=“序号”
Lable2
Caption=“型号”
Lable3
Caption=“产品名称”
Lable4
Caption=“数量”
Lable5
Caption=“单价”
Lable6
Caption=“入库时间”
Lable7
Caption=“发票名称”
Lable8
Caption=“供应商名称”
Lable9
Caption=“电话”
Lable10
Caption=“结帐情况”
Text
Text1
Caption=“序号”Datasource=“data1”
Text2
Caption=“型号”Datasource=“data1”
Text3
Caption=“产品名称”Datasource=“data1”
Text4
Caption=“数量”Datasource=“data1”
Text5
Caption=“单价”Datasource=“data1”
Text6
Caption=“入库时间”Datasource=“data1”
Text7
Caption=“发票名称”Datasource=“data1”
Text8
Caption=“供应商名称”Datasource=“data1”
Text9
Caption=“电话”Datasource=“data1”
Text10
Caption=“结帐情况”Datasource=“data1”
表2.2.1
l 控件说明
Ø 增加新记录
当单击“确定”按钮后,“确定”和“取消”两个按钮显示,同时使其他的按钮不可见,这样做是为了防止用户的误操作。
其主要程序如下:
Private Sub Command5_Click()
xg = True
'显示“确定”和“取消”两个按钮
Command3.Visible = True
Command4.Visible = True
'取消其他按钮功能
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
Command1.Enabled = False
Command2.Enabled = False
Data1.Recordset.AddNew '添加一个新记录
Text1.SetFocus '光标在TEXT1处
end sub
Ø 修改记录
在调用EDIT方法之前,约束控件中的数据是只读的,用户无法对其进行修改。调用了EDIT方法后,用户可以在约束控件中修改记录的值。如果在对当前记录进行修改之前修改,未使用EDIT方法,将发生运行时错误。
其主要程序如下:
Private Sub Command6_Click()
xg = True
Command3.Enabled = True
Command4.Enabled = True
'取消其他按钮功能
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
Command1.Enabled = False
Command2.Enabled = False
'对记录进行编辑
Data1.Recordset.Edit
Text1.SetFocus
End Sub
Ø 删除记录
当用户单击“删除”命令按钮时,为了防止用户误删除数据,程序将调用Msgbox()函数以弹出对话框,询问用户是否真的要删除该记录。如果用户单击对话框上的“确定”按钮,程序调用记录集的Delete方法,将记录集的当前记录设置为空,并从原始的表中删掉当前记录。但是删除的记录仍然是当前记录,只是将其变为了无效的记录,任何对其的引用都会产生错误。
其主要程序如下:
Private Sub Command6_Click()
xg = True
Command3.Enabled = True
Command4.Enabled = True
'取消其他按钮功能
Command5.Enabled = False
Command6.Enabled = False
Command7.Enabled = False
Command8.Enabled = False
Command1.Enabled = False
Command2.Enabled = False
'对记录进行编辑
Data1.Recordset.Edit
Text1.SetFocus
End Sub
Private Sub Command7_Click()
ss = MsgBox("真的要删除吗?", vbYesNo + vbInformation, "删除记录")
'如果要删除
If (ss = vbYes) Then
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MoveLast
Command2.Enabled = False
End If
End If
End Sub
Ø 移动数据
当用户单击“上一个”和“下一个”按钮是,系统将自动转换数据,但注意,当移至第一个记录时,“下一个”按钮将失效;移至最后一个记录是,“上一个”按钮也将失效。
其中在设计程序时,为了防止“NO Current Record”这样的错误,在移动记录指针时测试记录集的BOF 和EOF属性。如果单击“上一个”和“下一个”命令按钮将导致记录指针指向空指针,则分别调用Movefirst和Movelast方法,这是防止“NO Current Record”错误出现的最简单和最有效的方法。与此同时,如果记录集的BOF属性为True,则置“上一个”命令按钮为非激活状态,是用户无法再单击该按钮。同样,当记录集的BOF属性为True时,置“下一个”命令按钮为非激活状态。
其主要程序如下:
Private Sub Command1_Click()
xg = False
Data1.Recordset.MovePrevious
'如果是第一个记录,BOF属性为TRUE
If Data1.Recordset.BOF Then
Data1.Recordset.MoveFirst
Command1.Enabled = False
Else
Command2.Enabled = True
Command1.Enabled = True
End If
End Sub
Private Sub Command2_Click()
xg = False
Data1.Recordset.MovePrevious
'如果当前记录是记录集中最后一个记录,EOF属性为TRUE
If Data1.Recordset.BOF Then
Data1.Recordset.MoveLast
Command2.Enabled = False
Else
Command2.Enabled = True
Command1.Enabled = True
End If
End Sub
Ø 用Updata方法确认增加和修改
当用户修改和增加完一个记录的数据后,需要将数据保存到数据库中。可以通过调用记录集的Updata方法把数据保存到数据库中。单击“确定”按钮时,记录将被记如数据库。
其主要程序如下:
Private Sub Command3_Click()
On Error GoTo error1
xg = True
Data1.Recordset.Update
Command3.Enabled = False
Command4.Enabled = False
Command2.Enabled = True
Command1.Enabled = True
Command4.Enabled = True
Command5.Enabled = True
Command6.Enabled = True
Command7.Enabled = True
Command8.Enabled = True
Exit Sub
error1: MsgBox Err.Description, vbOKOnly, "错误提示"
End Sub
Ø 用CancelUpdata方法放弃增加和修改
如果用户修改了约束控件里的数据后,在没有单击“确定”命令按钮之前,想放弃刚才的增加或修改,则可以单击“取消”命令。
由于其程序与Updata方法相似,因此不做重复解释。
Ø 定义Data_Validata事件过程
对于一个新记录或编辑的记录,如果不能维护引用完整性或不能反映该旧路的实体原型,那么它就是无效的,并且破坏了数据库的完整性。为了在“入库情况”表中建立一个有效的记录,就必须要有主关键字段“型号”的值。因此,对已经存在和新增加的旧路都要先测试其“型号”字段之后才可以执行更新操作。
其主要程序如下:
'当约束控件中内容改变时
If Text2.DataChanged Then
Save = True
If Data1.Recordset.RecordCount > 1 Then
Command1.Enabled = True
Command2.Enabled = True
End If
Else
If Text2.Text = "" And xg = True Then
ss = MsgBox("必须要有‘型号’!", vbOKOnly + vbInformation, "提示")
Action = False
Command3.Visible = True
Command4.Visible = True
Command1.Visible = True
Command2.Visible = True
Command7.Visible = True
Command8.Visible = True
Command5.Visible = True
Command6.Visible = True
End If
End If
If Action = data_actionunload Or Action = data_actionclose Then
Save = True
End If
End Sub
出库界面
当单击“出库”按钮的时候,系统将进入出库信息输入界面,如(图2.3.1)所示,其基本情况与入库相类似,依次不做具体介绍。
图2.3.1
2.4查询界面
l 当用户单击“查询”按钮时,系统将出现密码登陆框,因为查询的是内部资料,因此,需身份验证,如图2.4.1
图2.4.1
l 随后将进入查询功能,如图2.4.2
图2.4.2
l 用户可根据不同需要进行“按型号”和“按单位”的查询。
Ø 单击“按型号”,系统将进入以型号为关键字段的查询,如图2.4.3。其中根据SQL语句的查询,选出出库型号与入库型号相同的记录,统计出入库与出库的总数量,然后可按“上一个”和“下一个”进行查询,也可按出库与入库分别查询记录。
Ø 当用户单击“查询出库”按钮是,系统进入界面,如图2.4.4
图2.4.4
l 图2.4.4窗体及其上面控件的属性设置
控件类型
控件名
主要属性
Form
frmdblist
Caption=“查询出库”
Data
Data1
DatabaseName=“a:\db2.mdb”
RecordsetType=1
RecordSource=“出库型号”
Frame
Frame1
Caption=“具体情况”
Lable
Lable1
Cqption=“产品名称”
Lable2
Cqption=“单价”
Lable3
Cqption=“发票编号”
Lable4
Cqption=“顾客名称”
Lable5
Cqption=“结帐情况”
Text
Text1
Datafield=“具体情况”
Datasource=“Data1”
Text2
Datafield=“具体情况”
Datasource=“Data1”
Text3
Datafield=“具体情况”
Datasource=“Data1”
Text4
Datafield=“具体情况”
Datasource=“Data1”
Text5
Datafield=“具体情况”
Datasource=“Data1”
DBlist
Dblist1
Listfield=“型号”
Rowsource=“Data1”
表2.4.1
Ø 单击Dblist框中的型号,Frame中将自动显示记录,以供用户查询。
l 当用户单击“查询入库”按钮时,将出现图2.4.5的界面。
图2.4.5
l 再回到查询界面,单击“按单位”按钮,此时系统将进入按单位查询的截面,如图2.4.6
图2.4.6
Ø 分别按“顾客”和“供应商”按钮,系统将分别进入不同的查询界面,如图2.4.7和图2.4.8
由于以下两个窗口的属性以及其设计方法类似与图4.3,因此也不做详细介绍。
图2.4.7
图2.4.8
2.5退出程序
l 再回到登陆主窗口,(图2.1.3),单击“退出”按钮,系统将退出程序,显示以下窗口(图2.5.1),单击图中的“再见”,此程序也将结束。
图2.5.1
第三章 系统运行与调试
测试本身的目的是尽可能地暴露程序中的错误,因此在编译完成后,我也尝试用现实数据来进行正确的调试。在从中曾出现过以下几个具体问题:
1.MSDN不存在
2.524数据转换错误
3.当单击“上一个”和“下一个”按钮时会出现数据不存在而退出程序
4.DBLIST控件不能正确引入数据
当出现以上问题是,经过严密与反复的调试同样用了一些方法来解决
1.改变数据原来的设计方法,改用文本型的数据为多
2.仔细表明正确的日期输入法
3.当进行数据更新时,没有确定或取消,系统将提示以下对话框,如图3.1
图3.1
4.当主要关键字段“型号”没有输入时,系统也将提示以下对话框,如图3.2
图3.2
5.当用户要删除记录时,为了保证不误操作,系统也将提出一个对话框,如图3.3
图3.3
6.为了便有运行,还将程序打包,进行安装,在打包过程中,也出现以下对话框,如图3.4
第四章 思想小结
在短短的两个月内,通过参考各种VB编程书籍、网上查找信息以及老师的耐心知道下,完成了这次毕业设计——浙江佳雪仓库管理系统。
起初,我看了许多书籍,对该公司的要求也只是初步了解,因此在分析软件需求中碰到了一些麻烦,但通过赵敏媛老师的正确引导下,把系统分析了比较透彻了。在编译过程中,最让我印象深刻的是用DATA控件访问数据,由于DATA控件的局限性,因此在查询时,碰到了一些不能查询数据的麻烦,但VB6.0中有新增的DBLIST功能,可以直接通过此控件来访问数据库,当我找到此方法时,那么所完成的查询就更为完善了。
这次毕业实际不尽使我了解了VB在数据库方面编程的概要,更让我知道了计算机的变成秘诀在于严密的思考与仔细的推敲,只有这样,才会有一个完善的软件生成。当然这次的管理系统也一定存在着许多不足之处,但可以适合与如佳雪公司这样的小型销售型公司,但为将来的升级提供了更多的方便的途径。
完成这次设计,心理非常高兴,也有一点成就感,因为这是我独立完成的第一个软件,我相信它将在今后的工作生活中为我带来不小的影响。
最后,我还要感谢多方面的支持以及帮助过我的人,尤其是我的指导老师,她仔细认真的态度,对我的帮助是非常大的,使得我更完善地完成了次管理系统。