报表,即报告情况的表格,简单的说:报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据”。 在没有计算机以前,人们利用纸和笔来记录数据。

比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上。数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改。

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 CheckDayinfoPublic rechargeCash As Integer                     '字段Public Property _rechargeCash As Integer            '属性  GetReturn rechargeCashEnd GetSet(value As Integer)rechargeCash = valueEnd SetEnd PropertyPublic consumeCash As IntegerPublic Property _consumeCash As IntegerGetReturn consumeCashEnd GetSet(value As Integer)rechargeCash = valueEnd SetEnd PropertyPublic cancelCash As IntegerPublic Property _cancelCash As IntegerGetReturn cancelCashEnd GetSet(value As Integer)cancelCash = valueEnd SetEnd PropertyPublic allCash As IntegerPublic Property _allCash As IntegerGetReturn allCashEnd GetSet(value As Integer)allCash = valueEnd SetEnd PropertyPublic Ddate As StringPublic Property _date As StringGetReturn DdateEnd GetSet(value As String)Ddate = valueEnd SetEnd Property
End Class</span>

D层

<span style="font-size:18px;">Imports System.Data.SqlClient
Public Class DayBillDAOPublic 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 StringDim cmd As New SqlCommandDim dataAdapter As New SqlDataAdapterDim dst As New DataSetsql = "select * from Recharge_info where date=@date"   '从rechargeinfo这张表中查找充值金额,根据日期进行相关选择cmd = New SqlCommand(sql, conn)cmd.Parameters.Add(New SqlParameter("@date", date1))dataAdapter.SelectCommand = cmddataAdapter.Fill(dst, "Recharge_info")dt = dst.Tables("Recharge_info")Return dtEnd UsingEnd FunctionPublic Function queryCancelCash(ByVal date2 As String) As DataTable  '在卡表中查询退还金额也就是余额Dim db As New Entity.DbutilDim dt As New DataTableUsing conn As New SqlConnection(db.connstring)conn.Open()Dim sql As StringDim cmd As New SqlCommandDim dataAdapter As New SqlDataAdapterDim dst As New DataSetsql = "select * from card_info where returnDate=@date "     '从卡表中选择退还金额,根据日期进行相关判断cmd = New SqlCommand(sql, conn)cmd.Parameters.Add(New SqlParameter("@date", date2))dataAdapter.SelectCommand = cmddataAdapter.Fill(dst, "card_info")dt = dst.Tables("card_info")Return dtEnd UsingEnd FunctionPublic Function queryConsumeCash(ByVal date3 As String) As DataTable  '从line表中查询消费金额Dim db As New Entity.DbutilDim dt As New DataTableUsing conn As New SqlConnection(db.connstring)conn.Open()Dim sql As StringDim cmd As New SqlCommandDim dataAdapter As New SqlDataAdapterDim dst As New DataSetsql = "select * from line_info where offdate=@date " '从line表中查找消费金额cmd = New SqlCommand(sql, conn)cmd.Parameters.Add(New SqlParameter("@date", date3))dataAdapter.SelectCommand = cmddataAdapter.Fill(dst, "line_info")dt = dst.Tables("line_info")Return dtEnd UsingEnd FunctionPublic Sub insertDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '如果,我说的是如果啊,如果日结账单里面没有记录,我们需要在日结账单里面插入一条新的记录,如果有,我们更新即可Dim db As New Entity.DbutilUsing conn As New SqlConnection(db.connstring)conn.Open()Dim sql As StringDim cmd As New SqlCommandsql = "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 UsingEnd SubPublic Sub updateDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '更新日结账单里面的内容Dim db As New Entity.DbutilDim dt As New DataTableUsing conn As New SqlConnection(db.connstring)conn.Open()Dim sql As StringDim cmd As New SqlCommandsql = "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 UsingEnd SubPublic Function queryCheckDay(ByVal date1 As String) As Entity.CheckDayinfo  '查询日结账单中的相关信息,决定我们在U层的时候到底是插入一条记录呢,还是更新一条记录Dim db As New Entity.DbutilDim CheckDayinfo As New Entity.CheckDayinfoUsing conn As New SqlConnection(db.connstring)conn.Open()Dim sql As StringDim cmd As SqlCommandDim reader As SqlDataReadersql = "select * from CheckDay_info  where date=@date"cmd = New SqlCommand(sql, conn)cmd.Parameters.Add(New SqlParameter("date", date1))reader = cmd.ExecuteReaderIf (reader.Read()) ThenCheckDayinfo.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"))ElseCheckDayinfo = NothingEnd IfEnd UsingReturn CheckDayinfoEnd Function
End Class
</span>

B层

