76范文网
财务管理系统框架构建
时间:2019-10-16 13:49:28 来源:76范文网

财务管理系统框架构建 本文简介:

财务管理系统框架构建1财务管理系统需求分析一个标准的财务管理系统应该包括如图1.1所示的几大功能。除此之外系统还应该包括信息系统所具备的通用功能,例如系统管理、权限设置、数据备份与恢复等。其中每个功能都由若干相关联的子功能模块组成。财务管理系统基础资料维护凭证管理帐薄管理报表管理期末处理往来管理出纳

财务管理系统框架构建 本文内容:

财务管理系统框架构建
1财务管理系统需求分析
一个标准的财务管理系统应该包括如图1.1所示的几大功能。除此之外系统还应该包括信息系统所具备的通用功能,例如系统管理、权限设置、数据备份与恢复等。
其中每个功能都由若干相关联的子功能模块组成。
财务管理系统
基础资料维护
凭证管理
帐薄管理
报表管理
期末处理
往来管理
出纳管理
工资管理
固定资产管理
财务分析
系统管理
图1.1
财务管理系统的基本功能模块
财务管理系统的基本流程如图1.2所示
费用分摊比率设定
科目分摊处理
会计基本资料维护
期初资料开账
开账资料过账处理
凭证手动输入
凭证审核
凭证过账
期间结束
资料查询或报表打印
年度结束

图1.2
财务管理系统基本流程图
1.1

基础资料维护
“基础资料维护”功能模块用于对会计科目、核算项目以及凭证、帐薄、固定资产等项目进行初始化设置,这些设置一般不轻易改动,其中包含的子功能模块如图1.3所示。
其中“会计科目”是基础资料的终点,财务软件的不使用离不开科目的正确设置,其内容包括科目代码、科目名称、助记码、科目类别、是否存货科目、余额方向、数量单位等。
1.2
凭证管理
“凭证管理“功能模块用于完成凭证制定、审核、记账、查询等功能,自动生产各种会计帐,其中包含的子功能模块如图1.4所示。

基础资料维护核算项目
结算方式
常用摘要
会计科目

币别
图1.3

“基础资料维护”功能模块
凭证管理
凭证过账
凭证查询
凭证汇总
凭证检查
凭证审核
凭证的输入
图1.4“凭证管理”功能模块
其中“凭证输入”是凭证管理的重点,在凭证输入模块中将实际业务的分录输入到计算机中,内容包括凭证状态、会计期间、凭证字号、凭证编号、顺序号、日期、附单据、审核、过账、制单、借方合计、贷方合计、过账状态、顺序号码等。一张凭证对应多个记录,分录内容包括分录编号、会计期间、凭证字号、凭证编号、摘要、科目代码、借方、贷方、数量、单价、结算方式、结算号、结算日期等。
1.3
帐薄管理
“帐薄管理”功能模块用于提供各种账务处理、查询、筛选的功能,其中包含的子功能模块如图1.5所示。总账可按科目级别、币别、科目范围等查询;明细帐可按期间范围等、币别、科目范围查询;还提供多栏帐、数量金额明细帐、核算项目分类总账等帐薄报表。
总分类帐
明细帐
多栏帐
数量金额总账
数量金额明细表
核算项目分类总账
帐薄管理
图1.5

“帐薄管理”功能模块
1.4
报表管理
核算项目明细表
利润分配表
损益表
现金流量表
资产负债表
科目余额表
试算平衡表
日报表
报表管理
“报表管理”功能模块用于报表的定义、编制和输出。企业会计核算的结果最后需要用报表的形式反映出来,一般包括账务报表处理、汇总报表处理、合并报表处理等。一般财务系统会预设资产负债表、损益表、利润分配表等各类报表模板,如图1.6所示,简化报表操作过程。
图1.6

“报表管理”功能模块
1.5
期末处理
“期末处理”是系统总结某一会计奇迹的经营活动情况,转至下一期的必做事项。同时该模块在结账前,按企业财务管理和成本计算的要求,必须进行制造费用、产成品成本的结账、期末调汇及损益结账等工作,其中包含的子功能模块如图1.7所示。
自动转账
期末处理
期末结汇
结账损益
期末调汇
图1.7
“期末处理”功能模块
1.6
往来管理
核销应收款
应付帐龄分析
往来对账
往来管理
应收账龄分析
核销应付款
“往来管理”功能模块用于对企业的往来转款进行全面核算、管理、分析、预测、决策。一般包括往来单位管理、经济业务管理、往来转龄分析、往来转款的核销、坏账处理等功能,如图1.8所示。

图1.8

“往来管理”功能模块
1.7
出纳管理
出纳是会计中十分重要的一个岗位,它担负着现金、银行存款的收付职能。“出纳管理”即可同结账系统联合起来使用,也可单独提供给出纳人员使用。一般包括现金帐管理、银行存款帐管理、票据管理等,如图1.9所示。
支票管理
出纳轧帐
出纳报表
日常处理
初始设置
出纳管理
图1.9

“出纳管理”功能模块

出纳系统与账务系统功能分离但数据却可紧密连接共享,合理的数据共享模式可使得会计与出纳人员更能高效的独立工作。
1.8
工资管理
工资发放条
工资管理
其他报表输入
工资统计表
工资汇总表
费用分配
数据输入
核算方法
打印工资条
“工资管理”功能模块用于进行企业工资的发放和核算,工资动态变动管理,工资费用计提与分配、银行代发等;一般包括基础设置、工资结构设置、工资变动管理、工资数据处理、工资报表管理等功能,如图2.0所示。
图2.0

“功能管理”功能模块
1.9
固定资产管理
“固定资产管理”功能模块用于管理、核算固定资产增减变化、变动以及折旧的计提、转账等,一般包括如图2.1所示的子功能模块。允许不同固定资产采用不同的折旧方法,提供标准的折旧方法,提供固定资产卡片自定义设置灵活的报表查询系统。
其他报表输入
固定资产明细账
变动资料录入
月工资量输入
计提折旧
变动资料查询
固定资产清单
固定资产增减表
固定资产理
图2.1
“固定资产管理”功能模块
2.0
财务分析
“财务分析”功能是财务管理的重要组成部分,在核算的基础上以财务报表和其他资料为依据和起点,采用专门的方法,系统地分析和评价企业过去和现在的经营成果、财务状况及其变动,对账务数据进一步的加工、整理、分析和研究,将大量的报表数据转换成对决策有用的信息,是管理层进行日常及重大决策的好帮手,包含的子功能模块如图2.2所示。
损益分析
财务分析
财务指标
财务状况分析
其他自定义报表
图2.2
“财务分析”功能模块“财务状况分析”对截止报告期的资产、负债及所有者权益的结构、比例及变化趋势等情况进行分析,可分为结构分析、比较分析、趋势分析三种分析方法。结构分析对资产、负债及所有者权益中每一具体项目战该类项目以及总体项目的结构、比重进行分析,从而揭示该类财务指标的结构是否合理;比较分析能对同口径(指标名称相同、计算方法相同)指标在任意两个会计期间(或一个会计期间与它的预算值之间)进行比较,借以反映其增减变动情况;趋势分析反映某一财务指标,如资产总计、流动资产合计、银行存款等在年度内月份之间、季度之间和年度之间变化的趋势。
“损益”对本期、本年累计及任一会计期间的盈利状况和盈利能力进行分析。对损益分析也可分为结构分析、比较分析、趋势分析三种分析方法。

2
财务管理系统数据库分析
根据以上需求分析,一个基本的财务管理系统数据库中大致包括100多张数据表,分
别存放相应功能的数据信息,其中“科目表”是起关键作用的表,用于存放科目的信息。其他涉及科目信息的数据表,都只记录科目的代码,根据作为外键的“科目代码”字段相对应。因此“科目表”和其他数据间的关系是1:N的关系。
2.1

财务管理系统E-R图因为整个系统涉及的涉及的实体和属性较多,限于篇幅不能也没有必要逐一列举。如图2.1为财务管理系统关键实体的E-R图。
其他实体于基本信息表间的对应关系都是类似的。本期分类账簿

科目代码
期初余额
本期借方合计
本期贷方合计
数量单位
余额
摘要
项目科目对照表
P

项目名称
项目代码
科目代码
科目级别
内部编号
科目余额表

EK1科目代码
期初借方余额
期初贷方余额
本期借方发生额
本期代发发生额
本年借方累计发生额
本年贷方累计发生额
本期借方余额
本期贷方余额
最后结账分录
会计期间
余额方向
内部编号
记录表

PK
内部编号
分录编号
会计期间
凭证字号
EK2凭证编号
摘要
FK1科目代码
借方
贷方
数量
单价
结算方式
结算号
结算日期
凭证表
PK
凭证编码
内部编号
凭证状态
会计期间
凭证字号
EK1
顺序号
日期
附单据
审核
过账
制单
数量
单价
借方合计
贷方合计
过账状态
顺序号码
科目表
PK
科目代码
科目名称
助记码
科目类别
是否存贷科目
余额方向
数量单位
本明细账簿

内部编号
分录编号
会计期间
凭证字号
凭证编号
EK1
摘要
科目代码
借方
贷方
余额方向
余额
数量
单价
结算方式
结算号
结算日期
余额标记
图2.3
财务管理系统E-R图
2.2

财务管理系统数据表清单


财务管理系统数据表清单
数据表名称
数据表用途
科目表
保存企业财务的科目设置信息
科目余额表
保存财务(账户)科目的余额信息
分录表
用于凭证管理中的分录输入
凭证表
用于凭证输入管理
分录历史表
分录输入确认后数据放入历史
凭证历史表
分录输入确认后数据放入历史
明细账簿
明细账簿用于企业财务明细账簿的输入
分类账簿
明细账簿用于企业财务分类账簿的输入
本年明细帐薄
年度明细帐薄
本年分类帐薄
年度明分类帐薄的汇总
历史明细帐薄
保存明细帐薄历史
历史分类帐薄
保存分类帐薄历史
损益表
保存企业财务的损益表信息
资产负债表
保存企业财务的资产负债表信息
现金流量表
保存企业财务的现金流量表信息
利润分配表
保存企业财务的利润分配表信息
财务状况变动表
保存企业企业财务状况变动表信息
年终损益表
保存企业企业财务年终损益表信息
年终损益表
保存企业企业财务年终损益表信息
年终资产负债表
保存企业企业财务年终资产负债表信息
3
实例制作介绍
3.1
实例介绍
明细账
试算平衡表
帐户设置
科目设置
财务管理系统
凭证管理
帐薄查询
结账及报表
凭证输入
凭证过账
总分类帐
资产负债表
期末结账
图2.4
详细介绍的功能模块
由于用户登陆和权限管理的功能各个系统实现的方法是一致的。
3.2
系统流程图

系统流程图如图3.2所示。
记录业务
凭证输入
凭证查询
财务部门
凭证过账
期末结账
分类帐
分类查询
财务报表查询

图2.5
系统流程图
4
数据库设计
根据实例介绍,“科目表”是系统的关键表,其他各表均与“科目表”通过“科目代码”字段进行多对一的关联。系统共需要11张表,用途分别如图4.1所示。
表4.1

系统数据表及用途
科目表
保存企业财务的科目设置信息
帐薄初始化表
正式使用系统前初始化科目表的期初余额
凭证表
输入会计凭证,分目录表的主表
分录表
输入会计分录,分录表的从表
科目余额表
保存各个会计期间的科目借、贷、余额情况
凭证表历史
保存过转账后的凭证历史
分录表历史
保存过转账后的分录历史
本期明细帐薄
保存当前会计期间的明细张博数据
本期汇总帐薄
保存当前会计期间的明细帐薄数据,期末结账后期末变为新会计期间的期初
资产负债表
统计用表,用于计算资产负债表
系统参数表
系统运行所需的参数信息

