1、1课程设计说明书课程设计名称: 数据库课程设计 课程设计题目: 家庭财务管理系统 学 院 名 称: 信息工程学院 专业: 计算机应用与技术 班级: 2一、数据库需求分析:对于“家庭财务管理系统“而言,整个系统就是一个加工“家庭财务管理“。从用户的需求描述可知,“管理员“是数据的源点,“普通用户“是数据的终点。另外,管理员需要录入用户信息、理财信息和日常管理信息,说明“用户信息“、“理财信息“和“日常管理信息“是数据流;同样,“统计请求“和“统计结果“也是数据流。根据上述分析,得到如图所示的第 1 层 DFD。根据第 1 层 DFD 图绘制下一层数据流图时,细化第 1 层的加工“家庭财务管理“,
2、从而描述系统的主要功能。从第 1 层 DFD 得知,“用户信息“是管理员需要录入的一个信息,因此加入一个加工“录入用户信息“,同样得到“录入理财项目信息“、“录入日常管理信息“两个加工。另外,数据流“统计报告请求“和“统计报告结果“应该由加工“统计报告“来完成。这样,我们用“录入用户信息“、“录入理财项目信息“、“录入日常管理信息“和“统计报告“四个加工代替第 1 层的“家庭财务管理“,同时增加这些数据流对应的数据存储,即“用户“、“理财“和“日常管理“,最后得到如图所示的第 2 层 DFD。3继续进行分解,分析第 2 层 DFD 中的加工“统计报告“。用户统计报告时需要提供合法性检查,因此,
3、“统计报告“可以分解为“合法性检查“和“统计“两个处理步骤,从而形成如图所示的第 3 层 DFD。4家庭成员合法性检查统计活期收入借入合法查询条件查询条件查询条件统计报告结果统计报告请求三层数据流图户主收入来源家庭成员成员信息收入来源信息支出类型家庭成员成员信息收入信息存储经手人活期银行账户定期银行账户定期银行信息活期银行信息借贷经手人借入款借出款借出信息借入信息收入人员支出人员支出信息存款信息借贷信息支出定期借出5数据字典(一) 、数据项1 数据项名:编号;数据类型:int;数据长度:4;2 数据项名:姓名;数据类型:nvarchar;数据长度:50;3 数据项名:备注;数据类型:nvarc
4、har;数据长度:50;4 数据项名:收入来源;数据类型:nvarchar;数据长度:50;5 数据项名:支出类型;数据类型:nvarchar;数据长度:50;6 数据项名:收入日期;数据类型:datetime;数据长度:8;7 数据项名:收入人员;数据类型:int;数据长度:4;8 数据项名:收入金额;数据类型:float;数据长度:16;9 数据项名:支出日期;数据类型:datetime;数据长度:8;10. 数据项名:支出人员;数据类型:int;数据长度:4;11 数据项名:支出金额;数据类型:float;数据长度:16;12 数据项名:账户编号;数据类型:int;数据长度:4;13 数
5、据项名:日期;数据类型:datetime;数据长度:8;14 数据项名:经手人; 数据类型:nvarchar;数据长度:50;15 数据项名:存入金额;数据类型:float;数据长度:16;16 数据项名:支出金额;数据类型:float;数据长度:16;17 数据项名:初始金额;数据类型:float;数据长度:16;18 数据项名:余额;数据类型:float;数据长度:16;19 数据项名:预还日期;数据类型:datetime;数据长度:8;20 数据项名:借出日期;数据类型:datetime;数据长度:8;621 数据项名:开户银行;数据类型:nvarchar;数据长度:50;22 数据项名
6、:开户日期;数据类型:datetime;数据长度:8;(二) 、数据结构23 数据结构名:用户;组成:编号姓名备注;24 数据结构名:收入来源;组成:编号收入来源;25 数据结构名:支出类型;组成:编号支出类型;26 数据结构名:日常收入;组成:编号收入日期收入人员收入来源收入金额备注;27 数据结构名:日常支出组成:编号支出日期支出人员支出类型支出金额备注;28 数据结构名:活期账户;组成:编号账户编号日期+经手人+存入金额+支出金额+备注;29 数据结构名:定期账户;组成:编号账户编号日期+经手人+存入金额+支出金额+备注;30 数据结构名:借入款;组成:编号+借入日期+预还日期+借入人+
7、出借人+借入金额+备注;31 数据结构名:借出款;组成:编号+借出日期+预还日期+出借人+借贷人+借出金额+备注;32 数据结构名:活期银行账户;组成:编号+账号+账户类型+卡号+账户户主姓名+初始金额+余额+开户银行+开户日期;33 数据结构名:定期银行账户;组成:编号+账号+账户类型+卡号+账户户主姓名+初始金额+余额+开户银行+开户日期;(三) 、数据流34 数据流名:家庭成员信息;数据流来源: 户主;数据流去向:家庭成员信息表735 数据流名:收入信息;数据流来源:户主;数据流去向:家庭成员信息表36 数据流名:支出信息;数据流来源:户主;数据流去向:家庭成员信息表37 数据流名:统计
8、报告请求;数据流来源:户主;数据流去向:统计报告38 数据流名:统计报告结果;数据流来源:统计报告;数据流去向:户主家庭成员信息包括的数据项由:编号,姓名,备注。家庭成员收入来源信息,包括的数据项有:编号,收入来源。家庭成员支出类型信息,包括的数据项有:编号,支出类型。收入来源信息,包括的数据项有:编号,收入日期,收入人员,收入来源,收入金额,备注。支出类型信息,包括的数据项有:编号,支持日期,支出人员,支出类型,支出金额,备注。活期账户信息,包括的数据项有:编号,账户编号,日期,经手人,存入金额,支出金额,备注。定期账户信息,包括的数据项有:编号,账户编号,日期,经手人,存入金额,支出金额,
9、备注。借入款信息,包括的数据项有:编号,借入日期,预还日期,借入人,出借人,借入金额,备注。借出款信息,包括的数据项有:编号,借出日期,预还日期,出借人,借贷人,借出金额,备注。活期银行账户信息,包括的数据项有:编号,账号,账户类型,卡号,账户户主姓名,初始金额,余额,开户银 行,开户日期。定期银行账户信息,包括的数据项有:编号,账号,账户类型,卡号,账户户主姓名,初始金额,余额,开户银行,开户日期。8二、数据库概念结构设计数据库概念结构设计就是在以上数据项和数据结构的前提下,设计出满足用户需求的实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。概念模型最常用的描述方法是 E-R 图(“
10、实体联系”图)描述法,E-R 图主要有 3 个要素: 实体:实体是以矩形表示。实体就是数据库数据中具有实际意义的主体,如在前文分析的实体就是“消费人员”和“消费品” 。 属性:属性用椭圆表示。就是实体所拥有的特性,如果是在面向对象程序设计中,可以将“实体”和“属性”对应为“对象”和“对象中的数据成员”的关系。 联系:联系用菱形表示。联系是实体与实体之间发生的动作、从属或其他依赖关系。本软件规划出的实体有:用户信息实体,收入来源信息实体,支出类型信息实体,日常收入信息实体,日常支出信息实体,活期银行账户信息实体,定期银行账户信息实体。概念模型就是对信息世界的抽象建模,狭义的信息世界可以专指数据库
11、中的数据,那么概念模型就可以理解为对数据库数据的抽象建模。 各个实体具体的描述 E-R 图如下:活期帐户信息实体编号 、帐户编号存入金额备注日期支出金额经手人活期银行账户信息实体 E - R 图 :9定期帐户信息实体编号 、帐户编号存入金额备注日期支出金额经手人定期银行账户信息实体 E - R 图 :借入款信息实体编号 、借入日期出借人备注预还日期借入金额借入人借入款信息实体 E - R 图 :借出款信息实体编号 、借出日期借贷人备注预还日期借出金额出借人借出款信息实体 E - R 图 :用户信息实体编号备注权限密码姓名用户信息实体 E - R 图 :10家庭成员信息实体编号备注姓名收入来源编
12、号家庭成员收入来源信息实体家庭成员支出类型信息实体编号支出类型收入来源信息实体 E - R 图 :收入来源信息实体 编号收入日期收入来源备注收入人员收入金额支出类型信息实体 E - R 图 :支出类型信息实体 编号支出日期支出来源备注支出人员支出金额11日常支出信息实体 编号支出日期支出来源备注支出人员支出金额日常支出信息实体 E - R 图 :日常收入信息实体 编号收入日期收入来源备注收入人员收入金额日常收入信息实体 E - R 图 :活期银行帐号信息实体编号开户日期帐户户主姓名开户银行余额帐户类型初始金额卡号帐号活期账户信息实体 E - R 图 :定期银行帐号信息实体编号开户日期帐户户主姓
13、名开户银行余额帐户类型初始金额卡号帐号定期账户信息实体 E - R 图 :12E-R 总图 :家庭成员收入来源信息实体家庭成员支出类型信息实体借入宽信息实体定期银行帐户信息实体活期银行帐户信息实体定期帐户信息实体活期帐户信息实体借出款信息实体支出类型实体收入来源实体查询用户信息实体管理查询管理 管理管理管理 管理管理管理N1 1NN NNNNNNN111111 1113三、数据库逻辑结构设计逻辑关系:家庭成员信息(编号,姓名,备注);家庭成员收入来源(编号, 收入来源)家庭成员支出类型(编号, 支出类型);活期银行账户(编号, 帐号, 账户类型, 卡号,账户户主姓名, 初始金额, 余额, 开户
14、银行, 开户日期);定期银行账户(编号, 帐号, 账户类型, 卡号,账户户主姓名, 初始金额, 余额, 开户银行, 开户日期);日常收入信息(编号, 收入日期, 收入人员, 收入类型, 收入金额, 备注;日常支出信息(编号, 支出日期, 支出人员, 支出类型, 支出金额, 备注);活期账户信息(编号, 账户编号, 日期, 经手人, 存入金额 , 支出金额, 备注);定期账户信息(编号, 账户编号, 日期, 经手人, 存入金额 , 支出金额, 备注);借出款信息(编号, 借出日期, 预还日期, 出借人, 借贷人, 借出金额, 备注);借入款信息(编号, 借入日期, 预还日期, 借入人,出借人,
15、借入金额, 借入金额);根据以上的信息实体 E-R 图和逻辑关系,本小型家庭财务管理软件数据库中的各个表格的设计结构如下面的表:表 4-1 家庭成员表 Family 字段名 字段说明 数据类型 字段长度 必填字段 主键FamilyID 编号 int 4 是 是FamilyName 姓名 nvarchar 50 是 否FamilyPwd 密码 nvarchar 50 是 否FamilyType 权限 int 4 是 否FamilyBZ 备注 nvarchar 50 否 否14表 4-2 收入来源表 IncomeType 字段名 字段说明 数据类型 字段长度 必填字段 主键IncomeTypeID
16、 编号 int 4 是 是IncomeTypeType 收入来源 nvarchar 50 是 否IncomeTypeDate 收入日期 nvarchar 50 是 否IncomeTypeMember 收入人员 nvarchar 50 是 否IncomeTypeSum 收入金额 int 4 是 否IncomeBZ 备注 nvarchar 50 否 否表 4-3 支出类型表 OutputType字段名 字段说明 数据类型 字段长度 必填字段 主键OutputTypeID 编号 int 4 是 是OutputTypeType 支出类型 nvarchar 50 是 否OutputTypeDate 支出
17、日期 nvarchar 50 是 否OutputTypeMember 支出人员 nvarchar 50 是 否OutputTypeSum 支出金额 int 4 是 否OutputBZ 备注 nvarchar 50 否 否表 4-4 活期银行账户表 LiveBank字段名 字段说明 数据类型 字段长度 必填字段 主键LiveBankID 编号 int 4 是 是LiveBankNo 帐号 nvarchar 50 是 否LiveBankType 账户类型 nvarchar 50 是 否LiveBankKa 卡号 nvarchar 50 是 否LiveBankName 账户户主姓名 nvarchar
18、 50 是 否LiveBankChu 初始金额 float 8 是 否LiveBankYu 余额 float 8 是 否LiveBankBank 开户银行 nvarchar 50 是 否LiveBankDate 开户日期 datetime 8 是 否表 4-5 定期银行账户表 FixBank15字段名 字段说明 数据类型 字段长度 必填字段 主键FixBankID 编号 int 4 是 是FixBankNo 帐号 nvarchar 50 是 否FixBankType 账户类型 nvarchar 50 是 否FixBankKa 卡号 nvarchar 50 是 否FixBankName 账户户主
19、姓名 nvarchar 50 是 否FixBankChu 初始金额 float 8 是 否FixBankYu 余额 float 8 是 否FixBankBank 开户银行 nvarchar 50 是 否FixBankDate 开户日期 datetime 8 是 否表 4-6 日常收入表 DailyIncome字段名 字段说明 数据类型 字段长度 必填字段 主键DailyIncomeID 编号 int 4 是 是DailyIncomeDate 收入日期 datetime 8 是 否DailyIncomeName 收入人员 int 4 是 否DailyIncomeType 收入来源 int 4 是
20、 否DailyIncomeNum 收入金额 float 16 是 否DailyIncomeBZ 备注 nvarchar 50 否 否表 4-7 日常支出表 DailyOutput字段名 字段说明 数据类型 字段长度 必填字段 主键DailyOutputID 编号 int 4 是 是DailyOutputDate 支出日期 datetime 8 是 否DailyOutputName 支出人员 int 4 是 否DailyOutputType 支出类型 int 4 是 否DailyOutputNum 支出金额 float 8 是 否DailyOutputBZ 备注 nvarchar 50 否 否表
21、 4-8 活期账户操作表 LiveAction16字段名 字段说明 数据类型 字段长度 必填字段 主键LiveActionID 编号 int 4 是 是LiveActionNo 账户编号 int 4 是 否LiveActionDate 日期 datetime 8 是 否LiveActionName 经手人 int 4 是 否LiveActionCun 存入金额 float 8 否 否LiveActionQu 支出金额 float 8 否 否LiveActionBZ 备注 nvarchar 50 否 否该表中,LiveActionCun 与 LiveActionQu 的默认值设为 0。表 4-9
22、 定期账户操作表 FixAction字段名 字段说明 数据类型 字段长度 必填字段 主键FixActionID 编号 int 4 是 是FixActionNo 账户编号 int 4 是 否FixActionDate 日期 datetime 8 是 否FixActionName 经手人 int 4 是 否FixActionCun 存入金额 float 8 是 否FixActionQu 支出金额 float 8 是 否FixActionBZ 备注 nvarchar 50 否 否该表中,FixActionCun 与 FixActionQu 的默认值设为 0。表 4-10 借出款 LendMoney
23、字段名 字段说明 数据类型 字段长度 必填字段 主键LendMoneyID 编号 int 4 是 是LendMoneyDateOut 借出日期 datetime 8 是 否LendMoneyDateIn 预还日期 datetime 8 是 否LendMoneyNameOut 出借人 int 4 是 否LendMoneyNameIn 借贷人 nvarchar 50 是 否LendMoneyNum 借出金额 float 8 是 否LendMoneyBZ 备注 nvarchar 50 否 否17表 4-11 借入款 BorrowMoney字段名 字段说明 数据类型 字段长度 必填字段 主键Borro
24、wMoneyID 编号 int 4 是 是BorrowMoneyDateOut 借入日期 datetime 8 是 否BorrowMoneyDateIn 预还日期 datetime 8 是 否BorrowMoneyNameOut 借入人 int 4 是 否BorrowMoneyNameIn 出借人 nvarchar 50 是 否BorrowMoneyNum 借入金额 float 8 是 否BorrowMoneyBZ 备注 nvarchar 50 否 否综合上述的 E-R 图和信息表,得到如下所示的数据库整体关系图:数据库整体关系图18四、系统功能设计 功能模块图:家庭财务管理系统收入来源借贷存
25、储支出类型家庭成员信息增 、 删 、 改家庭成员信息成员收入来源成员支出类型活期账户定期账户借出款借入款增 、 删 、 改成员收入来源信息增 、 删 、 改成员支出类型信息增 、 删 、 改定期账户信息增 、 删 、 改活期账户信息增 、 删 、 改借入款信息增 、 删 、 改借出款信息统计报表借出款借入款每月收入每月支出活期账户定期账户按日期 、 经手人 、 金额按日期 、 经手人 、 金额按日期 、 经手人 、 金额按日期 、 经手人 、 金额按日期 、 经手人 、 金额及增 、 删 、 改按日期 、 经手人 、 金额及增 、 删 、 改19本系统主要的功能包括: 对家庭财务管理系统。对理
26、财项目可以进行编辑。收入和支出管理包括成员日常收入来源和成员日常支出类型,活期银行账户和定期银行账户。相关信息分别存在“收入来源表” 、 “支出类型表” 、 “活期银行账户表”和“定期账户操作表”中,均可以实现添加、删除、修改功能。收入、支出管理,包括日常收入、日常支出,即记录下成员的日常收入、日常的支出。银行账户管理,包括活期银行账户和定期银行账户,即记录下对银行账户的存取款记录。债务管理,包括借入款和借出款,即记录下借出钱或借入钱的记录。收支统计,对以往债务可以进行查询和统计,同时实现了分类查询。1创建名为 student 的数据库。*/create database student2向
27、student 数据库里创建.11 张表,表名分别为:家庭成员表 family、收入来源表 incometype、支出类型表 outcometype、活期银行账户表 livebank、定期银行账户表 fixbank、日常收人表 daiyincome、日常支出表daiyoutput、活期账户操作表 liveaction、定期账户操作表 fixaction、借出款lendmoney、借入 borrowmoney*/3创建一个带有查询语句的简单过程,该存储过程返回所有家庭成员的编号,姓名,备注。*/create proc stu_info20as FamilyID,FamilyName,Family
28、BZselect from Familygo创建一个存储过程,该存储过程时,其参数值作为数据添加到 DailyIncome 中。*/create proc insertdataparam1 int(4),param2 datetime(8),param3 int(4),param4 int(4)param5 float(16)param6 nvarchar(50)asbegininsert into sc(DailyIncomeID,DailyIncomeDate,DailyIncomeName,DailyIncomeType,DailyIncomeNum,DailyIncomeBZ) val
29、ues(param1,param2,param3,param4,param5,param6)endgo创建存储过程 usp_Select_Student,查询家庭成员的信息,21创建存储过程create proc usp_select_studentdepart nvarchar(50),avg_age int output,max_age int outputasselect * from familywhere familyID=depart4创建触发器1CREATE TRIGGER insert_familyON familyAFTER INSERTASINSERT INTO famil
30、y VALUES(02,李晓莉,妻子)PRINT 数据插入成功 2CREATE TRIGGER delete_familyON familyAFTER INSERTAS22DELETE familyFROM familyWHERE familyID=02PRINT 数据删除成功 3CREATE TRIGGER update_ familyON familyAFTER INSERTASUPDATE familySET familyID=familyID+10WHERE familyname like 李晓莉4. CREATE TRIGGER select_familyON familyAFTER
31、 INSERTASSELECT * FROM family五、结论23本家庭财务管理系统,主要使用于家庭对家庭成员资料的管理及对系统权限的管理、对理财项目的编辑和管理、对日常财务的管理、对银行账户的管理、对债务的管理、日常明细和收支的统计等等。本家庭财务管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。本系统针对的人群结构为同一个家庭的不同成员,虽然如此仍然设置了权限控制,由于权限控制的实现,导致要将相关内容分割在几个表中,这样就造成了表之间字段的依赖。该系统是面向小型家庭的,相对来说功能要求不多,因此总体的结构也比较简单,这样的优点是
32、操作比较的简单、容易上手,很适合即学即用。总之,现在的人门开始关注财务管理,只有在有条理的管理好家庭财务的前提下,才能过上更有质量的生活。参考文献241、王珊、萨师煊、 数据库系统概论 、高等教育出版社、2005 年第 4 版2、钱雪忠、陈国俊、 数据库原理及应用指导 、北京邮电大学出版社、2007 年第二版3、王长松、秦琴、余健、 数据库应用课程设计案例精编 、清华大学出版社、2009 年版4、路游、于玉宗、 数据库系统课程设计 、清华大学出版社、2009 年版5、余金山、冯星红、李肖.PowerBuilder 数据开发高级实例M.北京:科学出版社.2005 年版6、黄浩、赵宏杰.PowerBuilder 9.0 精彩编程百例M.中国水利水电出版社.2004年版