VB.NET版机房收费系统---报表
报表,即报告情况的表格,简单的说:报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据”。 在没有计算机以前,人们利用纸和笔来记录数据。
比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上。数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改。
VB版机房收费系统的报表采用的是第三方的Grid++Report,.NET版机房收费系统,采用了自带的报表设计器,实现过程如下:
第一部分:添加数据集
a、右击添加---新建项目;
b、选择窗体应用程序and重命名;
c、界面布局如下,其中ReportViewer自带具有刷新、打印、打印布局等功能,所以就不用再独自拿出来当一个小功能实现了。ps,这里添加一个DataGridView控件,设置为不可见,她有什么神奇的作用nie,`(*∩_∩*)′ ,我们可以把当天收取金额,退还金额,消费金额显示在这个控件上,比方拿消费金额来说,她的计算结果就是该控件所有的行,加上line表中第六列即consumeMoney相加,是不是很方便。
d、右击添加---新建项目;
e、Reoprting---报表;
第二部分:连接数据库
a、选择数据源
b、选择数据库类型
c、选择数据库模型
d、选择数据库连接;
e、将连接字符串保存到应用程序配置文件中;
f、添加连接
g、选择数据库对象
第三部分,设计报表;
a、添加表头
b、选择报表
第四部分:代码实现部分
首先,实体层;
<span style="font-size:18px;">Public Class CheckDayinfo
Public rechargeCash As Integer '字段
Public Property _rechargeCash As Integer '属性
Get
Return rechargeCash
End Get
Set(value As Integer)
rechargeCash = value
End Set
End Property
Public consumeCash As Integer
Public Property _consumeCash As Integer
Get
Return consumeCash
End Get
Set(value As Integer)
rechargeCash = value
End Set
End Property
Public cancelCash As Integer
Public Property _cancelCash As Integer
Get
Return cancelCash
End Get
Set(value As Integer)
cancelCash = value
End Set
End Property
Public allCash As Integer
Public Property _allCash As Integer
Get
Return allCash
End Get
Set(value As Integer)
allCash = value
End Set
End Property
Public Ddate As String
Public Property _date As String
Get
Return Ddate
End Get
Set(value As String)
Ddate = value
End Set
End Property
End Class</span>
D层
<span style="font-size:18px;">Imports System.Data.SqlClient
Public Class DayBillDAO
Public Function queryRechargeCash(ByVal date1 As String) As DataTable '在recharge这张表中查询收取金额
Dim db As New Entity.Dbutil '实例化一个新的数据库连接
Dim dt As New DataTable '实例化D层DataTable这个类的一个对象
Using conn As New SqlConnection(db.connstring)
conn.Open()
Dim sql As String
Dim cmd As New SqlCommand
Dim dataAdapter As New SqlDataAdapter
Dim dst As New DataSet
sql = "select * from Recharge_info where date=@date" '从rechargeinfo这张表中查找充值金额,根据日期进行相关选择
cmd = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("@date", date1))
dataAdapter.SelectCommand = cmd
dataAdapter.Fill(dst, "Recharge_info")
dt = dst.Tables("Recharge_info")
Return dt
End Using
End Function
Public Function queryCancelCash(ByVal date2 As String) As DataTable '在卡表中查询退还金额也就是余额
Dim db As New Entity.Dbutil
Dim dt As New DataTable
Using conn As New SqlConnection(db.connstring)
conn.Open()
Dim sql As String
Dim cmd As New SqlCommand
Dim dataAdapter As New SqlDataAdapter
Dim dst As New DataSet
sql = "select * from card_info where returnDate=@date " '从卡表中选择退还金额,根据日期进行相关判断
cmd = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("@date", date2))
dataAdapter.SelectCommand = cmd
dataAdapter.Fill(dst, "card_info")
dt = dst.Tables("card_info")
Return dt
End Using
End Function
Public Function queryConsumeCash(ByVal date3 As String) As DataTable '从line表中查询消费金额
Dim db As New Entity.Dbutil
Dim dt As New DataTable
Using conn As New SqlConnection(db.connstring)
conn.Open()
Dim sql As String
Dim cmd As New SqlCommand
Dim dataAdapter As New SqlDataAdapter
Dim dst As New DataSet
sql = "select * from line_info where offdate=@date " '从line表中查找消费金额
cmd = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("@date", date3))
dataAdapter.SelectCommand = cmd
dataAdapter.Fill(dst, "line_info")
dt = dst.Tables("line_info")
Return dt
End Using
End Function
Public Sub insertDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '如果,我说的是如果啊,如果日结账单里面没有记录,我们需要在日结账单里面插入一条新的记录,如果有,我们更新即可
Dim db As New Entity.Dbutil
Using conn As New SqlConnection(db.connstring)
conn.Open()
Dim sql As String
Dim cmd As New SqlCommand
sql = "insert into CheckDay_info values (@rechargeCash,@consumeCash,@cancelCash,@allCash,@date)"
cmd = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("@rechargeCash", checkDayinfo.rechargeCash))
cmd.Parameters.Add(New SqlParameter("@consumeCash", checkDayinfo.consumeCash))
cmd.Parameters.Add(New SqlParameter("@cancelCash", checkDayinfo.cancelCash))
cmd.Parameters.Add(New SqlParameter("@allCash", checkDayinfo.allCash))
cmd.Parameters.Add(New SqlParameter("@date", checkDayinfo.Ddate))
cmd.ExecuteNonQuery()
End Using
End Sub
Public Sub updateDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '更新日结账单里面的内容
Dim db As New Entity.Dbutil
Dim dt As New DataTable
Using conn As New SqlConnection(db.connstring)
conn.Open()
Dim sql As String
Dim cmd As New SqlCommand
sql = "update CheckDay_info set rechargeCash=@rechargeCash,consumeCash=@consumeCash,cancelCash=@cancelCash,allCash=@allCash where date=@date "
cmd = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("@rechargeCash", checkDayinfo.rechargeCash))
cmd.Parameters.Add(New SqlParameter("@consumeCash", checkDayinfo.consumeCash))
cmd.Parameters.Add(New SqlParameter("@cancelCash", checkDayinfo.cancelCash))
cmd.Parameters.Add(New SqlParameter("@allCash", checkDayinfo.allCash))
cmd.Parameters.Add(New SqlParameter("@date", checkDayinfo.Ddate))
cmd.ExecuteNonQuery()
End Using
End Sub
Public Function queryCheckDay(ByVal date1 As String) As Entity.CheckDayinfo '查询日结账单中的相关信息,决定我们在U层的时候到底是插入一条记录呢,还是更新一条记录
Dim db As New Entity.Dbutil
Dim CheckDayinfo As New Entity.CheckDayinfo
Using conn As New SqlConnection(db.connstring)
conn.Open()
Dim sql As String
Dim cmd As SqlCommand
Dim reader As SqlDataReader
sql = "select * from CheckDay_info where date=@date"
cmd = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("date", date1))
reader = cmd.ExecuteReader
If (reader.Read()) Then
CheckDayinfo.rechargeCash = reader.GetDecimal(reader.GetOrdinal("rechargeCash"))
CheckDayinfo.consumeCash = reader.GetDecimal(reader.GetOrdinal("consumeCash"))
CheckDayinfo.cancelCash = reader.GetDecimal(reader.GetOrdinal("cancelCash"))
CheckDayinfo.allCash = reader.GetDecimal(reader.GetOrdinal("allCash"))
CheckDayinfo.Ddate = reader.GetString(reader.GetOrdinal("date"))
Else
CheckDayinfo = Nothing
End If
End Using
Return CheckDayinfo
End Function
End Class
</span>
B层
<span style="font-size:18px;">Public Class DayBillManager
Public Function queryRechargeCash(ByVal date1 As String) As DataTable '在recharge这张表中查询收取金额的相关信息
Dim DayBillDAO As New DAL.DayBillDAO
Return DayBillDAO.queryRechargeCash(date1)
End Function
Public Function queryCancelCash(ByVal date2 As String) As DataTable '从卡表中查询退还金额也就是余额
Dim DayBillDAO As New DAL.DayBillDAO
Return DayBillDAO.queryCancelCash(date2)
End Function
Public Function queryConsumeCash(ByVal date3 As String) As DataTable '从line表查询消费金额
Dim DayBillDAO As New DAL.DayBillDAO
Return DayBillDAO.queryConsumeCash(date3)
End Function
Public Sub inserDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '如果日结账单里面没有信息,我们需要插入一条
Dim DayBillDAO As New DAL.DayBillDAO
DayBillDAO.insertDayBill(checkDayinfo)
End Sub
Public Sub updateDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '如果日结账单里面有信息,我们只需要更新即可
Dim DayBillDAO As New DAL.DayBillDAO
DayBillDAO.updateDayBill(checkDayinfo)
End Sub
Public Function queryCheckDay(ByVal date1 As String) As Entity.CheckDayinfo '查找日结账单中的相关信息,如果没有信息,我们需要插入一条信息,如果有,我们需要更新一条信息
Dim DayBillDAO As New DAL.DayBillDAO
Return DayBillDAO.queryCheckDay(date1)
End Function
End Class
</span>
U层
<span style="font-size:18px;">Public Class frmDayBill
Private Sub frmDayBill_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Call write()
'TODO: 这行代码将数据加载到表“DataSet1.CheckDay_info”中。您可以根据需要移动或删除它。
Me.CheckDay_infoTableAdapter.Fill(Me.DataSet1.CheckDay_info, CStr(Format(dtpDate.Value, "yyyy-MM-dd")))
Me.ReportViewer1.RefreshReport()
End Sub
Public Sub write() '在这里,添加了一个DataGridView把相关信息显示在DataGridView中,在报表中显示的时候,我们只需要用一个循环进行相加即可
Dim daybill As New BLL.DayBillManager
Dim dt1 As New DataTable
dt1 = daybill.queryRechargeCash(Format(dtpDate.Value, "yyyy-MM-dd"))
dgv.AutoGenerateColumns = True
dgv.DataSource = dt1
Dim i As Integer '定义变量
Dim rechargeCash As Decimal
For i = 0 To dgv.RowCount - 1 '充值的金额等于DataGirdView所有的行中的列相加,这里的列即recharge_info中的第二列(rechargeAmount)(当天的哦)
rechargeCash = rechargeCash + dgv.Rows(i).Cells(2).Value
Next i
Dim cancelCash As Decimal
dt1 = daybill.queryCancelCash(Format(dtpDate.Value, "yyyy-MM-dd"))
dgv.DataSource = dt1
For i = 0 To dgv.RowCount - 1 '退还的金额等于DataGirdView所有的行中的列相加,这里的列即card_info中的第二列balance,也就是退还金额
cancelCash = cancelCash + dgv.Rows(i).Cells(2).Value
Next i
Dim consumeCash As Decimal
dt1 = daybill.queryConsumeCash(Format(dtpDate.Value, "yyyy-MM-dd"))
dgv.DataSource = dt1
For i = 0 To dgv.RowCount - 1 '消费的金额等于DataGridView中所有的行中的列相加,这里的列即line_info中的第六列consumeMoney,也就是消费金额
consumeCash = consumeCash + dgv.Rows(i).Cells(6).Value
Next i
Dim allCash As Decimal
allCash = rechargeCash - cancelCash '总金额,等于充值金额减去退还金额
Dim enCheck As New Entity.CheckDayinfo '封装实体
Dim enCheck1 As New Entity.CheckDayinfo
enCheck1.rechargeCash = rechargeCash
enCheck1.cancelCash = cancelCash
enCheck1.consumeCash = consumeCash
enCheck1.allCash = allCash
enCheck1.Ddate = CStr(Format(dtpDate.Value, "yyyy-MM-dd"))
enCheck = daybill.queryCheckDay(Format(dtpDate.Value, "yyyy-MM-dd ")) '如果enCheck中没有记录,我们就插入一条,否则更新
If (enCheck Is Nothing) Then
daybill.inserDayBill(enCheck1)
Else
daybill.updateDayBill(enCheck1)
End If
End Sub
Private Sub dtpDate_ValueChanged(sender As Object, e As EventArgs) Handles dtpDate.ValueChanged '调用窗体加载事件
Call frmDayBill_Load(sender, e)
End Sub
End Class</span>
最后运行结果;
计算机出现之后,我们利用计算机处理数据和界面设计的功能来生成、展示报表。计算机上的报表的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,用户可以只修改数据,或者只修改格式。报表分类EXCEL、WORD等编辑软件:它们可以做出很复杂的报表格式,但是由于它们没有定义专门的报表结构来动态的加载报表数据,所有这类软件中的数据都是已经定义好的,静态的,不能动态变化的。它们没有办法实现报表软件的“数据动态化”特性。自此,日结的功能告一段落,机房收费系统未完,待续......
VB.NET版机房收费系统---报表的更多相关文章
- VB.NET版机房收费系统---导出Excel表格
datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...
- VB.NET版机房收费系统---异常处理
异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...
- VB.net版机房收费系统——结账功能实现(调错与优化)
调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...
- VB.NET版机房收费系统---七仙女之系统登录
VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...
- VB.NET版机房收费系统---外观层如何写
外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...
- VB.NET版机房收费系统---组合查询
查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...
- VB.NET版机房收费系统---外观层怎样写
外观设计模式.<大话设计模式>第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿 ...
- VB.NET版机房收费系统—数据库设计
之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...
- VB.NET版机房收费系统—DataGridView应用
事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句, ...
随机推荐
- bootstrap 栅格系统 HTTP协议 软件架构 B/S C/S 常见的WEB服务器
Day32 bootstrap Bootstrap就是响应式布局最成功的实现,为了兼容不同的浏览器采用jQuery,为了适配不同的终端采用CSS3 Media Query (媒体查询) 1.1.1 栅 ...
- 关于java的Synchronized,你可能需要知道这些(下)
上一篇文章介绍了synchronized的基本使用方法和实现,在实现部分说明了synchronized的底层实现依赖系统互斥锁mutex,但是这个一个重型锁,竞争导致线程阻塞挂起,后续拿到锁后再恢复线 ...
- django之允许外部机器访问
开开启django时,使用0.0.0.0:xxxx,作为ip和端口例如: python3 manage.py runserver 0.0.0.0:9000 然后在settings里修改ALLOWED_ ...
- PHP 字符串变量
PHP 字符串变量 字符串变量用于存储并处理文本. PHP 中的字符串变量 字符串变量用于包含有字符的值. 在创建字符串之后,我们就可以对它进行操作了.您可以直接在函数中使用字符串,或者把它存储在变量 ...
- PHP Zip File 函数
通过 PHP 中的相关函数,你可以实现 zip 文件的解压缩操作! PHP Zip File 简介 Zip File 函数允许您读取压缩文件. 安装 如需在服务器上运行 Zip File 函数,必须安 ...
- Nodejs 模块查找机制还不错(从当前目录开始逐级向上查找node_modules)
比如 m.js是能够调用a.js的, 这样子目录就可以避免重复安装node_modules. 够用了.
- PGM:贝叶斯网的参数估计
http://blog.csdn.net/pipisorry/article/details/52578631 本文讨论(完备数据的)贝叶斯网的参数估计问题:贝叶斯网的MLE最大似然估计和贝叶斯估计. ...
- 没事不要在for循环期间增减迭代序列的成员
>>> arr=[4, 4, 9, 7, 7] >>> for i,a in enumerate(arr): arr.pop(i) print(i,a) 4 0 4 ...
- Android下DrawerLayout的使用
Android下DrawerLayout的使用 DrawerLayout见名知意,就是一个具有抽屉效果的布局,看看这个效果图,是不是感觉很炫酷 这么炫的效果其实不一定非要用类似一些SlidingMen ...
- SpriteKit游戏开发 Challenge 2: An invincible zombie 问题的另一种解决方法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 该挑战的目的是僵尸碰到敌人时,将其设置为无敌模式,具体要求如下 ...