家庭管理系统设计毕业论文设计.doc
安徽工业大学毕业设计(论文)任务书课题名称家庭管理系统设计学 院 计算机学院专业班级计算机科学与技术052班 姓 名徐 涛学 号059074064毕业设计(论文)的工作内容:1.涉及知识:面向对象的编程技术、数据库技术、JDBC技术、Charterer技术以及设计模式相关知识等。2.系统设计:1)按照软件工程的方法结合家庭管理的要求对家庭管理系统进行需求分析、总体设计、详细设计、编码和测试。2)使用act 、Swing、Charterer进行系统前台设计,以mys为数据库进行系统后台数据管理,使用JDBC技术实现数据库的连接和使用,能提供一个界面良好,操作简便的C/S家庭管理系统;3)系统有财务管理模块,家庭计划管理模块,家庭日记管理模块,家庭相册管理模块,电话薄信息模块,理财入门模块等;4)软件结构良好,遵守软件设计的开闭原则,具备一定的可维护性和可靠性。起止时间:2009年2月16日至2009年6月10日共16.5 周指 导 教 师签 字系 主 任签 字院 长签 字装订线安徽工业大学 毕业设计(论文)说明书摘要家庭管理系统是一款综合功能的家庭事务管理系统,它以财务信息管理功能模块为核心,同时加入了家庭计划,日记,相册,电话薄,理财知识等其他功能模块,还提供一些个性化的功能,如留言,闹钟等。该系统界面美观,操作简便,功能全面温馨,适合家庭各个成员使用。整个系统基于C/S模式设计, 使用Java语言实现了一个基于Windows平台的管理系统。该系统采用三层分层设计模式(视图、业务层、持久层),通过JDBC和IO技术为该系统提供对象的持久化和IO流读写,使用Swing和act构建界面,并使用Charterer技术实现了数据的图形显示。该系统可以实现对日常生活收支和债务的增加,删除,修改及有条件查询;可以动态可视化的书写,管理日记和家庭计划;可以动态的浏览,增加,删除家庭相片;可以记录完整的电话信息;可以给家人留言,设闹钟等;还可以学习基本的家庭理财知识。该系统使用mys数据库作为存储对象,并同时使用IO流对大文件进行读取存储,在设计和完成的过程中加深了对GUI设计和事件监听处理的应用,同时加深了对数据库各种操作方法的理解,也进一步的了解了java设计模式。关键词 :家庭管理;设计模式;JDBC;mys;ChartererAbstractFamily Management System is a comprehensive function of the family affairs management system, which the financial information management function module as the core, at the same time joined the family planning, diary, photo album, telephone directories, financial knowledge, and other functional modules,and also to provide some personal functions, such as messages, alarm clock and so on. The system is beautiful interface, easy to operate, full-featured warm, suitable for all family members. The entire system is based on C / S model design, the use of Java language implements a Windows-based platform management system. The system uses three-tiered design mode (view, the business layer, persistence layer), through JDBC and IO technologies provides persistent object and IO streams to read and write, using Swing and act to build interface and using Charterer technology to achieve graphical display of data. The system can be achieved on the daily life of the balance of payments and debt to add, delete, modify and query conditions; can dynamic Visualization of writing, management in diary management and family planning;can dynamic View, add, delete the family photos; can record complete telephone number information; can message to familiars, set up alarm clock, etc.; also can learn the basic knowledge of family financial management. The system uses mys database as a storage object, and at the same time the use of IO streams for reading large files to store, in the design and completion of the course a better understanding of GUI design and monitor the handling of the incident, while a better understanding of the various methods of operation of the database understanding, and also further understanding of the design patterns of java.Keywords: Family Management; design mode; JDBC ; mys; Charterer 第 I 页目录摘要IAbstractII目录III第一章 绪论11.1什么是家庭管理11.2家庭财务管理的重要性11.3家庭管理系统分析11.3.1功能模块21.3.2项目描述2第二章 开发环境及开发工具的介绍32.1开发工具介绍32.1.1 Java简介32.1.2 应用程序开发环境-Myeclipse42.1.3 JDBC42.1.4 JFreeChart42.1.5 MySql数据库52.1.6 C/S开发模式5第三章 系统设计53.1系统设计思想53.2系统功能设计63.3系统结构设计图73.4系统ER图73.5系统用例图83.6系统类图93.7系统的数据库的设计12第四章 系统实现154.1 系统启动模块的实现154.2 系统主界面的实现174.3 财务操作界面的实现(以收入为例)204.3.1添加操作界面的实现244.3.2修改操作界面的实现254.3.3删除操作界面的实现254.3.4搜索操作界面的实现264.4 财务统计界面的实现274.5 财务分析界面的实现294.6 日记界面的实现314.7 计划界面的实现364.8 相册界面的实现414.9 电话薄界面的实现454.10 理财入门界面的实现484.11 闹钟界面的实现49第五章 系统测试525.1系统测试概念525.2测试的目的525.3测试的目标525.4系统测试的对象535.5测试过程535.5.1模块测试535.5.2子系统测试535.5.3集成测试535.5.4验收测试535.6测试结论535.7后续建议54总结与体会55致 谢56参考文献57 第 III 页第一章 绪论1.1什么是家庭管理 家庭管理是指家庭中的组织和建设。家庭管理以提高家庭物质和精神生活质量为中心,包括组织、决策、指导、协调、研究和实施家庭生活的一切方面。而家庭管理中,最重要的莫过于家庭财务管理,伴随着金融危机寒流的袭来,每个家庭都感到不同程度的社会生活压力,如何合理的做好家庭财务,及其他管理,顺利的度过这段经济寒冬是每个家庭必须面对的。1.2家庭财务管理的重要性理财就是计划经济,提早的做好计划,知道家里未来一个月近多少钱,扣除最基本的生活花销是多少,再扣除一般以外缓冲的一部分较为客观的现金,剩下的钱存银行,坚定不到万不得已的大事,决不动那些已存的钱。 人的花销总是有弹性的,如果你在一方面多花了,想到不能取钱填窟窿,就会在别处省,当然看病、过节孝敬父母之类的就不能算了。 理财最重要的目的是养成珍惜自己劳动的好习惯,而且积累财富是种乐趣,别构成压力,根据自己收入支配花销,就不会很紧张。还有一点就是会理财也会促进你会赚钱的。理财,在企业层面,就是财务,在家庭层面,就是持家过日子或管家,似乎自古以来家庭理财都是女人的专职,但在现代社会,理财是每个人都必须学会的生存技能之一。理财决定着家庭的兴衰,维系着一家老小的生活和幸福,尤其对于已成家的工薪阶层来说,更是最重要的一门必修课。但是家庭财务种类繁多,手工记载非常繁琐,而且不直观,如果想比较一年来的收入支出等情况,翻账本肯定不是一个很好的选择。如果有一套系统可以完成上述工作,那将可以减少很多时间,使得家庭财务管理不再是一件很繁琐或者专业人士才能去做的事,那对普通家庭来说是非常有益的。1.3 家庭管理系统分析 家庭管理系统是一款简单实用温馨的家庭管理软件,满足家庭和个人的财务,健康,计划等的信息记录和管理需求,以及家庭相册,日记,留言等个性化要求。本系统重点解决家庭理财的需求,以及适当的家庭辅助管理功能需求。1.3.1 功能模块 管理账户(收入,支出,借贷), 统计(图表显示收支借贷的比例视图,有每日比较和季度总额比较),增删改查等。 管理家庭日记,可以通过日历添加,查看。 家庭计划(旅游,聚会等),可以通过日历添加删除,可以快速浏览本月的计划。 家庭相册管理,可以添加删除,可以幻灯片浏览。 家庭电话薄,可以添加修改删除完整信息的电话号码记录。 理财知识,可以系统的了解关于理财的专业知识。应用说明:使客户能够对自己的财务状况有一个清晰认识,方便管理自己的财务,提供时间段的财务统计,让用户对自己的财产有个宏观的概念,结合家庭计划,家庭保健等综合管理家庭事务和财务,同时提供温馨的家庭交流平台。1.3.2项目描述 a. 针对普通个人用户,本软件具有友好的操作界面。用户只需要大概了解说明,便可以进行使用。b.本系统满足家庭成员的理财需求,不设权限。本软件的主要功能包括:a. 账户管理:管理用户的账户信息。接受用户账户信息的提交,进行处理后用表单的形式进行显示。b.收支管理:处理用户的收入和支出的信息,进行处理后用表单的形式进行显示,同时提供时间段的收支情况模糊查询,添加,删除,修改功能。c.借贷管理:用户提交借贷信息,进行处理后显示借贷的详细信息,同时提供时间段的借贷情况的模糊查询,添加,删除,修改等。d.统计功能:统计功能提供用户财务信息的查询和统计的功能,可以统计账户信息,收支信息,借贷信息,并以时间段作为标准,图表显示统计结果和比例统计饼图。e.日记录入:家庭日记信息的录入。可以快速动态的查看,修改,删除。f.家庭计划:家庭计划的制定和快速浏览。g.其他:图片展示,健康提醒,留言等。第二章 开发环境及开发工具的介绍2.1开发工具介绍2.1.1 Java简介Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java主要特性:1、Java语言是简单的。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。 2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。3、Java语言是分布式的。4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。5、Java语言是安全的。6、Java语言是体系结构中立的。 7、Java语言是可移植的。8、Java语言是解释型的。9、Java是高性能的。 10、Java语言是多线程的。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。11、Java语言是动态的。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise A Pis)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。 2009年04月20日,oracle(甲骨文)收购sun,java因此并归甲骨文公司。2.1.2 应用程序开发环境-EllipseEllipse企业级工作平台(Ellipse Enterprise Workbench ,简称Ellipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Java script, SQL, Hibernate。简单而言,Ellipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。 2.1.3 JDBCJDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。简单地说,JDBC 可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。JDBC API 既支持数据库访问的两层模型(C/S),同时也支持三层模型(B/S)。在两层模型中,Java applet或应用程序将直接与数据库进行对话。这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行 通讯。用户的SQL语句被送往数据库中,而其结果将被送回给用户。在三层模型中,命令先是被发送到服务的"中间层",然后由它将SQL 语句发送给数据库。数据库对 SQL 语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。2.1.4 ChartererCharterer is a free chart library for the Java(TM) platform. It is designed for use in applications, applets, servile and JSP. Charterer is distributed with complete source code subject to the termsCharterer是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servile 以及JSP等使用所设计。Charterer可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantlet charts)等等多种图表。Charterer目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求。2.1.5 mys数据库 mys是一个小型关系型数据库管理系统,开发者为瑞典mys AB公司。在2008年1月16号被Sun公司收购。与其他的大型数据库例如Oracle、DB2、SQL Server等相比,mys自有它的不足之处,如规模小、功能有限(mys Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,mys提供的功能已经绰绰有余,而且由于mys是开放源码软件,因此可以大大降低总体拥有成本。2.1.6 C/S开发模式 最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。由于客户端实现与服务器的直接相连,因此降低了网络通信量,事务处理速度快,交互性较强,有利于处理大量数据。它需要客户端安装专用的客户端软件。因此,客户端操作界面设计可以个性化,满足客户个性化的操作要求,具有直观、简单、方便的特点。第三章 系统设计3.1系统设计思想本系统采用C/S结构,使用GUI完成界面的设计,利用JDBC和I/O技术来持久化对象和读写存储文件,用开源的mys和Charterer做数据库服务器和实现数据库数据图表化 。系统数据库文件图表操作 用户 显示图3.1 系统设计图3.2 系统功能设计 管理账户(收入,支出,借贷), 统计(图表显示收支借贷的比例视图,有每日比较和季度总额比较),增删改查等。 管理家庭日记,可以通过日历添加,查看。 家庭计划(旅游,聚会等),可以通过日历添加删除,可以快速浏览本月的计划。 家庭相册管理,可以添加删除,可以幻灯片浏览。 家庭电话薄,可以添加修改删除完整信息的电话号码记录。 理财入门,可以系统的了解关于理财的专业知识。家庭管理系统启动画面财务管理日记管理计划管理相册管理电话薄管理理财入门收入管理支出管理借贷管理收入管理软件介绍财务统计财务分析图3.2 系统功能图启动画面财务管理日记管理计划管理相册管理电话薄管理理财入门收入的增、删、改、查、刷新支出的增、删、改、查、刷新借贷的增、删、改、查、刷新财务统计和财务分析的显示和隐藏日记的日历上快速添加、删、改、查看、刷新静态页面软件信息和理财知识的查看相片的添加、删除、查看、刷新,幻灯片自动浏览电话薄信息的增、删计划的日历上快速添加、删、改、查看、刷新 3.3 系统结构设计图 图3.3 系统结构图管理financialtimeincomepayoutloan管理payoutid时间日常开支消费品旅游税务还贷医疗其他总额备注学习奢侈品loan管理id时间借贷对象金额利息还贷时间其他总额备注用户管理incomeid时间工资奖金固定资产利息基金股票其他总额备注3.4系统ER图 图3.4 系统ER图 家庭管理系统财务管理日记管理理财入门相册管理电话薄管理计划管理3.5 系统用例图 图3.5 系统用例图3.6系统类图图3.6三层结构图 (biz :业务层,persist:持久层,view:视图层)图3.7持久层的类图图3.8视图层的类及关系图 图3.9三层结构中分别所包含的类图图3.10 业务层的类及关系图3.7 系统的数据库的设计1.财务数据库表的设计 financial表是用来保存收入,支出,借贷总额的表表1 财务数据库表字段名称数据类型说明timearchaic(10)时间 主键incomedouble(10,3)收入payoutdouble(10,3)支出loandouble(10,3)借贷建表语句:create table financial( time archaic(10) primary key,income double(10,3), payout double(10,3),loan double(10,3) );2.收入数据库表的设计 income表是用来保存各项收入的表表2 收入的数据库表字段名称数据类型说明idint(4)标号 自增非空主键时间archaic(10)添加收入的时间工资double(10,3)奖金double(10,3)固定资产double(10,3)指固定资产收入,如房租利息double(10,3)指银行或其他的利息收入基金double(10,3)购买基金的收益股票double(10,3)购买的股票的收入其他double(10,3)其他渠道的收入总额double(10,3)自动完成上面的累加备注archaic(50)写注意事项建表语句: create table income( id int(4) auto_increment not null primary key,时间 archaic(10),工资 double(10,3),奖金 double(10,3), 固定资产 double(10,3),利息 double(10,3),基金 double(10,3),股票 double(10,3),其他 double(10,3),总额 double(10,3),备注 archaic(50);3.支出数据库表的设计 payout表是用来保存各项支出的表表3 支出数据库表字段名称数据类型说明idint(4)标号 自增非空主键时间archaic(10)添加支出的时间日常开支double(10,3)主要指每天的饮食开销消费品double(10,3)指买东西的花费旅游double(10,3)外出旅游的花费税务double(10,3)指税收的支出还贷double(10,3)用于还贷的支出医疗double(10,3)用于医疗的支出学习double(10,3)用于学习的支出奢侈品double(10,3)用于购买非必需品的支出其他double(10,3)其他类的支出总额double(10,3)自动完成上面的累加备注archaic(50)写注意事项建表语句: create table payout(id int(4) auto_increment not null primary key,时间 archaic(10),日常开支 double(10,3),消费品 double(10,3),旅游 double(10,3),税务 double(10,3),还贷 double(10,3),医疗 double(10,3),学习 double(10,3),奢侈品 double(10,3),其他 double(10,3),总额 double(10,3),备注 archaic(50);4.借贷数据库表的设计 loan表是用来保存相关借贷的表表4 借贷数据库表字段名称数据类型说明idint(4)标号 自增非空主键时间archaic(10)添加借贷的时间借贷对象archaic(50)借贷的对象,如*银行金额double(10,3)借贷的数额利息double(10,3)借贷的利息还贷时间archaic(10)还贷的时间其他double(10,3)借贷的其他开支总额double(10,3)自动完成上面的累加备注archaic(50)添加注意事项 建表语句: create table loan( id int(4) auto_increment not null primary key,时间 archaic(10), 借贷对象 archaic(50), 金额 double(10,3),利息 double(10,3), 还贷时间 archaic(10),其他 double(10,3),总额 double(10,3),备注 archaic(50);第四章 系统实现4.1 系统启动模块的实现 图4.1带进度条的启动画面代码实现:启动的界面和进度条 class Splashdown extends J Window implements Burnable Thread splash Thread=null; private Progressive progress;/进度条 public Splashdown() precursor(Cursor.predefined(Cursor.WAIT_CURSOR); J Panel splash = new J Panel(new Border Layout();splash.add(Annabel(nonmagnetic(".imagesplash.JP"),Border Layout.CENTER); progress = new Progressive(1,100); progress.interpenetrated(true); progress.interpenetrated(false); progress.restring("Program is Now Loading."); progress.background(new Color(0,0,0,0); progress.reground(new Color(20,20,180); splash.add(progress,Border Layout.SOUTH); contentedness(splash); Dimension screen = get Toolkit().screenwriting(); pack(); allocation(screen.width - get Size().width) / 2,(screen.height - get Size().height) / 2); public void start() this.front(); splash Thread=new Thread(this); splash Thread.start(); public void run() indivisibly(true); try for (int i=0;i<=100;i+) Thread.sleep(50); progress.set Value(progress.get Value() + 1); catch (Exception ex) ex.transcendentalist(); dispose(); 在调用系统主界面之前调用:Splashdown splash = new Splashdown(); splash.start();同时在主界面得构造函数里把该线程休眠2秒,保证主界面在启动界面之后出现:try Thread.sleep(2000);/ catch (Exception ex) ex.transcendentalist(); 4.2 系统主界面的实现图4.2 系统主界面代码实现:主界面的类主要是一个框架,他的每个界面都是调用其他的类组合而成的。public void carpenter()J Panel finance=new J Panel();/财务的界面finance.layout(new Border Layout();finance.add(new Necropolis(Finance Pad.get Instance(),Border Layout.CENTER);J Panel Dias=new J Panel();/日记的界面Dias.layout(new Border Layout();Dias.add(new Stipendiary(),Border Layout.CENTER);J Panel plan=new J Panel();/计划的界面plan.layout(new Border Layout();plan.add(new Plan Pad(),Border Layout.CENTER);J Panel photo=new J Panel();/相册的界面photo.layout(new Border Layout();photo.add(new Picture Pad(),Border Layout.CENTER);J Panel health=new J Panel();/电话薄的界面health.layout(new Border Layout(); health.add(new Necropolis(new Phone Notepad(),Border Layout.CENTER); Mediterranean message=new Mediterranean();/理财入门的界面 message.contentedness("text/HTML"); message.creditably(false);/这样支持HTML的超链接 /监听HTML的frame message.hypersensitiveness(new Hyperlink Listener() public vo