一.验题目:
完整单据的设计
二.实验目的:
通过本次实验,了解单据的类型及重要性,掌握两种单据的设计及制作方法,特别是单据中的编码以及状态的控制,为课程设计做准备。
三.实验要求:
实验功能要求:
1、实现单据的新增、修改、删除、浏览、审核、弃审等功能。
2、对单据的编码及状态要进行控制。
3、用.NET分层架构设计。
4、单据的具体内容自定。
四.实验内容:
1.单据:
单据是办理货物的交付和货款的支付的一种依据。单据可以表明出口商是否履约,履约的程度。进口商品以单据作为提取货物的货权凭证,有了单据,就表明有了货物
2.单据类型:
1).带明细的表单;
2).不带明细的表单;
3.status控件:
一个Status控件通过了一个窗口,通常都在应用程序的底部,应用程序可以在其中显示各种状态数据。一个Status控件最多可以分成16个Panel对象,都保存在一个Panels集合中。
4.数据库的设计:
1).建立名为BD的数据库;
2).数据库中的表的建立:
1>.用户表(UserInfo):
2>.单据表(BD):
3>.单据格式表(CodeFormat):
5.实验代码:
1>.数据库连接核心代码:
1.1:联机式代码:
Public Function getall2dr(ByVal strWhere As String) As SqlClient.SqlDataReader
Dim conn As New SqlClient.SqlConnection
conn.ConnectionString = Mycommon.clsConn.getstrConn
Dim cmd As New SqlClient.SqlCommand
cmd.CommandType = CommandType.Text
cmd.Connection = conn
If strWhere = "" Then
cmd.CommandText = "select * from UserInfo"
Else
cmd.CommandText = "select * from UserInfo where " & strWhere
End If
Dim dr As SqlClient.SqlDataReader
conn.Open()
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Return dr
End Function
1.2:断开式代码:
Public Function getall2ds(ByVal strWhere As String) As DataSet
Dim conn As New SqlClient.SqlConnection
conn.ConnectionString = Mycommon.clsConn.getstrConn
Dim cmd As New SqlClient.SqlCommand
cmd.CommandType = CommandType.Text
cmd.Connection = conn
If strWhere = "" Then
cmd.CommandText = "select * from UserInfo"
Else
cmd.CommandText = "select * from UserInfo where " & strWhere
End If
Dim adp As New SqlClient.SqlDataAdapter
adp.SelectCommand = cmd
Dim ds As New DataSet
adp.Fill(ds, "temp")
Return ds
End Function
2>.用户登录核心代码:
Private Sub LOGIN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LOGIN.Click
Dim dr As SqlClient.SqlDataReader
dr = o.getall2dr(" UserID='" & Me.user.Text & "'")
If dr.Read Then
If dr.Item("Psw") = Me.psw.Text Then
MessageBox.Show("恭喜您登录成功!", "系统提示", MessageBoxButtons.OK,
MessageBoxIcon.Information)
BD.Show()
Me.Close()
Else
MessageBox.Show("密码错误!", "系统提示", MessageBoxButtons.RetryCancel,
MessageBoxIcon.Information)
End If
Else
MessageBox.Show("该用户不存在", "系统提示", MessageBoxButtons.OKCancel,
MessageBoxIcon.Information)
End If
3>.主要功能核心代码:
1).新增:
Private Sub New_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles New.Click
Me.action = "new"
Call ClearForm()
End Sub
Sub ClearForm()
Me.DJBM.Text = Mycommon.clsCodeFormat.getNewCode("合同编码")
‘找到类型为合同的表单
Me.ZDRQ.Text = Format(Now, "yyyy-MM-dd")’制单日期为系统现在时间
Me.KHMC.Text = ""
Me.ZDR.Text = user '制单人为当前登录人
Me.SHR.Text = ""
Call btnState(1)
End Sub
2).保存:
Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Save.Click
Dim sr As String'将单据编码,制单日期等传参
o.dDJBM = Me.DJBM.Text
o.dZDRQ = Me.ZDRQ.Text
o.dZDR = Me.ZDR.Text
o.dKHMC = Me.KHMC.Text
If action = "new" Then
sr = o.save'调用保存函数
Public Function save() As String
strSQL = "insert into BD(DJBM,ZDRQ,KHMC,ZDR) values ('" & dDJBM & "','"
& dZDRQ & "','" & dKHMC & "','" & dZDR & "')"
Try
Mycommon.SqlHelper.ExecuteNonQuery(Mycommon.clsConn.
getstrConn,CommandType.Text, strSQL)
Return "1"
Catch ex As Exception
Return "-1" & ex.Message
End Try
End Function
3).修改:
Dim sr As String
o.dKHMC = Me.KHMC.Text’将修改的客户名称传参
o.dDJBM = Me.DJBM.Text‘在系统查找修改表单时按单据编码来找
sr = o.edit'调用修改函数
Public Function edit() As String’修改函数
strSQL = " update BD set KHMC='" & dKHMC & "' where DJBM='" & dDJBM & "' "
Try
Mycommon.SqlHelper.ExecuteNonQuery
(Mycommon.clsConn.getstrConn, CommandType.Text, strSQL)
Return "1"
Catch ex As Exception
Return "-1" & ex.Message
End Try
End Function
4).删除:
Dim sr As String
o.dDJBM = Me.DJBM.Text‘将删除的单据编码作为参数传给删除函数
sr = o.del'调用删除函数
Public Function del() As String'删除函数
strSQL = "delete from BD where DJBM='" & dDJBM & "'"
Try
Mycommon.SqlHelper.ExecuteNonQuery
(Mycommon.clsConn.getstrConn, CommandType.Text,strSQL)
Return "1"
Catch ex As Exception
Return "-1" & ex.Message
End Try
End Function
5).浏览:
Private Sub View_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles View.Click
gxgrid()'调用更新函数
End Sub
Sub gxgrid()'更新数据库和gridview中数据
Me.DataGridView1.DataSource =o.getall2ds("").Tables(0).DefaultView
End Sub
6).审核:
Private Sub SH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles SH.Click
Dim sr As String
sr = o.search'先检测待审核的表单是否为未审核表,如果是则进行审核
If sr <> "" Then
Me.SHR.Text = user
Else
Me.ZDR.Text = sr
Me.SHR.Text = user
End If
End Sub
Public Function search() As String‘查找函数
strSQL = " select ZDR from BD whereDJBM='" & dDJBM & "' "
Try
Mycommon.SqlHelper.ExecuteNonQuery
(Mycommon.clsConn.getstrConn, CommandType.Text,strSQL)
Return cmd.ExecuteScalar
Catch ex As Exception
Return "-1" & ex.Message
End Try
End Function
7).对表单的状态的控制核心代码:
Sub btnState(ByVal paction As Integer)
If paction = 1 Then
Me.New.Enabled = False’新建按钮
Me.Del.Enabled = False's删除按钮
Me.View.Enabled = False'显示按钮
Me.Edit.Enabled = True'修改按钮
Me.SH.Enabled = False'审核按钮
Me.Cancel.Enabled = True'取消按钮
Me.Save.Enabled = True'保存按钮
Else
Me.New.Enabled = True
Me.Del.Enabled = True
Me.Edit.Enabled = True
Me.View.Enabled = True
Me.Save.Enabled = False
Me.Cancel.Enabled = False
If dv.Count = 0 Or dv.Count = 1 Then
Me.SHY.Enabled = False'首页
Me.SYY.Enabled = False"上一页
Me.XYY.Enabled = False'下一页
Me.MY.Enabled = False'末页
Else
If pIndex = 0 Then
Me.SHY.Enabled = False
Me.SYY.Enabled = False
Me.XYY.Enabled = True
Me.MY.Enabled = True
ElseIf pIndex = dv.Count - 1
Then
Me.SHY.Enabled = True
Me.SYY.Enabled = True
Me.XYY.Enabled = False
Me.Edit.Enabled = False
Else
Me.SHY.Enabled = True
Me.SYY.Enabled = True
Me.XYY.Enabled = True
Me.MY.Enabled = True
End If
End If
End If
End Sub
8).翻页控制核心代码:
Private Sub SHY_Click(ByVal sender AsSystem.Object, ByVal e As System.EventArgs)
Handles SHY.Click
If dv.Count > 0 Then
pIndex = 0
Call showCurrentRow(pIndex)
End If
End Sub
Private Sub MY_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MY.Click
If dv.Count > 0 Then
pIndex = dv.Count - 1
Call showCurrentRow(pIndex)
End If
End Sub
Private Sub SYY_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SYY.Click
If pIndex > 0 Then
pIndex -= 1
Call showCurrentRow(pIndex)
End If
End Sub
Private Sub XYY_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles XYY.Click
If pIndex < dv.Count - 1 Then
pIndex += 1
Call showCurrentRow(pIndex)
End If
End Sub
9).表单格式代码:
While dr.Read
Select Case dr!BMLX
Case "文本"
newCode &= dr!BMZ
Case "年"
If dr!BMZ <> Format(Now, "yyyy") Then
newCode &= Format(Now,"yyyy")
LSH = "X"
update(dr!id, Format(Now, "yyyy"))
'更新
Else
newCode &= dr!BMZ
End If
Case "月"
If dr!BMZ <> Format(Now,"MM") Then
newCode &= Format(Now,"MM")
LSH = "X"
update(dr!id, Format(Now, "MM"))
'更新
Else
newCode &= dr!BMZ
End If
Case "日"
If dr!BMZ <> Format(Now,"dd") Then
newCode &= Format(Now,"dd")
update(dr!id, Format(Now, "dd"))
LSH = "X"
'更新
Else
newCode &= dr!BMZ
End If
Case "流水号"
If LSH = "X" Then
newLSH = "0001"
Else
newLSH = Format(CType(dr!BMZ, Decimal) + 1, "0000")
End If
newCode &= newLSH
update(dr!id, newLSH)
'更新流水号
End Select
End While
10).vb.net的三层架构:
六.执行结果;
1.登录界面如下:
2.表单设计:
3.新增:
4.删除:
5.更新:
6.审核:
七.实验总结:
1.通过这次表单的制作,对系统的开发有了一定的认识;系统开发需要缜密的分析;
2.在制作表单时,单据编码是一个难点;也花费了很长的时间的;
在添加单据编码时,应该参照单据编码类型中的格式进行添加。
3.在制作表单时,对表单上的某些按钮的状态进行控制,应该符合实际的情况,
4.在进行新增和删除时,由于sql语句的问题经常会影响到代码的执行,应该对sql语句进行熟练。
5.在实验室经常由于英文和中文状态的括号问题,经常会花很多的时间修改代码。浪费了很多时间,以后应该避免。
6.对单据的设计有了一定的了解,熟悉,以后应该加以熟练。