4.1
创建数据库
打开SQL
Server企业管理器,新建一个数据库,将其命名为caiwubook。
4.2
创建“科目表”数据表
CREATE
TABLE
[dbo].[帐簿初始化表]
(
[科目代码]
[char]
(20)
NOT
NULL
,
[科目名称]
[char]
(20)
NULL
,
[累计借方]
[money]
NULL
,
[累计贷方]
[money]
NULL
,
[期初余额]
[money]
NULL
,
[余额方向]
[char]
(4)
NULL
)
ON
[PRIMARY]
GO
4.3
创建“凭证表”和“分录表”数据表
REATE
TABLE
[dbo].[凭证表历史]
(
[凭证编号]
[char]
(10)
NOT
NULL
,
[会计期间]
[int]
NULL
,
[凭证字号]
[char]
(2)
NULL
,
[日期]
[datetime]
NULL
,
[附单据]
[int]
NULL
,
[制单]
[char]
(20)
NULL
,
[借方合计]
[money]
NULL
,
[贷方合计]
[money]
NULL
,
[过账状态]
[char]
(4)
NULL
,
[凭证状态]
[char]
(10)
NULL
)
ON
[PRIMARY]
GO
CREATE
TABLE
[dbo].[分录表]
(
[编号]
[int]
IDENTITY
(1,
1)
NOT
NULL
,
[凭证编号]
[char]
(10)
NOT
NULL
,
[摘要]
[char]
(40)
NULL
,
[科目代码]
[char]
(20)
NULL
,
[借方]
[money]
NULL
,
[贷方]
[money]
NULL
,
[数量]
[int]
NULL
,
[单价]
[money]
NULL
,
[结算方式]
[char]
(10)
NULL
,
[结算号]
[int]
NULL
,
[结算日期]
[datetime]
NULL
)
ON
[PRIMARY]
GO

4.4
创建其他关键数据表
CREATE
TABLE
[dbo].[科目余额表]
(
[科目代码]
[char]
(20)
NULL
,
[期初借方余额]
[money]
NULL
,
[期初贷方余额]
[money]
NULL
,
[本期借方发生额]
[money]
NULL
,
[本期贷方发生额]
[money]
NULL
,
[本年借方累计发生额]
[money]
NULL
,
[本年贷方累计发生额]
[money]
NULL
,
[本期借方余额]
[money]
NULL
,
[本期贷方余额]
[money]
NULL
,
[最后结算分录]
[int]
NULL
,
[会计期间]
[int]
NULL
,
[余额方向]
[char]
(4)
NULL
,
[内部编号]
[int]
IDENTITY
(1,
1)
NOT
NULL
)
ON
[PRIMARY]
GO
CREATE
TABLE
[dbo].[资产负债表]
(
[会计期间]
[int]
NOT
NULL
,
[现金及现金等价物]
[money]
NULL
,
[应收账款]
[money]
NULL
,
[坏账准备]
[money]
NULL
,
[应收账款净值]
[money]
NULL
,
[流动资产总计]
[money]
NULL
,
[固定资产原值]
[money]
NULL
,
[累计折旧]
[money]
NULL
,
[固定资产总计]
[money]
NULL
,
[其他资产]
[money]
NULL
,
[资产总计]
[money]
NULL
,
[应付账款]
[money]
NULL
,
[预收账款]
[money]
NULL
,
[应付工资]
[money]
NULL
,
[其他负债]
[money]
NULL
,
[负债总计]
[money]
NULL
,
[实收资本]
[money]
NULL
,
[资本公积]
[money]
NULL
,
[赢余公积]
[money]
NULL
,
[未分配利润]
[money]
NULL
,
[所有者权益总计]
[money]
NULL
,
[负债及所有者权益总计]
[money]
NULL
)
ON
[PRIMARY]
GO
4.5
创建主键及外键等表约束在查询分析器中通过如下代码创建数据表的主键及外键等表约束。
ALTER
TABLE
[dbo].[科目表]
WITH
NOCHECK
ADDPRIMARY
KEY
CLUSTERED

(

[科目代码]
)
ON
[PRIMARY]
GO
ALTER
TABLE
[dbo].[资产负债表]
WITH
NOCHECK
ADDPRIMARY
KEY
CLUSTERED

(

[会计期间]
)
ON
[PRIMARY]
GO
ALTER
TABLE
[dbo].[分录表]
ADD

CONSTRAINT
[FK_分录表_凭证表]
FOREIGN
KEY

(

[凭证编号]
)
REFERENCES
[dbo].[凭证表]
(

[凭证编号]
),
CONSTRAINT
[分录表_科目代码_fk]
FOREIGN
KEY

(

[科目代码]
)
REFERENCES
[dbo].[科目表]
(

[科目代码]
)
GO
ALTER
TABLE
[dbo].[分录表历史]
ADD

CONSTRAINT
[分录表历史_科目代码_fk]
FOREIGN
KEY

(

[科目代码]
)
REFERENCES
[dbo].[科目表]
(

[科目代码]
)
GO
ALTER
TABLE
[dbo].[帐簿初始化表]
ADD

CONSTRAINT
[帐簿初始化表_科目代码_fk]
FOREIGN
KEY

(

[科目代码]
)
REFERENCES
[dbo].[科目表]
(

[科目代码]
)
GO
ALTER
TABLE
[dbo].[本期明细账簿]
ADD

CONSTRAINT
[本期明细账簿_科目代码_fk]
FOREIGN
KEY

(

[科目代码]
)
REFERENCES
[dbo].[科目表]
(

[科目代码]
)
GO
ALTER
TABLE
[dbo].[本期汇总账簿]
ADD

CONSTRAINT
[本期汇总账簿_科目代码_fk]
FOREIGN
KEY

(

[科目代码]
)
REFERENCES
[dbo].[科目表]
(

[科目代码]
)
GO

4.6
创建存储过程
系统为了使用“sf_初始化帐户”、“
sf_启用帐户”、“
sf_凭证帐户”、“
sf_期末结账”和“sf_计算资产负债表”五个存储过程,实现的功能分别为新建帐套、启用帐套、凭证过账确认、期末结账和运算指定会计期间的资产负债表等功能。具体计算方法在下面的脚本中有详细的注释,。
create
proc
sf_初始化帐户
as
begin
tran
--
清除原来数据,从新建立帐户
delete
from
帐簿初始化表
--
设置帐户初始基本数据
insert
into
帐簿初始化表

(科目代码,科目名称,累计借方,累计贷方,期初余额,余额方向)

select
科目代码,科目名称,0,0,0,余额方向
from
科目表
--
设置初始信息
update
系统参数表
set
取值
=
datepart(mm,getdate())

where
参数名称
=
'会计期间开始月份'
update
系统参数表
set
取值
=
datepart(mm,getdate())where
参数名称
=
'当前会计期间'
commit
GO
SET
QUOTED_IDENTIFIER
OFF
GO
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
SET
ANSI_NULLS
ON
GO

create
proc
sf_启用帐户
as
begin
tran
--
清除原来数据,从新建立帐户
delete
from
科目余额表
delete
from
本期汇总账簿
delete
from
本期明细账簿
delete
from
分录表
delete
from
分录表历史
delete
from
凭证表
delete
from
凭证表历史
--
设置本期汇总账簿及科目余额表
insert
into
本期汇总账簿
select
科目代码,0,期初余额,

0,0,0,0,期初余额,余额方向
from
帐簿初始化表
update
本期汇总账簿
set
会计期间=b.取值
from系统参数表
as
b
where
参数名称='当前会计期间'
insert
into
科目余额表(科目代码,
期初借方余额,
期初贷方余额,本期借方发生额,
本期贷方发生额,
本年借方累计发生额,
本年贷方累计发生额,
本期借方余额,
本期贷方余额,
余额方向)select
科目代码,累计借方,累计贷方,0,0,0,0,

case
when
余额方向='借方'
then
期初余额
else
0
end,

case
when
余额方向='贷方'
then
期初余额
else
0
end,

余额方向
from
帐簿初始化表
update
科目余额表
set
会计期间=b.取值
from系统参数表
as
b
where
参数名称='当前会计期间'
commit
GO
create
proc
sf_凭证过帐
as
begin
tran
--
设置本期汇总账簿信息
update
本期汇总账簿
set
本期借方合计
=
本期借方合计
+
b.借方,

本期贷方合计
=
本期贷方合计
+
b.贷方,

本年借方累计
=
本年借方累计
+
b.借方,

本年贷方累计
=
本年贷方累计
+
b.贷方,

余额
=
余额
+
case
when
余额方向='借方'
then
(借方
-
贷方)else
(贷方
-
借方)
endfrom
本期汇总账簿
as
a,

(select
科目代码,
sum(借方)
as
借方,
sum(贷方)
as
贷方
from
分录表
as
f,
凭证表
as
p
where
f.凭证编号
=
p.凭证编号
group
by
f.科目代码)
as
b

where
a.科目代码
=
b.科目代码
--
设置本期明细账簿信息
insert
into
本期明细账簿(分录编号,会计期间,凭证字号,
凭证编号,
摘要,科目代码,
借方,
贷方,
数量,
单价,
结算方式,结算号,
结算日期)select
编号,会计期间,凭证字号,
p.凭证编号,
摘要,
科目代码,
借方,
贷方,
数量,
单价,
结算方式,
结算号,
结算日期
from
凭证表
as
p,
分录表
as
fwhere
f.凭证编号
=
p.凭证编号

--计算余额
update
本期明细账簿

set
余额方向=a.余额方向
from
科目表
as
a

where
本期明细账簿.科目代码=a.科目代码
--
通过游标循环计算余额
declare
@bh
int,
@dm
char(20),
@jf
money,
@df
money
declare
@fx
char(4),
@bj
char(4),
@ye
money,
@kjqj
int
declare
mycursor
cursor
for
select
内部编号,科目代码,

借方,贷方,余额方向,余额标记,会计期间
from
本期明细账簿

where
余额标记
is
null
order
by
内部编号
open
mycursor
fetch
next
from
mycursor
into
@bh,@dm,@jf,@df,@fx,@bj,@kjqj
while
(@@fetch_status=0)
begin

select
@ye
=
余额
from
本期明细账簿
where
内部编号
in
(select
max(内部编号)
from
本期明细账簿
where
内部编号
<
@bh
and
科目代码=@dm
and
余额标记
=
'是')

--
没有,本期第一条明细,从科目余额表取余额

if(@ye
is
null)

select
@ye
=
case
when
余额方向='借方'
then
本期借方余额
-
本期贷方余额
else
本期贷方余额
-
本期借方余额
end
from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
@dm

select
@ye
=
isnull(@ye,0)

update
本期明细账簿set
余额=case
when
@fx='借方'
then

@ye
+
@jf
-
@df
else
@ye
+
@df
-
@jf
end,余额标记='是'where
内部编号=@bhfetch
next
from
mycursor
into
@bh,@dm,@jf,@df,@fx,@bj,@kjqj
end
close
mycursor
deallocate
mycursor
--
更改状态
update
凭证表
set
过账状态
=
'已过'
--
放入历史
insert
into
凭证表历史
select
*
from
凭证表
insert
into
分录表历史
select
*
from
分录表
--
清除已过帐数据
--
注意,改放到程序中清除,因为要统计凭证张数/分录张数和金额
--
统计后删除
--
delete
from
分录表
--
delete
from
凭证表
commit
GO
create
proc
sf_期末结帐
as
begin
tran
--
先将没有过帐的凭证过帐
exec
sf_凭证过帐
declare
@kjqj
int--
当前会计期间
select
@kjqj
=
会计期间
from
本期汇总账簿

--
计算科目余额表,可以统计资产负债表/损溢表等
update
科目余额表
set
本期借方发生额
=
b.本期借方合计,本期贷方发生额
=
b.本期贷方合计,会计期间
=
b.会计期间,
余额方向
=
b.余额方向

from
科目余额表
as
a,
本期汇总账簿
as
b

where
a.科目代码
=
b.科目代码
and
a.会计期间=b.会计期间
update
科目余额表
set本年借方累计发生额
=
本年借方累计发生额
+
本期借方发生额,

本年贷方累计发生额
=
本年贷方累计发生额
+
本期贷方发生额,

本期借方余额
=
期初借方余额
+
本期借方发生额,

本期贷方余额
=
期初贷方余额
+
本期贷方发生额

where
会计期间
=
@kjqj
--
更新会计期间
update
系统参数表
set
取值
=
取值
+
1
where
参数名称='当前会计期间'
--
将本期汇总账簿和明细账簿倒入历史,实例程序不演示
----------------------------------------------
--
清除汇总账簿和明细账簿,进入新的会计期间
update
本期汇总账簿
set
会计期间
=
会计期间
+
1,
期初余额=余额,