<span style="font-size:18px;">Public Class DayBillManagerPublic Function queryRechargeCash(ByVal date1 As String) As DataTable '在recharge这张表中查询收取金额的相关信息Dim DayBillDAO As New DAL.DayBillDAOReturn DayBillDAO.queryRechargeCash(date1)End FunctionPublic Function queryCancelCash(ByVal date2 As String) As DataTable  '从卡表中查询退还金额也就是余额Dim DayBillDAO As New DAL.DayBillDAOReturn DayBillDAO.queryCancelCash(date2)End FunctionPublic Function queryConsumeCash(ByVal date3 As String) As DataTable '从line表查询消费金额Dim DayBillDAO As New DAL.DayBillDAOReturn DayBillDAO.queryConsumeCash(date3)End FunctionPublic Sub inserDayBill(ByVal checkDayinfo As Entity.CheckDayinfo) '如果日结账单里面没有信息,我们需要插入一条Dim DayBillDAO As New DAL.DayBillDAODayBillDAO.insertDayBill(checkDayinfo)End SubPublic Sub updateDayBill(ByVal checkDayinfo As Entity.CheckDayinfo)  '如果日结账单里面有信息,我们只需要更新即可Dim DayBillDAO As New DAL.DayBillDAODayBillDAO.updateDayBill(checkDayinfo)End SubPublic Function queryCheckDay(ByVal date1 As String) As Entity.CheckDayinfo  '查找日结账单中的相关信息,如果没有信息,我们需要插入一条信息,如果有,我们需要更新一条信息Dim DayBillDAO As New DAL.DayBillDAOReturn DayBillDAO.queryCheckDay(date1)End Function
End Class
</span>

U层

<span style="font-size:18px;">Public Class frmDayBillPrivate Sub frmDayBill_Load(sender As Object, e As EventArgs) Handles MyBase.LoadCall write()'TODO:  这行代码将数据加载到表“DataSet1.CheckDay_info”中。您可以根据需要移动或删除它。Me.CheckDay_infoTableAdapter.Fill(Me.DataSet1.CheckDay_info, CStr(Format(dtpDate.Value, "yyyy-MM-dd")))Me.ReportViewer1.RefreshReport()End SubPublic Sub write()     '在这里,添加了一个DataGridView把相关信息显示在DataGridView中,在报表中显示的时候,我们只需要用一个循环进行相加即可Dim daybill As New BLL.DayBillManagerDim dt1 As New DataTabledt1 = daybill.queryRechargeCash(Format(dtpDate.Value, "yyyy-MM-dd"))dgv.AutoGenerateColumns = Truedgv.DataSource = dt1Dim i As Integer     '定义变量Dim rechargeCash As DecimalFor i = 0 To dgv.RowCount - 1        '充值的金额等于DataGirdView所有的行中的列相加,这里的列即recharge_info中的第二列(rechargeAmount)(当天的哦)rechargeCash = rechargeCash + dgv.Rows(i).Cells(2).ValueNext iDim cancelCash As Decimaldt1 = daybill.queryCancelCash(Format(dtpDate.Value, "yyyy-MM-dd"))dgv.DataSource = dt1For i = 0 To dgv.RowCount - 1   '退还的金额等于DataGirdView所有的行中的列相加,这里的列即card_info中的第二列balance,也就是退还金额cancelCash = cancelCash + dgv.Rows(i).Cells(2).ValueNext iDim consumeCash As Decimaldt1 = daybill.queryConsumeCash(Format(dtpDate.Value, "yyyy-MM-dd"))dgv.DataSource = dt1For i = 0 To dgv.RowCount - 1     '消费的金额等于DataGridView中所有的行中的列相加,这里的列即line_info中的第六列consumeMoney,也就是消费金额consumeCash = consumeCash + dgv.Rows(i).Cells(6).ValueNext iDim allCash As DecimalallCash = rechargeCash - cancelCash    '总金额,等于充值金额减去退还金额Dim enCheck As New Entity.CheckDayinfo      '封装实体Dim enCheck1 As New Entity.CheckDayinfoenCheck1.rechargeCash = rechargeCashenCheck1.cancelCash = cancelCashenCheck1.consumeCash = consumeCashenCheck1.allCash = allCashenCheck1.Ddate = CStr(Format(dtpDate.Value, "yyyy-MM-dd"))enCheck = daybill.queryCheckDay(Format(dtpDate.Value, "yyyy-MM-dd "))  '如果enCheck中没有记录,我们就插入一条,否则更新If (enCheck Is Nothing) Thendaybill.inserDayBill(enCheck1)Elsedaybill.updateDayBill(enCheck1)End IfEnd SubPrivate Sub dtpDate_ValueChanged(sender As Object, e As EventArgs) Handles dtpDate.ValueChanged    '调用窗体加载事件Call frmDayBill_Load(sender, e)End SubEnd Class</span>

最后运行结果;

