学生信息报表系统的实现.docx
《学生信息报表系统的实现.docx》由会员分享,可在线阅读,更多相关《学生信息报表系统的实现.docx(36页珍藏版)》请在冰豆网上搜索。
![学生信息报表系统的实现.docx](https://file1.bdocx.com/fileroot1/2022-11/16/1ad01e68-616f-4351-ab7e-0cbd599ba348/1ad01e68-616f-4351-ab7e-0cbd599ba3481.gif)
学生信息报表系统的实现
学生信息报表系统的实现
本章将基于一个比较简单的学生信息报表系统来介绍VS.NET中的水晶报表的使用方法。
报表也是一种管理工具,其目的在于帮助用户快速掌握原始数据中的基本元素和关系,以便于工作进行有效的决策。
VB.NET中的水晶报表(CrystalReports)是一个实现比较复杂但使用方法十分简单的报表生成工具,它提供了非常丰富的模型以使我们能够在运行时操作属性和方法,既可以嵌入到Windows应用程序中,也可以加入到ASP.NET的Web应用程序中。
3.1案例简介
本案例完成的功能很简单:
把数据库里的学生信息表和学院信息表中的数据用不同的水晶报表呈现出来。
本例共实现了5张报表,分别从不同的侧面体现了学生的信息和水晶报表的特点。
除了显示报表,用户还可以通过界面向学生信息表和学院信息表中插入记录。
通过刷新操作可以立刻将插入的记录显示在报表中。
本案例是一个Windows应用程序,在主框体中嵌入了一个水晶报表察看器(CrystalReportViewer),用于察看不同的报表。
另外,可以在界面上进行一些简单的对数据库的操作,通过水晶报表提供的刷新功能。
本案例实现的是主从报表,学生信息表和学院信息表通过学院编号字段关联起来。
图3-1是程序运行时的外观。
在实现时使用的是push模式,将数据库中的数据绑定到一个数据集上,用报表专家根据数据集提供的数据设置水晶报表(.rtp文件)的样式、字段、图表、公式的一系列属性,再将水晶报表察看器的数据源设成.rpt文件。
整个程序的编码十分简单,所以本章讲解的重点并不在代码的实现,而是在操作的流程上。
图3-1学生信息报表系统
3.2水晶报表简介
下面介绍一些水晶报表中将要用到的概念。
(1)水晶报表设计器
水晶报表就是在设计器中创建的,在设计器中用户可以进行设计标题,插入数据、公式、图表、子报表等操作。
(2).rpt报表文件
执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了一些现成的.rpt例子。
(3)数据源
.rpt报表文件取得数据的方法有两种:
让水晶报表自己选择数据而不使用任何代码,或者编写代码把一个DataSet作为数据源绑定到.rtp报表文件。
(4)执行模式
水晶报表取数据可以使用下面的方法实现。
Pull模式——被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据,如图3-2所示;Push模式——此时开发表不得不自己编写代码连接数据并安装DataSet,同时将它传送至报表。
在这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化,如图3-3所示。
图3-2pull模式
图3-3push模式
(5)报表类型
水晶报表设计器能够直接包含报表至工程,也能够使用独立的报表对象。
(6)Strongly-typed报表
当将报表文件加入到项目中去时,它就变成一个Strongly-typed报表。
在这种情况下,用户将拥有直接创建报表对象的权力,这将减少一些代码并且能够提升一些性能。
(7)Un-Typed报表
报表并不直接包含在项目中,称为un-typed报表。
在这种情况下,用户要使用水晶报表的ReportDocuemt对象建立一个实例,并且手动调用报表。
为了让用户对水晶报表有一个感性的认识,下面的图3-4和图3-5展示了两张水晶报表图片。
例1中使用的数据是SQLSever中自带的,图中显示的是一个主从报表,是数据库中的两个表通过一个字段关联起来,在一个报表中显示两张数据库表中的相关数据。
图3-4水晶报表例1
例2中使用的报表是微软的.NET平台自带的.rpt文件,通过在工程中添加这个文件并绑定到CrystalReportViewer控件上就可以显示了。
图3-5水晶报表例2
水晶报表的优点在于:
它能够进行快速的报表开发;能够导出成为复杂的交互性图表;可以与其他控件一起在WebForm、WinForm中使用;能够动态地将报表导出成为.pdf,doc,xls,html,rtf等多种格式;自带了刷新、翻页、放大缩小、查找和定位功能。
3.3应用程序概述
本应用程序分为两个模块,分别为显示水晶报表模块和数据库录入模块。
显示水晶报表模块由两大控件组成:
一个crystalReportViewer和一个comboBox。
crystalReportViewer用于显示水晶报表的内容,包括图和表,它具有一些自带的功能:
翻页、挑转向某一页、关闭当前视图、打印报表、切换组树、放大缩小和查找功能。
是现代战争功能十分强大的控件。
其中的导出报表功能可以将报表导出为.xls、.doc以及.rtf等格式。
在comboBox中选择需要显示的报表种类,就会在crystalReportViewer看到相应的报表。
在本案例的实现中使用了5张水晶报表,分别从不同的侧面反映学生信息。
数据库录入模块又分为两个部分:
学院信息录入和学生信息录入。
学院信息包括学院编号、学院名称、院长姓名和对学院的描述:
学生信息包括学号、姓名、年龄。
所在学院编号。
除了对学院的描述信息以外其他的信息在录入数据库时不能为空。
否则系统会报错。
编写本案例的目的在于教会用户怎样使用水晶报表,体会水晶报表的强大功能。
在下面的方案设计中将结合本案例讲解水晶报表的一些使用方法。
3.4方案设计
本系统运行在Windows2000或者WindowsXP之上,整个程序由前台的界面部分和后台的数据库部分组成,显示报表时程序从数据库中取出数据,反映在报表中,同时用户可以从界面对数据库进行插入记录的操作。
从而实现了一个交互的过程。
前台的界面部分在.NET平台上用C#语言实现,后台连接的数据库是为SQLServer2000。
3.4.1应用程序的结构
前台的整个程序由一个.xsd文件、7个.cs文件和5个.rpt文件组成。
其中的.xsd文件是C#中的ADO.NET数据集文件,数据集用于在断开缓存数据,它的结构类似于关系数据库的结构;它公开表、行和列的分层对象模型。
另外,它包含为数据集定义的约束和关系。
数据集是容器,因此需要用数据填充它。
在下面的实现部分会讲解数据集的填充方法。
AssemblyInfo.cs文件在创建解决方案时由系统自动生成,包含了一些与程序编译运行有关的属性集,Student.cs文件中定义了程序的主窗体类,程序的代码都添加在这个文件中。
其他5个.cs文件都是程序为各个水晶报表自动生成的,不需要用户进行修改。
剩下的5个.rpt文件,它们分别是学生基本信息表、学院基本信息表、学生人数对比1、学生平均年龄对比和学生人数对比2。
每一个文件对应了程序中的一张报表,通过使用报表设计器和报表专家来对这些报表的内容和形式进行编辑,最后,为了达到用户的要求还要手工对报表作一些调整。
3.4.2数据库设计
根据本系统的功能要求以及功能模块的划分,数据需要存储的信息如下:
●所有学生的基本信息:
学号、姓名、年龄、所在学院编号等。
●所有学院的基本信息:
学院编号、学院名称、院长姓名和对学院的描述信息等。
由于本程序中对数据库的操作较为简单,所以没有加入存储过程。
下面分别介绍数据库表的设计方案。
1.Students表
Students表用于记录学生的一些基本信息:
学号、姓名、年龄、所在学院编号,另外还包括一个Stu_ID字段,它的值由数据库以递增的方式自动生成。
对学生信息的要求是不能在此表中出现Department表中没有出现的学院的学生。
对这一条件的控制将在程序代码中进行。
这个表中所有的字段都不允许为空。
表的各个字段的详细说明如图3-6所示。
图3-6Students表
创建该表的脚本语言如下:
CREATETABLE[Students](
[Stu_ID][int]IDENTITY(1,1)NOTNULL,
[Stu_Number][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[Stu_Name][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[Stu_Age][int]NOTNULL,
[Dep_Number][int]NOTNULL,
CONSTRAINT[PK_Students]PRIMARYKEYCLUSTERED
(
[Stu_Number]
)ON[PRIMARY]
)ON[PRIMARY]
GO
2.Department表
Department表用于记录学院的基本信息学院编号、学院名称、院长姓名和对学院的描述信息。
同时也包括一个Dep_ID字段,它的值由数据库以递增的方式自动生成。
本表中除了学院的描述信息外,其他字段都是不能为空的。
表的各个字段详细说明如图3-7所示。
图3-7Department表
创建该表的脚本语言如下:
CREATETABLE[Department](
[Dep_ID][int]IDENTITY(1,1)NOTNULL,
[Dep_Number][int]NOTNULL,
[Dep_Name][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[Dep_Head][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[Dep_Des][nvarchar](200)COLLATEChinese_PRC_CI_ASNULL,
CONSTRAINT[PK_Department]PRIMARYKEYCLUSTERED
(
[Dep_Number]
)ON[PRIMARY]
)ON[PRIMARY]
GO
这两个表通过Dep_Number字段相关联。
在下面的程序实现中将会通过这个字段对这两个表进行联表操作。
3.5方案实现
本节将详细地介绍.NET平台下C#语言中的水晶报表的使用方法。
本案例实现的执行模式是push模式,这种模式需要自己编写代码连接数据并组装DataSet,同时将它传送至报表。
下面将按照程序实现的步骤一步一步地详细讲解具体的操作和程序代码,最后展示程序运行的结果。
3.5.1添加数据集文件
首先,在新建的一个Windows应用程序中添加一个数据集文件,如图3-8所示。
命名为Dataset1.xsd。
ADO.NET数据集是以XML形式表示的数据视图,它是一种数据关系视图。
在VisualStudio和.NET框架中,XML是用于存储和传输各种数据时所用的格式。
数据集在断开的缓存中存储数据。
数据集的结构类似于关系数据库的结构,它公开表、行和列的分层对象模型。
图3-8添加数据集
单击“打开”按钮后进入的页面如图3-9所示。
图3-9Dataset1.xsd
单击界面上的“服务器资源管理器”链接,编辑器的左边将会出现服务器资源管理界面,在服务器资源管理中,右击“数据连接”并在弹出的菜单中选择“添加连接”命令,弹出“数据链接属性”对话框。
在“数据链接属性”对话框中,选择提供程序项卡,选择一个提供程序CicrosoftOLEDBProviderforSQLServer。
选择“连接”选项卡,然后指定数据库所在位置。
在所需位置输入服务器和登录信息。
单击“确定”按钮,此时Students数据库及其表和字段就了现在服务器资源管理器的“数据连接”节点下面。
将需要的Students表和Department表从服务器