本期借方合计
=
0,
本期贷方合计
=
0,
余额
=
0
delete
from
本期明细账簿

--
新会计期间的科目余额表
insert
into
科目余额表(科目代码,
期初借方余额,
期初贷方余额,本期借方发生额,
本期贷方发生额,
本年借方累计发生额,
本年贷方累计发生额,
本期借方余额,
本期贷方余额,
余额方向,会计期间)select
科目代码,
本期借方余额,
本期贷方余额,0,0,0,0,本期借方余额,
本期贷方余额,
余额方向,会计期间+1
from
科目余额表
where
会计期间
=
@kjqj
commit
GO
SET
QUOTED_IDENTIFIER
OFF
GO
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
SET
ANSI_NULLS
ON
GO
create
proc
sf_计算资产负债表
@kjqj
int
as
begin
tran
--
计算资产负债表,这里提供计算的方法供演示
--
没有列出的明细项目都归到其他资产和其他负债里
--
注意,这里按照科目代码统计,主要说明资产负债表的含意和计算方法
--
如果科目代码不是这样,改存储过程需要作相应的修改
delete
from
资产负债表
where
会计期间
=
@kjqj
insert
into
资产负债表(会计期间)
values(@kjqj)
update
资产负债表
set
现金及现金等价物
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
>=
101
and
科目代码
<=
111)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
应收账款
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
>=
121
and
科目代码
<=
129
and
科目代码<>125)as
b
where
a.会计期间
=
@kjqj
--
注意坏账准备为贷方
update
资产负债表
set
坏账准备
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
125)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
应收账款净值
=
应收账款
-
坏账准备
update
资产负债表
set
流动资产总计
=
现金及现金等价物
+
应收账款净值
update
资产负债表
set
固定资产原值
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=171)as
b
where
a.会计期间
=
@kjqj
--
注意累计折旧为贷方
update
资产负债表
set
累计折旧
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
175)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
固定资产总计
=
固定资产原值
-
累计折旧
update
资产负债表
set
其他资产
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期借方余额,0)-isnull(本期贷方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
>=
131
and
科目代码
<=
195
and
科目代码<>171and
科目代码
<>
175)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
资产总计
=
流动资产总计
+
固定资产总计
+
其他资产
--
计算负债及所有者权益
--
负债类级别都是贷方金额
update
资产负债表
set
应付账款
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
>=
201
and
科目代码
<=
204
)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
预收账款
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
206)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
应付工资
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
215)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
其他负债
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
>=
209
and
科目代码
<=
281
and
科目代码
<>
215)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
负债总计
=
应付账款
+
预收账款
+
应付工资
+
其他负债
--
计算所有者权益
update
资产负债表
set
实收资本
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
301)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
资本公积
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
311)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
赢余公积
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
313)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
未分配利润
=
b.金额
from
资产负债表
as
a,

(select
sum(isnull(本期贷方余额,0)-isnull(本期借方余额,0))
as
金额from
科目余额表
where
会计期间
=
@kjqj
and
科目代码
=
321
or
科目代码
=
322
)as
b
where
a.会计期间
=
@kjqj
update
资产负债表
set
所有者权益总计
=
实收资本
+
资本公积
+赢余公积
+
未分配利润
update
资产负债表
set
负债及所有者权益总计
=
负债总计
+
所有者权益总计
commit
GO

5
程序开发
本系统采用多文档窗体程序,每一功能对应一个子窗体。
5.1
程序运行结果
本实例的运行结果如图2.1所示。选择主菜单中的各菜单项可进入相应的功能。

图2.6
实例运行结果
(1)
首先选择【基础数据管理】|【科目设置】菜单命令,进入【会计科目设置】功能窗体,在其中输入科目的基础信息,如图2.7所示,其中【科目类别】选项组表示该科目所属的类别,一般资产类科目余额方向为借方,负债和权益科目余额方向为贷方,但也有特殊的,如“坏账准备”的科目余额方向就是贷方。

图2.7
会计科目设置功能窗体

需要嫌憎或修改科目,单击相应的按钮,输入信息后单击【保存】按钮即可。需要删除一条信息,选中该信息后单击【删除】按钮。
(2)
科目设置完成后选择【基础数据管理】|【帐户设置】命令,进入【帐户设置(期初数据录入)】功能窗体,如图2.8所示。

图2.8
所示
帐户设置功能窗体该功能模块有【建立新帐薄】、【启用帐薄】和【试算平衡】按钮用于建立一个新的功能模块的初始帐薄,单击按钮,系统在后台调用“sf_初始化帐户”存储过程,删除“帐薄初始化表”原有的信息,根据“科目表”重新创建“帐薄初始化表”并在窗体中显示。在DBGrid中输入各科目的初始信息和系统参数信息,完成后单击【启用帐薄】按钮启用新的帐薄。【启用帐薄】按钮先检查当前帐薄试算是否平衡,如果平衡则在后台调用“sf_启用帐户”存储过程,启用新定义的帐薄,需要注意的是,启用新定义的帐薄会删除系统历史的所以数据。【试算平衡】按钮可以随时查看当前的帐薄信息是否平衡,如图2.9和图3.0所示。从窗体下方的合计金额可以不平衡的原因。
(3)
启用帐薄后可以进行凭证录入的工作。选择【凭证管理】|【凭证输入】命令,进入【会计凭证输入】功能窗体,如图3.1所示,在其中输入凭证和会计分录信息。单击【新增】按钮,系统自动新建一个凭证,凭证号和会计期间等信息自动产生,其中会计期间是“系统参数表”中的“当前会计期间”;在下方的stringGrid中输入分录的信息,完成后单击【保存】按钮,系统先检查借贷双方是否平衡,如果平衡给予保存。需要修改某个凭证信息,选择相应的凭证,单击【修改】按钮,修改完成后单击【保存】按钮即可。
(4)
完成了合计凭证的输入工作,需要对凭证进行过账。凭证过账就是确认输入的会计凭证,过账后的凭证不能在进行修改。选择【凭证管理】|【凭证过账】命令。系统提示是否过账,如图3.2所示。单击【是】按钮,系统在后台调用“sf_凭证过账”存储过程,对凭证进行过账,计算本期汇总帐薄和明细帐薄。过账完成后系统提示过账成功,并显示过账的凭证数及借贷方金额等信息。

图3.1
会计凭证输入功能窗体
图3.1
凭证过账功能
(5)
可以分别选择【帐薄查询】|【总分类账】和【帐薄查询】|【明细账】命令,分别进行本期【总分类帐查询】和【明细帐查询】功能,如图3.2和图3.3所示。
图3.2
总分类帐查询图3.3
明细账查询

(6)
当前会计期间内的所有凭证过账完成后,可进行月末结账操作,转入下一会计期间,结账前首先要进行试算平衡的检查。选择【结账及报表】|【失算平衡表】命令,可以看到当前账目的平衡信息,如图3.4所示。
图3.4
试算平衡功能

(7)
试算结果平衡后选择【结账及报表】|【期末结账】菜单命令,系统在后台调用“sf_计算资产负债表”存储过程计算资产负债表,然后在报表窗体中显示报表,如图3.5所示。
5.2创建工程启动Microsoft
Visual
.NET
2003,在主菜单中选择【文件】|【新建】|【项目】命令,弹出【新建项目】对话框,在【项目类型】列表框中选择【Visual
Basic
项目】选项,然后在【模板】列表框中选择【Windowns
应用程序】。在【名称】文本框输入一个合适的方案文件名,选取存放的位置,然后单击【确定】按钮完成新项目的开启。

5.3
创建系统主窗体
(1)
利用系统默认生成的窗体作为主窗体,并为其添加主菜单控件和其他控件,布局如图3.5所示。

图3.5
系统主窗体
(2)
窗体及其控件的属性设置如表3.6和表3.7所示。
表3.6
主窗体属性设置
控制类型
对象(控件)名
属性
取值(说明)
From
Frorm
Main
Name
frmMain

Caption
财务管理系统

IsMdiContainer
True

|表3.7
窗体主菜单属性

