第22章数据库研发实践:家庭财务管理系统•数据库应用系统的研发大多这是工程型项目,而非理论型的研究,因此,在学习数据库应用系统的开发主要还是以实例示范为主。本章就是通过介绍实例开发来进行数据库研发的学习,本章数据库应用系统将实现数据库的添加、修改和统计等功能。•本章的主要内容有:•E-R图设计:读者将学会数据库应用系统研发中最重要的E-R图(实体关系图)的设计,以及学会由E-R图转化成为关系表。•基于数据库的应用研发:读者将学会使用数据库进行项目研发,掌握数据库应用系统开发常用的函数和程序设计步骤。22.1提出问题:设计一个家庭财务管理系统•本小节是讲解概要功能和界面设计,一般而言,小规模的项目研发总是以功能需求为主导,界面设计为手段的。因此,在考虑具体的开发实施之前,应该先清楚本项目需要实现什么功能,以及可以提供给用户的操作界面。22.1.1概要功能•家庭财务管理系统相对于企业的财务系统而言,要简单得多,毕竟收支方面的流程和种类都比较小,而且使用该系统的管理员也比较少。为了简单起见,本项目就实现家庭财务管理系统的支出方面进行讲解分析,收入方面的相关功能其实是类似的,该功能留给感兴趣的读者完成。•家庭财务管理系统的概要功能如下:•可以对每天的支出进行记帐,记帐要实现分类:•(1)按不同的支出类型分类。•(2)按不同的消费人员进行分类。•可以对历史数据进行查询,查询要实现的功能是:•(1)指定时间段,可以按类型进行该时间段的支出统计查询。•(2)指定时间段,可以按消费人员进行该时间段的支出统计查询。•(3)指定时间段,可以同时按类型和消费人员进行该时间段的支出统计查询。22.1.2界面需求•根据前文所述的功能需求,在功能上可以分为两个模块:•记帐的功能。•查询并统计的功能。•因此,在操作界面上也应该分两个区域分别为这两个功能提供用户的操作界面:•日常功能:日常功能就是对日常的开支进行记帐。•统计功能:统计功能就是根据用户输入的起止时间,对特定的类型和消费人员的支出进行统计。22.2数据库设计•基于数据库的应用系统可以分为两个层次:•应用程序层•数据库层•数据库层是不与用户直接打交道的,用户是通过应用程序来访问数据库,因此,数据库可以看作是整个数据库应用系统的“后台”,而应用程序所展示的界面可以看作是该系统的“前台”。因此,设计好后台,直接关系到整个系统的稳定性和应用程序设计的方便与否。22.2.1数据关系分析•数据库的设计,首先应该从数据之间的相互关系入手。如果数据库系统比较复杂,则还需要进行规范化的项目管理流程,一般的数据库系统开发流程如下:•(1)需求分析阶段•(2)概念结构设计阶段•(3)数据库详细设计阶段•(4)应用程序开发阶段•(5)数据库系统实施阶段•(6)数据库系统运行和维护阶段22.2.2E-R图设计•概念模型就是对信息世界的抽象建模,狭义的信息世界可以专指数据库中的数据,那么概念模型就可以理解为对数据库数据的抽象建模。•概念模型最常用的描述方法是E-R图(“实体-联系”图)描述法,E-R图主要有3个要素:•实体:实体是以矩形表示。实体就是数据库数据中具有实际意义的主体,如在前文分析的实体就是“消费人员”和“消费品”。•属性:属性用椭圆表示。就是实体所拥有的特性,如果是在面向对象程序设计中,可以将“实体”和“属性”对应为“对象”和“对象中的数据成员”的关系。•联系:联系用菱形表示。联系是实体与实体之间发生的动作、从属或其他依赖关系。22.2.3数据库表的生成•由E-R图生成数据库表是数据库系统研发的必要步骤,如果没有联系,只有单实体或孤立的实体的E-R图,转换方式很简单:•(1)首先将实体名写成数据库表的表名。•(2)然后将实体的属性写成数据库表的属性。•(3)根据实际含义,将设定数据库属性的类型(整型、字符串型或日期类型等)。•(4)设定主码。22.3算法设计•本章项目的功能比较简单,而且本章主要的学习目的在于:•连接数据库。•修改数据库内容。•添加数据。•统计数据库信息。•因此,算法的设计和分析也将围绕这4个功能展开。22.3.1连接数据库•连接数据库的功能是所有数据库应用系统开发的必要过程,本项目采用ADO的连接方式进行连接。连接数据库的过程如下:•初始化OLE,创建ADO连接。•调用Open()函数,打开本地的数据库文件“Home.mdb”。•为界面读取初始化数据,传递SQL语句选择出相应的数据库元组。22.3.2添加数据•为数据库添加数据是数据库开发的重要功能,主要步骤如下:•调用Open()函数打开数据集。•调用AddNew()成员函数,告知系统开始添加数据。•添加数据操作。•调用Update()将添加的数据写回到磁盘的数据库文件中。•调用Close()成员函数关闭数据集。22.3.3修改数据库内容•从应用程序种修改数据库的内容关键也在于传递SQL语句,使用SQL的更新语句即可,如下所示:•update表名setDateA='某日期',Content='某内容',MoneyA=某金额,Handler='某人',Type='某类型'whereID=某ID;•将该SQL语句存放在strSql字符串变量中,然后再调用Execute()函数执行即可。代码如下:•m_pConnection-Execute(_bstr_t(strSql),&vAffected,adCmdText);22.3.4统计数据库信息•统计数据库的信息关键在于使用SQL语句的集函数,就是对数据表中的某属性进行集操作,这里使用的集函数是“和”操作,即“SUM()”函数,代码如下:•selectSUM(MoneyA)asSumMoneyAfromBudgetwhereDateA=某日期andDateA=某日期andType=某消费品类型andHandler=某消费人;22.4软件项目开发过程•本节将讲解如何开发家庭财务管理项目,通过前文的项目背景和算法分析的准备,本节的内容就相对比较简单了。22.4.1开发家庭财务管理系统项目的流程•开发家庭财务管理系统项目的流程如图所示。、1创建数据库表结构、2功能研发前的准备(、工作ADO支持界面)控件设置等、3根据算法设,计实现按钮功能图22.5家庭财务管理系统项目的开发流程22.4.2根据E-R图创建数据库表•E-R图中一共有两个实体和一个联系,因此,在本项目中就相应创建3个数据库表,如图所示。为数据库创建3个数据表22.4.3功能研发的准备工作•在实现系统的添加、修改和统计功能之前,需要做一些准备工作,使整个项目的数据库连接和访问等能顺利进行,并使界面可以达到预期目标。•准备工作的工作流程如图所示。、1添加ADO支持、3添加并修改OnInitDialog()虚函数、2为界面添加控件ID和与控件绑定的变量准备工作的工作流程22.4.4实现算法设计•根据前文所创建的项目,在项目的对话框中设计出前文所示的界面设计。界面上主要的功能按钮有:•“添加”按钮:单击该按钮后,将对话框编辑控件的内容添加到数据库。•“修改”按钮:单击该按钮后,使对话框编辑控件中与数据库对应的内容作出相应的修改。•“统计”按钮:单击该按钮后,对指定时间段内的数据库内容,分消费品的经手人或消费品种类进行统计,并将统计结果显示在对话框相应的控件中。22.4.5测试•本小节对“HomeRes”项目进行测试,按F5键编译并运行项目,测试流程如下:•(1)测试添加功能。•(2)测试统计功能。•(3)测试修改功能。•在日常功能中,选中与添加功能的数据组合相同的数据,对金额进行修改,修改后,按照测试统计功能的数据组合再进行统计,查看并思考统计结果的变化。•在软件工程项目开发过程中,软件测试是软件生命周期中质量保证的关键环节,任何软件都不可能做到十全十美,而编译器也只负责检查语法错误,而对于逻辑错误则无能为力了,因此软件测试对于成功开发软件至关重要。22.5小结•本章详细讲解了基于ADO连接方式的数据库应用项目-家庭财务管理系统的设计和研发,涉及的技术较多,但各个知识点相对来说并不难。需要读者细心阅读并通过本章的内容进行实践操作。•通过本章的学习,读者应该掌握的内容如下:•E-R图的设计。•E-R图转换为关系数据库表的方式,特别是联系转换成数据表的种类和方法。•数据库连接操作。•数据库元组添加操作。•修改数据库元组的方法。•简单的数据库数据统计方法。