版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北科技学院毕业设计(论文)
华北科技学院毕业设计(论文)
PAGE
VI
PAGE
IV
摘要
近年来,家庭理财日益受到家庭的关注。一个理性的家庭,不应仅仅满足于一般意义上的“食饱衣暖”。当手头现有的资金还算充裕的时候,就应该根据家庭自身的特点,寻找一些最适合自己的投资领域与投资工具,获取尽可能高的收益率。家庭理财需要理财者对家庭的现状与未来有一个系统的把握和长期的打算,除合理分配家庭的财务支出外,同时还要学会钱生钱,最起码能抵消通货膨胀的影响。本系统设计的是一套功能比较完善的家庭理财系统。该系统的开发是以ECLIPSE3.1作为开发平台,应用JSP技术作为前台开发语言,应用SQLServer2000数据库来作为后台的数据库对本系统用到的数据进行存储和提取。家庭理财系统基于B/S模式,功能主要包括日常消费和收入记录和统计管理部分。本家庭理财系统是使用计算机进行信息管理,不仅提高了工作效率,而且操作简便、界面友好、灵活、实用,能够很好的满足家庭从事财务管理方面的需要。
关键词:家庭理财,Jsp,JavaBean
Abstract
Inrecentyears,Familyfinanceisdrawingmoreandmorefamily'satteniondaybyday.Arationalfamily,shouldnotmerelysatisfyinthegengeralsignificance"thefoodfullclothesiswarm".Whenthereareabundantfundsonhand,youshoulefindsomeofthemostsuitablefortheirinvestmentdomainandinvestmenttoolsbasedonthefamily'scharacteristicstoobtainthemostreturnaspossible.Financialmanagershoulehasasystemassuranceandlong-termplansofthefamilypresentsituationandthefuture.Besidestherationalofdistributionfamilyfinancialdisbursement,meanwhilehemuststudythetohowgetmoremoneybythemoneyhehas,atleastheisabletooffsettheimpactofinflation.Thissyetemisdesignedforfamily'sfinancialmanagemnet.SystemusesECLIPSE3.1asthedevelopmentplatform,andJSPtechnologyasforegroundProgrammingLanguageandSQLServer2000databaseasthebackgrounddatabasetostorgeandretrievalthedata.SystemBasedonB/Smode,andthefunctionofthesystemmainlyincludesthedailyconsumptionandincomerecordsaswellasthestatisticsmanagement.Thisfamilymanagesfinancesthesystemisusesthecomputertocarryontheinformationmanagement,notonlyenhancedtheworkingefficiency,moreoveroperates,thecontactsurfacesimplyfriendly,nimble,practical,cantheverygoodsatisfiedfamilybeengagedinthefinancialcontrolaspecttheneed.
Keywords:familyfinance,Jsp,JavaBean.
目录
TOC\o"1-3"\h\z
摘要
I
Abstract
II
绪论
1
第1章需求分析
3
1.1系统设计目标
3
1.2系统数据分析
3
1.3系统问题分析
4
1.4系统功能需求
4
1.5系统性能分析
5
1.6可行性分析
5
第2章系统设计
8
2.1总体设计
8
2.1.1总体设计的主要任务
8
2.1.2系统功能模块
8
2.2详细设计
9
2.2.1详细设计的任务
9
2.2.2程序流程图
10
2.3数据库设计
11
2.3.1数据库表分析
11
2.3.2E-R图:
11
2.3.3表的详细结构说明
12
第3章编码设计
15
3.1系统登录模块的设计与实现
15
3.2主界面的设计与实现
15
3.3消费模块的设计与实现
16
3.4统计模块的设计与实现
17
3.5退出系统模块的设计与实现
18
第4章系统测试
19
结论
21
参考文献
22
附录A 主要代码
23
致谢
34
华北科技学院毕业设计(论文)
第
PAGE
44
页共
NUMPAGES
38
页
第
PAGE
3
页共38页
绪论
改革开放以来,中国经济得到了迅速的发展,家庭收入也与日俱增,随着房产热、私家车、出国游等走入寻常百姓家,如何规划财富,如何让财富增值,如何享受财富也日渐成为每个家庭关注的话题。《中国统计年鉴》的资料表明,近13年来,中国物价上涨率平均达到了6.5%,这一数字意味着,如果不用于投资理财,我们手头的现金每年就会减少6.5%。从20世纪90年代国内第一家银行推出个人理财产品,到目前几乎所有的银行都拥有了个人理财部,有些甚至引进了更高层次的贵宾理财。这就要求有更好的家庭理财软件。
现代家庭与传统家庭在理财方面也出现了许多不同,两相比较,现代家庭理财难度更大,其中还潜藏了多种理财危机。其一是收入虽增,支出更大。而现代职业妇女相当普遍,双薪家庭收入增加,可以支配的家庭收入相对较多。但是由于现代人物质欲望高,消费诱惑也大,收入虽较丰厚,花费也比以往高出许多。其二是投资虽广,风险也高。传统家庭理财方式多半以储蓄为主,财富累积速度虽慢,但风险也低,至少不会把本金赔掉。而现在投资理财工具多样化,但若未具备专业知识而盲目理财,其结果不仅白忙一场,还可能因此赔掉老本。其三是子女虽少,花费更多。现代家庭普遍响应计划生育,只有一个孩子,但由于父母十分重视孩子的养育,花在生活上、学习教育上的费用比以前多得多。其四是借钱虽易,利息巨增。
我国居民的储蓄存款超过十万亿人民币。特别是像上海、深圳等发达城市,居民的可支配收入正在逐步达到中等发达国家水平,许多居民除了购房、购车外有大量的金融资产,如何分配、管理金融资产是居民最大的需求。大多数个人对金融方面的需求从储蓄、保管金融资产向金融资产的保值、增值转变。家庭如何管理金融资产呢?如何安排自己的富余的现金流,如何筹集自己所需的资金,成为了一个现实的问题。
家庭理财系统以家庭理财的概念、理论、本质为基础,剖析了家庭的经济结构,并对理财市场和理财产品进行了分析,在此基础上提出了家庭理财的模式及如何进行家庭理财规划。家庭理财系统是每一个家庭管理家庭财务收入和支出的不可缺少的一个管理信息系统,它的内容对于家庭的管理者来说是至关重要的,所以家庭理财系统应该能够为一个家庭的管理者提供充足的信息和快捷的查询手段,方便家庭的管理者的合理理财。
随着科学技术的不断提高,计算机科学日渐成熟,网上银行的迅速发展,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对家庭财务进行管理,具有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高家庭财务管理的效率,也是家庭理财的科学化、正规化管理,与先进科学技术接轨的重要条件。
第1章需求分析
1.1系统设计目标
现代社会家庭的理财观念进一步提高,理财手段变得更加丰富。随着生活水平和文化水平的提高,家庭购买电脑的能力和应用电脑的能力开始提高。电脑及其应用的普及化,人们应用电脑进行家庭财务管理的观念增强,因此,开发一个通用性家庭理财软件已经成为社会需求。本系统是一个家庭通用型理财软件,系统目标是把适合家庭化管理的各种理财手段及家庭日常收支管理实现计算机化管理,使对家庭及家庭成员的收支活动更好地进行记录并加以统计分析成为可能,也使家庭理财变得方便,快捷,全面。
1.2系统数据分析
家庭理财的中心内容账务管理。人们几乎每一天都会经过许多次货币活动。其中包括了买入卖出实物,娱乐消费,起居饮食消费,还有发放工资等。如果能把各类不同的活动进行分类,分别对活动进行管理,那么无论现在还是将来,你的账务就会清楚明白了。现在我们把这些工作放到程序里去实现,就是这样的操作。日常生活中,当我们要对一周来收支的情况进行了解,就非常困难,而观察一个月里的利率走势就更加是问题。做到程序里,把它存放到一个数据表里就可以了。归结后,用户的操作一般如下:增加,减少,查找,统计。因而有了相应的操作来管理的账务,依据需要一个统计分析的过程。我定义这样一个过程,分析数据,生成表。比如日常收支统计。建立日常收支表,以收支类型,时间段分类统计也可综合统计。时间上可按年收支,月收支,日收支进行统计。在理财的大道上,我们也需要随时了解自己所处的位置,在终极目标的指引下,实现一个个短期的目标。而这一切也正是软件中统计表要告诉用户的。
图1-1数据流图
家庭理财系统首先要求用户进行系统登录验证。用户要输入用户名和密码。输入正确则进入,否则给出反馈信息要求用户重新输入。合法性验证通过后,进行系统的各项收支信息的录入和统计,正确的数据会写入后台数据库中进行存储,同时会在页面中以表格的形式显示给用户查看。收支统计会根据一些特定的条件给出统计信息和理财信息提示。
1.3系统问题分析
家庭理财系统主要由日常记账管理和应用各种理财手段进行理财实现家庭资金的最大增值。按用途有效的进行消费计划和统计。主要为各家庭成员对家庭财产的增加和减少活动进行跟踪和记录,这样随时可以对家庭的财产拥有状况进行浏览,查询,方便家庭财产的添置和管理。
1.4系统功能需求
浏览选择功能:对系统进行浏览,查看账户余额,消费类型。
安全性功能:用户可为系统设置密码,防止非法用户进入系统,破坏数据或查看信息。
系统退出功能:关闭整个系统,保存数据,安全退出。
收支记账:日常收支活动进行记录。对每天的消费及时入账。便于以后对家庭收支或个人收支的查询和统计。它记录了收支活动的日期,收支类型,活动说明,收入金额,支出金额,余额,及消费者。
收支分类:收支分类主要为各种收支活动按一种统一的标准进行分类,便于对各类收支进行分类统计整理。用户可以用收支分类表自行添加新的收支类型,删除不需要的或模糊的类目,并可查询和浏览系统中所有类目信息。收支类型信息作为系统信息为各种记账活动提供选择。
1.5系统性能分析
易用性要求
系统采用目前普遍使用的窗体显示模式,整个系统为彩色界面,力求界面的美观,简洁明了,富于人性化目标。系统界面尽量符合用户实际操作的要求,它是能否吸引用户的重要方面。数据输入可直接在数据输入框输入。系统把一些比较固定的常用信息供用户在输入时选择,方便输入和加快了速度。
系统安全性
系统涉及到一个家庭的财务和账务信息,安全性比较重要,系统应有密码设置,防止家庭财务信息外泄或不想被人知道的信息外露。可在每次进入系统前要求输入用户名和密码。
1.6可行性分析
经济和市场可行性分析
现在,人们的生活水平和文化素质普遍提高,并且开始注重生活质量。随着市场经济的快速发展,观念的不断更新,个人理财意识普遍增强,特别是家庭理财意识得到很大发展,在意识上,一方面,人们对家庭和个人的各方面消费有想进行统计和分析的愿望,以便更好地做好家庭收支计划,和家庭财务管理。另一方面,各种理财手段不断丰富,如何把各种理财手段统一起来,并且能更加方便的操作成为要求。在物质基础上,计算机的应用开始普及,人们购置计算机和使用计算机的能力增强,人均计算机拥有量将快速提高。这些条件说明,人们有购买一个家庭理财软件的要求。在一个可接受的价格范围内,将购买这种软件,因此具有市场潜力。开发一个小型财务软件,用快速开发工具可在几个月内由几个人的开发小组完成。经过以上分析,开发一个通用型家庭理财软件具有在经济和市场可行性。
技术可行性分析
①开发一个通用型家庭理财软件,项目规模可以在适合大多数家庭的基础上进行开发。技术上主要涉及界面设计和数据库设计。在开发工具方面,可采用应用软件快速开发工具ECLIPSE3.1,它是一个高度集成化开发环境,具有丰富的组件,尤其在数据库开发方面具有很大优势。ECLIPSE3.1能够支持大多数数据库的连接,通过数据库连接组件可方便快捷的实现数据库连接,并进行高效访问。
②开发环境
本系统为B/S结构。也就是系统的的客户端采用的是浏览器,不用再另外编写客户端软件。系统部署在TOMCAT下运行,开发时的调试环境为TOMCAT5,开发工具为ECLIPSE3.1,数据库采用了SQLSERVER2000。
系统采用MVC模式。该模式是现在最流行的一种设计模式。MVC包括3类对象,简单地说,MODEL是应用对象,VIEW是它在屏幕上的表示。CONTROLLER定义用户界面输入的相应方式。
图1-2MVC模式图
③开发工具
JavaServlet是JSP技术的基础,JSP本身就是预先被编译成Servlet,然后再运行的,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。Servlet其实和传统的CGI程序和ISAPI、NSAPI等Web程序开发工具的作用是相同的,在使用JavaServlet以后,用户不必再使用效率低下的CGI方式,也不必使用只能在某个固定Web服务器平台运行的API方式来动态生成Web页面。许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器也可以通过附加的应用服务器和模块来支持Servlet。得益于Java的跨平台的特性,Servlet也是平台无关的,实际上,只要符合JavaServlet规范,Servlet是完全平台无关且是Web服务器无关的。由于JavaServlet内部是以线程方式提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此JavaServlet效率非常高[1]。
JavaBeans就是Java的可重用组件技术。ASP通过COM来扩充复杂的功能,如文件上载、发送email以及将业务处理或复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBeans实现了同样的功能扩充。JSP对于在Web应用中集成JavaBeans组件提供了完善的支持。这种支持不仅能缩短开发时间(可以直接利用经测试和可信任的已有组件,避免了重复开发),也为JSP应用带来了更多的可伸缩性[4]。JavaBeans组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据提取等。由于JavaBeans开发起来简单,又可以利用Java语言的强大功能,许多动态页面处理过程实际上被封装到了JavaBeans中[2]。
JSP技术是目前网上最流行的在服务器端运行的脚本技术。JSP具有跨平台、安全、强大的可伸缩性的特点,而果硬要挑一些毛病,JSP相对别的脚本更加难掌握,因为精通JSP必须精通Java语言,对于中小型项目,我们要考虑开发人员、开发速度、开发成本等问题[3]。
本系统采用了SQLServer。SQLServer是新一代大型关系型数据库管理系统,可为数据管理者提供强大的支持,对数据库中的数据提供有效的管理,并采用有效的措施实现数据的完整性及数据的安全性[11]。
家庭理财系统在上述的应用环境中,系统的实现在技术上具有可行性。
第2章系统设计
2.1总体设计
2.1.1总体设计的主要任务
(1)通过在软件需求分析时撑握的文档,制定最佳方案,用系统流程图,组成系统物理元素清单,系统的进度计划,供日后详细设计时使用。
(2)确定模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块(如食品消费模块、着装消费模块、行车消费模块,家居消费模块等)。确定模块间的联系,确定数据结构、文件结构、数据库模式[5]。
2.1.2系统功能模块
系统的功能模块分为:登录模块,消费模块,统计模块,收入模块。
登录模块的功能:主要是对用户的管理权限进行验证。决定用户是否有权限进行本系统。
消费模块的功能如下:
食品消费:完成日常生活中食品类商品消费项目的统计。
着装消费:完成日常生活中服装衣物类商品消费项目的统计。
家具消费:完成日常生活中家居用品类商品消费项目的统计。
行车消费:完成日常生活中交通消费项目的统计。
统计模块的功能如下:
当日汇总:对当日消费情况进行汇总。
月份汇总:对当月消费及收支情况进行汇总,并计算节余.根据收支情况给出一些简单的理财建议。
年份汇总:记录每年收支情况,并计算节余,根据收支情况给出一些简单的理财建议。
收入模块的功能:对家庭的收入进行统计。
根据以上分析,该系统考虑将整个系统分解成如下功能模块图:
图2-1家庭理财系统结构图
2.2详细设计
2.2.1详细设计的任务
确定应该怎样具体地实现所要求的家庭理财系统,经过这个阶段的设计工作,应该得出对家庭理财系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用jsp程序设计语言书写的程序。
详细设计阶段的任务还不是具体地编写程序,而是要设计出家庭理财系统程序的“蓝图”,以后程序员将根据这个蓝图写出实际的家庭理财系统程序代码,因此,详细设计的结果基本上决定了最终的程序代码的质量[6]。
2.2.2程序流程图
图2-2程序流程图
用户要进入系统,首先要进行用户权限的验证,系统会判断用户名和密码是否正确,如果正确则进行系统进行操作。否则给出错误提示信息要求用户重新输入正确的用户名和密码。进入系统后进行消费记录,首先要求数据输入的格式必须符合系统的规定,否则给出错误格式的信息提示,要求用户重新输入正确格式的数据。正确的输入后,数据会写入后台数据库进行存储。收入记录同样要求用户输入的数据格式正确,否则会给出格式错误信息提示要求用户输入正确格式的数据,输入正确后,系统会将数据写入后台数据库进行数据存储。数据库中的数据为用户进行数据的收支统计查看和进行家庭理财的投资提供了依据。
2.3数据库设计
2.3.1数据库表分析
数据库设计中设计了表,一张是日期表FAMILY_RECTIME,记录有消费记录的日期,一张表是MYTABLE是具体的消费,收入数据记录表,一张表TBUSER是用于登录本系统的用户名和密码核对表,一张表是XIAOFEIG是用于记录消费品属性的表[8]。
2.3.2E-R图:
图2-3收支实体图
图2-4用户实体图
图2-5消费品实体图
图2-6数据库E-R图
一个消费者可以购买多个物品,一个消费品也可以被多个消费者购买;一个收支明细可以记录管理多个消费者,消费者也可以管理多个收支明细;一个消费品可以被多条收支明细记录,一个收支明细也可以记录多个消费品。
2.3.3表的详细结构说明
FAMILY_RECTIME表有2个字段:ID和RECTIME,ID是流水号,每条记录的惟一性标识;RECTIME则是日期数据,两个字段在数据库中都使用nvarchar类型。
表2-1FAMILY_RECTIME表
字段
描述
类型
长度
是否为空
id
流水号
nvarchar
20
否
rectime
日期数据
nvarchar
20
否
MYTABLE表有7个字段:ID是流水号;INDEXID是日期表的索引号;TYPE表示“衣食住行”分类下的子分类,如“食”类中分有“厨房消费”、“零食消费”等;MONEY是消费金额;NAME表示消费品名称;PERSON记录的是消费者;TABLES表示记录属于“衣食住行”哪一类。
表2-2MYTABLE表
字段
描述
类型
长度
是否为空
id
流水号
nvarchar
20
否
indexid
日期表的索引号
Int
4
否
person
消费者
int
4
可以为空
tables
衣食住行类别
int
4
否
type
衣食住行分类下的子分类
int
4
可以为空
money
消费金额
float
8
否
name
消费品名称
nvarchar
50
否
TBUSER表有3个字段:USERNAME是用户名,PASSWORD是密码,SEX性别。
表2-3TBUSER表
字段
描述
类型
长度
是否为空
username
用户名
nvarchar
20
否
password
密码
nvarchar
20
否
sex
性别
Char
10
是
MYTABLE表和FAMILY_RECTIME表,两表之间通过ID来作为连接的变量,通过ID列的值就能把两个表给连接起来[7]。
XIAOFEI表有4个字段:
XID表示消费品号;TYPE表示“衣食住行”分类下的子分类,如“食”类中分有“厨房消费”、“零食消费”等;MONEY是消费金额;NAME表示消费品名称。
表2-4XIAOFEI表
字段
描述
类型
长度
是否为空
type
衣食住行分类下的子分类
int
4
可以为空
money
消费金额
float
8
否
name
消费品名称
nvarchar
50
否
xid
消费品号
nvarchar
20
否
第3章编码设计
3.1系统登录模块的设计与实现
系统登陆时为防止非法用户进入系统而设计,主要用于辨认用户的身份,以确定其适用权限。系统登陆模块运行界面如下图所示。
图3-1家庭理财系统登录界面
系统登陆模块的主要任务就是验证用户输入的用户名和密码是否正确。如果验证通过,就根据登陆用户所拥有的访问权限分配可用功能。反之,则不允许登陆。
3.2主界面的设计与实现
系统的主页面用于数据的收集工作,它实现一个框架,这个框架分为三个界面布局。每部分是独立的JSP页面。
导航窗口页面:
它主要是完成框架左侧的展示工作,同时在单击左边不同的链接的时候,在框架的中部显示不同的收集数据的页面。这样设计的目的是:以后需要修改框架左侧页面的展示情况时不要修改多个地方,只需要修改该页面就可以达到目的。
头页面:
它的主要作用是实现框架头的展示功能,显示系统的时间和展示系统的标题。
显示页面:
该页面是一个空页面,就是该页面里面没有具体实现什么展示的工作,该页面是承载其他页面。利用其他页面进行数据的收集工作。
图3-2家庭理财系统主界面
3.3消费模块的设计与实现
通过点击左边导航栏中“衣食住行”四大类别的消费类别,右边空白部分就出现了相应的消费界面,用户就可以在里面输入相应的消费项目了,这就是关于页面展示和数据收集的部分,在系统中实现了页面逻辑和处理逻辑的分开,所有的页面也就是负责数据的收集和数据的展示功能了,在收集到了数据以后都是发送到对应的SERVLET中来进行数据处理的。
所有的页面数据在收集到了以后都是提交到页面相对应的SERVLET去处理的,页面中控制根据页面代码中表单提交的地址提交到某个页面后者SERVLET中。数据传到SERVLET后,SERVLET执行的操作流程是:获取提交数据-判断操作-数据封闭-执行数据库操作。
所有的消费记录的处理流程都基本类似,不同是就是页面收集到的数据发送到了SERVLET以后是调用不同的处理方法来对其进行处理,在这里就不作详细的介绍了。
图3-3家庭理财系统消费界面
3.4统计模块的设计与实现
这个页面的功能就是实现收支情况的页面展示部分,如下图
图3-4家庭理财系统统计界面
在对页面数据的流转进行了配置以后,所有的页面的数据都会按照配置好的发送到相应的BanlanceServlet中去处理。
这样就实现了查看收支情况的功能了,处理过程和另外两个统计类似,不同的就是使用不同的Servlet和javaBance来对数据库进行封装,不同的模块使用不同的Servlet和javaBance.
在收集到了数据以后,为了提高数据的安全性,把这些数据封装到了ModelFour的数据类型中,也就是封装成一个对象来发送到数据库进行处理的。
3.5退出系统模块的设计与实现
后台对于整个系统的正常运行超着到关重要的作用。当用户对系统维护工作完成后,必须退出系统,否则万一被不法分子乘机进入,后果将不勘设想。实现退出系统后台的方法很简单,只需要单击“退出”超链接时,连接登录页面即可。登录页面主要是将保存有用户信息的Session变量清空,并将页面重定向到网站登录页面即可。
第4章系统测试
随着软件系统的规模日益庞大,结构日趋复杂,对软件系统的性能测试已经成为必须和趋势。尤其大型的分布式软件系统更要在正式运行前进行性能测试,因为这样的系统在投入生产之后,往往要接受大批量的业务量,这对应用程序本身,操作系统,中心数据库服务器,中间件服务器,网络设备的承受力都是一个严峻的考验。在其中任意一个环节出现的问题都可能给用户带来巨大的商业损失。预见软件系统的并发承受能力以避免商业风险,这是在软件测试阶段就应该解决的[10]。
(1)单元测试的过程
单元测试常常和代码编写同步进行,在完成了程序编写、复查和语法正确性验证后,就应进行单元测试用例设计。在对每个模块进行单元测试时,不能完全忽视它们和周围模块的相互联系。为模拟这一联系,在进行单元测试时,需设置若干辅助测试模块。辅助模块有两种,一种是驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在单元测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。另一种是桩模块(stub),用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,以便于检验被测模块与其下级模块的接口。
驱动器和桩都是额外的开销,这两种模块虽然在单元测试中必须编写,但却不作为最终的软件产品提供用户。如果驱动器和桩很简单的话,那么开销相对较低,然后,使用“简单”的模块是不可能进行足够的单元测试的,模块间接口的全面检验要推迟到集成测试时进行[9]。
(2)功能测试
链接是使用户从一个页面浏览到另一个页面的重要手段。对于每个链接,需要验证两件事情:一是该链接将用户带到它所说明的地方,另外就是被链接页面是存在的。这句话听起来有些问题,但是有很多多站点的内部链接都是空的。这实在是无法忍受。如果根据业务规则需要对用户输入进行校验,需要保证这些校验功能正常工作。应用程序特定的功能需求
消费模块测试如下表所示:
表4-1消费模块测试用例
项目
输入
输出
消费模块
物品名称空
物品名称不能为空
价格空
物品价格不能为空
价格含有非法字符
物品价格格式不正确
物品名称及价格正确
数据录入到数据库,并显示至页面下方
当用户通过表单提交信息的时候,都希望表单能正常工作。如果使用表单收集配送信息,应确保程序能够正确处理这些数据。要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。
登录测试如下表所示:
表4-2登录模块测试用例
项目
输入
输出
登录测试
空
Wrong
未存在用户
Wrong
两者有一者错误
Wrong
两者都有错误
Wrong
两者正确
登录成功
结论
家庭理财系统的设计实现了预期的功能,对家庭的日常消费进行分类别的记录,家庭的收入进行统计,对家庭的收支进行汇总并给出相应的理财提示信息。在这次的家庭理财系统设计中将理论知识应用到实际中使得对理论知识的理解有了更进一步的理解,如果仅仅只是运用理论知识,是远远不够的。必须理论联系实际,才能很好的将各门课程学好,并用于实际案例中。同时,经过这次毕业设计,我发觉自己的动手操作能力变强了,也为自己对以后的科研、工作充满信息和希望打下了良好的基础。
在这次课程设计调试阶段,发现了许多不足之处,比如说,以前做实验时经常不注意实体的属性的字段,在调试过程中才知道这个很重要。另外,在与数据库进行连接时,刚开始总是在SQLServer2000里面看不到生成的表,因为没有更改默认的数据库为现在所用的数据库,所以在数据库里生成不了表。在调试过程中,还有些小小的问题都经过仔细分析、检测后一一改正,弥补了自己的不足,起到了很好的查漏补缺的作用。相信通过这次家庭理财系统设计,使得本人的经验提高了很多。对以后碰到类似的问题,就会变得游刃有余。也可推知其他方面的问题,只要有信心,认真相信都会成功的解决。
这次设计使我的编程水平提高了一大步,使我充分的认识到合作的可贵。由于这次设计涉及到数据库,我的学到了不少编程工具与数据库连接的知识,对数据库的操作有了进一步的了解。这次设计对我的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅。所以今后我的学习道路还是很漫长的。在这里我要衷心的感谢我的指导老师,谢谢她的悉心指导和热心帮助。由于我水平有限,加之时间短暂,故家庭理财系统中还有许多不足之处,请老师批评指正,我会在以后的制作中不断改进,不断完善。
参考文献
[1]陈海山主编.深入JAVASERVLET网络编程[M].北京:清华大学出版社.2002
[2]Haefel.EnterpriseJavaBeans[M].北京:中国电力出版社.2001
[3]陈旭东,刘迪仁.JSP2.0应用教程[M].北京:清华大学出版社,北京交通大学出版社2006
[4]清宏计算机工作室编著.JSP编程技巧[M].北京:机械工业出版社.2002
[5]林国璋,张雪兰.系统软件与软件工程技术基础[M].北京:北京理工大学出版.1990.9
[6]史济民.软件工程原理.方法与应用[M].北京:高等教育出版社.1990.5
[7]姚卿达.数据库设计[M].北京:高等教育出版社.1987.4
[8]史济民.数据库原理与应用[M].北京:高等教育出版社.1987.10
[9]郑人杰.计算机软件测试技术[M].北京:清华大学出版社.1992.12
[10]上海艾微软件技术有限公司主编.软件测试技术概论[M].北京:清华大学出版社.2004
[11]龙怀冰,李白桦等著.SQLServer2000实用开发教程[M].北京:人民邮电出版社.2006
主要代码
MyDAO.java类是程序的核心代码,在该类里面实现了所有和数据库相关的操作。
packagefamily.yin.senqi.dao;
importjava.sql.*;
importfamily.yin.senqi.model.*;
publicclassMyDAO{
privateConnectioncon=null;
privateStatementst=null;
/**
*构造函数,初始化con(类中定义的私有变量)
*/
//实例化的时候完成和数据库的连接
publicMyDAO(){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundExceptionex){
ex.printStackTrace();
}
try{
con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myFamaly","sa","758688");
}
catch(SQLExceptionex1){
ex1.printStackTrace();
}}
//判断用户名和密码是否正确
publicbooleanisLogin(ModelUseruser)throwsSQLException
{
booleanflag=false;
System.out.println("user.username:"+user.getUsername());
System.out.println("user.password:"+user.getPassword());
Stringsql="select*fromtbuserwhereusername='"+user.getUsername()+"'andpassword='"+user.getPassword()+"'";
System.out.println(sql);
st=con.createStatement();
ResultSetrs=st.executeQuery(sql);
if(rs.next())
{
System.out.println("登录成功");
flag=true;
}
returnflag;}
//查询数据库
publicModelOne[]getMyTableResults(inttables,Stringindexid)throwsException{
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSetrs=st.executeQuery("select*frommytablewhereindexid='"+indexid+"'andtables="+tables);
rs.last();
introw=rs.getRow();
ModelOne[]ms=newModelOne[row];
rs.beforeFirst();
inti=0;
//循环把结果集的记录存入数组中
while(rs.next()){
ms[i]=newModelOne();
ms[i].setId(rs.getString(1));
ms[i].setIndexid(rs.getString(2));
ms[i].setType(rs.getInt(3));
ms[i].setPerson(rs.getInt(4));
ms[i].setMoney(rs.getFloat(5));
ms[i].setName(rs.getString(6));
ms[i].setTables(rs.getInt(7));
++i;
}
rs.close();
st.close();
returnms;}
//得到收支总和
publicModelFour[]getBalance(intnYear,intnMonth)throwsException{
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Stringsql="selecta.rectime,SUM(b.money)asmoneyfromfamily_rectimea,mytableb"
+"wherea.id=b.indexidandYear(a.rectime)="+nYear+"andMonth(a.rectime)="+nMonth
+"andnotb.tables=5groupbya.rectimeorderbyDAY(a.rectime)";
ResultSetrs=st.executeQuery(sql);
rs.last();
introw=rs.getRow();
ModelFour[]mf=newModelFour[row];
rs.beforeFirst();
inti=0;
//循环取出结果集的内容
while(rs.next()){
mf[i]=newModelFour();
mf[i].setRecTime(rs.getString(1));
mf[i].setTotalMoney(rs.getFloat(2));
++i;
}
rs.close();
st.close();
returnmf;
}
publicModelTwogetRecTimeResults(Stringsql)throwsException{
ModelTwomt=newModelTwo();
try
{
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSetrs=st.executeQuery(sql);
rs.beforeFirst();
inti=0;
//循环取出结果集的内容
while(rs.next()){
mt.setId(rs.getString(1));
mt.setRecTime(rs.getString(2));
System.out.println("/////////////////"+mt.getId());
System.out.println("/////////////////"+mt.getRecTime());
i++;
}
rs.close();
st.close();
returnmt;
}
catch(Exceptione)
{
System.out.println("****erroringetRecTimeResults******");
e.printStackTrace();
returnnull;
}
}
//插入数据库
publicvoidinsertInto(Stringsql)throwsException{
st=con.createStatement();
st.executeUpdate(sql);
st.close();
}
publicModelTwoTestResult(Stringsql)throwsException{
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSetrs=st.executeQuery(sql);
rs.last();
rs.beforeFirst();
inti=0;
ModelTwomt=newModelTwo();
while(rs.next()){
Stringr=rs.getString(1);
mt.setId(r);
r=rs.getString(2);
mt.setRecTime(r);
i++;
}
rs.close();
st.close();
returnmt;}
//插入记录到时间表中
publicvoidinsertRecTime(StringrecTime){
try{
Stringid=this.getSid(1);
System.out.println("id:"+id);
System.out.println("*********************");
Stringsql_insert="insertintofamily_rectime(id,rectime)values"
+"('"+id+"','"+recTime+"')";
System.out.println("sql_insert"+sql_insert);
this.insertInto(sql_insert);
}
catch(Exceptionex){
System.out.println("****errorininsertRecTime******");
ex.printStackTrace();
}}
//得到表FAMILY_RECTIME中ID值最大的ID值
publicStringgetSid(inti)throwsException{
Stringid="";
Stringsql="selectMAX(CAST(IDASint))asid,''asrectimefromfamily_rectime";
if(i!=1)sql="selectMAX(CAST(IDASint))asid,''asrectimefrommytable";
ModelTwomt=this.getRecTimeResults(sql);
if(mt.getId()!=null)
{
System.out.println("*****mt!=null*********");
id=String.valueOf(newInteger(mt.getId()).intValue()+1);
}
else
{System.out.println("*****mt=null*********");
id=String.valueOf(1);
}
returnid;}
//得到时间ID
publicStringgetIndexid(StringrecTime)throwsException{
Stringsql="select*fromfamily_rectimewhererectime='"+recTime+"'";
System.out.println("sql:"+sql);
ModelTwomt=null;
mt=this.getRecTimeResults(sql);
if(mt.getId()!=null)
{
returnmt.getId();
}
else
{
returnnull;
}}
//插入记录到MYTABLE表中
publicvoidinsertToMytable(ModelOnemodel)throwsException{
Stringsql="insertintomytable(id,indexid,type,person,money,name,tables)values"
+"('"+model.getId()+"','"+model.getIndexid()+"',"+model.getType()
+","+model.getPerson()+","+model.getMoney()+",'"+model.getName()+"',"+model.getTables()+")";
this.insertInto(sql);
}
//删除MYTABLE表的记录
publicvoiddeleteFromMytable(StringrecId)throwsException{
Stringsql="deletemytablewhereid='"+recId+"'";
this.insertInto(sql);}
//得到每天收入
publicModelFour[]getEverydayMoney(Stringindexid)throwsException{
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Stringsql="SELECTSUM(MONEY)AStotal,tablesFROMMYTABLEWHEREINDEXID="+indexid+"ANDNOTTABLES=5GROUPBYtables";
ResultSetrs=st.executeQuery(sql);
rs.last();
introw=rs.getRow();
ModelFour[]mf=newModelFour[row];
rs.beforeFirst();
inti=0;
while(rs.next()){
mf[i]=newModelFour();
mf[i].setTotalMoney(rs.getFloat(1));
mf[i].setType(rs.getInt(2));
++i;
}
rs.close();
st.close();
returnmf;}
//得到收入总和
publicModelFour[]getMoneyInTotal()throwsSQLException{
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Stringsql="SELECTa.MONEY,b.RECTIMEFROMMYTABLEa,FAMILY_RECTIMEbWHEREa.indexid=b.idanda.tables=5";
ResultSetrs=st.executeQuery(sql);
rs.last();
introw=rs.getRow();
ModelFour[]mf=newModelFour[row];
rs.beforeFirst();
inti=0;
while(rs.next()){
mf[i]=newModelFour();
mf[i].s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年加盟店铺管理合同
- 2025年新型能源设备修理修配服务合同范本6篇
- 二零二五版城市更新改造拆迁安置房购买服务协议6篇
- 二零二五年度房产贷款合同领取指南4篇
- 二零二五年度食品生产企业绿色食品采购协议3篇
- 2025年度集装箱码头信息化管理系统采购合同4篇
- 二零二五版石油设备租赁与勘探开发合同2篇
- 2025年版项目部安全生产责任协议书执行规范2篇
- 2025项目管理委托合同文本
- 2025年度智慧城市路灯节能改造工程合同范本4篇
- 2025年MEMS传感器行业深度分析报告
- 《线控底盘技术》2024年课程标准(含课程思政设计)
- 学校对口帮扶计划
- 仓库仓储安全管理培训课件模板
- 风力发电场运行维护手册
- 《3-6岁儿童学习与发展指南》专题培训
- 河道旅游开发合同
- 情人合同范例
- 建筑公司劳务合作协议书范本
- 安徽省合肥市2023-2024学年高一上学期物理期末试卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的国内外文献综述》2700字
评论
0/150
提交评论