软件综合课程设计家庭理财工具的设计与实现.docx
《软件综合课程设计家庭理财工具的设计与实现.docx》由会员分享,可在线阅读,更多相关《软件综合课程设计家庭理财工具的设计与实现.docx(21页珍藏版)》请在冰点文库上搜索。
软件综合课程设计家庭理财工具的设计与实现
软件综合课程设计--家庭理财工具的设计与实现
沈阳航空航天大学
课程设计报告
课程设计名称:
软件综合课程设计
课程设计题目:
家庭理财工具的设计与实现
院(系):
计算机学院
专业:
班级:
学号:
姓名:
指导教师:
完成日期:
1系统分析
1.1需求分析
家庭理财工具的总体目标是为使用者管理家庭收支信息和资产信息提供一个方便有效的管理平台,最大化的提高家庭理财效率和效果。
作为计算机应用的一部分,使用计算机对家庭理财进行管理,具有人工管理无法比拟的优点,它的检索速、方便查找、可靠性高、存储量大、保密性好、成本低等,这些都能极大的提高管理工作效率。
从题目内容和要求来看,需要在数据库中建立多个数据表,包括用户表,收入表,支出表,资产管理表等,表与表之间要存在关联,一个表出现改动,其它表也要做出相应的变化。
而且,在书写程序时,相比以往逻辑性更高,考虑得更为多元化,才能真正完成一个实用,方便,效率高效的家庭财务管理系统。
1.2编程技术简介
本次课设我主要使用的软件是NetBeansIDE7.1.3和NavicatforMySQL,语言则以Java为主。
NetBeansIDE7.1.3:
NetBeans是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于Java、C/C++,PHP等语言的开发,本身是一个开发平台,可以通过扩展插件来扩展功能。
在NetBeansPlatform平台中,应用软体是用一系列的软体模组(ModularSoftwareComponents)建构出来。
而这些模组是一个jar档(JavaArchiveFile)它包含了一组Java程式的类别而它们实作全依据依NetBeans定义了的公开介面以及一系列用来区分不同模组的定义描述档(ManifestFile)。
有赖於模组化带来的好处,用模组来建构的应用程式可只要加上新的模组就能进一步扩充。
由於模组可以独立地进行开发,所以由NetBeans平台开发出来的应用程式就能利用着第三方软件,非常容易及有效率地进行扩充
NavicatforMySQL:
NavicatforMySQL[1]是一款强大的MySQL数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但对于新用户仍然易于学习。
NavicatforMySQL基于Windows平台,为MySQL量身订作,提供类似于MySQL的用管理界面工具。
此解决方案的出现,将解放PHP、J2EE等程序员以及数据库设计者、管理者的大脑,降低开发成本,为用户带来更高的开发效率。
NavicatforMySQL使用了极好的图形用户界面(GUI),可以用一种安全和更为容易的方式快速和容易地创建、组织、存取和共享信息。
用户可完全控制MySQL数据库和显示不同的管理资料,包括一个多功能的图形化管理用户和访问权限的管理工具,方便将数据从一个数据库转移到另一个数据库中(LocaltoRemote、RemotetoRemote、RemotetoLocal),进行档案备份。
NavicatforMySQL支援Unicode,以及本地或远程MySQL服务器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行SQLqueries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援CSV,TXT,DBF和XML档案种类)等。
软件与任何MySQL5.0.x伺服器版本兼容,支援Triggers,以及BINARYVARBINARY/BIT数据种类等的规范。
Java语言:
Java编程语言的风格十分接近C、C++语言。
Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。
Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
2系统设计
2.1系统模块设计
根据课设的内容和要求,将系统分为4个模块,分别为收支模块,资产模块,用户管理模块和数据备份模块。
用户模块的主要功能有用户信息管理,包块用户的增加,删除;收支管理,包括收支信息的增加,修改,删除,查询功能;资产模块的主要功能是增加,删除,修改,查询有关信息;除此之外,还可以用数据库管理数据,可以及时备份与恢复,保证了系统的安全性。
家庭财务管理系统
资产模块
收支模块
用户模块
添加收入信息
添加支出
信息
添加删除
信息
删除用户查询
添加用户信息
资产信息查询
查询
收支信息
数据备份模块
数据库备份
数据库恢复
图2.1系统功能模块图
2.2数据库设计
(1)用户表:
tabyonghu
以用户名为主键,同时还有密码,姓名,出生日期,住址,电话等属性。
具体属性设定如表2.1所示。
列名
数据类型
允许为空
说明
user
varchar
不允许
用户名,主键
upass
varchar
不允许
用户密码
dianhua
int
不允许
用户电话
shengri
data
不允许
用户生日
xingmin
varchat
不允许
用户姓名
zhuzhi
varchar
不允许
用户住址
sq
int
不允许
权限
表2.1用户表
(2)收入表:
tabshouru
以收入者为主键,且编号,收入金额,日期,存放入属性与用户表相关联。
具体属性设定如表2.2所示。
表2.2收入表
列名
数据类型
允许为空
说明
bianhao
varcha
不允许
编号
shouruzhe
varchar
不允许
收入者,主键
jine
int
不允许
收入金额
data
data
不允许
收入日期
cunfangru
varchar
不允许
存放入何处
beizhu
varchar
允许
备注
(3)支出表:
tabzhichu
以支出者为主键,且编号,支出金额,日期,用途属性与用户表相关联。
具体属性设定如表2.3所示。
表2.3支出表
列名
数据类型
允许为空
说明
bianhao
varcha
不允许
编号
zhichuzhe
varchar
不允许
支出者,主键
jine
int
不允许
支出金额
data
data
不允许
支出日期
yongtu
varchar
不允许
用途
beizhu
varchar
允许
备注
(4)资产表:
tabzichan
用户名为主键,银行类型,银行名称,开户人和总金额等。
具体属性设定如表2.4所示。
表2.4资产表
列名
数据类型
允许为空
说明
id
varchar
不允许
用户名,主键
leixing
varchar
不允许
银行类型
bankname
varchar
不允许
银行名称
kaihuren
varchar
不允许
开户人
jine
int
不允许
总金额
2.3函数设计
本系统所设计的函数及所用到的网络通信函数见表2.6。
表2.6函数列表
函数名称
函数原型
功能描述
main
voidmain();
系统主程序
findAll
publicList
查询功能
save
publicbooleansave(Tabusertea);
添加功能
delete
publicbooleandelete(Stringuname);
删除功能
updata
publicbooleanupdate(Tabusertea);
修改功能
backup
privatevoidbackup()
备份功能
load
publicstaticvoidload()
恢复功能
MainFrm
publicMainFrm(Tabuseruser);
主界面
LoginFrm
publicLoginFrm();
登录界面
yonghuFrm
publicyonghuFrm()
用户管理界面
shouzhiFrm
publicshouzhiFrm()
收支界面
zichanFrm
publiczichanFrm()
资产管理界面
shujukuFrm
publicshujukuFrm()
数据库管理界面
findFrm
publicfindFrm()
查询界面
2.3关键流程
2.3.1系统主流程
进入此系统时,先输入用户名和密码验证登录,验证成功后进入主界面,再选择要使用的功能,按要求输入相应的数据,之后退出;验证失败则不能登录。
如图2.2所示。
登录界面
开始
结束
输入用户名,密码
选择身份
通过验证
主界面
Y
N
图2.2系统主流程图
2.3.2登录函数功能的实现
登录系统是验证用户是否可以使用此系统,如果输入的用户名和密码正确,选择身份正确,才可以验证成功,登录此系统进行使用,否则,信息不正确或者身份不争取,都不可以进入此系统。
具体代码如下:
Stringuname=txtUname.getText();
Stringupass=txtPwd.getText();
if(uname==null||uname.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"用户名不能为空");
return;
}
/////得到用户登录权限
Objectpower=cmbPower.getSelectedItem();
//封装用户数据
tabyonghuuser=newtabyonghu();
user.setUser(uname);
user.setUpass(upass);
if(power.equals("管理员")){
user.setSq
(1);
}else{
user.setSq
(2);
}
//调用控制用户登录模块
Dengluuc=newDenglu();
uc.login(user,this);
如图2.3所示。
图2.3登录系统流程图
2.3.3收支管理及资产管理函数的实现
用户可以根据收入支出管理模块实现添加、删除、修改、查询收支项目的功能,进入此界面,按要求进行操作,对用户的收入和支出情况进行填写,以实现该模块功能。
收支模块里具体有收入记录功能和支出记录功能,两个功能大体相同。
资产管理是对家庭总资产来源进行管理记录及统计,具体功能也包括添加、删除、修改、查询各项功能。
以下只列出收入记录功能流程图。
如图2.4所示。
进入收入界面
填写完成
对添加完成的信息进行修改
删除处理
操作成功
Y
N
Y
开始
结束
N
N
按要求添加信息
图2.4收入功能实现流程图
具体代码如下:
tabshourutea=newtabshouru();
Stringbianhao=jT1.getText();
if(bianhao==null||bianhao.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"编号不能为空!
");
return;
}
Stringshouruzhe=jT2.getText();
if(shouruzhe==null||shouruzhe.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"收入者不能为空!
");
return;
}
Stringjine=jT3.getText();
if(jine==null||jine.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"金额不能为空!
");
return;
}
Stringdata=jT4.getText();
if(data==null||data.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"日期不能为空!
");
return;
}
Stringchunfangru=jT5.getText();
if(chunfangru==null||chunfangru.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"存放处不能为空!
");
return;
}
tea.setBianhao(bianhao);
tea.setShouruzhe(shouruzhe);
tea.setJine(jine);
tea.setData(data);
tea.setChunfangru(chunfangru);
booleanx=tdao.save(tea);
if(x){
javax.swing.JOptionPane.showMessageDialog(null,"信息保存成功!
");
initclassinfo();
}
//TODOaddyourhandlingcodehere:
introw=jTable1.getSelectedRow();
//得到表格选中列
intcol=jTable1.getSelectedColumn();
Stringshouruzhe=(String)jTable1.getValueAt(row,1);//得到系编号
//System.out.println("系编号:
"+cid);
//按系编号删除数据
booleanx=tdao.delete(shouruzhe);
if(x==true){
javax.swing.JOptionPane.showMessageDialog(null,"删除成功");
}
//并显示回表格
javax.swing.table.DefaultTableModelm=(javax.swing.table.DefaultTableModel)jTable1.getModel();
//删除表格中显示的数据
m.removeRow(row);
publicbooleansave(tabshourushouruzhe){
sql="insertintotabshouruvalues(?
?
?
?
?
?
)";
intx=this.saveOrUpdate(sql,shouruzhe.getBianhao(),shouruzhe.getShouruzhe(),shouruzhe.getJine(),shouruzhe.getData(),shouruzhe.getChunfangru(),shouruzhe.getBeizhu());
if(x>0)returntrue;
returnfalse;
}
publicbooleandelete(Stringshouruzhe)
{
sql="deletefromtabshouruwhereshouruzhe=?
";
intx=this.saveOrUpdate(sql,shouruzhe);
if(x>0)returntrue;
returnfalse;
}
2.3.4收支查询和资产查询功能的实现
收入支出查询和资产查询都是对财务信息的查询,用户可以根据收入者或支出者查询收入,支出条目的具体信息;资产查询是通过用户id查询资产管理中的具体信息。
如图2.5是显示支出查询的具体步骤。
查询界面
点击查询
开始
输入支出者
Y
显示支出信息
N
结束
输入支出者
图2.5查询功能实现流程图
具体代码如下:
tabshourus=newtabshouru();
Stringshouruzhe=jT1.getText();
/*if(stunum!
=null&&stunum.toString().length()>0){
List
if(dli!
=null&&dli.size()>0){
Object[]da=dli.get(0);
s.setObjid((String)da[2]);
}
}*/
if(shouruzhe==null||shouruzhe.trim().length()<1){
javax.swing.JOptionPane.showMessageDialog(null,"收入者不能为空");
return;
}
s.setShouruzhe(shouruzhe);
javax.swing.table.DefaultTableModelm=newjavax.swing.table.DefaultTableModel();
m.addColumn("编号");
m.addColumn("收入者");
m.addColumn("金额");
m.addColumn("日期");
m.addColumn("存放入");
List
m.addRow(li.get(0));//按行添加数据
jTable1.setModel(m);
//TODOaddyourhandlingcodehere:
publicList
sql="select*fromtabshouru";
returnthis.query(sql);
}
2.3.5数据备份恢复功能的实现
数据库管理模块对于用户非常重要,数据库备份模块可以把用户的信息在数据库里再保存一份,为以后发生特殊情况做准备,也可以说是为用户信息的安全又加了一层保险,数据库管理模块界面如图2.6所示
开始
数据库管理界面
结束
进行数据备份
N
Y
备份成功
进行数据恢复
恢复成功
N
Y
图2.6数据库备份恢复功能流程图
具体代码如下:
privatevoidbackup(){
//数据库导出
Stringuser="root";//数据库帐号
Stringpassword="admin";//登陆密码
Stringdatabase="caiwu";//需要备份的数据库名
Stringfilepath="D:
\\Java\\mysql-5.6.15-winx64\\beifen.sql";//备份的路径地址
Stringstmt1="mysqldump"+database+"-u"+user+"-p"
+password+"--result-file="+filepath;/*Stringmysql="mysqldumptest-uroot-proot
*--result-file=d:
\\test.sql";*/
try{Runtime.getRuntime().exec(stmt1);
System.out.println("数据已导出到文件"+filepath+"中");}
catch(IOExceptione){
e.printStackTrace();}
javax.swing.JOptionPane.showMessageDialog(null,"数据已导出到文件"+filepath+"中");
}
publicstaticvoidload(){
try{
StringfPath=("D:
\\Java\\mysql-5.6.15-winx64\\beifen.sql");
Runtimert=Runtime.getRuntime();
//调用mysql的cmd:
//rt.exec("createdatabasedemo");
Processchild=rt.exec("mysql-uroot-padmincaiwu1");
OutputStreamout=child.getOutputStream();//控制台的输入信息作为输出流
StringinStr;
StringBuffersb=newStringBuffer("");
StringoutStr;
BufferedReaderbr=newBufferedReader(newInputStreamReader(
newFileInputStream(fPath),"utf8"));
while((inStr=br.readLine())!
=null){
sb.append(inStr+"\r\n");
}
outStr=sb.toString();
OutputStreamWriterwriter=newOutputStreamWriter(out,"utf8");
writer.write(outStr);
//注:
这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
//别忘记关闭输入输出流
out.close();
br.close();
writer.close();
javax.swing.JOptionPane.showMessageDialog(null,"数据已导入");
}catch(Exceptione){
e.printStackTrace();
}
3调试分析
(1)SQL语句问题
●问题描述:
在写代码时,SQL语句经常会出现输写错误,有时是格式出错,有时是属性添加错误,或者是添加不全,有时返回值与我想要的结果不符合。
●问题分析:
对SQL的语句书写不熟练,格式不明确,对数据库的属性信息记得不够仔细。
●解决方法:
通过查看书本,按照书本上的格式认真书写,并对照数据库看属性信息是否有误。
(2)对象