当前位置:文档之家› 家庭记账管理系统数据库课程设计报告

家庭记账管理系统数据库课程设计报告

家庭记账管理系统数据库课程设计报告
家庭记账管理系统数据库课程设计报告

《数据库原理及应用》课程设计报告

题目家庭记账管理系统

学生姓名

学号 4

专业班级网络工程

指导老师

设计日期 2014年6月25日

指导老师评阅意见:

评阅成绩:

签名:

一、课题任务

课题目的:家庭记账也是一门科学,必须按照科学的方式来进行,才能有效果。家庭记账的原理与企业记账类似,有两个基本要素,一是分账户,要有账户的概念,分账户可以是按成员、按银行、按现金等,不能把所有收支统计在一起,要分账户来记。二是分类目,收支必须分类,分类必须科学合理,精确简洁,类目相当于会计中的科目。由此可见,家庭记账也需要系统性的管理。家庭记账数据库管理系统是为了让用户更简便的进行日常及记账。

课题意义:

1、在进行前台设计时,我们运用的是本学期所学的Java语言,Java语言是一门很灵活也很方便的语言,尽管老师平时在课堂上传授了很多Java语言的基础知识,但,要掌握一门语言,课堂上的输入远远不够,因此,通过此次课程设计,可以加深对java 的运用能力。

2、数据库是一门很有学问的计算机基础学科,他对于我们以后在计算机方面的发展有着承前启后的作用,我们都知道,大学的学习更多的是实际操作。虽然数据库是门理论性很强的学科。但,只有将所学的东西运用于实践,用自己所学的知识制作出用户有用的产品才是最能激励自己的。也只有在事件中才能补充自己知识的缺陷,此次课程设计就是让我们更熟悉设计数据库的过程并更灵活的运用起来。

3、家庭记账是每个用户都要做的是,一个方便的高效可靠的记账系统可以让用户们的记账更简便。

课题要求:本系统要求对家庭的收入情况,教育支出情况,非教育支出情况进行系统的分析设计,并形成系统的说明书同时用Eclipse来实现该系统。目的是通过系统分析,使各个家庭对自己的家庭财务有一个全面的了解和分析,以便能做到节约开支,细水长流,同时进行必要的投资。

4、可行性分析:可行性研究的目的是用最小的代价在尽可能短的时间内解决问题。

经济可行性:计算机的价格已经非常低廉,性能却有了长足的进步。二本系统的开发,为家庭的工作效率带来了一个本质的飞跃为此主要表现在以下几个方面:第一,本系统的运行可以代替人工进行许多繁杂的劳动;第二,本系统的运行可以节省许多资源;第三,本系统的运行可以大大提高家庭的工作效率,等等。所以本系统在经济上是可行的。

技术可行性和运行可行性:为了有助于更好的系统的开发,我自己对社会普通家庭的收入情况有了初步的了解。现在普通家庭的固定收入在几千元左右,每月在各个方面至少要1000元左右的开销,加上固定的各项费用,方方面面很复杂,很难清楚明了的记录下来,一般是手工记账,这样很麻烦也算不清楚,每个月都要花大量的时间在算钱上,而由于一些比较缺乏电脑方面的知识,所以,电脑对他们来说只是一个摆设但只要安装家庭理财系统,他们将只要点击鼠标就可以对家庭的收支情况进行系统和计算。本系统开发利用SQL Server2005作为本系统的数据库,他是一个支持多用户的新型数据库,适用于各种大中小规模的数据需求。使用Eclipse作为被系统开发环境,Eclipse拥有一个可视化的集成开发环境,采用面向对象的编程语言Java的开发结构框架。Eclipse 提供了500多个可使用构件,利用这些部件,开发人员可以快速的构造出应用系统。开发人员也可以根据自己需要修改部件或用本身编写的部件。他作为一种现代化的编程语言,提供完善的指令控制语句、类与对象的支持及丰富数据类型给开发高兴能提供了保障。综上所述,本系统的设计与开发在技术和硬件设备上的条件都是满足的,因此,它在技术上是可行的。本系统为一个小型的家庭理财系统,所耗费的资源非常小,学校的电脑无论是在硬件和软件都能满足条件,因此,本系统在运行上是可行的。

