利用VBA+OO4O构造CTAIS开放式通用平台

利用VBA+OO4O构造CTAIS开放式通用平台

2010-06-08 14:59:28 |
来源:税务信息化论文集 | 作者:于非 易飞

  摘 
要:文立足于CTAIS系统体系,探讨如何通过OO4O技术和VBA技术搭建ORACLE前端开放式通用平台,同时以通过最低编程技术满足基层信息化建设的要求,从而实现CTAIS功能的扩展。本文提供的通用平台建设通过笔者精简的满足OO4O连接必需的ORACLE免安装客户端,通过EXCEL的VBA接口,采取用户编写的各类查询语句的方式查询综合征管软件分发服务器数据,将复杂的编程技术降低到简单的EXCEL利用来实现基层信息中心对分发环境数据的充分利用,以满足各基层对个性化开发的需求。
  关键词:OO4O;ORACLE;VBA;CTAIS
  一、引 

  按照总局提出的征管模式和完善征管体制的意见,从分类构建征管工作格局的实际出发,探索建立以计算机网络为依托、省局数据集中的、科学合理的税收征管机制,构建严密的税源管理和监控体系,总局成功上线运行的综合征管软件V2.0大幅提升了国税系统税收征管的精细化、规范化和科学化程度。但是如何强化对税收征管数据的分析利用,力求数据有用、管用、好用,进一步提高征管质量效率以及各级国税机关领导决策能力和组织收入能力成为国税系统信息化建设面临的新课题。
  二、需求分析
  由于征管数据采取的是分散采集、省级集中的模式,各地市、州局仅放置存放镜像数据的分发服务器用于查询和数据分析再利用,针对国税信息化建设还处于开发水平不高的初级阶段的现状,大多数国税机关对分发服务器的二次开发力度不够,部分地市(州)国税机关针对分发服务器的开发大多是利用TOMCAT+JSP进行查询,一旦涉及数据分析的开发,则会大幅提高开发成本和人力资源,笔者在前期开发的几个TOMCAT+JSP系统在实际应用中都面临这样的问题。因此降低开发技术难度,用较小的开发实现较大的数据再利用就必须另辟它径。
  笔者通过对基层信息化建设水平的调研,发现利用EXCEL的应用普及性可以为数据再利用提供良好的平台,一旦将数据延伸至EXCEL,则CTAIS数据的再利用可以延伸到征管一线,成为征收管理数据分析利用、有用、管用、好用的最佳途径。因此本文就如何通过OO4O技术和VBA技术搭建ORACLE前端开放式通用平台做了一定程度的探讨,以图抛砖引玉,实现税收数据最大程度服务于征管的目标。
  三、系统的整体结构
  ORACLE前端开放式通用平台采用A/S结构,所谓A/S结构,是为了减少客户端开发,利用已经存在的应用系统(Application)连接ORACLE数据分发服务器(SERVER),通过必要的接口连接(OO4O),将后台服务器(SERVER)数据导入到前端应用形成二次数据源,再利用前端应用的可设计性和易操作性进行开放式的设计,以完成个性定制和数据分析,完成对征管质量效率的提高和基层国税机关领导的决策。
  系统结构如下:

  从该系统的结构可以看出,该系统本身的开发力度并不大,但是有效的延伸了ORACLE数据的位置,同时利用EXCLE的强大数据分析功能,扩展了CTAIS的使用,使CTAIS变的更好用、更易用。
  四、ORACLE的OO4O技术
  OO4O(Oracle
Objects for OLE)为
COM组件,但并不属于ORACLE体系的产品,一旦安装后,该组件可以跨越ORACLE版本运行,这也是本文选择OO4O技术的原因。OO4O对系统要求的要求如下:
  (1)OO4O可以运行在:
Windows NT 4.0, Windows 2000, Windows 98,或者 Windows XP
  (2)32-bit
application capable of OLE脚本具有32位应用系统的应用能力,(例如:Visual Basic, Excel等)
也支持C++编译(Microsoft Visual C++ 6.x)。
  (3)通过本地连接或者网络客户端访问Oracle8, Oracle8i or
Oracle9i
数据库。ORACLE技术文本称需安装ORACLE客户端,但经笔者调试,已制作出免安装客户端系统,大大提高了系统的应用普及性。
  (4)查阅Required