计算机出现之后,我们利用计算机处理数据和界面设计的功能来生成、展示报表。计算机上的报表的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,用户可以只修改数据,或者只修改格式。报表分类EXCEL、WORD等编辑软件:它们可以做出很复杂的报表格式,但是由于它们没有定义专门的报表结构来动态的加载报表数据,所有这类软件中的数据都是已经定义好的,静态的,不能动态变化的。它们没有办法实现报表软件的“数据动态化”特性。自此,日结的功能告一段落,机房收费系统未完,待续......

VB.NET版机房收费系统---报表相关推荐

  1. VB.net版机房收费系统——结账功能实现(调错与优化)

    调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...

  2. VB.net版机房收费系统——结账功能实现(代码部分)

    实现结账功能的时候,被选项卡控件整的有点郁闷,瞬间脑袋就凌乱了,听上去自己好像很可笑的样子--于是,便去爬巨人的肩膀了~ 看了欢哥的博客,发现她的结账博客是按照"索引"思想写的,在 ...

  3. VB.NET版机房收费系统---七仙女之系统登录

    VB.NET第一版机房收费系统,告一段落,验收的时候,问题也是大大的存在,没有用上设计模式,什么触发器,存储过程,都没有用上,看看其她小伙伴的,七层实现登录?那是什么东东,相比较我的三层而言,多了两倍 ...

  4. VB.NET版机房收费系统---组合查询

    查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...

  5. 合作版机房收费系统——报表

    在个人版的时候,我的报表弄的也挺顺利的没出现什么问题,但是合作时,我按照以前的步骤一步步地进行,竟然在不停的报错,真是让人崩溃啊.所以就不停的重新建,不停的改-删-建-删,如此循环往复.借着合作我把报 ...

  6. VB.NET版机房收费系统—DataGridView应用

    事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句, ...

  7. 可行性研究报告——【VB版机房收费系统】

    1引言 1.1编写目的 在电子信息高速发展的今天,计算机已经是大家生活中必不可少的工具了.人工管理信息的时代已经一去不复返.计算机管理收费系统早已成为了现实,它具有管理方便.检索迅速.查找快速.可靠性 ...

  8. VB版机房收费系统流程图--00

    前言:在完成学生信息管理的时候没有化流程图因为,学生有源码.但是机房收费系统几乎没有源码.有都是零零散散的,不是一个人写的所以不连贯.思路已不是很一致,功能一样但是人的思想是不一样的.所以实现方式上是 ...

  9. 机房收费系统——报表(2)

    二.代码部分 跟之前写的excel相比,我觉得报表还是有点相同的.大体思路是这样的: 先定义. (报表:Dim Withevents 对象变量 As 类名 这种用法是加载该类的事件,Withevent ...

最新文章

  1. SecureCRT安装
  2. use redis instance in docker hub
  3. 浙江午饭9月17~18日杭州聚会详细计划
  4. 关于苹果Mac上设置固件密码的方法?
  5. 几种视频压缩标准简介
  6. java程序用maven打包的命令
  7. 链表C语言和C++两种方式实现
  8. 程序员为什么要写博客
  9. 2022年6月青少年软件编程(图形化) 等级考试试卷(一级)
  10. Blender进阶Python编程3D开发-源码分析笔记系列-做出你自己的3D数据图表
  11. 每月一书(202104):《浪潮之巅》
  12. 故障效果,制作抖音效果的幻影海报
  13. 计算机屏幕暗度怎么调,电脑屏幕亮度太亮怎么调暗一点
  14. 创造力的分类:机器学习技术在发散思维EEG数据中的应用
  15. 几招就可轻松搞定证件照处理,还不快来码住!
  16. php实现撩妹,50个撩妹金句,充满套路又不失幽默
  17. 一款好的数据库监控工具:天兔数据库监控平台3.8搭建
  18. 腾讯微信面试题(难)
  19. 故障插入测试技术研究
  20. 潮流课设matlab编程,毕业设计- 配电网潮流计算方法分析与实现(附带matlab源程序)...

热门文章

  1. LOGO SEO 优化
  2. 华为鸿蒙手表价格,「华为」鸿蒙系统来了!华为手表、智慧屏等将一同亮相!...
  3. 异常:javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method sayHi
  4. 人参皂苷植物代谢物质靶向代谢检测
  5. Mysql 默认生成分布式主键UUID
  6. 音乐背景声提取 matlab,喜欢视频中的背景音乐,教你怎么提取里面的音频
  7. 怎样使用Lotus Domino实用程序(Updall, Compact, Fixup) 进行正常和异常维护。
  8. 数独游戏开发——游戏主面板显示
  9. 您的家里需要这样一套智能影院!
  10. 转一篇千与千寻的影评。。。{超适合我们看}