子课题任务名称:Java语言支持的界面设计,数据库的建立,数据库与Java的连接。

二、需求分析(含业务流程图,数据流程图,E-R图等)

业务流程图

E-R图

数据流图三、概要设计(模块划分等)

系统功能模块

本系统分为五大功能模块:收入登记,非教育支出登记,教育支出登记,支出总查询,退出系统

收入登记功能:点击收入登记可进入收入登记界面,再根据需要点击添加记录或删除记录功能键进行添加或删除。最后点击刷新,即可看到操作之后的界面。最后点击退出,即完成了收入登记操作。

非教育支出登记功能:点击非教育支出登记可进入非教育支出登记界面,再根据需要点击添加记录或删除记录点击添加或删除。最后点击刷新,即可看到操作后的界面。最后点击退出,即完成了非教育登记操作。

教育登记操作:点击教育支出登记可进入教育支出登记界面,再根据需要点击添加记录或删除记录点击添加或删除。最后点击刷新,即可看到操作后的界面。最后点击退出,即完成了教育登记操作。

支出总查询:点击支出总查询,则可看到支出总查询界面,从上面可看到近期的支出情况,在右下角会有一个余额的显示。如果需要删除则可点击删除界面。操作完毕点击退出。

退出系统:上述操作都完成则可点击退出系统键退出系统。

四、详细设计

1、数据库的设计

底层数据表的结构如图一:

图一.数据表的结构

数据表的截图如图二:

图二.数据表

数据库与java连接的代码如下:

package com.wenlixueyuan;

import java.sql.*;

public class Database {

Connection conn = null;

ResultSet rs = null;

Statement stmt = null;

PreparedStatement pstmt = null;

public RecordItem[] AccessData() throws Exception {

Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );

String url = "jdbc:odbc:FA";

conn = DriverManager.getConnection( url, "root", "admin" );

stmt= conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABL E );

String SQL = "select * from pf";

rs = stmt.executeQuery( SQL );

RecordItem[] item = new RecordItem[ 100 ];

for ( int j = 0; j < 100; j++ )

item[ j ] = new RecordItem();

int i = 0;

while ( rs.next() && ( i < 100 ) ) {

item[ i ].SetEmployeeID( rs.getString( "经手人" ) );

item[ i ].SetEmployeeName( rs.getString( "日期" ) );

item[ i ].SetOnWorkTime( rs.getString( "收入" ) );

item[ i ].SetOffWorkTime( rs.getString( "非教育支出" ) );

item[ i ].SetLeaveWorkTime( rs.getString( "教育支出" ) );

item[ i ].SetDescribe( rs.getString( "备注" ) );

i++;

}

RecordItem[] result = new RecordItem[ i ];

for ( int j = 0; j < i; j++ ) {

result[ j ] = new RecordItem();

result[ j ] = item[ j ];

}

rs.close();

stmt.close();

conn.close();

return result;

}

public void StoreData( RecordItem item ) throws Exception {

Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );

String url = "jdbc:odbc:FA";

conn = DriverManager.getConnection( url, "root", "admin" );

stmt = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE );

String SQL1 = "select * from pf where 经手人 = '" +

item.GetEmployeeID() + "'";

rs = stmt.executeQuery( SQL1 ); //查找是否存在该员工的记录

System.out.println(rs.next());

pstmt = conn.prepareStatement("insert into pf values(?,?,?,?,?,?)");

pstmt.setString(1, item.GetEmployeeID());

pstmt.setString(2, item.GetEmployeeName());

pstmt.setString(3, item.GetOnWorkTime());

pstmt.setString(4, item.GetOffWorkTime());

pstmt.setString(5, item.GetLeaveWorkTime());

pstmt.setString(6, item.GetDescribe());

pstmt.execute();

}

rs.close();

stmt.close();

pstmt.close();

conn.close();

} //删除相应工号的员工记录