Support Files (RSF) 9.2.0 for
OO4O.Oracle安装器应确保RSFs作为OO4O的一部分进行安装。
  (5)必须注册高版本的mfc42.dll (v.
6.00.x)到oip9.dll.注册应当自动完成。
  (6)如果要使用OO4O代码向导做存储过程,需要安装Microsoft Visual Basic
6.0. 如果VB 6没有被先于OO4O安装,可以简单的运行以下命令行注册相应控件和动态链接库:
  - regsvr32.exe
oo4ocodewiz.dll
  - regsvr32.exe odbtreeview.ocx
  - regsvr32.exe
oo4oaddin.dll
  由上可知,OO4O对系统要求不高,具有较强的普及性。
  五、ORACLE免安装客户端的制作
  搭建A/S结构的ORACLE前端开放式通用平台,需要安装ORACLE客户端,由于ORACLE原始安装文件较大,安装时间较长,不利于前端开放式通用平台的普及应用,因此对ORACLE的客户端进行改装就变的尤其重要,笔者经过反复调试,将ORACLE客户端精简成24M左右的免安装包,可直接拷贝到C盘,经过必要的DLL和OCX注册,即装即用。
  精简步骤如下:
  1、 提取文件:
  经过反复调试,ORACLECLIENT可以精简为24M,
  2、 经过精简后只有58个文件如下:
  Bin
目录下55个文件:




































































oran9.dll

orannmp9.dll

oranl9.dll

oranro9.dll

orannts9.dll

Oranhost9.dll

oranoname9.dll

orantns9.dll

oransgr9.dll

orancrypt9.dll

oranbeq9.dll

oranipc9.dll

oranjni9.dll

ORANLS9.DLL

ORAUNLS9.DLL

ORASNLS9.DLL

ORAXML9.DLL

ORAXMLG9.DLL

ORAXSD9.DLL

oranmt.dll

oranmi.dll

oranml.dll

oravpxdba.dll

oranms0.dll

tcl82.dll

oravpnt.dll

oravppdc.dll

oranmd.dll

OsUtils.dll

oranoncj9.dll

owm2.dll

oip9.dll

oraansi.dll

oraclm32.dll

oradc.ocx

ODBTREEVIEW.OCX

OO4OADDIN.DLL

OO4OCODEWIZ.DLL

OO4OCODEWIZ.EXE

oraordim9.dll

orawwg9.dll

oravpsqlsrv.dll

oractxx9.dll

oratracepls9.dll

oravpxoafnd.dll

orajox9.dll

oraioser.dll

ORAPLC9.DLL

oraodm9.dll

oraolapop9.dll

oraevrus8.dll

oraobjop9.dll

oraqsmashr.dll

oraspawn.dll

oip9.tlb

  NETWORK下一个文件:
  network\admin\tnsnames.ora
  这个文件安装好之后要根据实际的工作环境进行重新配置下面是这个文件的例子:

  0040下一个文件:
  oo4o\mesg\OIPUS.MSB
  ORACORE下一个文件
  oracore\
zoneinfo\timezone.dat
  步骤2:修改注册表
  按照BIN\目录下面的oracle.key文件中的注册表目录,建立注册表项,然后将建立好的REG文件导入到注册表中,以下给出范例:
  Windows
Registry Editor Version
5.00
  [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]
  "ORACLE_HOME"="C:\\oracle\\ora92"
  "ORACLE_HOME_NAME"="OraHome92"
  "NLS_LANG"="american_america.us7ascii"
  "inst_loc"="C:\\Program Files\\Oracle\\Inventory"
  "API"="C:\\oracle\\ora92\\dbs"
  "ORACLE_GROUP_NAME"="Oracle
- OraHome92"
  "OLEDB"="C:\\oracle\\ora92\\oledb\\mesg"
  "VOBHOME2.0"="C:\\oracle\\ora92"
  "OO4O"="C:\\oracle\\ora92\\oo4o\\mesg"
  [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ALL_HOMES]
  "HOME_COUNTER"="1"
  "DEFAULT_HOME"="OraHome92"
  "LAST_HOME"="0"
  [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ALL_HOMES\ID0]
  "NAME"="OraHome92"
  "PATH"="C:\\oracle\\ora92"
  "NLS_LANG"="american_america.us7ascii"
  3.将做好的安装包拷贝到C盘根目录即可使用。
  以上免安装包除可应用在本文前端开放式通用平台中,也可供CTAIS报表系统的使用。六、VBA接口的制作
  EXCEL利用OO4O和VBA技术可以实现对ORACLE的完全访问,所使用的开发基于以下几个部分进行演示:
  数据表(DataSheets):即利用EXCEL的工作表存放查询后的结果。
  本演示数据表如下图:

  获取数据接口(GetData):返回查询结果数据并将数据写如数据表
  Sub Get_Data()
  ‘
