《VB+SQL 销售合同管理系统论文.doc》由会员分享,可在线阅读,更多相关《VB+SQL 销售合同管理系统论文.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、浙江海洋学院毕业论文目录摘要2一、概述21绪论22Visual Basic 开发工具23SQL Server 2000 简介2二、系统需求分析3三、系统总体设计32、体系结构功能模块图:31、用户管理功能模块关系图:43、简单使用说明4、数据表设计45、使用到的模块6三、详细设计61、登录窗体62、系统主界面83、产品管理模块设计831产品信息编辑窗体832产品信息管理窗体,名称为Frmproductman。窗体布局如下:94、合同管理模块设计1141合同信息编辑窗体1142合同信息管理窗体134合同产品信息编辑窗体155、合同费用管理模块设计1651合同费用信息编辑窗体16合同费用信息管理窗
2、体186合同收帐信息编辑窗体196合同收帐信息管理窗体217、合同统计管理模块2271创建视图227.合同成本利润统计月报22合同成本利润统计年报表,238、用户信息管理模块设计248用户信息编辑窗体248用户管理窗体25小结:27参考文献:27销售合同管理系统王小群(浙江海洋学院 石化学院,浙江 舟山 316004)摘要:销售合同是企业经营的重要组成部分,它可以体现一个企业的经营情况和效益。企业销售合同管理系统可以有效地提高企业宏观控制和经营管理的质量,是企业现代化管理的重要组成部分。后台数据库使用SQL Server,前台开发工具使用Visual Basic。本系统采用目前比较流行的ADO
3、数据访问技术,并将每个数据库表的字段和操作封装到类中,从而成功地将面向对象的程序设计思想应用到数据库应用程序设计中。这也是本系统的特色和优势关键词:销售合同管理系统 SQL Server数据库 Visual Basic开发语言 管理信息系统一、概述1绪论信息时代到来,电脑信息管理技术越来越受到各企业的高度重视,逐渐成为企业在现代化发展中不可缺少的一部分。在当今IT技术日新月异,而企业市场化进程加快的时刻,电脑信息管理技术几乎涉及到每一家优秀企业的整个经营活动。对公司经营、效率甚至策略的变化都有直接而深远的影响。因此,我们需要一种能对数据进行各种操作的工具数据库管理系统。一个公司或者个人都需要经
4、常签订各种大大小小的合同。随着签订合同数量的增多,合同的管理必然成为一种负担。在信息化程度越来越高的当今社会,可以使用信息化的手段来管理合同的信息。合同管理系统可以高效、有序地管理本企业合同。完善的合同管理是公司是公司健康动作的一个重要标志。2Visual Basic 开发工具Visual Basic作为Visual Studio家族中的一员,以其开发速度快、使用简单而被广泛使用。Visual Basic的主要功能特点:(1)可视化编程、()面向对象的程序设计、()结构化程序设计语言、()事件驱动编程机制、()访问数据库3SQL Server 2000 简介SQL Server 2000 以其
5、卓越的性能逐渐成为Windows操作系统平台下进行数据库应用开发中较为理想的选择之一。SQL Server 2000 由一系列相互协作的组件构成,能最大程度地满足Web站点和企业数据处理系统存储和分析数据的需要。SQL Server 2000的特性:()Internet集成、()可伸缩性、()企业级数据库功能、()易于安装、部署和使用、()数据仓库二、系统需求分析 销售合同管理系统的用户是企业中负责销售的管理人员,包括产品信息管理、合同费用管理、合同收帐管理、合同信息管理、合同信息统计等主要功能,具体功能如下:(1)产品信息的添加、修改、删除和查询。(2)合同费用信息的添加、修改和查询。(3)
6、合同收帐信息的添加、修改和查询。(4)合同信息的添加、修改和查询。(5)合同成本利润统计月报表和合同成本利润统计年报表。三、系统总体设计2、体系结构功能模块图:1、用户管理功能模块关系图:3、简单使用说明()运行系统后,首先会看到登录窗体,对用户的身份进行认证。如果需要对普通用户进行管理,则使用Admin用户登录;否则建议使用Users用户登录。如果还要创建其他用户,可以在用户管理模块中创建和管理其他普通用户。(2)在本系统中,应该首先增加产品信息,之后才能增加合同信息。产品信息管理模块可以添加、修改、删除和查看等操作。(3)添加产品信息后,就可以添加合同信息了。在合同信息管理模块中可以对合同
7、信息进行添加、修改、更改状态和查看等操作。(4)在合同费用管理模块中,可以对合同费用信息进行添加、修改和查看等操作。(5)在合同收帐管理模块中,可以对合同收帐信息进行添加、修改和查询等操作。(6)在合同统计管理模块中,可以对合同成本利润月报表和年报表等查询。、数据表设计(1)产品表Product,保存产品信息。(2)同费用表Cost,保存合同费用信息。(3)合同收帐表Income,保存合同收帐信息。(4)合同产品表ConProduct,保存合同中包含的产品信息。(5)合同信息表Contract,保存合同的基本信息。(6)用户信息表Users,保存系统用户信息UserName(用户名)、User
8、Pwd(密码)。5、使用到的模块 (1)Const.用来管理本系统中的全局常量。(2)DbFunc.用来管理本系统中与数据库操作相关的的声明、变量和函数,例如连接数据库、断开与数据库的连接等。(3)PGeneralFunc.用来管理通用的用户自定义函数。(4)Variable.用来管理工程中的全局变量,包括全局数组和全局对象。三、详细设计1、登录窗体,名称为Frmlogin,布局如下:(1)变量声明:Public PasswordKey As StringPublic NameKey As StringPublic Try_times As IntegerNamekey保存用户名,passwo
9、rdkey保存密码,try_times记录尝试登录的次数。(2)Cmd_ok_click过程:Private Sub Cmd_OK_Click() Dim j As Single 数据有效性检查 If txtUser = Then MsgBox 请输入用户名 txtUser.SetFocus Exit Sub End If If txtPwd = Then MsgBox 请输入密码 txtPwd.SetFocus Exit Sub End If 将用户输入赋值到变量中 NameKey = MakeStr(txtUser) PasswordKey = MakeStr(txtPwd) 判断用户是否
10、存在 If MyUser.In_DB(NameKey) = False Then MsgBox 用户名不存在 Try_times = Try_times + 1 If Try_times = 3 Then MsgBox 您已经三次尝试进入本系统,均不成功,系统将关闭 DBapi_Disconnect End Else Exit Sub End If End If 判断密码是否正确 MyUser.GetInfo (NameKey) If MyUser.UserPwd PasswordKey Then MsgBox 密码错误 Try_times = Try_times + 1 If Try_tim
11、es = 3 Then MsgBox 您已经三次尝试进入本系统,均不成功,系统将关闭 DBapi_Disconnect End Else Exit Sub End If End If 登录成功,将当前用户的信息保存在CurUser中 CurUser.GetInfo (MyUser.UserName) 关闭登录对话框 Unload MeEnd Sub2、系统主界面。主窗体是本系统的启动对象,名为FrmMain。在主窗体中添加如下代码:Private sub from_load() Frmlogin.show1End当主窗体启动时,首先打开“登录”寻话框。如果不能通过身份验证,则不能进入系统。mn
12、_exit_click过程:Private sub mn_exit_click() Dbapi_DisconnectEndEnd sub3、产品管理模块设计31产品信息编辑窗体,为Frmproductedit,布局如下:(1) Cmd_ok_click事件:Private Sub Cmd_OK_Click() Dim TmpId As String If Trim(txtId) = Then MsgBox 请输入产品编号 Exit Sub End If If Trim(txtName) = Then MsgBox 请输入产品名称 Exit Sub End If TmpId = MakeStr(
13、txtId) 判断产品编号是否已经存在 If Modify = False Or OriId Trim(txtId) Then If MyPro.In_DB(TmpId) = True Then MsgBox 产品编号“ + Trim(txtId) + ”已经存在,请重新输入 txtId.SetFocus txtId.SelStart = 0 txtId.SelLength = Len(txtId) Exit Sub End If End If With MyPro .ProId = TmpId .ProName = MakeStr(txtName) .ProMark = MakeStr(tx
14、tMark) .ProStyle = MakeStr(txtStyle) .ProUnit = MakeStr(txtUnit) If Modify = False Then .Insert Else .Update (OriId) End If End With ClickOK = True Unload MeEnd Sub程序首先对用户输入的数据进行分析,确保数据的有效性。然后判断输入的产品编号是否已经存在数据库中,如果已经存在,则不能添加。32产品信息管理窗体,名称为Frmproductman。窗体布局如下:在窗体中,使用了ADO Data控件和DATAGrid1控件来显示产品信息。(1
15、)refresh_pro过程的功能是更新ADO Data 控件的记录源,从而刷新Datagrid1表格中显示的产品数据。rivate Sub Refresh_Pro() Adodc1.ConnectionString = conn Adodc1.RecordSource = SELECT ProId As 产品编号, ProName As 产品名称, _+ ProMark As 产品商标, ProStyle As 产品型号, ProUnit As 计量单位 _+ FROM Product ORDER BY ProId Adodc1.RefreshEnd Sub(2)当装入窗体时触发From_l
16、oad事件:Private Sub Form_Load() Refresh_ProEnd Sub(3)cmd_Add_click过程:Private Sub Cmd_Add_Click() FrmProductEdit.Modify = False FrmProductEdit.txtId = FrmProductEdit.txtName = FrmProductEdit.txtMark = FrmProductEdit.txtStyle = FrmProductEdit.txtUnit = FrmProductEdit.Show 1 Refresh_ProEnd Sub(4)cmd_modi
17、_click过程:private Sub Cmd_Modi_Click() Dim TmpProId As Integer If Adodc1.Recordset.BOF = True Then MsgBox 请选择记录 Exit Sub End If 保存光标位置 p = Adodc1.Recordset.AbsolutePosition 读取当前记录的各列数据 FrmProductEdit.OriId = Trim(Adodc1.Recordset.Fields(0) FrmProductEdit.txtId = Trim(Adodc1.Recordset.Fields(0) FrmPro
18、ductEdit.txtName = Trim(Adodc1.Recordset.Fields(1) FrmProductEdit.txtMark = Trim(Adodc1.Recordset.Fields(2) FrmProductEdit.txtStyle = Trim(Adodc1.Recordset.Fields(3) FrmProductEdit.txtUnit = Trim(Adodc1.Recordset.Fields(4) FrmProductEdit.Modify = True FrmProductEdit.Show 1 Refresh_Pro恢复光标位置 Adodc1.R
19、ecordset.Move 0 Adodc1.Recordset.Move p - 1End Sub程序将使用ADodc1.recordset.fields(n)从当前记录中获取n+1列数值,并将其赋值到frmproductedit窗体的对就控件中。(5)Cmd_del_click过程:Private Sub Cmd_Del_Click() Dim TmpProId As String If Adodc1.Recordset.BOF = True Then MsgBox 请选择记录 Exit Sub End If p = Adodc1.Recordset.AbsolutePosition Tm
20、pProId = Trim(Adodc1.Recordset.Fields(0)确认删除 If MsgBox(是否删除当前行?, vbYesNo, 确认) = vbYes Then Call MyPro.Delete(TmpProId) Refresh_Pro If p - 1 0 Then Adodc1.Recordset.Move 0 Adodc1.Recordset.Move p - 1 End If End IfEnd Sub4、合同管理模块设计。合同管理模块是本系统的核心部分。41合同信息编辑窗体,名称为FrmContractEdit,窗体布局如下:在窗体中使用DTPicker输入日
21、期数据。(1)refresh_pro过程的作用是显示合同产品信息。代码如下:Private Sub Refresh_Pro() Adodc1.ConnectionString = conn Adodc1.RecordSource = SELECT ProId As 产品编号, UnitPrice As 产品单价, Quantity As 产品数量, _+ DeliveryDate As 交货日期, Memo As 备注信息 _+ FROM ConProduct WHERE ContractId= + Trim(MyContract.ContractId) _+ ORDER BY ProId A
22、dodc1.RefreshEnd Sub(2)Cmd_save_click过程: Private Sub Cmd_Save_Click() Dim TmpId As String If Trim(txtId) = Then MsgBox 请输入合同编号 Exit Sub End If If Trim(txtClient) = Then MsgBox 请输入客户单位 Exit Sub End If TmpId = MakeStr(txtId) 判断产品编号是否已经存在 If Modify = False Or OriId Trim(txtId) Then If MyContract.In_DB(
23、TmpId) = True Then MsgBox 合同编号“ + Trim(txtId) + ”已经存在,请重新输入 txtId.SetFocus txtId.SelStart = 0 txtId.SelLength = Len(txtId) Exit Sub End If End If With MyContract .ContractId = TmpId .Client = MakeStr(txtClient) 规范日期格式 .SignDate = Format(DTSignDate.Value, yyyy-mm-dd) .EmpName = MakeStr(txtEmpName) .D
24、eliveryWay = MakeStr(txtDeliveryWay) .DeliveryDate = Format(DTDeliveryDate.Value, yyyy-mm-dd) .SettleWay = ComboSettle.ListIndex + 1 .Validation = Format(DTValidation.Value, yyyy-mm-dd) .Contents = MakeStr(txtContents) .Additional = MakeStr(txtAdditional) If Modify = False Then .Status = 1 .Insert M
25、odify = True OriId = .ContractId Else .Update (OriId) End If End With MsgBox 合同保存完成End SubStatus字段等于1表示合同状态与签定合同。42合同信息管理窗体,名称为FrmContractMan,布局如下:(1)当单击日历控件时触发Month View_click事件,代码如下: Private Sub MonthView1_Click() Dim SelDate As String 获取选择的日期 SelDate = Format(MonthView1.Value, yyyy-mm-dd) Adodc1.
26、ConnectionString = connAdodc1.RecordSource = SELECT ContractId FROM Contract WHERE SignDate= _+SelDate + Adodc1.Refresh DataList1_ClickEnd Sub(2)当窗体启动时触发from_load事件,代码如下:Private Sub Form_Load() MonthView1.Value = Now MonthView1_ClickEnd Sub(3)Datalist1-click过程:程序将根据选择的合同编号调用Mycontract.getinfo过程,读取合同
27、的基本信息,并显示在右侧的“合同信息”栏处。Private Sub DataList1_Click() With MyContract .GetInfo (DataList1.Text) 签定日期 lblSignDate = .SignDate 客户单位 lblClient = .Client 合同状态 Select Case .Status Case 1 lblStatus = 签定合同 Case 2 lblStatus = 实施合同 Case 3 lblStatus = 完成合同 Case Else lblStatus = End Select 负责人 lblEmpName = .EmpN
28、ame 结算方式 Select Case .SettleWay Case 1 lblSettleWay = 支票 Case 2 lblSettleWay = 现金 Case 3 lblSettleWay = 签单 Case 4 lblSettleWay = 汇款 Case Else lblSettleWay = End Select 有效期限 lblLastDay = .Validation End WithEnd Sub(4)Cmd_status_click过程:将根据当前合同的状态提示用户更新到一级合同状态,如果当前合同已经是“完成合同”,则不能再改变合同状态。最后调用Datalist_c
29、lick过程更新合同状态的显示。Private Sub Cmd_Status_Click() Select Case MyContract.Status Case 1 If MsgBox(是否将合同状态改变为 - 实施合同?, vbYesNo, 请确认) = vbYes Then Call MyContract.UpdateStatus(MyContract.ContractId, 2) End If Case 2 If MsgBox(是否将合同状态改变为 - 完成合同?, vbYesNo, 请确认) = vbYes Then Call MyContract.UpdateStatus(MyCo
30、ntract.ContractId, 3) End If Case 3 MsgBox 完成合同将无法改变状态 Case Else MsgBox 无效的合同状态 End Select DataList1_ClickEnd Sub4合同产品信息编辑窗体,名称为frmConProductEdit,布局如下:(1)当窗体启动时触发from-_load事件,代码如下:Private Sub Form_Load() MyPro.Load_ProId 把产品编号添加到ComboProId中 i = 0 Do While Arr_ProId(i) ComboProId.AddItem Arr_ProId(i)
31、 i = i + 1 Loop If Modify = False Then If ComboProId.ListCount 0 Then ComboProId.ListIndex = 0 End If Else If OriId And InCombo(OriId, ComboProId) = True Then ComboProId.Text = OriId End If End If lblAmount = Val(txtUnitPrice) * Val(txtQuantity)End Sub程序将产品编号数据装入到comboproId,并根据oriId设置comboproId日值,最后
32、根据产品单价和数量计算总金额。(2) txtquantity-change过程:Private Sub txtQuantity_Change() lblAmount = Val(txtUnitPrice) * Val(txtQuantity)End Sub程序将自动地根据产品单价和产品数量计算出订货金额。(3)comboproId_click过程:Private Sub ComboProId_Click() MyPro.GetInfo (ComboProId.Text) lblProName = MyPro.ProName lblMark = MyPro.ProMark lblStyle =
33、MyPro.ProStyle lblUnit = MyPro.ProUnitEnd Sub程序将根据当前的产品编号读取产品的所有信息,并显示在窗口中。5、合同费用管理模块设计51合同费用信息编辑窗体,名称FrmCostEdit,布局如下:(1)Cmd_ok_click过程:Private Sub Cmd_OK_Click() Dim TmpId As String If Trim(txtCostId) = Then MsgBox 请输入凭单号 txtCostId.SetFocus Exit Sub End If If Val(txtAmount) 0 Then MsgBox 费用应大于0 tx
34、tAmount.SetFocus Exit Sub End If If Trim(txtReceive) = Then MsgBox 请输入收款人 txtReceive.SetFocus Exit Sub End If If Trim(txtCashier) = Then MsgBox 请输入经办人 txtCashier.SetFocus Exit Sub End If TmpId = TrimStr(txtCostId.Text) 判断凭单号是否已经存在 If Modify = False Or OriId TmpId Then If MyCost.In_DB(TmpId) = True T
35、hen MsgBox 凭单号 - + TmpId + - 已经存在,请重新输入 txtCostId.SetFocus Exit Sub End If End If With MyCost .ContractId = MyContract.ContractId .CostId = MakeStr(txtCostId) .CostType = ComboType.Text If ComboDetail.Visible = True Then .Detail = MakeStr(ComboDetail.Text) Else .Detail = End If .Amount = Val(txtAmou
36、nt) .Receiver = MakeStr(txtReceive) .Cashier = MakeStr(txtCashier) .CostDate = Format(DTDate.Value, yyyy-mm-dd) .Memo = MakeStr(txtMemo) If Modify = False Then .Insert Else Call .Update(OriId) End If End With Unload MeEnd Sub程序将判断指定的费用凭单号是否存在,如果存在则不允许保存。如果不存在,则将用户录入的数据保存到MYCost对象的变量中,并根据Modify变量的值决定
37、使用Insert或Update方法将数据保存到数据库中。合同费用信息管理窗体,名称为FrmCostMan,布局如下:(1)refresh_cost过程用来更新AdO data控件的记录源,从而更新datagrid控件中显示的内容。代码如下:Private Sub Refresh_Cost() Adodc1.ConnectionString = conn Adodc1.RecordSource = SELECT CostId As 凭单号, CostType As 费用类别, _+ ISNULL(Detail,) As 费用明细, Amount As 费用金额, Receiver As 收款人,
38、 _+ Cashier As 经办人, CostDate As 发生日期, Memo As 备注 _+ FROM Cost WHERE ContractId= + Trim(MyContract.ContractId) _+ ORDER BY CostId Adodc1.RefreshEnd Sub(2)当用户单击“修改”按钮时触发Cmd_modi_click事件,代码如下:Private Sub Cmd_Modi_Click() Dim TmpCostId As Integer If Adodc1.Recordset.BOF = True Then MsgBox 请选择记录 Exit Sub
39、 End If 保存光标位置 p = Adodc1.Recordset.AbsolutePosition 读取当前记录的各列数据 FrmCostEdit.OriId = Trim(Adodc1.Recordset.Fields(0) FrmCostEdit.txtCostId = Trim(Adodc1.Recordset.Fields(0) FrmCostEdit.ComboType.Text = Trim(Adodc1.Recordset.Fields(1) FrmCostEdit.ComboDetail.Text = Trim(Adodc1.Recordset.Fields(2) Frm
40、CostEdit.txtAmount = Trim(Adodc1.Recordset.Fields(3) FrmCostEdit.txtReceive = Trim(Adodc1.Recordset.Fields(4) FrmCostEdit.txtCashier = Trim(Adodc1.Recordset.Fields(5) FrmCostEdit.DTDate.Value = Adodc1.Recordset.Fields(6) FrmCostEdit.txtMemo = Adodc1.Recordset.Fields(7) FrmCostEdit.lblContractId = lb
41、lContractId FrmCostEdit.Modify = True FrmCostEdit.Show 1 Refresh_Cost 恢复光标位置 Adodc1.Recordset.Move 0 Adodc1.Recordset.Move p - 1End Sub53在合同管理窗体中添加费用管理代码在合同管理窗体中单击“合同费用”按钮时触发Cmd_cost_click事件,代码如下:Private Sub Cmd_Cost_Click() If DataList1.Text = Then MsgBox 请选择合同编号 Exit Sub End If FrmCostMan.Show 1End Sub在打开合同费用管理窗体前,需要选择合同编号。6、合同收账管理模块设计6合同收帐信息编辑窗体,名称为FrmIncomeEdit,布局如下:() Cmd_ok_click过程:Private Sub Cmd_OK_Click() Dim TmpId As String If Trim(txtIncomeId) = Then MsgBox 请输入发票编号号 txtIncomeId.SetFocus Exit Sub End If If Val(txtAmount) 0 Then MsgBox 费用应大于0 txtAmo
限制150内