统计打印类部件设计.docx
《统计打印类部件设计.docx》由会员分享,可在线阅读,更多相关《统计打印类部件设计.docx(27页珍藏版)》请在冰豆网上搜索。
统计打印类部件设计
统计打印类部件设计
统计与打印报表是管理信息系统数据处理最大量的任务,涉及的工作内容多,范围广,有关部件需要比较长的积累才可能满足一般性的需要。
我们做了一些探讨,希望能说明,只要在设计软件时,注意提高其复用特性,将来是能产生具有一定完全性的部件库的。
1、数据处理部件
有许多批处理应用面比较广,如果将界面与数据处理程序相结合,可以设计出适应性比较强、用途比较广的通用批处理部件。
本系统中数据处理部件包括了一些常用的单表数据处理程序。
其接口变量只一个:
数据表名称。
其界面如下图所示。
左上部分为组合查询界面,可以根据字段的数据值、字段子项值、文本中的字或词生成查询条件表达式;还可以直接给出待修改记录的行号,使确定修改数据范围。
操作时,需要先确定批处理结果存入(或修改)的字段名称(如图选字符类型字段:
备注)。
此时,将根据该字段的数据类型选出可供选择的函数式,例如如图所示,选择函数P011(),其功能是将某个数字类型字段中的数据转换为中文大写数据值,再选字段“实发”,该字段名填进P011()的括号中,按下“按公式对选出记录计算修改”,将对每一条记录的“实发”字段数据进行变换,求得其中文大写数值,存进字段“备注”中。
其结果如下表所示:
如果选P012()
其结果如下图所示。
目前所提供的函数如下,其中P0打头的为自定义函数,其他为VFP系统提供的函数。
函数计算总是针对某一个或多个字段进行,在选择函数后要选择字段,字段名要填写到括号中,在下表左边列关于功能的说明的后边扩号内说明了其格式。
(N表达式)表示括号内要填一个字段名或数字类表达式。
(N被除数,N除数)表示括号内要填二个数字类字段名或表达式,用逗号分隔,第一个是被除数字段,第二个是除数字段。
批数据处理功能函数表达式
绝对值(N表达式)ABS()
e^x的值(N表达式)(N表达式)EXP()
取整(返回其整数部分)(N表达式)INT()
返回余数(N被除数,N除数)MOD(,)
方差(标准偏差的平方)(N表达式1,N表达式2[,N表达式3...])VAR()
标准偏差(N表达式1,N表达式2[,N表达式3...])STD()
算术平均值的标准偏差(N表达式1,N表达式2[,N表达式3...])SSTD()
变为简述中文大写元角分(壹仟零叁拾元另叁角)(N表达式)P011()
变为规则格式中文大写元角分(壹仟零百贰拾零元叁角零分)(N表达式)P012()
变为简述中文元角分(二拾元零三角)(N表达式)P013()
变为规则格式中文元角分(二拾零元三角零分)(N表达式)P014()
变中文大写元角分(壹仟零叁拾元另叁角)为数字(C表达式)P021()
变规则格式中文大写元角分(壹仟零百贰拾零元叁角零分)为数字(C表达式)P022()
变中文大写元角分为数字(C表达式)P023()
变规则格式中文元角分为数字(C表达式)P024()
生成从001起递增1的序号(编号字段只限C、N二种类型。
以下同!
)(N宽度)P031()
生成按某字段分组,每组从001起递增1的序号(分组字段,N宽度)P032(,)
生成按某二字段分组,每组从001起递增1的序号(分组1,分组2,N宽度)P033(,,)
检查按某字段分组,每组从001起递增的情况(分组字段,N宽度)P034(,)
检查按某二字段分组每组从001起递增1的情况(分组字段1,分组2,N宽度)P035(,,)
生成从原字段第几位起从某值始递增1宽度为N的序号(N起始位,C初值,N宽度)P036(,,)
某字段留宽度N1的值连接从某值始递增1宽度为N的序号(C表达式,留宽度,C初值,N宽度)P037(,,,)
货币型表达式返回一个数值型值(m表达式))MTON()
返回含有四位小数的货币值(N表达式)NTOM()
固定利息贷款按期兑付的支出(n开始本金,n固定利率,n偿还次数)PAYMENT(,,)
某次投资的现值(n阶段支付额,n阶段利率,n支付的总次数)PV(,,)
金融投资的未来值(n周期性付款金额,n周期利率,n已付款的周期数FV(,,)
求和(N表达式1,N表达式2[,N表达式3...])SUM()
求平均值(N表达式1,N表达式2[,N表达式3...])AVG()
求最大值(N表达式1,N表达式2[,N表达式3...])MAX()
求最小值(N表达式1,N表达式2[,N表达式3...])MIN()
自然对数(底数为e)(N表达式)LOG()
常用对数(以10为底)(N表达式)LOG10()
数值常数π()PI()
平方根(N表达式)SQRT()
正弦值(N表达式)SIN()
反正弦弧度(N表达式)ASIN()
余弦(N表达式)COS()
反余弦值(N表达式)ACOS()
正切值(N表达式)TAN()
反正切弧度值(N表达式)ATAN()
反正切值,(无象限限制)(N表达式)ATN2()
度转换为弧度(N表达式)DTOR()
大于或等于它的最小整数(N表达式)CEILING()
小于或等于它的最大整数(N表达式)FLOOR()
按位AND运算(N表达式1,N表达式2)BITAND(,)
按位异或运算(N表达式1,N表达式2)BITXOR(,)
乘方(N表达式1,N表达式2)^
加(N表达式1,N表达式2,……)+
减(N表达式1,N表达式2,……)-
乘(N表达式1,N表达式2)*
除(N表达式1,N表达式2)/
求模(相除后返回余数)(N表达式1,N表达式2)%
用大写字母返回指定的字符表达式(C表达式)UPPER()
根据指定的ANSI数值代码返回其对应的字符(N表达式)CHR()
在最前面加字符串(C表达式1,C表达式2)P161(,)
在最后面加字符串(C表达式1,C表达式2)P162(,)
在第几位后加字符串(C表达式1,N表达式,C表达式2)P163(,,)
删除从第几个字符起的多少个字符(C表达式,N表达式1,N表达式2)P164(,,)
在最前面加¥(C表达式)P165
在最前面加$(C表达式)P166
最左边字符的ANSI值(C表达式)ASC()
返回由指定数目的空格构成的字符串(N表达式)SPACE()
从给定的字符表达式中返回字符串(C表达式[,N1[,N2]]SUBSTR(,,)
计算字符表达式,并返回其内容的数据类型(C表达式)TYPE()
以小写字母形式返回(C表达式)LOWER()
从一个字符串的最右边开始返回指定数目的字符(C表达式,N表达式)RIGHT(,)
搜索第二个字符表达式并用第三个字符表达式替换(C式1,C式2,C式3)STRTRAN(,,)
用另一字符式替换现有字符式从某位置起指定数目的字符(C式1,C式2,N1,N2)STUFF(,,,)
删除指定字符表达式的前后空格符及其后的字符串(C表达式)ALLTRIM()
返回与指定数值表达式对应的字符(N表达式)STR()
最左边首次出现的位置(c字符表达式,c搜索的字符)AT(,)
把与第2字符相匹配的字符替换为第3个字符(c式1,c式2,c式3)CHRTRAN(,,)
从字符式最左一个字符开始返回指定数目的字符(C表达式,N表达式)LEFT(,)
一个字符式在另一个字符表达式中出现的次数(C表达式1,C表达式2)OCCURS(,)
返回一个字符串,字符串中的每个首字母大写(C表达式)PROPER()
从最右的字符起一字符式在另一字符式内首次出现的位置(C式1,C式2RAT(,)
加联结(将二字串按原长联成一串)(C表达式1,C表达式2,……)+
减联结(将前串去尾部空格后与后串联成一串)(C表达式1,C表达式2,……)-
返回数字型星期值(D表达式)|(T表达式)-1+DOW()
当前系统日期()DATE()
返回年份(D表达式)YEAR()
返回字符型星期值(D表达式)|(T表达式)CDOW()
日期时间表达式的小时部分(T表达式)HOUR()
日期时间型表达式中的分钟部分(T表达式)MINUTE()
日期或日期时间表达式的月份值(T表达式)MONTH()
日期时间型表达式中的秒钟部分(T表达式)SEC()
日期时间表达式中返回一个日期值(T表达式)TTOD()
变日期格式为字符****/**/**格式(D表达式)DTOC()
返回日期时间型值(D表达式)DTOT()
返回代表一年中第几周的数值(D表达式)|(T表达式)WEEK()
返回给定日期表达式的日期(D表达式)|(T表达式)DAY()
以日期时间值返回当前的日期和时间()DATETIME()
字符表达式转换成日期表达式(C表达式)CTOD()
日期时间表达式中返回一个字符值(T表达式)TTOC()
字符表达式返回一个日期时间值(C表达式)CTOT()
返回yyyymmdd格式的字符串日期(D表达式)DTOS()
24小时制、8位字符串(时:
分:
秒)格式返回当前系统时间()TIME()
变日期为中文年月日(二零零三年元月十五日)(D表达式)P071()
变日期为数字年月日(2003年1月15日)(D表达式)P072()
变日期格式为字符****.**.**格式(D表达式)P073()
变日期格式为字符****_**_**格式(D表达式)P074()
变日期格式为字符****-**-**格式(D表达式)P075()
变日期格式为字符表达式(例:
May311995)(D表达式)MDY()
变日期格式为字符表达式(例:
31May1995)(D表达式)DMY()
变中文年月日(二零零三年元月十五日)为日期格式(C表达式)P081()
变数字年月日(2003年1月15日)格式为日期格式(C表达式)P082()
变字符****_**_**格式为日期格式(C表达式)P083()
返回给定日期或日期时间表达式的月份英文名称(D表达式)|(T表达式)CMONTH()
加天数或加负天数(D表达式,N表达式)+
加秒数或加负秒数(T表达式,N表达式)+
减日期(D表达式1,D表达式2)-
减日期时间(T表达式1,T表达式2)-
一个式的值是否在另外两个相同数据类型的式的值之间(A式1,A式2,A式3)BETWEEN(,,)
确定表达式是否为空值。
(表达式)EMPTY()
根据逻辑表达式的值,返回两个值中的某一个(L式,A式1,A式2)IIF(,,)
判断一个表达式是否与一组表达式具有相同的数据类型(A式1,A式2,A式3……)INLIST(,,)
从两个表达式返回一个非null值(A式1,A式2)NVL(,)
相与(L表达式1,L表达式2)AND
相或(L表达式1,L表达式2)OR
非(L表达式)NOT
异或(L表达式1,L表达式2)XOR
求和(数据或整数类型)SUM
求平均值(数据或整数类型)AVG
求最大值(数据或整数类型)MAX
求最小值(数据或整数类型)MIN
求记录条数(ALL)CNT
方差(标准偏差的平方)(数据或整数类型)VAR
算术平均值的标准偏差(数据或整数类型)SSTD
标准偏差(方均差)(数据或整数类型)STD
2、统计打印部件1为交叉表程序,可以以统计表形式输出,也可以生成柱面图等统计图形。
如果接口参数中不给定具体的打印格式文件名,“打印预览”按钮提供自动建立打印格式文件并打印报表功能。
可以对单表、也可以对多表操作,如下图所示。
执行“统计打印部件1”后,如图选择统计字段名称,例如:
姓名、课名、分数。
按“显示统计表”后输出如下。
按“显示统计图”后输出如下。
如果选“单记录圆并图”,显示如下:
如果选“单记录折线图”,显示如下:
如果选“单记录金三角图”,显示如下:
如果选“全表柱面图”,显示如下:
3、统计打印部件2为一元回归计算程序。
如图选择数据表。
执行“统计打印部件2”后选择纵向字段与横向字段,如下图所示。
有时需要改变显示图形的显示比例,可以对每一个数据规定“精确到10的多少次方”,将乘10的负N次方后再计算与打印。
按“显示折线图”,显示如下:
按“一元线性回归”,显示如下:
(如果输入横坐标X的数据值,再按计算预测值,可以显示预测数据)。
横向字段可以是数值类型、字符类型(但其值必须为数字)、日期类型:
4、统计打印部件4为交叉统计程序,在统计表功能方面与统计打印部件1相类似。
可以分组计算某列或某几列的和、平均、最大、最小、记录数等。
例如对“工资”表操作:
选择横向、纵向统计字段与需要统计的字段。
所得到表的列按“横向分组字段”每一组展开。
中间的数据为横向、纵向统计字段交叉点的需要统计的字段的数据值。
结果如下所示。
统计之后可以自动建立打印格式文件予以打印,也可以转到EXCEL或存到文件中。
可以同时作多类型统计。
同时作分组和与分组平均的交叉表。
5、统计打印部件5为按某些字段统计程序。
操作时需要选择分组字段(最多三个字段)。
选择统计记录的选择条件,选择输出表格所包括的字段及其中需要进行统计计算的字段。
如下图所示。
注意要选择统计计算的公式,包括:
和、平均、最大、最小、方差、标准偏差等。
选择求和时按“明细与末层小计”后输出结果如下。
选择求和并按“末层小计总计”后输出结果如下。
6、统计打印部件6为与统计打印部件5相类似的纵向统计程序。
不同处在于可以同时进行多类型统计。
例如如下选择:
输出如下。
7、统计打印部件7是与统计打印部件4相类似的交叉表程序,不同处在于可以先分组求和、求平均……,之后再求交叉表。
8、生成表格格式打印格式文件
工具类部件5到7为专门设计的设计打印报表格式文件的工具类部件。
工具类部件5用于设计表格式打印格式文件,表格式打印格式指一页打印多条记录的格式文件,又分为:
明细表格:
指只按数据表记录打印的表格。
明细与总计:
指除有细节外,还有总结带区的表格
明细小计与总计:
指有细节带区、组带区、总结带区的表格。
小计、总计:
指没有细节带区,只有组带区与总结带区的表格。
1、操作方法:
先点选最小系统菜单的“接口参数输入”菜单项,在其中输入数据表名称、打印格式文件名称,如果数据来自多表,除主表外,其他表名输入到“相关表名称”栏。
然后选择“开发工具”→“生成表格式文件”,界面如左图所示。
输入标题名、标题字号、标题字体、选择输出字段;如果有分组,选择分组字段名,可以不选,但最多选三个;如果选三个,将建立三个组带区。
对于需要分组小计、求总计的字段将其名字选到文本框中。
再选定细节带区中打印数据的字号、字体,选择纸张大小,最后按下“明细表格”或其他三个生成表格格式文件的按钮。
在生成格式文件时,如果行宽太大,超过纸宽,将给出各行当前宽度的数据供浏览与修改,可以修改各行数据之后再自动生成格式文件。
格式文件生成后,表单中还提供了“修改各行宽度”、“修改格式文件表”、“修改打印格式文件”、“重生成打印格式”等功能按钮供对生成过程中形成的文件数据进行修改。
例如求设计工资报表,数据表名为“工资”,打印格式文件名为“工资表”。
要求按部门号求所有数值类型字段的小计与总计。
进入部件库最小系统,点“接口参数输入”,在“数据表名称”栏输入“工资”,在“打印格式文件名称”栏输入“工资表”。
选“开发工具”→“生成表格式格式文件”→输入表格标题、选择标题字体与字号→选择打印输出的字段名到右边编辑框,分别选择需要求小计的字段名与需要求总计的字段名到右边文本框,选分组字段“部门号”到右边文本框。
→选纸张大小、字号、字体。
→按下按钮“明细_小计_总计”,在显示的每列宽度的表上修改每一列的宽度。
用键关闭显示。
之后还将显示生成的格式数据表数据,按需要进行修改,如果要求删除的,只需要将其删除标记处点黑。
用键关闭表显示。
格式文件生成并显示在窗口,建立的格式文件如图所示。
工资表打印效果如图所示。
9、工具类部件6
工具类部件6用于生成单记录形式格式文件
“单记录形式格式”指一页打印一条记录数据的报表格式,例如一些报名表、介绍信、一些复杂报表。
又分为三类:
1)单记录表格式报表,特点是:
一条记录的数据按行列整齐排列,所有字段按顺序编上行号与列号,每列宽度先按该列宽度最高的决定,所有各列宽度在屏幕上显示,由手工修改后确定各列宽度,最终形成打印格式文件表。
生成单记录形式格式文件程序界面如图所示。
如果其中包含备注字段或通用字段,需要在“接口参数表”中填入其字段名,并以字符为单位,填入打印高度与宽度。
如果未在接口参数表中填入,或在调用时未声明接口参数表,将默认它们的宽度为6个字符,高度为二个字符。
如果一行中有备注或通用字段,该行高度由其中高度最大的控件决定。
生成的完整的格式文件数据表将在屏上显示,可再次对其进行修改,可以只修改字号,让程序自动重新计算宽度与高度,也可以直接修改高度、宽度,让程序自动计算到左边距离与到顶距离。
可以将不需要的控件加上逻辑删除记号,在生成打印格式文件前系统会自动将它们物理删除。
最终自动生成打印格式文件。
生成的单记录表格式报表如左图所示。
2)非规则式单记录报表
报表界面特点是:
每行控件数不相等,所有字段按实际行宽顺次排列,当一行排不下时就换行排下一列,最后形成的报表中每行第一列均为标签,按宽度最大的一个统一决定宽度,排成整齐的一列;每行最后一个控件加大长度使行的右边界和全表框架右边界对齐。
这样,全表仍然是一个矩形框架,只是每行控件数不一定相等。
生成的非规则式单记录格式报表如左图所示。
这类报表可以有效利用空间,用于打印介绍信等文件式报表特别方便。
在生成过程中会问:
“是只打印当前一条记录还是打印多条记录”。
如果回答只打印一条记录,则表格控件都建在标题带区上,每次打印一条记录后退出。
否则建在细节带区上,根据当前临时表记录数一条记录一条记录打印,直到结束。
3)非规则格式手工调整式单记录报表
本部件设计了手工定义各控件宽度后再自动生成格式文件的功能。
在运行时,在上面非规则格式操作的基础上,将显示一个宽度状态表,列出每一行每一控件当前宽度,其中奇数列是标签宽度,偶数列是域控件宽度;还给出了当前每行总宽,供设计参考。
用户可以修改每个控件宽度,最终再建立按用户调整过的新表。
生成的非规则式单记录手工调整格式报表如上图所示。
10、生成标签格式文件(工具类部件7)
有些报表可分成多块,每块结构都相同,各块间数据可能相同,可能不相同。
例如,打印工资条,每个人的工资条如果是竖直一条,打印到一张纸上过于浪费,因此一般是在一张纸上要打印多张工资条,打印完后撕开分发给各人。
这些工资条结构都相同,但数据分别对应不同个人,数据不相同。
还有一种需求,例如打印名片或产品标签,在一张纸上同样需打印结构相同的多块,但和上面不同的是各块的数据是相同的,对应一条记录的数据。
操作方法
1)、建立单块标签
先类似单记录式格式文件生成程序的操作,先建立一块,这一块可以是表格式,非规则格式或手工可调宽的非规则格式。
如果是表格格式,我们将标签连同域控件一齐称为一列,要先输入列数。
如果是非规则格式要予指定一块的宽度,以英寸为单位。
注意,一块的宽度应不大于纸宽÷每行块数。
在生成一块的打印格式表后会显示打印格式表的数据,可以对之修改,之后显示这一块格式建立的界面情况。
之后,可以加上线条,也可不加线条。
2)、复制成多块
需要输入“每行块数”:
指在横向一行内有多少个标签块。
“每列块数”:
指在纵向一列内,有多少个标签块。
标签总块数等于每行块数与每列块数的乘积。
还要输入“每行块间距离”(例如0.1(英寸));“每列块间距离”(例如0.1(英寸))
最后选择:
点击“同条记录重复标签”或“不同记录标签”按扭,完成标签式打印格式文件的制作。
生成的打印不同记录标签格式报表见图。
3)、打印操作
各种表现形式报表(包括标签),都可以调用最小系统菜单中“多表查询或统计”菜单项下的“按格式文件打印程序”打印。
也可利用各种组合查询部件,单记录式数据自适应维护部件或表格式数据自适应维护部件中的打印按扭打印。
如用后面二个部件打印,要求打印格式文件中各域控件数据来自同一个数据表。
为了使其他打印程序既能用来打印普通报表,又能打印标签式报表,在建立格式文件的同时,将标签生成的主要参数:
格式文件名称、每行块数、每列块数、每行块间距离、每列块间距离等记入数据表:
“标签结构表”,当调用各组合查询、单表自适应维护等部件的打印程序时都将先检查其格式文件名是否登记在标签结构表中,以决定是打印普通报表还是打印标签式报表。
工资条打印效果如图所示。