Create and initialize the necessary objects
  Dim OraSession As
Object
  Dim OraDatabase As Object
  Dim EmpDynaset As Object
  Dim
ColNames As Object
  Set OraSession =
CreateObject("OracleInProcServer.XOraSession")
  Set OraDatabase =
OraSession.OpenDatabase("2:", "scott/tiger", 0&)
  Set EmpDynaset =
OraDatabase.DbCreateDynaset("select * from emp", 0&)
  ‘ Using field
array, ie. ColNames("ename")。value, is significantly faster than
using
  ‘   field lookup, ie.
EmpDynaset.fields("ename")。value
  Set ColNames = EmpDynaset.Fields
  ‘
Place column headings on sheet
  For icols = 1 To
ColNames.Count
  Worksheets("DataSheet")。Cells(1, icols)。Value =
ColNames(icols - 1)。Name  Next
  ‘ Place data on sheet using
CopyToClipboard
  EmpDynaset.CopyToClipboard
-1
  Sheets("DataSheet")。Select
  Range("A2")。Select
  ActiveSheet.Paste
  End
Sub
  更新数据(UpdateData):将数据表中编辑的数据更新到ORACLE数据库中
  Sub Update_Data()
  ‘
Create and initialize the necessary objects
  Dim OraSession As
Object
  Dim OraDatabase As Object
  Dim EmpDynaset As Object
  Dim
ColNames As Object
  Set OraSession =
CreateObject("OracleInProcServer.XOraSession")
  Set OraDatabase =
OraSession.OpenDatabase("2:", "scott/tiger", 0&)
  Set EmpDynaset =
OraDatabase.DbCreateDynaset("select * from emp", 0&)
  Set ColNames =
EmpDynaset.Fields
  i = 2
  ‘ the BeginTrans and CommitTrans are
optional
  OraSession.BeginTrans
  While Worksheets("DataSheet")。Cells(i,
1)。Value <> ""
  EmpDynaset.dbedit
  For j = 1 To
ColNames.Count
  ColNames(j - 1)。Value = Worksheets("DataSheet")。Cells(i,
j)。Value
  Next j
  EmpDynaset.dbupdate
  EmpDynaset.dbmovenext
  i
= i + 1
  Wend
  OraSession.CommitTrans
  End
Sub
  获取数组(GetArray):
  将服务器端返回的大量数据通过一个事务(transaction)返回并显示。
  主要按照以下步骤完成:
  1.
定义并设置对象。
  2. 在服务器上传送PL/SQL过程。((过程并非建自客户端,而是在服务器端创建。)
  3.
向服务端传递参数
  4. 获取输入的参数。
  5. 调用过程以一个事务传递整个数组。
  6. 显示返回的数组。
  Sub
Get_Array()
  Const ORAPARM_INPUT = 1
  Const ORAPARM_OUTPUT =
2
  Const ORATYPE_VARCHAR2 = 1
  Const ORATYPE_NUMBER = 2
  Dim
OraSession As Object
  Dim OraDatabase As Object
  Dim OraDynaset As
Object
  Dim OraPLSQLStmt As Object
  Dim OraPArray1 As Object
  Dim
OraPArray2 As Object
  Dim PLSQLStmt1 As String
  Dim PLSQLStmt2 As
String
  Set OraSession =
CreateObject("OracleInProcServer.XOraSession")
  Set OraDatabase =
OraSession.OpenDatabase("2:", "scott/tiger", 0&)
  ‘ PL/SQL
procedure
  PLSQLStmt1 = "CREATE OR REPLACE PACKAGE Employee AS " &
_
  "TYPE numarray IS TABLE OF NUMBER INDEX by BINARY_INTEGER; " &
_
  "TYPE vchar2array IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER; "
& _
  "PROCEDURE GetEmpNamesInArray (ArraySize IN INTEGER, inEmpnos IN
numarray, outEmpNames OUT vchar2array); " & _
  "PROCEDURE GetEmpName
