第一篇:VB实现窗口最小化小任务栏
要实现窗口最小化必须满足以下条件:
1:按下最小化按钮,窗体不可见
2:最小化后,最小化窗体的图标必须出现在任务栏的通知区域中
3:当双击通知区域中的图标时,窗体又显示出来,同时通知区域中的图标消失.要满足上面的条件:
1:首先屏蔽窗体中系统自带的最小化图标,即Form.MinButton=False
2:声明1个API函数:
Public Declare Function Shell_NotifyIcon Lib “shell32.dll” Alias “ Shell_NotifyIconA”(ByVal dwMessage As Long, lpData As NOTIFYICONDATA)As Long
注意:上面这个API函数在XP中没有别名,将别名去掉后为:
Public Declare Function Shell_NotifyIcon Lib “shell32.dll”(ByVal dwMessage As Long, lpData As NOTIFYICONDATA)As Long
3:声明7个常数:
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
4:定义1个NOTIFYICONDATA类型
Public Type NOTIFYICONDATA
cbSize as Long
hWnd as Long
uId as Long
uFlags as Long
uCallBackMessage as Long
hIcon as Long
szTip as String
End Type
5:声明一个nid的类型
Public nid as NOTIFYICONDATA
思路清晰后,开始编写代码
1:在窗体中画1个Command,它的Caption属性为:“最小化”
2:将窗体Form的MinButton的属性设为:“False”
3:在窗体中添加1个模块,模块中的代码为:
Public Declare Function Shell_NotifyIcon Lib “shell32.dll”(ByVal dwMessage As Long, lpData As NOTIFYICONDATA)As Long
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
Public Type NOTIFYICONDATA
cbSize as Long
hWnd as Long
uId as Long
uFlags as Long
uCallBackMessage as Long
hIcon as Long
szTip as String
End Type
Public nid as NOTIFYICONDATA
4:编写Command的单击事件:
Private Sub Command1_Click()
nid.cbSize = Len(nid)
nid.uId = vbNull
nid.hWnd = Me.hWnd
nid.uFlags = NIF_TIP Or NIF_MESSAGE Or NIF_ICON
nid.uCallBackMessage = WM_MOUSEMOVE
nid.hIcon = Me.Icon
nid.szTip = “窗体最小化”
Shell_NotifyIcon NIM_ADD, nid
Me.Hide
End Sub
5:编写窗体的MouseMove事件:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim msg As Long
msg = X / 15
If msg = WM_LBUTTONDBLCLK Then
Me.Show
Shell_NotifyIcon NIM_DELETE, nid
End If
End Sub
按F5启动,单击Command,看看通知区域中是不是多了个窗体的图标?双击该图标,窗体又显示出来了!
第二篇:关闭win7任务栏小窗口和提示
Win7开了一些窗口时,在任务栏上就会有小窗口,而将鼠标放在上面的时候,与 Xp不同的是,会出现小的提示窗口,而且会是很多个,形成了一排,如果想要关闭,怎么办呢?
1.首先
如果想要将任务栏提示的窗口变成文字,只要在计算机-属性-高级系统设置-高级-性能-设置;里面有个启用桌面组合,去掉勾就可以了。
2.这样的化,鼠标放在任务栏上就会只有文字提示,但如果这个也不要的话,就修改注册表; 运行-Regedit.exe
HKEY_CURRENT_USER Control Panel Mouse
右边MouseHoverTime修改时间,加上5个0,这样的话就达到了目的!
第三篇:隐藏任务栏开始菜单关闭桌面窗口
CWnd* pWnd = CWnd::FindWindow(_T(“Shell_TrayWnd”), NULL);//获得任务栏窗口 pWnd->SendMessage(WM_HOTKEY, 0x1F5);//所有窗口最小化 ::ShowWindow(::FindWindow(“Shell_TrayWnd”,NULL), SW_HIDE);TCHAR caption[200];HWND parent=::FindWindow(“Shell_TrayWnd”,NULL);::GetWindowText(::GetWindow(parent,1), caption, 200);::ShowWindow(::GetWindow(parent, 1),SW_HIDE);::GetWindowText(::GetWindow(parent,3), caption, 200);::ShowWindow(::GetWindow(parent, 3),SW_HIDE);::GetWindowText(::GetWindow(parent,6), caption, 200);::ShowWindow(::GetWindow(parent, 6),SW_HIDE);
第四篇:ATM系统实现报告(VB)
面向对象方法设计与实现报告
—ATM机系统
软件0802班
高晓亮
200807040203
一、概要
根据ATM的需求分析,该系统设计为2个子系统:用户系统、银行工作人员系统。其中用户系统主要使用户在ATM上完成一些基本操作,例如:存款、取款、转账、查询余额、修改账户密码等银行工作人员系统主要用来管理用户账户、ATM机、事务。其具体功能和界面及代码将在下文叙述。
说明:该系统主要代码是用vb编写,数据库使用的是单机数据库access。
二、用户系统
A:主要界面介绍: 一)、待机界面:
1、功能:系统欢迎界面,点击模拟按钮开始模拟ATM机工作。
2、说明:由于没有找到合适的广告图片,所以待机默认先用蓝色背景代替。
3、界面文字动画代码如下:If Label5(0).Left > Me.ScaleWidth Then
Label5(0).Left = Me.Left100 End If
Label5(1).Move Label5(1).Left + 120
4、界面截图如下:
二)、登陆界面:
1、功能:a、密码框设置只能输入6位
B、密码输入3次错误,将冻结该账户
C、银行卡号不存在、冻结或密码错误,均不能进入系统
2、说明:因为各银行卡号位数不太一样,银行卡号位数并未设置。
3、登陆确认按钮代码如下: Private Sub Command27_Click()If Not Text7.Text = “" And Not Text8.Text = ”“ Then Dim sql As String sql = ”select * from 账户 where 银行卡号='“ & Trim(Text7.Text)& ”'“
Adodc1.RecordSource = sql
Adodc1.Refresh
If Adodc1.Recordset(”状态“)= ”冻结“ Then '判断该账户状态
MsgBox ”该账户已冻结!“
Text7.Text = ”“
Text8.Text = ”“
Else
sql = ”select * from 账户 where 银行卡号='“ & Trim(Text7.Text)& ”' and 密码=“ & Trim(Text8.Text)& ”“
Adodc1.RecordSource = sql
Adodc1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox ”密码错误!“, 48, ”错误提示“
Text8.Text = ”“
count1 = count1 + 1
If count1 >= 3 Then '三次输入错误冻结该账户
Adodc1.Refresh
sql = ”select * from 账户 where 银行卡号='“ & Trim(Text7.Text)& ”'“
Adodc1.RecordSource = sql
Adodc1.Refresh
Adodc1.Recordset(”状态“)= ”冻结“
Adodc1.Recordset.Update
MsgBox(”三次输入错误,该账户已被冻结“)
End If
Else
Label10.Visible = False
Label11.Visible = False
Text7.Visible = False
Text8.Visible = False
Command27.Visible = False Command28.Visible = False Command14.Visible = True Command15.Visible = True Command16.Visible = True Command17.Visible = True Command18.Visible = True Command19.Visible = True Command24.Visible = True Ynum = Text7.Text Adodc2.Refresh ’添加事务 Adodc2.Recordset.AddNew
Adodc2.Recordset(”银行卡号“)= Ynum
Adodc2.Recordset(”事务类型“)= ”用户登录“
Adodc2.Recordset(”时间“)= Now()
Adodc2.Recordset(”事务描述“)= ”用户完成登陆“
Adodc2.Recordset.Update
Adodc2.Refresh Text7.Text = ”“ Text8.Text = ”“ End If End If Else MsgBox(”信息不全!请确认“)End If End Sub
4、界面截图如下:
三)、系统主界面
1、功能:ATM的主要功能陈列,供用户选择,其中包括存款、取款、转账、查询余额、修改密码、取卡、返回。当账户登录时,将在事务表中记录登录时间。
2、说明:由于所有按钮均只是用来调出对应的功能的界面,并没有实际功能,所以在此省略其按钮代码。
3、界面截图如下:
四)、存款界面
1、功能:a、只允许用户输入100的整数值
b、当文本框为空时报错
c、实现用户的存款功能
d、每存入一笔款,都将在事务表中记录该操作
2、存款代码如下:If Not Text12.Text = ”“ Then If Val(Text12.Text)Mod 100 = 0 Then Adodc1.Refresh Adodc1.Recordset(”余额“)= Adodc1.Recordset(”余额“)+ Val(Text12.Text)Adodc1.Recordset.Update Adodc1.Refresh Label15.Caption = ”存款成功“ ye = ye + Text12.Text Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”银行卡号“)= Ynum
Adodc2.Recordset(”事务类型“)= ”存款“
Adodc2.Recordset(”时间“)= Now()
Adodc2.Recordset(”事务描述“)= ”用户存入“ & Text12.Text & ”元“
Adodc2.Recordset.Update
Adodc2.Refresh Text12.Text = ”“ Command33.Enabled = True Command32.Enabled = False Else MsgBox ”请输入100的整数“ End If Else Label15.Caption = ”无款可存“ End If End Sub
3、界面截图如下:
四)、取款界面
1、功能:a、用户按相对应数值的按钮进行取款
b、每个账户每天取款数不能超过2500
c、账户余额不足时,报错
d、用户每取走一笔款额,都将在事务表中记录取走金额和时间
2、说明:由于不同数值按钮的代码很相似,所以这里仅给出100按钮的代码
3、存款代码如下:Private Sub Command20_Click()Adodc1.Refresh If Adodc1.Recordset(”余额“)>= 100 Then Adodc1.Refresh Adodc1.Recordset(”余额“)= Adodc1.Recordset(”余额“)100 Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”银行卡号“)= Ynum
Adodc2.Recordset(”事务类型“)= ”取款“
Adodc2.Recordset(”时间“)= Now()
Adodc2.Recordset(”事务描述“)= ”用户取走100元“
Adodc2.Recordset.Update
Adodc2.Refresh Else Label15.Caption = ”余额不足,取款失败“ End If End Sub
4、取款界面截图如下:
五)、查询余额界面
1、功能:实现用户查询对应账户的余额
2、查询余额代码如下:Private Sub Command17_Click()Command14.Visible = False Command15.Visible = False Command16.Visible = False Command17.Visible = False Command18.Visible = False Command19.Visible = False Label6.Visible = False Label7.Visible = False sql = ”select 余额 from 账户
where 银行卡号= '“ & Ynum & ”'“ Adodc1.RecordSource = sql Adodc1.Refresh Label8.Caption = Adodc1.Recordset.Fields(”余额“)Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”银行卡号“)= Ynum
Adodc2.Recordset(”事务类型“)= ”查询余额“
Adodc2.Recordset(”时间“)= Now()
Adodc2.Recordset(”事务描述“)= ”查询余额“
Adodc2.Recordset.Update
Adodc2.Refresh Label9.Visible = True Label8.Visible = True End Sub
3、查询余额界面截图如下:
六)、转账界面
1、功能:a、实现用户转账
b、需2次确认账户信息,若信息输入不全,账户余额不足,2次输入不一样,均不可完成转账
c、用户每转一笔账,均将在事务表中记录转账金额和时间
2、转账代码如下:Private Sub Command30_Click()If Not Text11.Text = ”“ And Not Text10.Text = ”“ And Not Text9.Text = ”“ Then If Text10.Text = Text9.Text Then Adodc1.Refresh If Adodc1.Recordset(”余额“)>= Val(Text11.Text)Then Adodc1.Refresh Adodc1.Recordset(”余额“)= Adodc1.Recordset(”余额“)Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2-Me.picLOAD.Height Me.picLOAD.Visible = True 'DoEvents '释放控制权
Me.ListView1.ListItems.Clear Dim addLIST As ListItem Dim ss As String Dim sql As String ss = App.Path + ”datadata.mdb“ Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=gxl;Persist Security Info=False;Data Source=“ & ss Adodc1.CommandType = adCmdText sql = ”select * from ATM“ Adodc1.RecordSource = sql Adodc1.Refresh '连接数据库
Do While Not Adodc1.Recordset.EOF Set addLIST = ListView1.ListItems.Add(, , Adodc1.Recordset!ATM机编号, , i)addLIST.SubItems(1)= IIf(IsNull(Adodc1.Recordset.Fields(”状态“).Value), Adodc1.Recordset.Fields(”状态“).Value)addLIST.SubItems(2)= IIf(IsNull(Adodc1.Recordset.Fields(”余额“).Value), Adodc1.Recordset.Fields(”余额“).Value)Adodc1.Recordset.MoveNext Loop Me.picLOAD.Visible = False End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.Index
Case Is = 2 '
ZhZCfrm.Show 1
Case Is = 3
' ZHZXfrm.Show 1
Case Is = 4
Call addLIST End Select End Sub
3、界面截图:
”“, ”“,六)、单位信息界面
1、功能:显示单位信息
2、代码: Private Sub cmdBC_Click()'修改银行信息 Dim s As String If Not Text1(0).Text = ”“ And Not Text1(1).Text = ”“ And Not Text1(2).Text = ”“ And Not Text1(3).Text = ”“ And Not Text1(4).Text = ”“ Then
s = ”update 银行信息 set 银行名称='“ & Text1(0).Text & ”',银行地址='“ & Text1(1).Text & ”',邮政编号='“ & Text1(2).Text & ”',负责人='“ & Text1(3).Text & ”', 联系电话='“ & Text1(4).Text & ”'“
Adodc1.RecordSource = s
MsgBox(”修改成功“)
Adodc1.Recordset.Update
Else
MsgBox ”修改信息不全,请检查!“
End If End Sub
Private Sub Form_Load()Dim ss As String Dim sql As String ss = App.Path + ”datadata.mdb“ Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=gxl;Persist Security Info=False;Data Source=“ & ss Adodc1.CommandType = adCmdText sql = ”select * from 银行信息“ Adodc1.RecordSource = sql Adodc1.Refresh '连接数据库 End Sub
3、界面截图:
七)、下面给出数据备份还原的代码 Private Sub a14_Click()On Error GoTo ERR_line newname = App.Path & ”datadata.mdb“ datapath = App.Path & ”backup“ & Date & ” 备份卡.bak“ FileCopy newname, datapath MsgBox ”数据已备份到
“ & datapath, 64, ”提示“ Exit Sub ERR_line: MsgBox ”不能完成数据备份!“, 48, ”运行错误“ End Sub
Private Sub a15_Click()On Error GoTo ERR_line
Me.CommonDialog1.ShowOpen
snewname = Me.CommonDialog1.FileName
sdatapath = App.Path & ”datadata.mdb“
If snewname <> ”“ Then
If MsgBox(”还原后将覆盖原有数据,确定还原吗?“, vbInformation + vbYesNo, ”提示“)= vbYes Then
FileCopy snewname, sdatapath
MsgBox ”数据已经成功还原!请重新登陆 “, 48, ”提示“
Unload Me
Formload.Show
Else
Exit Sub End If
End If Exit Sub
ERR_line: MsgBox ”不能完成数据还原,请进入系统后未做任何操作时进行!“, 48, ”运行错误" End Sub
四、数据库
本系统使用的是access数据库。数据库密码为gxl。本系统共有5张表,分别为:ATM,事务,系统用户表,银行信息,账户。
下面给出数据库的相关截图。
1、表图:
2、ATM的设计视图
3、事务的设计视图
4、系统用户表的设计视图
5、银行信息的设计视图
6、账户的设计视图
第五篇:基于VB实现复杂报表设计
陕西理工学院毕业设计
基于VB实现复杂报表设计
(陕西理工学院 物理系 电子信息科学与技术07级2班,陕西 汉中 723000)
[摘要] 本文介绍了报表设计的几种方法和以往报表设计所存在的问题,并以实例介绍自动生成复杂报表的方法。实例基于VB软件开发,并以word为模板,通过调用access数据库数据自动生成复杂报表。
[关键词]VB;数据库;Word;复杂报表
The Design Of Complex Reports Based VB
(Grade 2007,Class2, Major electronical information and technology,Physics Dept, Shaanxi University of Technology,Hanzhong 723000,Shaanxi)
[Abstract] This paper reports detailed description of several common methods, previous reports of the existence of the problem, and makes use of example to achieve a complex reporting by using of software.The example based on VB software and used word template, to achieve the common complex reporting software through reallocating database.[Key words] VB;Database;Word;Complex Statements
陕西理工学院毕业设计
1引言
报表是人们在日常生活中对某类相关信息进行集中处理的重要手段,是企业信息化不可缺少的部分。报表在各行各业中应用广泛,是信息浏览、分析和打印的有力工具。传统报表系统均以国外简单报表模型为基础设计,不能适应复杂报表的开发。特别是在处理复杂数据源报表时,常常需要编写代码准备数据或进行子报表拼接才能实现。1.1传统报表系统存在的问题
目前,国内外的报表系统种类繁多,功能界面各具特色,对这些报表系统的比较研究,有助于我们设计出更好的报表系统。国外的报表系统的技术都比较成熟,适合制作样式简单的报表,但一般都为高端产品,价格不菲,并且在处理具有强烈中国特色的报表时,国外产品不仅报表处理能力相当不适应,甚至某些技术也略显落后,例如部分产品不能稳定地在UNIX上部署,只能支持IE浏览器,统计图输出仍采用原始的CGl方式等。国内的传统报表系统更适合制作复杂的中国式报表,在报表设计和价格等方面国内报表系统也具有一些优势,但国内的报表系统在服务质量和产品本身的品质等方面还存在着一些不足和缺陷,有待进一步的改进和完善。无论是国外的高端报表系统,还是国内的传统报表系统,每一种报表系统都有各自的优点和缺点,都有各自擅长的领域,在实际工作中应该根据需要选择合适的报表系统。面对日益复杂的报表开发需求,尤其是复杂的中国式报表,这些报表系统或多或少都有些力不从心,其主要问题表现在以下三个方面:
(1)复杂数据源的处理能力不足。报表需要从复杂的数据源或者多个不同类型的数据源中获得数据,获得的数据还可能需要统计,格式转换或其他处理,这些需求都是传统报表系统难于实现的。
(2)报表的可维护性差。传统的报表系统生成报表的种类固定,使用方便,但很多软件系统无论在实施还是在维护阶段,报表都会进行频繁的新增和修改,而传统的报表系统缺乏无编码定制能力,系统扩展网难。一旦用户对报表样式的需求发生改变,就会给软件维护带来许多不必要的麻烦。
(3)报表保存格式的通用性较差。报表保存格式不统一,保存格式理解困难,各种报表工具各自为政,报表模板无法兼容,行业也没有形成统一的标准,一旦用户选定了某一报表工具就意味着要一直使用。如果不幸选择失误,已经做的工作都要重新再来。
总之,利用传统的报表系统制作报表维护量相当大,一个需求对应一个报表文件,不同
陕西理工学院毕业设计 的组合要求制作大量的报表文件,使得开发过程变得极为繁琐,难以实现用户的需求。在设计复杂数据源的报表时,或者需要人工转换数据格式,或者要编写大量代码将多个数据源运算成为一个数据源再使用,或者使用拼接子报表的方式来实现,但都没有从根本上解决问题,严重影响报表的设计和使用效率。因此如何快速制作符合多层结构特点的复杂数据源报表,减轻开发工作量,已经成为报表系统开发的重要问题。
在计算机出现之前,数据需要以纸制文件等形式保存,数据处理是手工进行的,报表的编制也是手工实现的。随着计算机的广泛应用,人们开始使用计算机及计算机软件实现数据处理,使用数据库管理系统来管理数据,使用应用程序来完成具体的业务操作,报表的编制也开始使用软件来实现。完成报表编制工作的软件程序称为报表系统或者报表工具。报表系统的产生改变了报表编制的流程、方法以及编制手段。
报表是信息管理系统中各种数据信息的最终输出结果,是其重要的组成部分。在信息管理系统的开发过程中,软件设计人员常常需要设计大量的报表,其中相当一部分报表的结构比较类似,需要软件设计人员逐一定义每一个报表的报表对象、数据模型、显示格式等属性,同时还可能对数据存储、导入和导出等操作带来诸多不便,这些繁琐的重复性工作常常花费软件设计人员、操作人员、维护人员大量的精力和时间,影响系统的开发、使用效率。同时,报表还是信息管理系统中变化性很强的部分。应用系统交付用户后,随着时间的推移,用户可能需要新的报表,报表的格式、报表的数据要求都有可能发生变化,用户的各种各样的报表要求,仅依靠应用系统预先提供的报表是很难实现的。
从报表系统的发展历史来看,在应用系统进入数据共享的时候,比较专业的报表系统或控件就出现了,并且一直沿用至今。这些工具的理论模型和需求都出自于国外的需求,这种模型和需求比较符合国外用户的使用习惯,比较适合设计制作样式非常规整,没有表格线,没有斜线表头和分层分组的简单报表。然而中国人的报表习惯与国外用户存在很大差别,中国的报表也比国外的报表复杂许多。报表是由“报’’和“表"两部分组成,“报”指数据的汇总统计,即将数据从数据库中取出按一定规则运算统计后排列。“表”则指格式,数据需要放在单元格中,才能清楚定位,体现数据之间的层次与对应关系。目前市场上的报表系统大致分为两类,一类基本上能把数据库的数据取出来运算排列制作出动态的报表。但其格式设计功能不好,一般是采用控件拖放的方式编辑报表,靠一个个矩形边线重合对齐绘制表格,一条直线要拼接多条线段,而且还和分辨率相关,打印出来不整齐。还有一类仿制Excel的产品,合并单元格、添加边框非常方便,可以快捷地设计出一个复杂格式的报表。但它们的缺点是数据处理能力太弱,除了简单的格内运算外,与数据库打交道的过滤、分组等统计运算都需要编程实现。
中国报表最困难的地方是数据统计。中国报表具有的多数据源、整表规则分片、不完全划分、跨行组运算及独立格间运算、行列对称等特征,是传统报表系统无法满足的,常常导致要求编写代码准备数据或拼接子报表才能完成一个复杂报表的制作。表样格式复杂也是中国报表比较麻烦的地方,中国报表均要求有整齐的表格线,多层表头层次分明。业内有名的报表系统一般采用控件式拖拽的绘制方案,制作表格非常烦琐,且还与分辨率相关,屏幕与打印不一致,而中国报表对打印样式要求向来很高。中国报表还会有填写的需求,前端需要支持各种填写控制,如编辑风格、自动计算、合法性校验等;填写好的数据能够方便地写入数据库以进行下一步的统计汇总。而很多报表软件不支持填写能力,一般的填报解决方案都不能自动处理数据入库的问题,导致相应的编程工作量仍然很大。1.2国内外研究现状
大部分通用软件领域,国外产品都要相对优秀。早期的报表系统软件是由国外的公司和研究机构设计实现的,适合制作样式非常规整,没有格线,表头简单的国外报表。国外的报表系统都具有各自的原创技术,又经过了多年的发展和完善,其技术相对都比较成熟,但是国外的报表系统在报表样式绘制方面的能力比较弱,在价格上一般都比较昂贵,所以经常被称作高端产品。例如挪威QuSoR公司专门为Delphi编写的QuickRepon报表组件,使用
陕西理工学院毕业设计 QuickReport可以迅速设计出符合西方人习惯的报表,从功能和设计上来说,不失为一个较好的报表设计工具,但对于报表设计的灵活性,及在程序编译完毕后用户对报表的可修改性等方面还远远不能满足用户的需要。
国外典型报表系统中,著名的有Excel,Cwstal Report,Fo彻ula One等,随着.NET技术的不断发展,近年来国外已经出现了一些基于.NET环境的报表系统,例如MicrosoR的Reporting Services技术,Ⅵsual Studio 2005集成的报表解决方案,C搿stal Reports f1叫Visual Studio.NET,Developer Express公司开发的X仃aReports报表组件和ComponentOne公司开发的C 1 Reports报表组件等等。其中MicrosoR的Reportillg Services技术是基于服务器的报表解决方案,可以用来创建和管理包含关系数据源和多维数据源中的数据的表格、矩阵、图形和自由格式的报表,并可通过网络连接来查看和管理报表。Reporting Services在报表的制作、分发和报表数据的安全性等方面都有很好的表现,功能比较全面,但是需要微软众多企业级解决方案的支持,并且价格相当昂贵。
国内的报表系统主要是使用Java和Visual C++设计实现的传统报表系统,传统报表系统是指一些主要以条带式设计为基础的开源软件以及国内的一些仿制产品。这些报表系统的数学模型都是基于SQL/OLAP理论设计的,虽然不断地进行改进,但根本处理方案并没有本质的变化,远远不能满足国内复杂报表的制作需求。近年来不断推出的新版本以及新报表系统都只是在技术上改进,如从C/S移植到B/S、支持JaVa等,而理论模型仍是原来的传统方式,所以仍然算是传统报表系统。传统报表系统最显著的特征是主编辑画面呈条带状,以模拟SQL中的seIect和Group运算;大部分报表系统采用繁琐的拖拽式编辑(有个别报表系统开始采用方便的表格式);交叉表要采用专门的类OLAP模型处理,样式和运算都比较死板。
国内比较有名的报表系统基本上都是Java报表系统,主要有用友华表(Cell)和润乾报表等。润乾报表是一个功能非常强大的纯Java报表产品,各方面都很出色,其新一代报表模型采用了革命性的多源分片、不规则分组、动态格间运算、行列对称等技术,能设计实现很多原来传统报表系统中很复杂,甚至很难实现的报表。但是由于润乾报表设计方式完全依赖手写表达式,对于没有编程基础的普通用户来说,学习使用润乾报表的难度较大。1.3常见的典型报表工具及其介绍
目前常见的典型报表工具中,著名的有Excel,UniversalForms,Oracle9i Reports,Formula One等,国内也推出了许多报表工具。对现有报表工具的比较研究,有助于我们设计出更好的报表工具。1.3.1 Excel Excel是历史悠久的电子表格程序之一,功能强大。许多后来出现的Windows报表系统均受其影响,甚至在功能和界面上加以模仿。Excel具有如下特点:
(1)可视化界面:Excel提供工作簿和工作表,一个工作簿包括若干张工作表,一张工作表即是一张报表。每张工作表由若干单元格组成,每个单元格可以单独操纵:设计单元格的数据格式,定义数据公式等。对报表作出修改后,可以立即看到修改效果;
(2)丰富的格式支持:Excel报表中可以包括文字,数字,图形等多种内容;提供文字的字体大小、颜色,数字的显示格式等格式控制;
(3)丰富的数据处理功能:提供多种数据处理函数:数据库函数、日期与时间函数、工程函数、财务函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数;
(4)支持多种数据源,可访问的数据库包括: Microsoft SQL Server OLAP Services、Microsoft Access 2000、dBASE、Microsoft FoxPro、Microsofl Excel、Oracle、Paradox、陕西理工学院毕业设计 SQL Server以及文本文件数据库,此外,还可以使用ODBC驱动程序或数据源驱动程序以获取其他类型数据库中的信息。
(5)WEB发布支持
Excel支持将报表放置到Web页上,用户不需要在计算机上安装Excel就可以访问报表。(6)支持交互式报表
如果希望用户可以与报表中的数据进行交互,则可以将数据设置为交互式。在交互式报表中,用户可以进行以下操作:筛选,输入新值以进行计算或汇总和分析数据。
(7)提供编程环境
EXcel提供了Visual Basic for Applications(VBA)和Ⅵsual Basic编程环境,同时支持OLE。用户可以使用VBA编写自定义函数,实现对已有数据处理函数库 的扩充,满足实际需要,但有时编程相对比较复杂。1.3.2 Crystal Report Crystal Report是Crystal Decisions公司推出的比较著名的报表系统,使用Crystal Report是一种大型报表系统常用和推荐的解决方案。它能够实现对数据的检索、分组、分析,并把分析结果以表格的方式展现给用户,为用户解决现实中各种各样的商业问题。与其他的报表创建和分析软件相比,Crystal Report软件具有稳定性、可伸缩性以及应用平台广泛等优点。Crystal Report不仅有功能强大的Java版的Crystal Report报表引擎,而且也有直接集成到了Visual Studio开发环境当中来使用的Crystal Report for visual Studio.NET,开发人员可以从任何项目访问报表编辑器,完成显示、统计、分组和插入图表等多种操作,它也允许和各种主要的Java集成开发环境集成在一起。Crystal Report主要具备以下一些功能:
(1)形式多样的内容创建:允许用户添加图表、下拉式菜单、警示、参数提示以及超链接,并将报表转化为引入注目的交互式文件或Web内容,使用标志、图画、形状和色彩来定制报表。而且内置了广泛的公式,使得开发人员可以对于报表格式、综合业务逻辑和数据进行全面的控制;
(2)支持多数据源:可以直接编辑SQL,以便不受限制地控制数据库连接。数据源包括XML,OLAP或其它相关的内容。通过在Microsoft Excel和Access中的Crystal Reports Add-in功能,用户可以利用现有的Microsoft数据创建报表;
(3)提供分析工具:Crystal Report提供趋势判断、促进入际关系和保留重要论据的工具。另外附属报表、公式、总计运算,以及可自定义的交叉标签提供了更进一步的分析能力;
(4)支持Web应用:利用Web的权限设置功能,Crystal Report让所有在不同平台和地点的用户都可以访问报表。Crystal Report与Report Streaming技术相结合,以最优化处理报表在线需求(即时)和Web报表排序次序的效能。
Crystal Report帮助开发者做出了大量的报表,它的功能也在不断地加强。但是,开发人员也经历了很多时刻,不仅仅是费劲地去画格子,摆位置,更发现很多报表,需要先做一个复杂的视图,甚至写程序准备数据;发现许多报表运行起来的效率会很低;发现有些报表很难做出来。另外,Crystal Report for Visual Studio.NET未注册版本功能可用。在此之后的Save Option将不能使用。为了使用全部的功能,你不得不为之付费。1.3.3 Fomula One 它是一个OLE ActiveX报表控制引擎,支持Excel电子表格的编辑与运行,Formuloone6以前为基于C/S环境,其后的版本(如Repert,SPreodsheet等)主要面向B/S环境。胡于进等(2004)在它的基础上设计新报表组件FIBOOKREPORT,其主要具有以下特点:
(1)可以嵌入到应用程序中提供报表功能,也可以独立使用;
(2)支持HTML格式输出:它包括一组API,能够将选定范围的表格输出到一个HTML文件中;
(3)内置计算器:具有强大的电子表格功能,且与Excel兼容;
陕西理工学院毕业设计(4)编程支持:Formula One包含了广泛而丰富的API函数,帮助开发者灵活自如地控制电子表格的制作,为程序员提供了便利的电子表格设计工具箱。
虽然,目前通用报表有了较大的发展,但是在实际应用中,既开源免费或价格便宜,又能满足用户要求通用报表系统能够简单灵活地实现连接数据源、设定报表样式等的报表很少,市场上的报表系统存在以下不足:
1.工作量大:企业的需求是动态、复杂、多变的。目前的报表系统中,出于数据的显示或打印格式都是由程序员根据客户需要直接在程序制作期间生成的。如果报表的科目稍有变化,都需重新编译程序发布,加重了程序员的维护工作量;
2。缺乏灵活性:目前的通用报表系统是不可以自定义取数据源与取函数或公式,而只能选择系统提供的有限的取数函数与公式来自定义报表,如果需要实现对这些取数函数或公式以外的数据资源的访问就十分不方便;
3.未实现跨平台连接多个数据源:目前的报表大部分只能实现连接单一目标数据源,未能实现跨平台连接多个数据源,即不能实现异构数据库。例如Excel,水晶报表等都只能连接多种数据源,但不能实现同时。
2在VB中利用word实现复杂报表
在数据库应用系统中开发word 文档自动生成程序,可以实现以下功能:文档自动生成;自动添加页眉页脚;目录自动生成;格式自动调整;文档格式大众化,便于传输与交流;对大文档、复杂表格处理具有明显优势:可依用户要求智能化地生成风格各异的文档等等。实践证明,在数据库应用系统开发中,用word文档自动生成程序取代传统的数据库报表输出,使得开发的数据库应用系统的报表处理大大改观,优点突出,很值得推广,本文就是基于word实现复杂报表的设计。2.1 VB中Word对象模型
在VB调用Word之前,首先要引进对象库,然后才能以Word为对象编程。引进Word对象库的方法是:在编程环境下,选择“工程”菜单,选中“引用”项,打开“引用”对话框,在“可用的引用”列表中选中“Microsoft Word11.0 Object Library”,即可在Word中引进对象库。
Visual Basic支持的Word对象集合直接对应于Microsoft Word中的各个元素。例如,Document对象代表了一个打开的文档,Bookmark对象代表了一个文档中的书签,而Selection对象则代表了在一个文档窗口窗格中的选定内容。在Word中,每一类元素(文档、表格、段落、书签、域等等)都可以用Visual Basic的对象来表示。要在Word中自动执行任务,可以使用这些对象的方法和属性。
主要Word对象有以下6个:(1)Application对象
当用户打开一个Word文档,也创建了一个Application 对象,它表示运行的应用程序。也可以把Application对象看成应用程序对象的容器,Application对象中包容了Word 的菜单栏、工具栏、Word命令等的相应对象以及文件对象等。菜单栏对象中包容了所有的菜单及菜单命令。工具栏对象中包容了各种命令按钮。文件对象中则包容了所有的文字、表格、图像等文件组成部分的相应对象。
用户可以利用Application对象的属性或方法来控制或返回应用程序范围内的特性、控制Word窗口的外观或调整Word对象模型的其它方面。例如Application.PrintPreview=True 将从视图状态切换到打印预览状态。
Application对象的属性也可以访问处于对象层次中较低级的对象,比如Windows集合(代表了当前所有打开的窗口)和Documents集合(代表了当前所有打开的文档)。用户可以通过一些属性,从对象层次中最高一级的Application 对象向下访问到较低级的对象(Document对象、Window对象、Selection对象等)。
(2)Document对象
陕西理工学院毕业设计 当用户在Word中打开或创建一个文件的同时,也创建了一个Document对象。在Word中,Document对象表示一个打开的文档,而且所有的Document对象都是Application对象的Documents集合的成员。几乎所有的操作都要调用Document对象本身或其内容,用户可以使用Document对象或Documents 集合的属性或方法来打开、创建、保存、启动或者关闭文件。
每一个Document对象都具有Characters、Words、Sentences和Paragraphs四个集合。可以使用语法Documents(index)来返回作为一个Document对象的任何打开的文档,index是该文件的名字或索引号。但是当用户添加或关闭多个文档时,某个特定文件的索引号会发生改变,所以最好使用文档的名字来对Documents集合中的Document对象进行索引。
要打开一个文档,可以使用open方法;要创建一个新文档,可以对Documents应用Add方法;要保存文档可以使用SaveAS方法或是Save方法;要关闭一个文件,可以对Document对象应用Close方法。可以使用Add方法来向文件中添加诸如表格、备注、注脚这样的对象。
要使一个文档成为活动文档,可以对Document应用Active方法启动它。具有焦点的文档称为活动文档,由Active-Document属性表示。使用Open方法打开的文档,或者使用Add方法创建的文档,都将成为用ActiveDocument属性表示的当前活动文档。
(3)Range对象
Range对象表示文件中的一块连续的区域。每一个Range对象都由一个起始字符位置和一个终止字符位置定义。这个连续范围可以小到只是一个插入点,大可到整个文档。在同一个文档中也可以定义多个Range对象。Range对象中的字符包含非打印字符,例如空格、回车符和段落标记。在确定Range对象后,就能够应用该对象的方法和属性来修改相应范围内的内容或格式。
可以通过使用Range方法在指定文档中创建一个Range对象。可以将Start和End参数设置为同一个数字,将创建一个不包含任何字符的Range,相当于一个插入点。也可以通过其它对象(例如Paragraph对象、Bookmark 对象、Character对象、Word对象、Sentences对象或Selction对象)的Range属性来返回一个Range对象。
使用Range对象的Text属性可以返回或设置这个Range对象中的内容或格式。
可以使用SetRange方法来设置或重新定义一个已经存在的Range对象。也可通过使用Range对象的Start 属性或MoveStart方法指定或重新定义Range 开始的位置,或是使用Range对象的End属性或MoveEnd方法指定或重新定义Range结束的位置。可以使用Bookmark、Selection或Range对象的Start和End属性来指定Range方法的Start和End参数。
(4)Selection对象
当用户想要自己的代码对选定内容做出响应或是改变选定内容,就可以通过Selection对象来完成任务。Selection对象可以在Application对象,Window对象,Pane对象中使用。Selection对象就像在Word对话中交互式工作时的插入点或当前选项。所以Selection对象可以收缩为插入点,也可以包括一个或几个字符和文件项目,甚至可以包括任何文档部分的内容。
用户可以在一个选定内容中控制操纵对象。
可以使用Selection属性来返回Selection对象,如果随同Application对象使用Selection属性,则该Selection对象表示活动的选定内容。如随同一个Windows对象或是Pane对象使用Selection属性,则返回一个在特定窗口或窗口窗格中Selection对象。
每个文件的每个窗口中都可以有Selection对象,但每个窗口中只能启动一个Selection对象,在任何时刻都只能有一个活动的Selection选项。
用户也可以通过MoveStart和MoveEnd方法,或者通过改变Selection对象的Start属性及End 属性的值来移动或扩展选定内容。用户也可以通过GoToNext方法、GoToPrevious方法或GoTo方法来移动选定内容。在一个文件窗口或窗格中只能有一个选定内容,因此用户也可以通过使用Select方法选择文档的另一个对象来移动选定内容。在使用Select方法
陕西理工学院毕业设计 之后,就可以使用Select属性返回一个Select对象。
(5)Find和Replacement对象
Find对象包含与“查找”和“替换”对话框(在“编辑”菜单中)里的选项有关的属性。可以使用Find和Replacement对象来查找并且替换文档中文字的特定范围。Replacement对象表示查找-替换操作的替换条件。Replacement对象的属性和方法对应于“查找”和“替换”对话框(在“编辑”菜单中)里的选项。
Find对象可以在Selection对象或Range对象中使用(根据Find对象是从Selection对象还是从Range对象返回的,查找操作也略有不同)。可以在Find对象中使用Replacement对象。
如果是在Selection对象中使用Find对象,那么当找到符合选择条件的文本后选定内容将会改变。如果是在Range对象中使用Find对象,选定内容不会改变,但是当找到符合选择条件的文本时范围会被重新定义。
(6)Table、Column、Row、Cell对象
word对象模型包含了表格对象,也包含了表格中各种不同元素的对象。
软件调试流程图