public void DeleteData( String strEmployeeID ) throws Exception {

Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );

String url = "jdbc:odbc:FA";

conn = DriverManager.getConnection( url, "root", "admin" );

stmt = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE );

String SQL = "delete from pf where 经手人='" + strEmployeeID + "'";

stmt.execute( SQL ); //查找是否存在该员工的记录

}

}

3.前台的设计

关于前台的设计我们采用的是java语言当中的application小窗口图形界面的一个输入和输出,具体的设计见调试分析。

五.调试分析

2.收入登记页面

图四.收入登记页面

收入登记的设计代码如下:

package com.wenlixueyuan;

import javax.swing.*;

import javax.swing.table.*;

public class OnWorkPanel extends TablePanel {

private static final long serialVersionUID = 1L;

String[] arrField = { "经手人", "日期", "收入", "备注" };

public OnWorkPanel() {

tableModel = new DefaultTableModel(arrData, arrField);

jRecordTable = new JTable(tableModel);

jTableScrollPane.getViewport().add(jRecordTable, null);

UpdateRecord(); // 更新表格

this.setTitle("收入登记页面");

}

public void AddRecord() {

OnWorkRecordPane recordPane = new OnWorkRecordPane();

recordPane.setSize(630, 300);

recordPane.setLocation(230, 100);

recordPane.setVisible(true);

recordPane.setResizable(false);

recordPane.validate();

UpdateRecord(); // 更新表格

}

public void DelRecord() {

jTableScrollPane.getViewport().add(jRecordTable, null);

intRow = jRecordTable.getSelectedRow();

if (intRow == -1)

return;

try {

database.DeleteData(tableModel.getValueAt(intRow, 0).toString());

} catch (Exception e) {

e.printStackTrace();

}

UpdateRecord(); // 更新表格

}

public void UpdateRecord() {

Object[][] arrTmp = {}; // 设定表格的字段

tableModel = new DefaultTableModel(arrTmp, arrField);

jRecordTable = new JTable(tableModel);

jTableScrollPane.getViewport().add(jRecordTable, null);

try {

RecordItem[] result = new RecordItem[100];

for (int j = 0; j < 100; j++)

result[j] = new RecordItem();

result = database.AccessData();

for (int i = 0; i < result.length; i++) {

int temp = Integer.parseInt(result[i].GetOnWorkTime());

if (temp > 0) {

Object newdata[] = { result[i].GetEmployeeID(),

result[i].GetEmployeeName(),

result[i].GetOnWorkTime(),

result[i].GetDescribe() };

String strTmp = result[i].GetOnWorkTime();

if (strTmp.trim().length() == 0)

continue;

tableModel.addRow(newdata);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

3.非教育支出登记页面

图五.非教育登记页面

非教育支出的部分设计代码如下:

package com.wenlixueyuan;

import javax.swing.*;

import javax.swing.table.*;

public class OffWorkPanel extends TablePanel {

private static final long serialVersionUID = 1L;

String[] arrField = { "经手人", "日期", "非教育支出", "备注" };

public OffWorkPanel() {

tableModel = new DefaultTableModel(arrData, arrField);

jRecordTable = new JTable(tableModel);

jTableScrollPane.getViewport().add(jRecordTable, null);

UpdateRecord(); // 更新表格

this.setTitle("非教育支出登记页面");

}

public void AddRecord() {

OffWorkRecordPane recordPane = new OffWorkRecordPane();

recordPane.setSize(630, 300);

recordPane.setLocation(230, 100);

recordPane.setVisible(true);

recordPane.setResizable(false);

recordPane.validate();

UpdateRecord(); // 更新表格

}

public void DelRecord() {

jTableScrollPane.getViewport().add(jRecordTable, null);

intRow = jRecordTable.getSelectedRow();

if (intRow == -1)

return;

try {

database.DeleteData(tableModel.getValueAt(intRow, 0).toString());

} catch (Exception e) {

e.printStackTrace();

}

UpdateRecord(); // 更新表格

}

public void UpdateRecord() {

Object[][] arrTmp = {}; // 设定表格的字段

tableModel = new DefaultTableModel(arrTmp, arrField);

jRecordTable = new JTable(tableModel);

jTableScrollPane.getViewport().add(jRecordTable, null);

try {

RecordItem[] result = new RecordItem[100];

for (int j = 0; j < 100; j++)

result[j] = new RecordItem();

result = database.AccessData();

for (int i = 0; i < result.length; i++) {

int temp = Integer.parseInt(result[i].GetOffWorkTime());

if (temp > 0) {

Object newdata[] = { result[i].GetEmployeeID(),

result[i].GetEmployeeName(),

result[i].GetOffWorkTime(),

result[i].GetDescribe() };

String strTmp = result[i].GetOffWorkTime();

if ((strTmp == null) || (strTmp.trim().length() == 0))

continue;

tableModel.addRow(newdata);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

六、测试结果及分析

1、本系统是家庭记账管理系统,是一个小型人群使用系统且由于时间原因我们没有设置登入密码。进入系统直接进入视野的就是主页面。一下就是主页面的截图。

图九测试结果主页面

2、主页面上有收入登记,非教育登记,教育登记,支出总查询,退出系统五个选项栏。我

们点击收入登记出现的是收入登记页面。下面就是收入登记页面的截图。

图十结果测试收入登记页面

3、收入登记页面上有添加记录,删除记录,退出,刷新四个选项。点击添加记录后会出现了添加记录界面。删除记录的操作为:选中想删除的记录,并用鼠标点击,最后点击删除。点击刷新后操作后新的界面记录就出来了。操作完成,点击退出。截图如下。

图十一.测试结果添加记录页面5、添加记录

图十二测试结果添加记录页面

6、添加记录后的收入登记页面

图十三测试结果添加记录后的页面

4、非教育支出登记页面

点击非教育支出目标栏后出现了非教育支出界面如下图。

图十四测试结果非教育支出登记页面

5、非教育支出页面上有添加记录,删除记录,刷新,退出四个选项栏。点击添加记录后会出现了添加记录界面。删除记录的操作为:选中想删除的记录,并用鼠标点击,最后点击删除。点击刷新后操作后新的界面记录就出来了。操作完成,点击退出。截图如下。

图十五测试结果添加记录页面

图十六测试结果添加记录后的界面

图十七测试结果刷新后的非教育支出页面

6、教育登记页面

点击教育登记选项栏后,出现教育登记页面

图十八测试结果教育支出登记页面

7、教育支出页面上有添加记录,删除记录,刷新,退出四个选项栏。点击添加记录后会出现了添加记录界面。删除记录的操作为:选中想删除的记录,并用鼠标点击,最后点击删除。点击刷新后操作后新的界面记录就出来了。操作完成,点击退出。截图如下。

图十九测试结果添加记录页面

图二十测试结果添加记录后的添加记录页面

图二十一测试结果刷新后的教育支出登记页面8、支出总查询页面

点击支出总查询后,出现支出总查询页面如下:

图二十二测试结果支出总查询页面

点击界面中的两条记录,再点击删除记录选项出现下面的界面

图二十三.支出总查询页面

八、课程设计总结

在完成这个课程设计的过程中我有很多感受,就连在写报告的过程中也学到了很多。下面我从以下几点来谈我自己的感受

1、从我个人来谈。我是个对机器不敏感的人,所以我没自信可以一个人完成一个包含前台

与底层的课程设计。所以我和我的是由李海霞一起完成这次的课程设计。在我和李海霞组成小组前她已经选好了这个课题,我虽然没有参与选题,但我也考虑了这个课题的可行性与意义。其实刚开始也不知道要从哪里下手,还好我的小伙伴李海霞看出了我的无奈,让我先冷静一下头脑,并告诉我,这个任务不需要我一个人去全部掌握,她给我们各自分配了任务,并且还告诉我如果有不懂的地方或者是卡壳地方可以去看书或者去百度。她提醒了我,我并不是一个人。而且,就算是一个人完成也有很多资料可查,只要有克服困难的决心就一定可以成功的完成任务。在前期的工作中,她把她已经构思出来的构架给我看。比如说,她决定把数据项分成了以下几个块:支出、教育支出、经手人、日期、备注。我觉得有所不妥,于是提出教育支出是属于支出的,怎么可以是并列关系呢?除非把支持改成非教育支出。在定义主属性的时候,我也提出了自己的观点。。。。。

后来我们终于完成了,正当我松气的时候,李海霞告诉我别高兴得太早,果然,当我们多进行几次数据的输入与输出的时候,问题就出现了。我当时就在想平时总是有老师教导我们,做学问来不得半点虚假。由于太久没进行自我反思了,老师们的教导都被抛到脑后了。还好,有这次课程设计,又给了我当头一棒。让我更冷静去面对自己的学习情况。后来在写报告的过程中,我冷静的去思考我们整个课程设计的实现流程,对自己的影响变更大了。我是个很少去些报告的人,但这次的报告让我很踏实也很用心去写。系统做得怎么样,那是我们的技术问题。而后期的报告给人以更多的反思。哪儿还可以更好一点,哪儿是想做好而我们的技术还没到,那接下来我们的奋斗目标就出来了。接下来是画各种流程图。起初,我又犯难,要我画那些个图,手画还好,可这是要在电脑上操作。我首先在草稿上花了一下。在在电脑上动起来,画着画着发现那样也许更好,又

重新画。一个图花了我一个小时。尽管如此,我还是发现还有可以改进的地方。但是时间有限,我想下次会在这个基础上有更大的进步。

2、从我们的系统来谈。我不想说我们的系统做得有多好货有多坏,那是有老师和将来我们

的用户要做的事。不过这个系统确实花了我们的精力与时间。我想就凭这一点它就值得我们肯定。当然它也有不足。首先我来谈谈它的优点。它是一个家庭记账管理系统,在课题上就有自己的优越性,家庭记账是每个家庭都要做的事,这就说明了它的价值所在。

然而家庭记账又是一个很繁琐的事,要想把家里的每笔钱记得很清楚,时间很难的事,而且几乎每天都要去记账,更会让每天都很疲劳的下班回家的人觉得烦,久而久之,家庭记账变成了刚开始的记录。对于家里财务管理很不利,更不用说适时投资了。我们的系统针对家里小孩读书的家庭,这种家庭更需要对家庭财务进行管理。因为这种家庭经济压力很大,同时,如果对家庭经济情况管理得好,在适当的时候进行一个风险较小的投资。家里的经济状况又将是一番景象。我们的系统还刚好就给了这样一个群体很好的方便。现在,我要我对我们这个系统需要改进的地方进行剖析。首先,我们的系统没有密码,毕竟是个记账系统,家庭财务虽然不是什么机密,但对家庭以外的人,对数据的保密还是需要的。我觉得这还是个小问题。本系统的实用性还存在一定的问题,一般而言家庭记账的内容也比较庞大,若系统不能及时进行清理,还需用户手动一条一条的清理,这样就会显得有些繁琐。最初的想法就没能很好地实现。系统出现的页面美观也存在很大的问题,基本只实现最基本的要求。我们后期的美工还需加强。

3、从大学生活与学习。我现在已经大二了,前几周看到学长学姐们纷纷背起行囊离开自己

生活了四年的学校,我从他们的脸上看出的不只是不舍,更多的是对未来的坚定与担忧,。坚定自己未来的风雨兼程,担忧未来路上的各种坎坷。我也认识很多优秀的学长与学姐,他们有的是在专业上学的很棒并有自己的成就,有的没走专业录单在其他路上走得很踏实,此时我就在想我该走哪条路,我不得不说我专业学的很不带劲,从这次课程设计就可以看出,所以,我要去找适合自己未来发展的路。只是,我也并没有放弃自己专业,大学四年,已过了一大半。接下来的日子,除了要完成学业,还得找自己未来的路。得更努力了!

相关主题
文本预览
相关文档 最新文档