(inEmpno IN NUMBER, outEmpName OUT VARCHAR2); " & _
  "FUNCTION GetEmpSal
(inEmpno IN NUMBER) RETURN NUMBER; " & _
  "END
Employee;"
  PLSQLStmt2 = "CREATE OR REPLACE PACKAGE BODY Employee AS " &
_
  "PROCEDURE GetEmpNamesInArray (ArraySize IN INTEGER, inEmpnos IN
NUMARRAY, outEmpNames OUT VCHAR2ARRAY) IS " & _
  "BEGIN FOR i in
1……ArraySize loop SELECT ename INTO outEmpNames(i) FROM emp WHERE empno =
inEmpNos(i); " & _
  "END LOOP; END; " & _
  "PROCEDURE GetEmpName
(inEmpno IN NUMBER, outEmpName OUT VARCHAR2) IS BEGIN SELECT ename INTO
outEmpName " & _
  "FROM EMP WHERE EMPNO = inEmpNo; END; FUNCTION
GetEmpSal (inEmpno IN NUMBER) RETURN NUMBER IS " & _
  "outEmpsal
NUMBER(7,2); BEGIN SELECT sal INTO outEmpsal FROM emp WHERE empno =
inEmpno;  RETURN (outEmpsal); " & _
  "END; END Employee;"
  ‘
add the above procedure to the Server
  OraDatabase.dbexecutesql
(PLSQLStmt1)
  OraDatabase.dbexecutesql (PLSQLStmt2)
  ‘ add the 2
parameters to the Server
  OraDatabase.Parameters.addtable "empno",
ORAPARM_INPUT, ORATYPE_NUMBER, 3, 22
  OraDatabase.Parameters.addtable
"empname", ORAPARM_OUTPUT, ORATYPE_VARCHAR2, 3, 10
  Set OraPArray1 =
OraDatabase.Parameters("empno")
  Set OraPArray2 =
OraDatabase.Parameters("empname")
  ‘ assign empno‘s to the
array
  OraPArray1.put_Value 7698, 0
  OraPArray1.put_Value 7782,
1
  OraPArray1.put_Value 7654, 2
  ‘ execute the procedure and retrieve