菜单栏
菜单项
属性
取值(说明)
MnJichu
Text
基础数据管理(&V)
MnKemu
Text
科目设置(&Z)
MnZhanghu
Text
帐户设置(&W)
Mnpingzheng
Text
凭证管理(&W)
Mnshuru
Text
凭证管理(&W
Mnguozhang
Text
凭证过账(&Z)
Mnzhangbu
Text
账簿查询(&X)
Mnzongfen
Text
总分类账(Y)Mnmingxi
Text
明细账(&Z)
Mnjiezhang
Text
结账及报表(&Y)
Mnpingzheng
Text
试算平衡表(&Y)
MnQimo
Text
期末结账(&Y)
Mnfuzhai
Text
资产负债表(&Z)
MnExit
Text
退出系统(&Z)

5.4
创建数据操作访问模块
因为系统中所有对数据表进行维护的窗体界面及实现的功能大体是一致的,为了减少系统编程的工作量,可以把这些共同的部分抽取出来,生成一个父类窗体,其他数据库操作窗体均可以通过继承父类窗体获得数据维护的功能。
(1)
新建一个窗体,将其Name属性改为“frmBase”,并为其增加如图3.8所示的控件。
图3.8
基础窗体
(2)
各控件的属性设置如表3.9所示。
表3.9
基础窗体控件属性设置
控件类型
对象名
属性
取值(说明)
ImageList
ImageList1
Images
Toolbar
Toolbar1
Buttons
Toolbar
Toolbar1
ImageList
ImageList1
Groupbox
Grbsearch
Dock
Top
Textbox
Txbone
Text
Textbox
Txbtwo
Text
Textbox
Txthree
Text
Textbox
Txtsearch
Text
Button
Btnsearch
Text
Datagird
Dgglist
Anchor
Top,button,left,right
(3)为窗体类frmbase添加以下变量。
Protected
bmData
As
BindingManagerBase
Protected
dtData
As
DataTable
'bAdd
=
true
为新增
'bAdd
=
false
为修改
Protected
bAdd
As
Boolean
(4)为窗体类frmbase添加以下在派生类中需要重写的函数。Public
Overridable
Sub
Prepare()
End
Sub
'设置DataGrid控件
Public
Overridable
Sub
SetDataGrid()
End
Sub
'查询函数
Public
Overridable
Sub
SearchResult()
SetDataGrid()
dgdList.DataSource
=
dtData.DefaultView
End
Sub
'新增函数
Public
Overridable
Sub
LoadData()
End
Sub
Public
Overridable
Sub
SaveForAdd()
End
Sub
'更新函数
Public
Overridable
Sub
SaveForUpdate()
End
Sub
'删除函数
Public
Overridable
Sub
DeleteData()
End
Sub
'清除函数
Public
Overridable
Sub
Clear()
End
Sub
Public
Overridable
Sub
LoadDataForDetail()
End
Sub
'设置TextBox函数
Public
Overridable
Sub
SetTextBoxState(ByVal
bState
As
Boolean)
End
Sub
Public
Overridable
Sub
ResetDataGridData()
End
Sub
End
Class
(5)为窗体类frmbase的load事件添加响应函数
Private
Sub
frmBase_Load(ByVal
sender
As
Object,
_
ByVal
e
As
System.EventArgs)
Handles
MyBase.Load
Prepare()
SetDataGrid()
SetTextBoxState(True)
End
Sub
(6)为按钮btnsearch的click事件添加响应函数。
Private
Sub
btnSearch_Click(ByVal
sender
As
System.Object,
_
ByVal
e
As
System.EventArgs)
Handles
btnSearch.Click
SearchResult()
End
Sub
(7)为数据表格dgdlist的currentcellchanged事件添加响应函数。
Private
Sub
dgdList_CurrentCellChanged(ByVal
sender
As
Object,
_
ByVal
e
As
System.EventArgs)
Handles
dgdList.CurrentCellChanged
Try
'判断bmData是否为Nothing
If
bmData
Is
Nothing
Then
Exit
Sub
End
If
'If
bmData.Position
<>
dgdList.CurrentCell.RowNumber
Then
bmData.Position
=
dgdList.CurrentCell.RowNumber
LoadDataForDetail()
'End
If
Catch
ex
As
Exception
MessageBox.Show(ex.ToString)
End
Try
End
Sub
(8)
为窗体类frmbase添加私有函数settoolbarstate。
Private
Sub
SetToolBarState(ByVal
bState
As
Boolean)
'设置Button的是否能够单击
ToolBar1.Buttons("0").Enabled
=
bState
ToolBar1.Buttons("1").Enabled
=
bState
ToolBar1.Buttons("2").Enabled
=
bState
ToolBar1.Buttons("3").Enabled
=
bState
ToolBar1.Buttons("4").Enabled
=
bState
ToolBar1.Buttons("5").Enabled
=
bState
ToolBar1.Buttons("6").Enabled
=
bState
ToolBar1.Buttons("7").Enabled
=
Not
bState
ToolBar1.Buttons("8").Enabled
=
Not
bState
End
Sub
(9)
为工具栏toolbar1的buttonclick事件添加响应事件。
Private
Sub
ToolBar1_ButtonClick(ByVal
sender
As
Object,
_
ByVal
e
As
ToolBarButtonClickEventArgs)
_
Handles
ToolBar1.ButtonClick
Select
Case
e.Button.Text
Case
"首记录"
'返回首记录
bmData.Position
=
0
Case
"上记录"
If
bmData.Position
<>
0
Then
bmData.Position
-=
1
End
If
Case
"下记录"
If
bmData.Position
<>
bmData.Count
Then
bmData.Position
+=
1
End
If
Case
"尾记录"
'返回尾记录
bmData.Position
=
bmData.Count
Case
"新增"
Me.dgdList.Enabled
=
False
SetTextBoxState(False)
SetToolBarState(False)
bAdd
=
True
Clear()
Case
"修改"
Me.dgdList.Enabled
=
False
SetTextBoxState(False)
SetToolBarState(False)
bAdd
=
False
Case
"删除"
'弹出询问对话框
Dim
dlgResult
As
DialogResult
=
_MessageBox.Show("你确认删除此数据?",
_

"删除",
MessageBoxButtons.OKCancel)
If
dlgResult
=
DialogResult.OK
Then
DeleteData()
End
If
Case
"保存"
SetToolBarState(True)
SetTextBoxState(True)
If
bAdd
=
True
Then
'为新增数据保存
SaveForAdd()
Else
'为更新数据保存
SaveForUpdate()
End
If
Me.dgdList.Enabled
=
True
Case
"取消"
SetTextBoxState(True)
SetToolBarState(True)
Me.dgdList.Enabled
=
True
ResetDataGridData()
Case
"退出"
'关闭本窗体
Me.Close()
End
Select
Try
Me.dgdList.CurrentRowIndex
=
bmData.Position
Catch
ex
As
Exception
End
Try
End
Sub5.5
实现会计科目设置功能。
(1)
选择【文件】|【添加新项】命令,在【添加新项】对话框的【模板】列表框中选择【继承的窗体】选项,取名为“frmKeMu.vb”。单击【打开】按钮弹出【继承选项器】对话框,在其中选择frmbase选项并单击【确定】按钮。为先创建的窗体添加如图3.9所示的控件。
图3.9
frmKeMu
窗体
(2)
各控件的属性设置如表4.0所示。
表4.0

frmKeMu窗体控件属性设置
控件类型
对象名
属性
取值
Form
frmKeMu
Text
Frmbase
Groupbox
Grbright
Anchor
Top,bottom,left,right
Combobox
Cbbkind
Items
资产
负债
权益
成本
损益
Combobox
Cbbkind
Dropdownstyle
Dropdown
Combobox
Cbbdirection
Items
借方
贷方
Combobox
Cbbdirection
Dropdownstyle
Dropdown
Textbox
Txbcode
Text
Textbox
Txbname
Text
Textbox
Txbhelpcode
Text

(3)
从工具栏中拖动一个sqldataadpter对象到窗体上,连接caiwubook数据库。添加科目表,并选择字段:科目代码、科目名称、助记符、科目类别、余额方向。单击【确定】按钮完成sqldataadapter对象的配置。
(4)
在sqldataadapter对象上右击,在弹出的快捷菜单中选择【生成数据集】命令,在弹出的【生成数据集】对话框中单击【确定】按钮。
(5)
为每个textbox控件和combobox控件设置数据源。
(6)
重写frmkemu的基类的以下函数。Public
Overrides
Sub
Prepare()
Me.Text
=
"会计科目设置"End
SubPublic
Overrides
Sub
LoadData()
Dim
strFilter
As
String
If
txbOne.Text.Trim.Length
=
0
Then
If
txbTwo.Text.Trim.Length
=
0
Then
If
txbThree.Text.Trim.Length
=
0
Then
strFilter
=
""
Else
strFilter
=
"where
科目类别
like
'"
strFilter
+=
txbThree.Text.Trim
+
"%'"
End
If
Else
strFilter
=
"where
科目名称
like
'"
strFilter
+=
txbTwo.Text.Trim
+
"%'"
If
txbThree.Text.Trim.Length
<>
0
Then
strFilter
+=
"
and
科目类别
like
'"
strFilter
+=
txbThree.Text.Trim
+
"%'"
End
If
End
If
Else
strFilter
=
"where
科目代码
like
'"
strFilter
+=
txbOne.Text.Trim
+
"%'"
If
txbTwo.Text.Trim.Length
<>
0
Then
strFilter
+=
"
and
科目名称
like
'"
strFilter
+=
txbTwo.Text.Trim
+
"%'"
If
txbThree.Text.Trim.Length
<>
0
Then
strFilter
+=
"
and
科目类别
like
'"
strFilter
+=
txbThree.Text.Trim
+
"%'"
End
If
Else
If
txbThree.Text.Trim.Length
<>
0
Then
strFilter
+=
"
and
科目类别
like
'"
strFilter
+=
txbThree.Text.Trim
+
"%'"
End
If
End
If
End
If
'清空DataSet11
DataSet11.Clear()
SqlConnection1.ConnectionString
=
DataBase.sConn
SqlDataAdapter1.SelectCommand.CommandText
_
=
"select
*
from
科目表
"
+
strFilter
'根据查询条件重新填充DataSet11
SqlDataAdapter1.Fill(DataSet11)
dtData
=
DataSet11.Tables("科目表")
bmData
=
Me.BindingContext(DataSet11,
"科目表")
If
bmData.Count
<>
0
Then
bmData.Position
=
0
End
If
End
Sub
Public
Overrides
Sub
SetDataGrid()
LoadData()
'定义一个DataGrid表样式
Dim
ts
As
New
DataGridTableStyle
Dim
aColumnTextColumn
As
DataGridTextBoxColumn
Dim
numCols
As
Integer
=
dtData.Columns.Count
Dim
i
As
Integer
For
i
=
0
To
1
aColumnTextColumn
=
New
DataGridTextBoxColumn
aColumnTextColumn.MappingName
=
_
dtData.Columns(i).ColumnName
aColumnTextColumn.HeaderText
=
_
dtData.Columns(i).ColumnName
aColumnTextColumn.NullText
=
""
aColumnTextColumn.ReadOnly
=
True
ts.GridColumnStyles.Add(aColumnTextColumn)
Next
ts.AlternatingBackColor
=
Color.LightGray
ts.AllowSorting
=
False
ts.MappingName
=
dtData.TableName
dgdList.TableStyles.Clear()
dgdList.TableStyles.Add(ts)
Dim
dv
As
DataView
=
dtData.DefaultView
dv.AllowNew
=
False
dv.AllowDelete
=
False
'dv.AllowEdit
=
False
'设置数据源
dgdList.DataSource
=
dtData.DefaultView
bmData
=
Me.BindingContext(DataSet11,
"科目表")
lblCount.Text
=
"记录数:"
+
dtData.Rows.Count.ToString()
End
Sub
Public
Overrides
Sub
SetTextBoxState(ByVal
bState
As
Boolean)
Me.txbCode.ReadOnly
=
bState
Me.txbHelpCode.ReadOnly
=
bState
Me.txbName.ReadOnly
=
bState
Me.cbbDirection.Enabled
=
Not
bState
Me.cbbKind.Enabled
=
Not
bState
End
Sub
Public
Overrides
Sub
Clear()
Me.txbCode.Text
=
""
Me.txbHelpCode.Text
=
""
Me.txbName.Text
=
""
End
Sub
Public
Overrides
Sub
SaveForUpdate()
Try
Dim
row
As
Integer
row
=
dgdList.CurrentCell.RowNumber
dgdList.CurrentCell
=
_
New
DataGridCell((row
+
1)
Mod
bmData.Count,
0)
'判断是否有更新的数据
If
Me.DataSet11.HasChanges
=
True
Then
SqlDataAdapter1.Update(DataSet11)
End
If
Catch
ex
As
Exception
MessageBox.Show("数据修改失败!")
End
Try
End
Sub
Public
Overrides
Sub
SaveForAdd()
Dim
drData
As
DataRow
=
DataSet11.Tables("科目表").NewRow()
Try
drData("科目代码")
=
txbCode.Text.Trim
drData("科目名称")
=
txbName.Text.Trim
drData("助记码")
=
txbHelpCode.Text.Trim
drData("科目类别")
=
cbbKind.Text.Trim
drData("余额方向")
=
cbbDirection.Text.Trim
Catch
ex
As
Exception
MessageBox.Show("数据格式不正确!")
Exit
Sub
End
Try
Try
DataSet11.Tables("科目表").Rows.Add(drData)
If
Me.DataSet11.HasChanges
=
True
Then
SqlDataAdapter1.Update(DataSet11)
End
If
Catch
ex
As
Exception
MessageBox.Show("数据添加成功!")
End
Try
End
Sub
到此会计科目设置功能已经完成
5.6
实现帐户设置功能帐户设置功能窗体不需要从父窗体继承。
(1)
新建一个窗体,将其name属性改为“frmzhanghu”,并为其添加如图4.1所示的控件。
图4.1

frmzhanghu窗体
(2)
各控件的属性设置如表4.2所示。
图4.2
frmzhanghu窗体控件属性设置
控件类型
对象名
属性
取值(说明)
From
Frmzhanghu
Text
帐户录入(期初数据录入)
Toolbar
Toolbar1
Buttons
如图4.1
Imagelist
Imagelist1
Images
如图4.1
Groupbox
Grbsearch
Anchor
Top,left,right
Button
Btnnew
Text
建立新账簿
Button
Btnstart
Text
启用账簿
Button
Btntry
Text
试算平衡
Datagird
Dgglist
Anchor
Top,button,left,right
Datagrid
Dgdright
Anchor
Top,button,right
(3)
从工具箱中拖出一个sqldataadapter对象到窗体上,连接caiwubook数据库。添加账簿初始化表并选择字段:科目代码、科目名称、余额方向、累计借方、累积贷方、期初余额。
(4)
在sqldataadapter对象上右击,在弹出的快捷菜单中选择【生成数据集】命令,在弹出的【生成数据集】对话框中单击【确定】按钮。
(5)
从工具箱中拖动一个sqldataadapter对象到窗体上,连接caiwubook数据库,添加系统参数表并选择字段:编号、参数名称、取值。
(6)
在sqldataadapter2对象上右击,在弹出的快捷菜单中选择【生成数据集】命令,在弹出的【生成数据集】对话框中单击【确定】按钮。
(7)
为窗体累frmzhanghu添加以下私有变量。

Private
dtLeft
As
DataTable
Private
dtRight
As
DataTable

(8)
为窗体类frmzhanghu添加以下私有函数。Private
Sub
SetLeftDataGrid()
Me.SqlConnection1.ConnectionString
=
DataBase.sConn
SqlDataAdapter1.Fill(DataSet11)
dtLeft
=
DataSet11.Tables("帐簿初始化表")
Dim
ts
As
New
DataGridTableStyle
Dim
aColumnTextColumn
As
DataGridTextBoxColumn
Dim
numCols
As
Integer
=
dtLeft.Columns.Count
Dim
i
As
Integer
For
i
=
0
To
numCols
-
1
aColumnTextColumn
=
New
DataGridTextBoxColumn
aColumnTextColumn.MappingName
=
_
dtLeft.Columns(i).ColumnName
aColumnTextColumn.HeaderText
=
_
dtLeft.Columns(i).ColumnName
aColumnTextColumn.NullText
=
""
aColumnTextColumn.Width
=
60
aColumnTextColumn.ReadOnly
=
True
If
i
>
2
Then
aColumnTextColumn.ReadOnly
=
False
aColumnTextColumn.HeaderText
+=
"(可编辑)"
aColumnTextColumn.Width
=
105
End
If
ts.GridColumnStyles.Add(aColumnTextColumn)
Next
ts.AlternatingBackColor
=
Color.LightGray
ts.AllowSorting
=
False
ts.MappingName
=
dtLeft.TableName
dgdLeft.TableStyles.Add(ts)
Dim
dv
As
DataView
=
dtLeft.DefaultView
dv.AllowNew
=
False
dv.AllowDelete
=
False
'dv.AllowEdit
=
False
'设置数据源
dgdLeft.DataSource
=
dtLeft.DefaultView
End
Sub
Private
Sub
SetRightDataGrid()
Me.SqlConnection1.ConnectionString
=
DataBase.sConn
SqlDataAdapter2.Fill(DataSet11)
dtRight
=
DataSet11.Tables("系统参数表")
Dim
ts
As
New
DataGridTableStyle
Dim
aColumnTextColumn
As
DataGridTextBoxColumn
Dim
numCols
As
Integer
=
dtRight.Columns.Count
Dim
i
As
Integer
For
i
=
0
To
numCols
-
1
aColumnTextColumn
=
New
DataGridTextBoxColumn
aColumnTextColumn.MappingName
=
_
dtRight.Columns(i).ColumnName
aColumnTextColumn.HeaderText
=
_
dtRight.Columns(i).ColumnName
aColumnTextColumn.NullText
=
""
If
i
=
0
Then
aColumnTextColumn.Width
=
30
Else
aColumnTextColumn.Width
=
60
End
If
aColumnTextColumn.ReadOnly
=
True
If
i
=
2
Then
aColumnTextColumn.ReadOnly
=
False
aColumnTextColumn.HeaderText
+=
"(可编辑)"
aColumnTextColumn.Width
=
80
End
If
ts.GridColumnStyles.Add(aColumnTextColumn)
Next
ts.AlternatingBackColor
=
Color.LightGray
ts.AllowSorting
=
False
ts.MappingName
=
dtRight.TableName
dgdRight.TableStyles.Add(ts)
Dim
dv
As
DataView
=
dtRight.DefaultView
dv.AllowNew
=
False
dv.AllowDelete
=
False
'dv.AllowEdit
=
False
'设置数据源
dgdRight.DataSource
=
dtRight.DefaultView
End
Sub
(9)
为窗体frmzhanghu的load事件添加事件响应函数。Private
Sub
frmZhangHu_Load(ByVal
sender
As
Object,
_
ByVal
e
As
System.EventArgs)
Handles
MyBase.Load
SetLeftDataGrid()
SetRightDataGrid()
End
Sub
(10)
为工具栏toolbar1的buttonclick事件响应函数。Private
Sub
ToolBar1_ButtonClick(ByVal
sender
As
Object,
ByVal
_
e
As
ToolBarButtonClickEventArgs)
Handles
ToolBar1.ButtonClick
Dim
row
As
Integer
row
=
dgdLeft.CurrentCell.RowNumber
dgdLeft.CurrentCell
=
_
New
DataGridCell((row
+
1)
_
Mod
DataSet11.Tables("帐簿初始化表").Rows.Count,
0)
row
=
dgdRight.CurrentCell.RowNumber
dgdRight.CurrentCell
=
New
DataGridCell((row
+
1)
_
Mod
DataSet11.Tables("系统参数表").Rows.Count,
0)
If
DataSet11.HasChanges
=
True
Then
Try
SqlDataAdapter1.Update(DataSet11)
SqlDataAdapter2.Update(DataSet11)
Catch
ex
As
Exception
MessageBox.Show("更新数据出错!")
End
Try
End
If
End
Sub(11)
为按钮btnnew的click事件添加事件响应函数。

Private
Sub
btnNew_Click(ByVal
sender
As
System.Object,
_
ByVal
e
As
System.EventArgs)
Handles
btnNew.Click
Dim
dlgResult
As
DialogResult
=
_
MessageBox.Show("是否清除原账簿信息,并初始化新帐簿?",
_
"删除",
MessageBoxButtons.OKCancel)
If
dlgResult
=
DialogResult.OK
Then
Dim
db
As
DataBase
=
New
DataBase
db.RunDelOrInsSQL("exec
sf_初始化帐户")
db.Dispose()
End
If
SqlDataAdapter1.Fill(DataSet11)
dtLeft
=
DataSet11.Tables("帐簿初始化表")
dgdLeft.DataSource
=
dtLeft
End
Sub
(12)
为按钮btnstart的click事件添事件响应函数。
Private
Sub
btnStart_Click(ByVal
sender
As
System.Object,
_
ByVal
e
As
System.EventArgs)
Handles
btnStart.Click
Dim
dlgPingHeng
As
frmPingHeng
=
New
frmPingHeng
'If
dlgPingHeng.CalPingHeng(0)
<>
True
Then
'MessageBox.Show("初始数据试算不平衡,请检查数据",
_
'"确认",
MessageBoxButtons.OK)
'Return
'End
If
Dim
strMsg
As
String
=
"试算结果平衡,"
strMsg
+=
"启用新帐簿将删除所有历史数据,是否继续?"
Dim
dlgResult
As
DialogResult
=
_
MessageBox.Show(strMsg,
"确认",
MessageBoxButtons.OKCancel)
'调用sf_初始化帐户存储过程建立新帐簿
If
dlgResult
=
DialogResult.OK
Then
Dim
db
As
DataBase
=
New
DataBase
db.RunDelOrInsSQL("exec
sf_启用帐户")
strMsg
=
"新帐簿成功启用"
MessageBox.Show(strMsg,
"确认",
MessageBoxButtons.OK)
dlgPingHeng.Dispose()
End
If
End
Sub
(13)
单击【试算平衡】按钮时需要弹出一个新的窗体显示试算的结果。新建一个窗体,并命名“frmpingheng”,为其添加如图4.3所示的控件。
图4.3
frmpingheng窗体
(14)
各控件的属性设置如表4.4所示。

图4.4

frmpingheng窗体控件属性设置
控制类型
对象名
属性
取值(说明)
From
Frmpingheng
Text
试算平衡
Datagrid
Dgdtop
Anchor
Top,bottom,left,right
Datagrid
Dgdbottom
Dock
Botton
(15)
为窗体类frmpingheng添加以下私有函数。

'Private
Sub
SetTopDataGrid()
'Dim
db
As
DataBase
=
New
DataBase
'Dim
strSQL
As
String
=
"select
科目代码,科目名称,(case"
'strSQL
+=
"
when
余额方向='借方'
then
期初余额
else
0
end
-"
'strSQL
+=
"
累计借方)
as
期初借方,(case
when
余额方向='贷方'"
'strSQL
+=
"
then
期初余额
else
0
end
-
累计贷方)
as
期初贷方,"
'strSQL
+=
"累计借方
as
本期发生借方,累计贷方
as
本期发生贷方,"
'strSQL
+=
"case
when
余额方向='借方'
then
期初余额
else
0
end
as
"
'strSQL
+=
"期末借方,case
when
余额方向='贷方'
then
期初余额
else
0"
'strSQL
+=
"
end
as
期末贷方
from
帐簿初始化表
where
累计借方<>0
or"
'strSQL
+=
"
累计贷方<>0
or
期初余额<>0"
'dtTop
=
db.RunSelectSQL(strSQL).Table
'Dim
ts
As
New
DataGridTableStyle
'Dim
aColumnTextColumn
As
DataGridTextBoxColumn
'Dim
numCols
As
Integer
=
dtTop.Columns.Count
'Dim
i
As
Integer
'For
i
=
0
To
numCols
-
1
'aColumnTextColumn
=
New
DataGridTextBoxColumn
'aColumnTextColumn.MappingName
=
_
'dtTop.Columns(i).ColumnName
'aColumnTextColumn.HeaderText
=
_
'dtTop.Columns(i).ColumnName
'aColumnTextColumn.NullText
=
""
'aColumnTextColumn.Width
=
60
'aColumnTextColumn.ReadOnly
=
True
'ts.GridColumnStyles.Add(aColumnTextColumn)
'Next
'ts.AlternatingBackColor
=
Color.LightGray
'ts.AllowSorting
=
False
'ts.MappingName
=
dtTop.TableName
'dgdTop.TableStyles.Add(ts)
'Dim
dv
As
DataView
=
dtTop.DefaultView
'dv.AllowNew
=
False
'dv.AllowDelete
=
False
'dv.AllowEdit
=
False
''设置数据源
'dgdTop.DataSource
=
dtTop.DefaultView
'End
Sub
'Private
Sub
CreateDataTalbe()
''创建数据表
'dtBottom
=
New
DataTable("结果")
''添加列
'With
dtBottom.Columns
'.Add("是否平衡",
Type.GetType("System.String"))
'.Add("期初借方合计",
Type.GetType("System.String"))
'.Add("期初贷方合计",
Type.GetType("System.String"))
'.Add("本期借方合计",
Type.GetType("System.String"))
'.Add("本期贷方合计",
Type.GetType("System.String"))
'.Add("期末借方合计",
Type.GetType("System.String"))
'.Add("期末贷方合计",
Type.GetType("System.String"))
'End
With
'End
Sub
''
计算是否平衡并显示出计算结果
''
nStatus
0
初始化帐簿时计算
''
1
正式使用后凭证的计算
'Public
Function
CalPingHeng(ByVal
iStatus
As
Integer)
As
Boolean
'Dim
bResult
As
Boolean
''
根据不同的状态计算平衡情况
'Dim
strSQL
As
String
''
初始化帐簿的试算平衡,需要根据初始化的信息反算期初
'Dim
db
As
DataBase
=
New
DataBase
'If
iStatus
=
0
Then
'strSQL
=
"select
科目代码,
科目名称,"
'strSQL
+=
"(case
when
余额方向='借方'
then
期初余额
"
'strSQL
+=
"
else
0
end
-
累计借方)
as
期初借方,"
'strSQL
+=
"(case
when
余额方向='贷方'
then
期初余额"
'strSQL
+=
"
else
0
end
-
累计贷方)
as
期初贷方,"
'strSQL
+=
"累计借方
as
本期发生借方,累计贷方
as
本期发生贷方,"
'strSQL
+=
"case
when
余额方向='借方'
then
期初余额
"
'strSQL
+=
"else
0
end
as
期末借方,"
'strSQL
+=
"case
when
余额方向='贷方'
then
期初余额
"
'strSQL
+=
"
else
0
end
as
期末贷方
"
'strSQL
+=
"
from
帐簿初始化表
"
'strSQL
+=
"
where
累计借方<>0
or
累计贷方<>0
or
期初余额<>0"
'dgdTop.DataSource
=
db.RunSelectSQL(strSQL)
''
计算合计金额,用于判断是否平衡
'strSQL
=
"select
"
'strSQL
+=
"sum(case
when
余额方向='借方'
"
'strSQL
+=
"
then
期初余额
else
0
end-累计借方)
as
期初借方合计,"
'strSQL
+=
"sum(case
when
余额方向='贷方'
"
'strSQL
+=
"
then
期初余额
else
0
end-累计贷方)
as
期初贷方合计,"
'strSQL
+=
"sum(累计借方)
as
本期借方合计,sum(累计贷方)
"
'strSQL
+=
"as
本期贷方合计,"
'strSQL
+=
"sum(case
when
余额方向='借方'
then
"
'strSQL
+=
"期初余额
else
0
end)
as
期末借方合计,"
'strSQL
+=
"sum(case
when
余额方向='贷方'
then
"
'strSQL
+=
"
期初余额
else
0
end)
as
期末贷方合计"
'strSQL
+=
"
from
帐簿初始化表
"
'strSQL
+=
"
where
累计借方<>0
or
累计贷方<>0
or
期初余额<>0"
'Dim
dv
As
DataView
=
db.RunSelectSQL(strSQL)
'bResult
=
AddToDataTable(dv)
'Else
'strSQL
=
"select
a.科目代码,
b.科目名称,"
'strSQL
+=
"(case
when
a.余额方向='借方'
"
'strSQL
+=
"
then
期初余额
else
0
end
)
as
期初借方,"
'strSQL
+=
"(case
when
a.余额方向='贷方'
"
'strSQL
+=
"
then
期初余额
else
0
end)
as
期初贷方,"
'strSQL
+=
"本期借方合计
as
本期发生借方,
本期贷方合计
"
'strSQL
+=
"as
本期发生贷方,"
'strSQL
+=
"case
when
a.余额方向='借方'
then
余额
else
0
end
"
'strSQL
+=
"as
期末借方,"
'strSQL
+=
"case
when
a.余额方向='贷方'
then
余额
else
0
end
"
'strSQL
+=
"as
期末贷方"
'strSQL
+=
"
from
本期汇总账簿
as
a,
科目表
as
b
"
'strSQL
+=
"
where
a.科目代码
=
b.科目代码
and
(本期借方合计<>
0"
'strSQL
+=
"
or
本期贷方合计<>0
or
期初余额<>0
or
余额<>0)"
'Dim
dvTemp
As
DataView
=
db.RunSelectSQL(strSQL)
'dvTemp.AllowEdit
=
False
'dvTemp.AllowDelete
=
False
'dvTemp.AllowNew
=
False
'dgdTop.DataSource
=
dvTemp
'strSQL
=
"select
"
'strSQL
+=
"sum(case
when
余额方向='借方'
then
期初余额
else
0
end)"
'strSQL
+=
"
as
期初借方合计,"
'strSQL
+=
"sum(case
when
余额方向='贷方'
then
期初余额
else
0
end)"
'strSQL
+=
"
as
期初贷方合计,"
'strSQL
+=
"sum(本期借方合计)
as
本期借方合计,sum(本期贷方合计)
"
'strSQL
+=
"as
本期贷方合计,"
'strSQL
+=
"sum(case
when
余额方向='借方'
then
余额
else
0
end)
"
'strSQL
+=
"as
期末借方合计,"
'strSQL
+=
"sum(case
when
余额方向='贷方'
then
余额
else
0
end)
"
'strSQL
+=
"as
期末贷方合计"
'strSQL
+=
"
from
本期汇总账簿
"
'strSQL
+=
"
where
本期借方合计<>
0
or
本期贷方合计<>0
or
"
'strSQL
+=
"期初余额<>0
or
余额<>0"
'Dim
dv
As
DataView
=
db.RunSelectSQL(strSQL)
'bResult
=
AddToDataTable(dv)
'Me.dgdBottom.DataSource
=
dtBottom
'End
If
'db.Dispose()
'Return
bResult
'End
Function
'Private
Sub
SetBottomDataGrid()
'Dim
ts
As
New
DataGridTableStyle
'Dim
aColumnTextColumn
As
DataGridTextBoxColumn
'Dim
numCols
As
Integer
=
dtBottom.Columns.Count
'Dim
i
As
Integer
'For
i
=
0
To
numCols
-
1
'aColumnTextColumn
=
New
DataGridTextBoxColumn
'aColumnTextColumn.MappingName
=
_
'dtBottom.Columns(i).ColumnName
'aColumnTextColumn.HeaderText
=
_
'dtBottom.Columns(i).ColumnName
'aColumnTextColumn.NullText
=
""
'aColumnTextColumn.Width
=
80
'aColumnTextColumn.ReadOnly
=
True
'ts.GridColumnStyles.Add(aColumnTextColumn)
'Next
'ts.AlternatingBackColor
=
Color.LightGray
'ts.AllowSorting
=
False
'ts.MappingName
=
dtBottom.TableName
'dgdBottom.TableStyles.Add(ts)
'Dim
dv
As
DataView
=
dtBottom.DefaultView
'dv.AllowNew
=
False
'dv.AllowDelete
=
False
'dv.AllowEdit
=
False
''设置数据源
'dgdBottom.DataSource
=
dtBottom.DefaultView
'End
Sub
'Private
Function
AddToDataTable(ByRef
dv
As
DataView)
As
Boolean
''判断dtBottom是否初始化
'If
dtBottom
Is
Nothing
Then
'CreateDataTalbe()
'End
If
'Dim
bResult
As
Boolean
''清空数据表的内容
'dtBottom.Rows.Clear()
'Dim
dr
As
DataRow
=
dtBottom.NewRow()
''获取一行数据
'Try
'dr("期初借方合计")
=
SetText(dv.Item(0)("期初借方合计"))
'dr("期初贷方合计")
=
SetText(dv.Item(0)("期初贷方合计"))
'dr("本期借方合计")
=
SetText(dv.Item(0)("本期借方合计"))
'dr("本期贷方合计")
=
SetText(dv.Item(0)("本期贷方合计"))
'dr("期末借方合计")
=
SetText(dv.Item(0)("期末借方合计"))
'dr("期末贷方合计")
=
SetText(dv.Item(0)("期末贷方合计"))
'Catch
ex
As
Exception
'MessageBox.Show(ex.ToString)
'End
Try
'dr("期初借方合计")
=
SetText(dv.Item(0)("期初借方合计"))
''判断是否平衡
'If
SetText(dv.Item(0)("期初借方合计"))
_
'<>
SetText(dv.Item(0)("期初贷方合计"))
Or
_
'SetText(dv.Item(0)("本期借方合计"))
_
'<>
SetText(dv.Item(0)("本期贷方合计"))
Or
_
'SetText(dv.Item(0)("期末借方合计"))
_
'<>
SetText(dv.Item(0)("期末贷方合计"))
Then
'dr("是否平衡")
=
"不平衡"
'bResult
=
False
'Else
'dr("是否平衡")
=
"平衡"
'bResult
=
True
'End
If
'dtBottom.Rows.Add(dr)
'Return
bResult
'End
Function
'Private
Function
SetText(ByVal
obj
As
Object)
As
String
'If
obj
Is
Nothing
Then
'Return
""
'Else
'Return
obj.ToString()
'End
If
'End
Function
End
Class
(16)
为按钮btntry的click事件添加事件响应函数。
Public
sub
btntry_click(byual
sender
as
system.object,_byval
e
as
system.eventargs)
handles
Dim
dlgpingheng
as
frmpingheng=new
frmpingheng
Dlgpingheng.showdialog()
Dlgpingheng.dispose()
End
sub
到此帐户设置功能已经完成。
5.7
实现凭证输入功能
(1)
选择【文件】|【添加新项】命令,在【添加新项】对话框【模板】列表框中选择【继承的窗体】选项,取名为“frmshuru.vb”。单击【打开】按钮,弹出【继承选择器】对话框,在其中选择frmbase选项并单击【确定】按钮。为新建窗体如图4.5所示的控件。

