VB.net版机房收费系统——结账功能实现(代码部分)
来源:互联网 发布:nginx 全局变量赋值 编辑:程序博客网 时间:2024/05/16 04:09
实现结账功能的时候,被选项卡控件整的有点郁闷,瞬间脑袋就凌乱了,听上去自己好像很可笑的样子……于是,便去爬巨人的肩膀了~
看了欢哥的博客,发现她的结账博客是按照“索引”思想写的,在结账实体中添加了新的属性过程(我添加的叫CheckDetail)结账表中并没有这个字段,是为了实现显示所有结账需要的信息(售卡、充值、退卡、汇总)而添加的。
U层代码如下,其中部分注释是功能实现中的一些错,我就顺便把相应的错误信息和解决办法写成了注释~
<span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class frmCheck Private Sub frmCheck_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim UserInfo As New Entity.eUserLogin '反向思维,查询操作员和管理员 UserInfo.UserLevel = "一般用户" Dim UserFac As New Facade.CheckFacade Dim mylist As List(Of Entity.eUserLogin) mylist = UserFac.ShowUserInfo(UserInfo) Dim i As Integer '显示所有的操作员和管理员 For i = 0 To mylist.Count - 1 cmbCheckUserID.Items.Add(Val(Trim((mylist(i).UserID)))) Next End Sub Private Sub cmbCheckUserID_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbCheckUserID.SelectedIndexChanged DgvCancelCard.Rows.Clear() DgvRecharge.Rows.Clear() DgvSellCard.Rows.Clear() '选择用户名后,显示用户真实姓名 Dim eUser As New Entity.eUserLogin eUser.UserID = Trim(cmbCheckUserID.Text) Dim UserNameFac As New Facade.CheckFacade Dim mylist As List(Of Entity.eUserLogin) Dim i As Integer mylist = UserNameFac.ShowUserName(eUser) txtCheckUserName.Text = Trim(mylist(i).UserName) '显示结账前的不同信息 Dim CheckInfo As New Entity.eCheck Dim CheckFac As New Facade.CheckFacade Dim dt As New DataTable CheckInfo.CheckDate = Format(Now, "yyyy-MM-dd") CheckInfo.CheckTime = Format(Now, "HH:mm:ss") CheckInfo.Head = GlobalUserID CheckInfo.UserID = cmbCheckUserID.Text CheckInfo.IsCheck = "N" '定义变量,并赋予初值 Dim SellCardNum As Integer = 0 Dim CancelCardNum As Integer = 0 Dim ActualSellCardNum As Integer = 0 Dim RechargeSum As String = 0 Dim CancelCashSum As String = 0 Dim ActualRechargeSum As String = 0 '给实体赋初值,要是没有,报错:没给存储过程赋参数 CheckInfo.RechargeCash = RechargeSum CheckInfo.CancelCash = CancelCashSum CheckInfo.Benefit = ActualRechargeSum '显示售卡信息 <span style="color:#ff0000;">'在实体中添加了新的属性过程CheckDetail,结账表中并没有这个字段,为了实现显示所有结账信息的需求添加的</span> CheckInfo.CheckDetail = "SellCard" dt = CheckFac.Check(CheckInfo) SellCardNum = SellCardNum + dt.Rows.Count If dt.Rows.Count <> 0 Then lblSelltip.Visible = False DgvSellCard.Rows.Add(dt.Rows.Count) For i = 0 To (dt.Rows.Count - 1) DgvSellCard.Rows(i).Cells(0).Value = dt.Rows(i).Item(0) DgvSellCard.Rows(i).Cells(1).Value = dt.Rows(i).Item(1) DgvSellCard.Rows(i).Cells(2).Value = Mid(dt.Rows(i).Item(2), 1, 10) DgvSellCard.Rows(i).Cells(3).Value = dt.Rows(i).Item(3) Next DgvSellCard.AllowUserToAddRows = False Else lblSelltip.Visible = True 'Exit Sub '不能有这句代码,因为此处的需求是连续将相关的记录查找出来,不能间断 End If '显示充值信息 CheckInfo.CheckDetail = "Recharge" dt = CheckFac.Check(CheckInfo) If dt.Rows.Count <> 0 Then lblRechargetip.Visible = False DgvRecharge.Rows.Add(dt.Rows.Count) For i = 0 To (dt.Rows.Count - 1) DgvRecharge.Rows(i).Cells(0).Value = dt.Rows(i).Item(0) DgvRecharge.Rows(i).Cells(1).Value = dt.Rows(i).Item(1) DgvRecharge.Rows(i).Cells(2).Value = Mid(dt.Rows(i).Item(2), 1, 10) DgvRecharge.Rows(i).Cells(3).Value = dt.Rows(i).Item(3) '若是如下方式写,会报错从字符串“088 33 11 ”到类型“Double”的转换无效 'RechargeSum = RechargeSum + dt.Rows(i).Item(1) '避免上述错误的写法 '“System.FormatException”类型的未经处理的异常在 mscorlib.dll 中发生,其他信息: 输入字符串的格式不正确。 'RechargeSum = RechargeSum + Convert.ToInt32(dt.Rows(i).Item(1)) '改成了以下写法 RechargeSum = RechargeSum + Val(dt.Rows(i).Item(1)) Next DgvRecharge.AllowUserToAddRows = False Else lblRechargetip.Visible = True End If '显示退卡信息 CheckInfo.CheckDetail = "CancelCard" dt = CheckFac.Check(CheckInfo) CancelCardNum = CancelCardNum + dt.Rows.Count If dt.Rows.Count <> 0 Then lblCanceltip.Visible = False DgvCancelCard.Rows.Add(dt.Rows.Count) For i = 0 To (dt.Rows.Count - 1) DgvCancelCard.Rows(i).Cells(0).Value = dt.Rows(i).Item(0) DgvCancelCard.Rows(i).Cells(1).Value = dt.Rows(i).Item(1) DgvCancelCard.Rows(i).Cells(2).Value = Mid(dt.Rows(i).Item(2), 1, 10) DgvCancelCard.Rows(i).Cells(3).Value = dt.Rows(i).Item(3) '若是这样写,会报错 'CancelCashSum = CancelCashSum +(dt.Rows(i).Item(1) 'CancelCashSum = CancelCashSum + Convert.ToInt32(dt.Rows(i).Item(1)) CancelCashSum = CancelCashSum + Val(dt.Rows(i).Item(1)) Next DgvCancelCard.AllowUserToAddRows = False Else lblCanceltip.Visible = True End If '如果没有结账需要的信息,结账按钮不可用,并给出相应的信息 If DgvCancelCard.Rows.Count = 0 And DgvRecharge.Rows.Count = 0 And DgvSellCard.Rows.Count = 0 Then lblChecktip.Visible = True btnCheck.Enabled = False Else lblChecktip.Visible = False '汇总界面的显示信息 btnCheck.Enabled = True txtSellNum.Text = SellCardNum txtCancelNum.Text = CancelCardNum txtCancelCashSum.Text = CancelCashSum txtRechargeSum.Text = RechargeSum '下面的代码是否加ToString并未影响运行 'txtActualSellNum.Text = SellCardNum - CancelCardNum txtActualSellNum.Text = (SellCardNum - CancelCardNum).ToString 'txtActualGainCashSum.Text = RechargeSum - CancelCashSum txtActualGainCashSum.Text = (RechargeSum - CancelCashSum).ToString End If End Sub '正式结账 '注意:由于结账信息显示和正式结账用的是同一个存储过程,所以为了照顾存储过程里边的字段,就把 '一些字段即使用不到,也写了一遍 Private Sub btnCheck_Click(sender As Object, e As EventArgs) Handles btnCheck.Click '由于优化的想法是不选择被结账用户,结账按钮不能用,故此处不用进行如下提示 'If cmbCheckUserID.SelectedIndex = -1 Then ' MsgBox("请选择被结账用户!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "提示") 'End If Dim CheckInfo As New Entity.eCheck Dim CheckFac As New Facade.CheckFacade CheckInfo.UserID = Trim(cmbCheckUserID.Text) CheckInfo.Head = GlobalUserID CheckInfo.RechargeCash = Trim(txtRechargeSum.Text) CheckInfo.CancelCash = Trim(txtCancelCashSum.Text) CheckInfo.Benefit = Trim(txtRechargeSum.Text) - Trim(txtCancelCashSum.Text) CheckInfo.CheckDate = Format(Now, "yyyy-MM-dd") CheckInfo.CheckTime = Format(Now, "HH:mm:ss") CheckInfo.IsCheck = "Y" CheckInfo.CheckDetail = "InfoSum" Dim IsCheckSucceed As Boolean IsCheckSucceed = CheckFac.IsCheck(CheckInfo) If IsCheckSucceed = True Then MsgBox("恭喜你,结账成功!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "提示") txtActualGainCashSum.Text = "0" txtActualSellNum.Text = "0" txtCancelCashSum.Text = "0" txtCancelNum.Text = "0" txtRechargeSum.Text = "0" txtSellNum.Text = "0" btnCheck.Enabled = False Exit Sub Else MsgBox("抱歉,结账失败!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "提示") End If End SubEnd Class</span>
上边的代码用的是if选择语句,根据选择去显示相应的信息,所以,为了对应,我们也会有一个相应的用if选择语句进行功能实现的存储过程:
<span style="font-family:KaiTi_GB2312;font-size:18px;">USE [ComputerCharge_sys]GO/****** Object: StoredProcedure [dbo].[proc_Check] Script Date: 2016/4/9 16:40:55 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[proc_Check]@Head char(11),@UserID char(11),@RechargeSum char(10),@CancelCashSum char(10) ,@ActualRechargeSum char(10),@CheckDate char(10),@CheckTime char(8),@IsCheck varchar(10),@CheckDetail char(10)ASBEGINdeclare @N varchar(2)set @N='N'declare @sql char(500)--查询表T_Card_Info中的售卡记录if @CheckDetail ='SellCard'beginselect @sql ='select CardNo ,StudentNo,RegisterDate ,RegisterTime from T_Card_Info where Head='+ char(39)+@UserID+ char(39)+char(32)+'and IsCheck='+char(39)+@IsCheck+char(39) exec(@sql)end --查询表T_CancelCard_Info中的退卡记录if @CheckDetail ='CancelCard'beginselect @sql ='select CardNo ,BackCash ,CancelDate ,CancelTime from T_CancelCard_Info where Head='+ char(39)+@UserID+ char(39)+char(32)+'and IsCheck='+char(39)+@IsCheck+char(39) exec(@sql)end --查询充值表的充值记录if @CheckDetail ='Recharge'beginselect CardNo ,Recharge ,RechargeDate ,RechargeTime from T_Recharge_Info where Head=@UserID and IsCheck =@IsCheck --select @sql ='select CardNo ,Recharge ,RechargeDate ,RechargeTime from T_Recharge_Info where Head='+ char(39)+@UserID+ char(39)+char(32)+'and IsCheck='+char(39)+@IsCheck+char(39)exec(@sql)end if @CheckDetail ='InfoSum'begin update T_card_Info set IsCheck =@IsCheck where Head =@UserID and IsCheck = @Nupdate T_CancelCard_Info set IsCheck =@IsCheck where Head =@UserID and IsCheck = @Nupdate T_Recharge_Info set IsCheck =@IsCheck where Head =@UserID and IsCheck = @Ninsert into T_Check_Info (RechargeCash,CancelCash,Benefit,CheckDate,CheckTime,Head)values(@RechargeSum ,@CancelCashSum ,@ActualRechargeSum,@CheckDate ,@CheckTime ,@Head )--set @error=@error+@@error--if @error<>0 --rollback transaction --如果不等于0,则回滚事务,不能执行--else --commit transaction --等于0,则执行该事务end END</span>
上述内容只是结账功能的代码,纯属站在巨人的肩膀上学习、比葫芦画瓢而已,接下来才是自己的探索学习过程,无奈篇幅太长,请欣赏下一篇博客《VB.net版机房收费系统——结账功能实现(调错部分)》
0 0
- VB.net版机房收费系统——结账功能实现(代码部分)
- VB.net版机房收费系统——结账功能实现(调错与优化)
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统—结账
- 【VB与数据库】——机房收费系统之结账
- 机房收费系统之结账与报表(三)VB与报表代码《一学就会傻瓜版》
- 【机房收费系统——报表与vb交互之日结账和周结账】
- VB查询数据库之结账——机房收费系统总结(五)
- 机房收费—结账
- vb.net版机房收费系统重构的成长历程(功能实现篇)
- 机房收费系统——结账
- 机房收费系统——结账
- 【机房收费系统】——结账
- 【机房收费系统】——结账
- 机房收费系统——结账
- 10019---Installing the Accelerator Extension Set
- Java 动态代理
- 最长公共子串-不建立dp数组(空间复杂度为O(1))
- 3dMAX的导出文件格式
- 使用appearance proxy定制控件的默认外观(详解)
- VB.net版机房收费系统——结账功能实现(代码部分)
- 住院费用查询--按照病案核算分类计算
- 过河问题-狼羊人菜
- leetcode---Same Tree
- 【Android基础】四种点击事件
- LTE-TDD随机接入过程(3)-RAR(MSG2)以及MSG1的重传
- 【使用JSOUP实现网络爬虫】修改数据-设置元素的文本内容
- powerdesigner设置对象颜色
- 比较字符串是否相等