the empname array
  Set OraPLSQLStmt = OraDatabase.createsql("Begin
Employee.GetEmpNamesInArray(3, :EMPNO, :EmpNAME); End;", &O0)
  ‘ display
to screen
  For j = 0 To 2
  parm_value =
OraPArray2.Get_Value(j)
  msgbox parm_value
  Next j
  End
Sub
  CursorReturn:演示如何返回PL/SQL的游标(Cursors)。 
该特性提供只读访问游标(cursors)。  但是要求已经装载PL/SQL的存储过程,如\oo4o2\oraexamp.sql
  1.
定义并设置对象
  2. 从EXCEL数据表(DataSheet)J2单元格获取范例数据表"dept" .
  3.
创建dept参数。
  4. 通过存储过程的事件创建记录集
  5. 拷贝记录集到数据表页(DataSheet)
  Sub
Cursor_Return()
  Const ORATYPE_NUMBER = 2
  Const ORAPARM_INPUT =
1
  Dim OraSession As Object
  Dim OraDatabase As Object
  Dim
OraDynaset As Object
  ‘Get deptno parameter from cell J2.  If blank
then use 10 as default
  If Val(Worksheets("DataSheet")。Cells(2, 10)。Value) =
0 Then
  dept = 10
  Else
  dept = Worksheets("DataSheet")。Cells(2,
10)。Value
  End If
  ‘Create the OraSession and connection
objects
  Set OraSession =
CreateObject("OracleInProcServer.XOraSession")
  Set OraDatabase =
OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
  ‘Create the
Deptno parameter
  OraDatabase.Parameters.Add "DEPTNO", dept,
ORAPARM_INPUT
  OraDatabase.Parameters("DEPTNO")。ServerType =
ORATYPE_NUMBER
  ‘Create OraDynaset based on "EmpCursor" created in stored
procedure.
  Set OraDynaset = OraDatabase.CreatePLSQLDynaset("Begin
Employee.GetEmpData (:DEPTNO,:EmpCursor); end;", "EmpCursor", 0&)
  ‘Copy
cursor to clipboard
  OraDynaset.CopyToClipboard -1
  ‘Erase range and
paste
clipboard
  Sheets("DataSheet")。Select
  Range("A2:H50")。Select
  Selection.Clear
  Range("A2")。Select
  ActiveSheet.Paste
  ‘NOTE: 
To vary deptno values you do not need to run this entire procedure.  Simply
assign
  ‘a new value to the parameter:
OraDatabase.Parameters("DEPTNO")。Value = 20 and issue
  ‘  a
OraDynaset.Refresh command
  End
Sub
  七、开放式通用平台应用案例
  为了更直观的演示OO4O技术和VBA技术如何将CTAIS分发服务器数据库内容延伸到EXCEL中,下面将引出一个基层管理员的实际应用范例——增值税一般纳税人征管台账。
  1. 首先将制作好的免安装客户端拷贝到C盘根目录。
  2. 修改C:\ORACLE\network\admin\tnsnames.ora
的参数(对事先设置好统一发放的TNSNAMES可以忽略此步骤)
  3. 运行批处理进行DLL和OCX的注册
  4. 将设计好的PL/SQL语句填入开放平台预先设计好的模式化接口程序中代码引入部分,如下代码斜体部分:
  Sub
ctaisquery()
  Dim myCon, mySql As String
  ‘Worksheets.Add
  myCon =
"oledb;provider=oraoledb.oracle.1;persist securith info=false;user
id=ctais2;password=oracle;data source=sjff"
  mySql = "select distinct * from
dj_nsrxx a,SB_ZZS_2003_YBNSR b,dj_nsrxx_kz c,dm_swjg d,dm_czry e,dm_nsrzt
f,DM_DJZCLX g,dm_hy h where  a.nsrdzdah=b.nsrdzdah and a.hy_dm=h.hy_dm and
a.djzclx_dm=g.djzclx_dm and a.nsrzt_dm=f.nsrzt_dm and a.zgswry_dm=e.czry_dm and
a.nsr_swjg_dm=d.swjg_dm and a.nsrdzdah=c.nsrdzdah and b.sssq_q>=to_date(‘"
& Trim(Sheets("基本信息")。Cells(3, 2)) & "-" &
Trim(Sheets("基本信息")。Cells(3, 4)) & "-" & Trim(Sheets("基本信息")。Cells(3,
6)) & "‘,‘yyyy-mm-dd‘) and b.sssq_q<=to_date(‘" &
Trim(Sheets("基本信息")。Cells(3, 9)) & "-" & Trim(Sheets("基本信息")。Cells(3,
11)) & "-" & Trim(Sheets("基本信息")。Cells(3, 13)) & "‘,‘yyyy-mm-dd‘)
and sbbl=‘1‘ and  nsrsbh=‘" & Trim(Sheets("基本信息")。Cells(4, 2)) &
"‘"
  Sheets("data1")。Select
  Sheets("data1")。Range("A:IV")。Value =
""
  With ActiveSheet.QueryTables.Add(Connection:=myCon,
Destination:=Range("A2"))
  。CommandText = mySql
  。Refresh
  End
With
  Sheets("纳税人信息")。Select
  End
Sub
  步骤5给出PL/SQL需要引入的参数页,本例需要填入台账所属年度和纳税人识别号,如下图:

  步骤6.设计查询触发,利用EXCEL的VBA宏运行代码,将查询结果存放在EXCEL的结果表页面,如下图:

步骤7.将结果页数据按照要求,利用EXCEL的自身功能进行数据过滤,将有用信息按照需求个性定制到数据查询页,同时可对结果数据进行分析,下图分别演示了纳税人信息、税务登记表以及一般纳税人征管台账。

  通过以上设计步骤就完成了动态查询一般纳税人登记信息和征管台账的全部信息,该设计开发度极低,却可以完全代替TOMCAT+JSP的全部功能,同时相对ORACLE的查询工具相比,更增加了EXCEL本身具备的丰富的数据操作功能。
  八、结束语
  ORACLE前端开放式通用平台的特点并不在于开发的技术性,而是通过一种途径开放了ORACLE的数据使用,将CTAIS后台数据延伸到EXCEL中供基层征管应用,降低开发的难度即扩大了CTAIS数据应用的范围,真正实现了CTAIS数据有用、管用、好用,从而进一步为征管质量效率以及各级国税机关领导决策能力和组织收入能力服务。
  参考文献:
  [1]
四川省国家税务局综合征管软件V2V. 0推广运行维护实施方案
  [2] Oracle Objects for OLE (OO4O) Release
Notes
  [3] VBA设计参考手册
  (作者简介:于非 泸州市国家税务局信息中心主任
     
        易飞 泸州市国家税务局信息中心)

时间: 2024-10-07 15:43:50

利用VBA+OO4O构造CTAIS开放式通用平台的相关文章

利用程序随机构造N个已解答的数独棋盘

项目需求:利用程序随机构造N个已解答的数独棋盘 输入:数独棋盘题目个数N (0 < N <= 1000000) 输出:随机生成N个不重复的已解答完毕的数独棋盘, 并输出到sudotiku.txt,每个数独棋盘中间隔一行 #include<iostream> #include<cstdlib> #include<ctime> #include<fstream> using namespace std; ofstream ocout; int sud

Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法

先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 2 的对应的属性赋值:属性即为 Map 的键,值即为 Map 的值. 使用 JDBC 驱动程序处理元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信

#一周五# win10通用平台,无处不在的Xamarin,msbuild开源,MVP卢建晖的Asp.NET 5系列 (视频)

又到周五,本周博主的大部分时间都花在深圳了.最近winhec的消息太多了,我只想补充一点,就是winhec在7之后回归,大多数的媒体都还在沿用之前的"硬件工程大会"的名称,其实正确的名称是"硬件工程社区".虽然是一个小小的名字改变,但可见微软的良苦用心:各位媒体们,咱能稍微专业一点么? 为了不错过深圳的好空气,今天跑去海边走了一圈,结果现在坐在机场里面等延误的飞机.也好,正好写完这篇.不过,这两天最高兴的事情就是抓住了Don Box这位大神一起合影.最佳实践:见到大

利用VBA遍历Excel所有sheet的例子

下面是利用VBA遍历Excel sheet的例子,可以用于Excel的批量处理. Sub Insert_CodeString() Dim fs, ft As Object Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim Sql As String Sql = "truncate table code_string;" & Chr(10)

利用VBA导出文件的例子

下面是利用VBA导出文件的例子,可以导出Excel内容等其他可以使用VBA的地方. Sub export_file() Dim fs, ft As Object Dim txtname As String txtname = "export_file" Set fs = CreateObject("scripting.filesystemobject") Set ft = fs.createtextfile(ThisWorkbook.Path & "

NET通用平台

NET通用平台.通用权限.易扩展.多语言.多平台架构框架 先拿出我半前年前平台的设计初稿,经过半年的努力我已经完成了该设计稿的所有功能.并且理念已经远远超出该设计稿. 下面是一些博友对我贴子的评价: 1.楼主,想法很美好,现实很骨感,我们公司就有一套你说的这样的平台,界面都是用XML配置出来的,虽然开发效率很高,但只能做固定版式的系统,有任何版式的修改,几乎都是不可能的,高度的封装,丧失了灵活性. 2.虽然不看好,但楼主愿意试试,我还是支持的. 我对他们的评价的回复是请给我半年时间,我会证明给大

已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10

1.int rand7()    2.{    3.  return rand()%7+1;    4.}    5.  6.int rand10()  7.{  8.    int x=0;  9.    do  10.    {  11.        x=(rand7()-1)*7+rand7();  12.    }  13.    while(x>40);  14.    return x%10+1;  15.} 分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-1

林业通用平台上线

林业通用平台上线,GIS基本功能,标准分幅打印,GPS测量记录表,设计图打印

利用EF和C#泛型实现通用分页查询

利用EF和C#泛型实现通用分页查询 Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的表信息通过xml与实体类对象相关联,使得开发人员只需要关心实体对象,而不需要手动操作数据库,对实体对象的修改会映射到数据库中,这样大大提高了开发效率.以下代码使用了EF.泛型.泛型委托.lambda.匿名类.dynamic动态类型等知识完成了EF的crud,并且提供了一个高效的通用分页查询方法,采用了延时加载,