图4.5

最终的frmshuru窗体
(2)
各控件的属性设置如表4.6所示。
表4.6

frmshuru窗体控件属性设置
控件类型
对象名
属性
取值(说明)
From
Frmshuru
Text
会计凭证输入
Textbox
Txbcode
Readonly
True
Textbox
Txbdate
Text
Textbox
Txbpeople
Text
Textbox
Txbperiod
Readonly
True
Textbox
Txbperiod
Readonly
True
Textbox
Txbstate
Readonly
True
Textbox
Txbdebittotal
Readonly
True
Textbox
Txblendertoyal
Readonly
True
Groupbox
Grabove
Anchor
Top,left,right
Groupbox
Grabove
Text
凭证表
Groupbox
Grbottom
Anchbor
Top,bottom,left,right
Groupbox
Grbottom
Text
分录表
Textbox
Txbsummary
Text
Textbox
Txbsubjectcode
Text
Textbox
Txbsujectcode
Text
Textbox
Txbdebit
Text
0
Textbox
Txblender
Text
0
Button
Btnadd
Text
添加
Button
Btnsave
Text
修改
Button
Btndal
Text
删除
Datagrid
Dgddetail
Anchor
Top,bottom,left,right

(3)
从工具箱中拖动一个sqldataadapter对象到窗体上,连接caiwubook数据库。添加凭证表并选择字段:凭证编号、会计期间、日期、凭证字号、过账状态、借方合计、贷方合计。
(4)
在sqldataadapter对象右击,在弹出的快捷菜单中选择【生成数据集】菜单命令。在弹出的【生成数据集】对话框中单击【确定】按钮。
(5)
为每个textbox控件设置数据源。
(6)
为窗体类frmshuru添加私有变量。

Private
bmDetail
As
BindingManagerBase

Private
dtDetail
As
DataTable
Private
iCurrentLine
As
Integer
=
0
(7)
为窗体类frmshuru添加私有变量。
Private
Sub
SetDetailDataGrid(ByVal
iCount
As
Integer)
'LoadDataForDetail()
''定义一个DataGrid表样式
'Dim
ts
As
New
DataGridTableStyle
'Dim
aColumnTextColumn
As
DataGridTextBoxColumn
'Dim
numCols
As
Integer
=
dtDetail.Columns.Count
'Dim
i
As
Integer
'For
i
=
2
To
numCols
-
1
'aColumnTextColumn
=
New
DataGridTextBoxColumn
'aColumnTextColumn.MappingName
=
_
'dtDetail.Columns(i).ColumnName
'aColumnTextColumn.HeaderText
=
_
'dtDetail.Columns(i).ColumnName
'aColumnTextColumn.NullText
=
""
'ts.GridColumnStyles.Add(aColumnTextColumn)
'Next
'ts.AlternatingBackColor
=
Color.LightGray
'ts.AllowSorting
=
False
'ts.MappingName
=
dtDetail.TableName
'dgdDetail.TableStyles.Add(ts)
'Dim
dv
As
DataView
=
dtDetail.DefaultView
'dv.AllowEdit
=
False
'dv.AllowNew
=
False
'dv.AllowDelete
=
False
''设置数据源
'dgdDetail.DataSource
=
dtDetail
'SetTextBoxData()
'End
Sub
'Private
Sub
dgdDetail_CurrentCellChanged(ByVal
sender
_
'As
Object,
ByVal
e
As
EventArgs)
_
'Handles
dgdDetail.CurrentCellChanged
'If
iCurrentLine
<>
dgdDetail.CurrentCell.RowNumber
Then
'iCurrentLine
=
dgdDetail.CurrentCell.RowNumber
'SetTextBoxData()
'End
If
'End
Sub
'Private
Sub
SetTextBoxData()
'Try
'If
dtDetail.Rows(iCurrentLine)("科目代码")
Is
Nothing
Then
'Return
'Else
'txbSubjectCode.Text
=
_
'dtDetail.Rows(iCurrentLine)("科目代码")
'txbSubjectName.Text
=
_
'dtDetail.Rows(iCurrentLine)("科目名称")
'txbSummary.Text
=
dtDetail.Rows(iCurrentLine)("摘要")
'txbDebit.Text
=
dtDetail.Rows(iCurrentLine)("借方")
'txbLender.Text
=
dtDetail.Rows(iCurrentLine)("贷方")
'End
If
'Catch
ex
As
Exception
'End
Try
'End
Sub
'Private
Sub
txbSubjectCode_TextChanged(ByVal
sender
As
Object,
ByVal
e
As
System.EventArgs)
Handles
txbSubjectCode.TextChanged
'Dim
strCode
As
String
=
txbSubjectCode.Text.Trim
'If
strCode
=
""
Then
'Return
'End
If
'Dim
strSQL
As
String
=
"select
科目名称
from
科目表
where
科目代码="
+
strCode
'Dim
db
As
DataBase
=
New
DataBase
'Dim
dv
As
DataView
=
db.RunSelectSQL(strSQL)
'If
dv.Table.Rows.Count
=
0
Then
'Me.txbSubjectName.Text
=
""
'Return
'End
If
'Me.txbSubjectName.Text
=
dv(0)(0).ToString().Trim()
'End
Sub
'Private
Sub
btnAdd_Click(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnAdd.Click
'If
ValidateData()
=
False
Then
'MessageBox.Show("数据格式不确")
'Return
'End
If
'Try
'Dim
dr
As
DataRow
=
dtDetail.NewRow
'dr("摘要")
=
txbSummary.Text.Trim
'dr("科目代码")
=
txbSubjectCode.Text.Trim
'dr("科目名称")
=
txbSubjectName.Text.Trim
'dr("借方")
=
txbDebit.Text.Trim
'dr("贷方")
=
txbLender.Text.Trim
'dtDetail.Rows.Add(dr)
'dgdDetail.DataSource
=
dtDetail
'dgdDetail.CurrentRowIndex
=
dtDetail.Rows.Count
-
1
'UpdateMoney()
'Catch
ex
As
Exception
'MessageBox.Show("数据格式不正确")
'End
Try
'ClearTextBox()
'End
Sub
'Private
Sub
btnSave_Click(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnSave.Click
'If
ValidateData()
=
False
Then
'MessageBox.Show("数据格式不确")
'Return
'End
If
'If
dgdDetail.CurrentRowIndex
=
-1
Then
'Return
'End
If
'Try
'Dim
iRow
As
Integer
=
dgdDetail.CurrentRowIndex
'dtDetail.Rows(iRow)("摘要")
=
txbSummary.Text.Trim
'dtDetail.Rows(iRow)("科目代码")
=
txbSubjectCode.Text.Trim
'dtDetail.Rows(iRow)("科目名称")
=
txbSubjectName.Text.Trim
'dtDetail.Rows(iRow)("借方")
=
txbDebit.Text.Trim
'dtDetail.Rows(iRow)("贷方")
=
txbLender.Text.Trim
'UpdateMoney()
'Catch
ex
As
Exception
'MessageBox.Show("数据格式不正确")
'End
Try
'ClearTextBox()
'End
Sub
'Private
Sub
btnDel_Click(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnDel.Click
'Try
''获得DataGrid当前被选中的行号
'Dim
iRow
=
dgdDetail.CurrentRowIndex
''弹出对话框让用户确认要删除记录
''如果用户确认要删除记录
'If
MessageBox.Show("你确认要删除此条记录吗?",
"Confirm",
MessageBoxButtons.YesNo)
=
DialogResult.Yes
Then
''从商品清单表删除当前被选中记录()
'ClearTextBox()
'dtDetail.Rows.RemoveAt(iRow)
'Else
'Exit
Sub
'End
If
'Catch
ex
As
Exception
'MessageBox.Show("删除数据出错")
'End
Try
'UpdateMoney()
'ClearTextBox()
'End
Sub
'Private
Function
ValidateData()
As
Boolean
'If
txbSubjectCode.Text.Trim
=
""
Or
_
'txbSubjectName.Text.Trim
=
""
or
_
'
(txbDebit.Text.Trim
=
"0"
And
txbLender.Text.Trim
=
"0")
Then
'Return
False
'End
If
'Return
TRUE
'End
Function
'Private
Sub
ClearTextBox()
'txbSummary.Text
=
""
'txbSubjectCode.Text
=
""
'txbSubjectName.Text
=
""
'txbDebit.Text
=
"0"
'txbLender.Text
=
"0"
'End
Sub
'Private
Function
CalMoney()
As
Single()
'Dim
Result(2)
As
Single
'Result(0)
=
0
'Result(1)
=
0
'Dim
i
As
Integer
'For
i
=
0
To
dtDetail.Rows.Count
-
1
'Result(0)
+=
CSng(dtDetail.Rows(i)("借方"))
'Result(1)
+=
CSng(dtDetail.Rows(i)("贷方"))
'Next
'Return
Result
'End
Function
'Private
Sub
UpdateMoney()
'Dim
Result()
As
Single
=
CalMoney()
'Me.txbDebitTotal.Text
=
Result(0).ToString("f")
'Me.txbLenderTotal.Text
=
Result(1).ToString("f")
'End
Sub
'Private
Sub
InsertDetail(ByVal
code
As
String)
'If
Me.txbLenderTotal.Text.Trim
<>
Me.txbDebitTotal.Text.Trim
Then
'MessageBox.Show("借贷双方不平衡,请检查")
'Return
'End
If
'If
dtDetail.Rows.Count
<=
0
Then
'Return
'End
If
''首先删除与当前的凭证编号关联的分录表的记录
'Dim
db
As
DataBase
=
New
DataBase
'Dim
strSQL
As
String
=
"delete
from
分录表
where
凭证编号='"
'strSQL
+=
code
+
"'"
'db.RunDelOrInsSQL(strSQL)
'strSQL
=
""
'For
Each
dr
As
DataRow
In
dtDetail.Rows
'strSQL
+=
"
insert
into
分录表(凭证编号,摘要,科目代码,"
'strSQL
+=
"
借方,
贷方)
values('"
+
code
+
"','"
'strSQL
+=
dr("摘要").ToString().Trim
+
"','"
'strSQL
+=
dr("科目代码").ToString().Trim
+
"',"
'strSQL
+=
dr("借方").ToString().Trim
+
","
'strSQL
+=
dr("贷方").ToString().Trim
+
")"
'Next
'db.RunDelOrInsSQL(strSQL)
'db.Dispose()
'End
Sub
'Private
Sub
DeleteDetail()
'Dim
db
As
DataBase
=
New
DataBase
'Dim
strSQL
As
String
=
"delete
from
分录表
where
凭证编号='"
'strSQL
+=
txbCode.Text.Trim
+
"'"
'db.RunDelOrInsSQL(strSQL)
'db.Dispose()
'End
Sub
(8)
为窗体类frmshuru添加私有函数。
'Public
Overrides
Sub
Prepare()
'Me.Text
=
"会计输入凭证"
'Me.Label1.Text
=
"凭证编号"
'Me.Label2.Text
=
"会计期间"
'Me.Label3.Text
=
"日期"
'End
Sub
'Public
Overrides
Sub
LoadData()
'Dim
strFilter
As
String
'If
txbOne.Text.Trim.Length
=
0
Then
'If
txbTwo.Text.Trim.Length
=
0
Then
'If
txbThree.Text.Trim.Length
=
0
Then
'strFilter
=
""
'Else
'strFilter
=
"where
日期
like
'"
'strFilter
+=
txbThree.Text.Trim
+
"%'"
'End
If
'Else
'strFilter
=
"where
会计期间
like
'"
+
txbTwo.Text.Trim
+
"%'"
'If
txbThree.Text.Trim.Length
<>
0
Then
'strFilter
+=
"
and
日期
like
'"
'strFilter
+=
txbThree.Text.Trim
+
"%'"
'End
If
'End
If
'Else
'strFilter
=
"where
凭证编号
like
'"
+
txbOne.Text.Trim
+
"%'"
'If
txbTwo.Text.Trim.Length
<>
0
Then
'strFilter
+=
"
and
会计期间
like
'"
+
txbTwo.Text.Trim
+
"%'"
'If
txbThree.Text.Trim.Length
<>
0
Then
'strFilter
+=
"
and
日期
like
'"
'strFilter
+=
txbThree.Text.Trim
+
"%'"
'End
If
'Else
'If
txbThree.Text.Trim.Length
<>
0
Then
'strFilter
+=
"
and
日期
like
'"
'strFilter
+=
txbThree.Text.Trim
+
"%'"
'End
If
'End
If
'End
If
''清空DataSet11
'DataSet11.Clear()
'SqlConnection1.ConnectionString
=
DataBase.sConn
'SqlDataAdapter1.SelectCommand.CommandText
_
'=
"select
*
from
凭证表
"
+
strFilter
''根据查询条件重新填充DataSet11
'SqlDataAdapter1.Fill(DataSet11)
'dtData
=
DataSet11.Tables("凭证表")
'bmData
=
Me.BindingContext(DataSet11,
"凭证表")
'End
Sub
'Public
Overrides
Sub
SetDataGrid()
'LoadData()
''定义一个DataGrid表样式
'Dim
ts
As
New
DataGridTableStyle
'Dim
aColumnTextColumn
As
DataGridTextBoxColumn
'Dim
numCols
As
Integer
=
dtData.Columns.Count
'Dim
i
As
Integer
'For
i
=
0
To
2
'aColumnTextColumn
=
New
DataGridTextBoxColumn
'aColumnTextColumn.MappingName
=
_
'dtData.Columns(i).ColumnName
'aColumnTextColumn.HeaderText
=
_
'dtData.Columns(i).ColumnName
'aColumnTextColumn.NullText
=
""
'aColumnTextColumn.ReadOnly
=
True
'aColumnTextColumn.Width
=
55
'If
i
=
2
Then
'aColumnTextColumn.Format
=
"yyyy-M-d"
'End
If
'ts.GridColumnStyles.Add(aColumnTextColumn)
'Next
'ts.AlternatingBackColor
=
Color.LightGray
'ts.AllowSorting
=
False
'ts.MappingName
=
dtData.TableName
'dgdList.TableStyles.Add(ts)
'Dim
dv
As
DataView
=
dtData.DefaultView
'dv.AllowNew
=
False
'dv.AllowDelete
=
False
''dv.AllowEdit
=
False
''设置数据源
'dgdList.DataSource
=
dtData
''dgdList.DataMember
=
"凭证表"
'bmData
=
Me.BindingContext(DataSet11,
"凭证表")
'lblCount.Text
=
"记录数:"
+
dtData.Rows.Count.ToString()
'Me.dgdList.AllowNavigation
=
False
'SetDetailDataGrid(dtData.Rows.Count)
'End
Sub
'Public
Overrides
Sub
SetTextBoxState(ByVal
bState
As
Boolean)
'Me.grbAbove.Enabled
=
Not
bState
'Me.grbBottom.Enabled
=
Not
bState
'End
Sub
'Public
Overrides
Sub
LoadDataForDetail()
'Dim
strSQL
As
String
=
"SELECT
凭证编号,
编号,
摘要,
a.科目代码,
科目名称,借方,
贷方
FROM
分录表
as
a
,科目表
as
b
where
a.科目代码=b.科目代码"
'If
dtData.Rows.Count
<>
0
Then
'strSQL
+=
"
and
凭证编号="
+
dtData.Rows(bmData.Position)("凭证编号")
'End
If
'Dim
db
As
DataBase
=
New
DataBase
'dtDetail
=
db.RunSelectSQL(strSQL).Table
'Dim
dv
As
DataView
=
dtDetail.DefaultView
'dv.AllowEdit
=
False
'dv.AllowNew
=
False
'dv.AllowDelete
=
False
'dgdDetail.DataSource
=
dv
'End
Sub
'Public
Overrides
Sub
SaveForUpdate()
'Try
'InsertDetail(Me.txbCode.Text)
'Dim
row
As
Integer
'row
=
dgdList.CurrentCell.RowNumber
'dgdList.CurrentCell
=
_
'New
DataGridCell((row
+
1)
Mod
bmData.Count,
0)
''判断是否有更新的数据
'If
Me.DataSet11.HasChanges
=
True
Then
'SqlDataAdapter1.Update(DataSet11)
'End
If
'Catch
ex
As
Exception
'MessageBox.Show("数据修改失败!")
'End
Try
'End
Sub
'Public
Overrides
Sub
Clear()
''
计算凭证编号(Primary
key)
'Dim
strID,
strID1,
strT,
strSQL
As
String
'strID
=
strID1
=
""
'strSQL
=
"select
max(凭证编号)
as
编号
from
凭证表历史"
'Dim
db
As
DataBase
=
New
DataBase
'Dim
dv
As
DataView
'dv
=
db.RunSelectSQL(strSQL)
'If
dv.Item(0)(0).GetType().ToString()
=
"System.DBNull"
Then
'strID
=
"000001"
'Else
'strT
=
"000000"
'strID
=
(CInt(dv(0)(0))
+
1).ToString
'strID
=
strT.Substring(0,
strT.Length
-
strID.Length)
+
strID
'End
If
'strSQL
=
"select
max(凭证编号)
as
编号
from
凭证表"
'dv
=
db.RunSelectSQL(strSQL)
'If
dv.Item(0)(0).GetType().ToString()
=
"System.DBNull"
Then
'strID1
=
"000001"
'Else
'strT
=
"000000"
'strID1
=
(CInt(dv(0)(0))
+
1).ToString
'strID1
=
strT.Substring(0,
strT.Length
-
strID1.Length)
+
strID1
'End
If
'If
strID
<
strID1
Then
'strID
=
strID1
'End
If
'txbCode.Text
=
strID
'Dim
dvTemp
As
DataView
=
db.RunSelectSQL("select
取值
from
系统参数表
where
参数名称
=
'当前会计期间'")
'txbPeriod.Text
=
dvTemp(0)(0).ToString().Trim
'txbState.Text
=
"未过"
'txbDebitTotal.Text
=
"0"
'txbLenderTotal.Text
=
"0"
'txbDate.Text
=
Now.Date.ToString("yyyy-M-d")
'dtDetail.Rows.Clear()
'ClearTextBox()
'cbbZiHao.Text
=
""
'db.Dispose()
'End
Sub
'Public
Overrides
Sub
ResetDataGridData()
'If
bmData.Position
<>
-1
Then
'txbCode.Text
=
dtData.Rows(bmData.Position)("凭证编号")
'End
If
'End
Sub
'Public
Overrides
Sub
SaveForAdd()
'Dim
dr
As
DataRow
=
DataSet11.Tables("凭证表").NewRow()
'Try
'dr("凭证编号")
=
txbCode.Text.Trim
'dr("凭证字号")
=
cbbZiHao.Text.Trim
'dr("日期")
=
txbDate.Text.Trim
'dr("会计期间")
=
txbPeriod.Text.Trim
'dr("过账状态")
=
txbState.Text.Trim
'dr("借方合计")
=
txbDebitTotal.Text.Trim
'dr("贷方合计")
=
txbLenderTotal.Text.Trim
'If
txbDebitTotal.Text.Trim
<>
txbLenderTotal.Text.Trim
Then
'MessageBox.Show("借贷双方不平衡,请检查")
'Exit
Sub
'End
If
'Catch
ex
As
Exception
'MessageBox.Show("数据格式不正确!")
'Exit
Sub
'End
Try
'Try
'DataSet11.Tables("凭证表").Rows.Add(dr)
'If
Me.DataSet11.HasChanges
=
True
Then
'SqlDataAdapter1.Update(DataSet11)
'End
If
'InsertDetail(dr("凭证编号").ToString())
'Catch
ex
As
Exception
'MessageBox.Show("数据添加失败!")
'End
Try
'End
Sub
'Public
Overrides
Sub
DeleteData()
'Try
''删除当前行的数据
'DeleteDetail()
'Me.dgdDetail.DataSource
=
Nothing
'DataSet11.Tables("凭证表").
_
'Rows(bmData.Position).Delete()
'If
Me.DataSet11.HasChanges
=
True
Then
''更新DataSet11
'SqlDataAdapter1.Update(DataSet11)
'End
If
'Catch
ex
As
Exception
'MessageBox.Show("数据删除失败!")
'End
Try

5.8
实现总分类账查询功能
(1)
新建一个窗体,将其name属性改为“frmzongfen”,并为其添加如图4.7所示。的控件。

图4.7
frmzongfen窗体

(2)
各控件的属性设置如图4.8所示。表4.8

frmzongfen窗体控件属性设置
控件类型
对象名
属性
取值(说明)
Form
Frmzongfen
Text
总分类账查询
Groupbox
Grbsearch
Anchor
Top,left
Imagelist
Imagelist1
Images
Toolbar
Toolbar1
Imagelist
Imagelist1
Label
Lblcount
Text
Datagrid
Dgdlist
Anchor
Top,bottom,left,right
Textbox
Txbone
Text
Button
Btnsearch
Text
Checkbox
Cbbcheck
Text
无发生金额的不显示

(3)
由于总分类帐查询的部分功能与前面介绍的功能相似。为frmzongfen类添加私有函数loaddata。
Private
Sub
LoadData()
Dim
strFilter
As
String
If
Me.txbOne.Text.Trim.Length
=
0
Then
If
Me.cbbCheck.Checked
=
True
Then
strFilter
=
"where
本期借方合计
<>0
or
本期贷方合计<>0"
End
If
Else
strFilter
=
"where
科目代码="
+
Me.txbOne.Text.Trim
If
Me.cbbCheck.Checked
=
True
Then
strFilter
+=
"
and
(本期借方合计
<>0
or
本期贷方合计<>0)"
End
If
End
If
'清空DataSet11
DataSet11.Clear()
SqlConnection1.ConnectionString
=
DataBase.sConn
SqlDataAdapter1.SelectCommand.CommandText
_
=
"select
*
from
本期汇总账簿
"
+
strFilter
'根据查询条件重新填充DataSet11
SqlDataAdapter1.Fill(DataSet11)
dtData
=
DataSet11.Tables("本期汇总账簿")
bmData
=
Me.BindingContext(DataSet11,
"本期汇总账簿")
lblCount.Text
=
"记录数:"
+
dtData.Rows.Count.ToString()
End
Sub

5.9
实现明细帐查询功能
建立的总分类帐查询是查询科目的汇总信息,明细账查询是查询科目在当前会计期间发生的每一笔业务及余额。
(1)
新建一个窗体,将其name属性改为“frmmingxi”,并为其添加如图4.9所示的控件。

图4.9

frmmingxi窗体

(2)
各控件的属性设置如表5.0所示。

表5.0
frmmingxi窗体控件属性设置
控件类型
对象名
属性
取值(说明)
Form
Frmmingxi
Text
明细账查询
Groupbox
Grbsearch
Anchor
Top,left
Imagelist
Imagelist1
Images
Toolbar
Toolbar1
Imagelist
Imagelist1
Label
Lblcount
Text
Label
Lblcode
Text
Datagrid
Dgdlist
Anchor
Top,bottom,left,right
Textbox
Txbone
Text
Button
Btnsearch
Text
明细帐查询功能与总分类查询功能相似。
5.10

实现试算平衡表功能
【试算平衡表】菜单的响应函数,新建该窗体的一个实例并显示出来就可以。
Public
sub
mnpingheng_click(byual
sender
as
system.object,_byval
e
as
system.eventargs)
handles
mnpingheng。Click
If
getinstancestate(“frmpingheng”)
then
Exit
sub
Dim
childfrm
as
frmpingheng=new
frmpingheng
Childfrm.Mdiparent=me
Childfrm.showdialog()
Childfrm.calpingheng(1)
End
sub

5.11

现期末结账功能
因为期末结账功能是在程序中调用“sf_期末结账”存储过程完成。在程序主窗体的【期末结账】菜单的响应函数中添加相应的处理代码,完成期末结账的功能。具体代码如下。
Private
Sub
mnQimo_Click(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
mnQimo.Click
'期末结帐
Dim
dlgResult
As
DialogResult
=
_MessageBox.Show("结帐后将进入下一会计期间,是否结帐?",
_"确定",
MessageBoxButtons.YesNo)
If
dlgResult
<>
DialogResult.Yes
Then
Return
End
If
'Dim
db
As
DataBase
=
New
DataBase
'Try
'db.RunDelOrInsSQL("begin
tran
exec
sf_期末结帐")
'Catch
ex
As
Exception
'MessageBox.Show("期末结帐失败")
'db.RunDelOrInsSQL("rollback")
'Return
'End
Try
'db.RunDelOrInsSQL("commit")
MessageBox.Show("结帐成功")
End
Sub
5.12
实现资产负债表报表输入功能
(1)
新建一个窗体,将其name属性改为“frmreport”。并在窗体上面添加一个crystalreportviewer控件(图5.1为最终完成窗体)。
图5.1最终完成的打印窗体
(2)从工具栏中拖动一个sqldataadapter对象到窗体上,连接mrpbook数据库,添加资产负债表,并选择字段,单击【确定】按钮完成sqldataadapter对象的配置。
(3)在sqldataadapter对象上右击,在弹出的快捷菜单中选择【生成数据集】菜单命令,在弹出的【生成数据集】对话框中单击【确定】按钮。
(4)为类frmreport添加变量。
Private
iperiod
as
into6
(5)为类frmreport添加公有函数。
Public
Sub
New(ByVal
period
As
Int16)
Me.New()
iPeriod
=
period
End
Sub
(6)为类的load事件添加响应函数。

Private
Sub
frmReport_Load(ByVal
sender
As
Object,
_

ByVal
e
As
System.EventArgs)
Handles
MyBase.Load
Try
SqlConnection1.ConnectionString
=
DataBase.sConn
SqlDataAdapter1.SelectCommand.CommandText
=
_
"select
*
from
资产负债表
where
会计期间
=
"
+
iPeriod.ToString()
Me.SqlDataAdapter1.Fill(Me.DataSet11)
Dim
obj
As
ReportDocument
=
New
ReportDocument
'obj加载Crystal
Report的路径要设置好
obj.Load("Report.rpt")
'设置报表的数据源
obj.SetDataSource(Me.DataSet11)
Me.CrystalReportViewer1.ReportSource
=
obj
Catch
ex
As
Exception
MessageBox.Show(ex.ToString)
End
Try
End
Sub
(7)
添加菜单响应函数。

Private
Sub
mnFuzhai_Click(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
mnFuzhai.Click
If
GetInstanceState("frmReport")
Then
Exit
Sub
End
If
Dim
message,
title,
defaultValue
As
String
Dim
myValue
As
Object
message
=
"请输入统计的会计区间"
title
=
"输入"

'
Set
title.
'
输入统计的会计区间
'Dim
db
As
DataBase
=
New
DataBase
'Dim
dv
As
DataView
=
db.RunSelectSQL("select
取值
from
系统参数表
where
参数名称
=
'当前会计期间'")
'defaultValue
=
(CInt(dv(0)(0).ToString().Trim)
-
1).ToString
'myValue
=
InputBox(message,
title,
defaultValue)
'Dim
strTemp
As
String
'Try
'strTemp
=
CInt(myValue.ToString.Trim)
'Catch
ex
As
Exception
'MessageBox.Show("请输入合法的会计区间")
'Return
'End
Try
'计算
'db.RunDelOrInsSQL("exec
sf_计算资产负债表
"
+
strTemp)
'db.Dispose()
'显示
'Dim
childFrm
As
frmReport
=
New
frmReport(CInt(myValue.ToString.Trim))
'childFrm.MdiParent
=
Me
'childFrm.Show()
End
Sub
5.13
编译并运行系统至此完成整个系统的制作,选择【生成】|【生成解决方案】菜单命令,编译并运行程序。
6
系统发布系统设计完成后需要打包发布,将应用制作成安装程序。制作安装程序的工具很多,一般Visual
Basic.NET开发的应用系统可以使用Visual
Basic.NET2003自带的功能进行打包,也可以用Install
Shield来完成系统的安装查询。
7
系统扩展财务管理系统可以作为一个独立的系统运行,也可以和其他的应用系统结合起来,实现数据的共享。可以将进销存系统中的进货、销售、应收及应付款等会计分录自动生成凭证,如图5.2所示。
分销管理系统
销售出库单
采购入库单
库存核算
库存管理
销售管理
采购系统
销售发票
材料库
采购发票
入库单
出库单
应收账款
总账系统
应付账款
自动生成凭证
自动生成凭证

财务系统

票据管理
固定资产管理
费用管理
成本核算
自用费
图5.2
财务管理系统与其他系统的结合
8
小结我们可以掌握以下知识和技巧。
l
财务管理系统的需求。
l
利用Visual
Baisic
.NET进行数据库编程的多种方法。
l
Visual
Baisic
.NET类继承的概念,以及重载父类函数的技巧。
l
利用类继承封装不同应用共同功能的编写方法。
l
利用Visual
Baisic
.NET编写财务管理系统。
l
财务管理系统的扩展。

财务管理系统框架构建 本文关键词:框架,构建,财务管理系统

财务管理系统框架构建  来源:网络整理

  免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


财务管理系统框架构建
由:76范文网互联网用户整理提供,链接地址:
http://m.yuan0.cn/a/117594.html
免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。
最近更新/ NEWS
推荐专题/ NEWS
财务管理系统框架构建模板 财务管理系统框架构建怎么写 财务管理系统框架构建如何写 财务管理系统框架构建格式 财务管理系统框架构建范例参考 财务管理系统框架构建开头 财务管理系统框架构建开头语 财务管理系统框架构建范文 财务管理系统框架构建范例 财务管理系统框架构建格式大全 财务管理系统框架构建_框架,构建,财务管理系统财务管理系统框架构建大全 财务管理系统框架构建格式模板 财务管理系统框架构建免费模板 财务管理系统框架构建免费格式 财务管理系统框架构建格式如何写 财务管理系统框架构建开头如何写 财务管理系统框架构建免费范文 财务管理系统框架构建免费范例 财务管理系统框架构建免费参考 财务管理系统框架构建模板下载 财务管理系统框架构建免费下载 财务管理系统框架构建模板怎么写 财务管理系统框架构建格式怎么写 财务管理系统框架构建开头怎么写 财务管理系统框架构建开头语怎么写 财务管理系统框架构建模板如何写 财务管理系统框架构建开头语如何写