




免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java课程设计2012/6/12目录摘要3需求分析4一、调查用户需求41.用户管理的基本信息42.收入的基本信息43.支出的基本信息4二、系统功能的要求41.信息要求:42.处理要求:43.安全性要求44.用户操作附加功能5三、系统功能的设计和划分5总体设计5一、软件总体设计5二、数据库设计6详细设计6一、用户登录模块6二、用户管理模块7三、记账功能模块7四、界面美化模块7软件实现及测试7一、系统实体对象设计7二、连接数据库的公共类9三、操作数据库的公共类10四、用户登录模块设计19五、用户记账模块设计22六、跳转成功或失败界面24设计总结27参考文献28摘要现代社会家庭的理财观念进一步提高,理财手段变得更加丰富。随着生活水平和文化水平的提高,家庭购买电脑的能力和应用电脑的能力开始提高。电脑及其应用的普及化,人们应用电脑进行家庭财务管理的观念增强,因此,开发一个通用性家庭理财软件已经成为社会需求。本系统是一个家庭通用型理财软件,系统目标是把适合家庭化管理的各种理财手段及家庭日常收支管理实现计算机化管理,使对家庭及家庭成员的收支活动更好地进行记录并加以统计分析成为可能,也使家庭理财变得方便、全面、快捷。关键词:家庭财务管理,家庭理财需求分析一、 调查用户需求 本系统的最终用户为以家庭为单位的个人。根据我们日常生活中的经验,结合自己对父母或其他家庭成员的咨询与调查,得出用户的下列实际要求。用户以家庭为单位注册一个家庭财务信息管理系统的管理账号,该管理账号具有添加用户,删除用户以及修改用户的权限,此时可以分配多个账号给多人使用该系统。1. 用户管理的基本信息以家庭为单位的这个系统具有一个系统管理员账号,登录之后,可以添加、删除、修改用户的权限。2. 收入的基本信息每个用户都有一个唯一的家庭财务信息管理系统账号,登录之后,每次收入记录都有唯一的收入编号,并且将同时记录下收入的日期,收款人等相关信息。3. 支出的基本信息每条支出记录都有唯一的编号,用户填入日期、金额等信息后,将记录到支出资产状况登记表中,并且显示出经过统计之后同一天内的支出合计总额。二、 系统功能的要求1. 信息要求:用户能查询到上面提到的家庭财务的所有相关信息,包括单独的家庭收入信息、支出信息,还可以多表联查,以得出总的财产状况。2. 处理要求:系统在用户进行登录时,能根据用户输入的账号和密码与用户信息登记表中的数据进行配对,配对成功即可登录到系统页面中,配对不成功则提示该账号不存在或密码错误,请重新输入。同时采取技术手段实现保存账号密码功能,在一定时间内用户不需要再次输入账号密码进入系统。3. 安全性要求系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用。并且每个用户拥有自己唯一的一个用户号,保证多个用户之间互不干扰使用。页面访问统计功能可以实现对防止恶意登录,提醒用户修改密码。4. 用户操作附加功能由于用户账目的增加,不便于用户管理账目,系统实现了翻页和跳转到指定页面的功能。并且,系统采用cookie技术实现了保存用户信息使其两周内不用重新登录的功能。系统还实现了页面访问统计功能,便于管理用户管理系统。三、系统功能的设计和划分根据如上得到的用户需求,我们将本系统按照所能完成的功能分成以下几个模块:1. 处理用户登录2. 用户信息保留3. 用户可以记录家庭收入信息4. 用户可以记录家庭支出信息5. 用户可以对以上信息进行查询并查询总的财务状况总体设计一、 软件总体设计采用B/S模型实现系统,开发工具采用myeclipse+tomcat+mysql5。采用j2se的servlet技术实现。总体设计框架图图1数据流图收入信息查询请求收入信息收入资产信息收入信息支出信息支出资产信息支出信息查询请求支出信息登录信息用户信息登录情况用户支出查询收入资产登记表支出资产登记表收入登记收入查询支出登记用户信息登记表用户登录保存登录信息二、 数据库设计采用mysql5+ Navicat Lite for MySQL实现。详细设计一、 用户登录模块本模块是用户进入系统的入口,用户登录时要经过身份验证,系统管理员或者其添加的用户才可以登录本系统。本系统有管理员和普通用户两种角色,根据其身份及作用的不同,通过ID和密码验证用户的身份,对不同级别的用户系统自动调用不同的可访问页面,使用系统提供的与其身份相应的各项功能。 二、 用户管理模块本模块是系统管理员所用模块,系统管理员成功验证身份登录系统后,可以添加删除修改普通用户。三、 记账功能模块本模快是该系统核心部分,用户可以根据自己的id号使用系统提供的记账功能。实现基本的收/支账目的录入,可以对账目进行增删改操作,同时实现按日/周/月/年统计收入/支出。四、 界面美化模块 本模块主要是实现对系统进行美化的功能,例如实现页面分页,添加图片等功能。软件实现及测试一、 系统实体对象设计实体类对象主要用java类来结构化后台数据表,完成对后台对数据表的封装,定义与表结构相一致的各种类属性和读取、设置累属性的get、set类方法。在工程的model包中建立一个java类,定义相应的属性,并为每一个属性定义相应的get()、set()方法,这样就完成了一个实体类的设计。下面给出家庭收入实体类的源代码:/*UserBean.java*/package com.gcj;public class UserBean private int userId;private String userName;private String passwd;private String mail;private int grade;private int money;public void setUserId(int userId)this.userId=userId;public int getUserId()return this.userId;public void setUserName(String userName) this.userName = userName; public void setPasswd(String passwd) this.passwd = passwd; public void setMail(String mail) this.mail = mail; public void setGrade(int grade) this.grade = grade; public String getUserName() return (this.userName); public String getPasswd() return (this.passwd); public String getMail() return (this.mail); public int getGrade() return (this.grade); public void setmoney(int money)this.money=money;public int getmoney()return this.money;其他实体类(家庭支出,用户)的设计与家庭收入类的设计相似,所不同的就是对应的后台表结构有所区别。二、 连接数据库的公共类数据库的连接操作是系统中的重要一步,系统运行首先进行数据库的连接操作,如果连接失败,则程序不能够运行。本系统采用的数据库版本是mysql5+ Navicat Lite for MySQL,在包com.gcj下建立类CommonaJdbc.java文件,导入jdbc包文件,定义一个静态类型的类变量connection用来建立数据库的连接,这样在其他类中就可以直接访问到这个变量,定义公共方法getCon()为实例变量赋值,详细ConnDB代码如下:/*ConnDB.java*/package com.gcj;/从数据库中得到连接import java.sql.*;public class ConnDB private Connection ct=null;public Connection getConn()/这是使用jdbc的方式来连接数据库 try /1加载驱动Class.forName(com.mysql.jdbc.Driver);/得到连接ct=DriverManager.getConnection(jdbc:mysql:/localhost:3306/spdb,root,123456); catch (Exception ex) ex.printStackTrace(); return ct; 三、 操作数据库的公共类在com.gcj包下建立公共类UserBeanCl.java文件,该类封装了对所有数据表的添加修改删除操作,前台业务中的相应功能都是通过这个类来完成的,它的设计思想是,通过上面设计的各种实体对象作为参数,进而执行类中的相应方法。记账模块的数据库操作与用户管理模块相近,用户管理需操作数据库的代码如下:/*UserBeanCl.java*/package com.gcj;import java.sql.*;import java.util.*;import ernal.generic.Select;public class UserBeanCl /业务逻辑 private Connection ct=null;private PreparedStatement ps=null;private ResultSet rs=null;private int pageCount=0;/共有几页(计算)/记账public boolean jizhang(String id,String email,String money,String grade)boolean b=false;try /得到连接ConnDB cd=new ConnDB();ct=cd.getConn();String sql=update users set money=(select a.money from (select b.*from users as b) as a where a.userId=+id+)+money+) where userId=+id+;/打印System.out.println (sql=+sql);ps=ct.prepareStatement(sql);int num=ps.executeUpdate();if(num=1)b=true; catch (Exception ex) ex.printStackTrace(); finally this.close(); return b;/修改用户public boolean updateUser(String id,String email,String passwd,String grade)boolean b=false;try /得到连接ConnDB cd=new ConnDB();ct=cd.getConn();String sql=update users set passwd=+passwd+ ,email=+email+ ,grade=+grade+ where userId=+id+;/打印System.out.println (sql=+sql);ps=ct.prepareStatement(sql);int num=ps.executeUpdate();if(num=1)b=true; catch (Exception ex) ex.printStackTrace(); finally this.close(); return b;/删除用户public boolean delUser(String id)boolean b=false;try /得到连接ConnDB cd=new ConnDB();ct=cd.getConn();String sql=delete from users where userid=+id+;ps=ct.prepareStatement(sql);int num=ps.executeUpdate();if(num=1)/删除成功!b=true; catch (Exception ex) ex.printStackTrace(); finally this.close(); return b;/返回pageCount;public int getPageCount()return this.pageCount;/分页显示SuppressWarnings(unchecked)public ArrayList getResultByPage(int pageNow,int pageSize)ArrayList al=new ArrayList();try int rowCount=0;/共有几条记录(查表)/得到rowCountConnDB cd=new ConnDB();ct=cd.getConn();ps=ct.prepareStatement(select count(*) from users);rs=ps.executeQuery();if(rs.next()rowCount=rs.getInt(1);/计算pageCountif(rowCount%pageSize=0)pageCount=rowCount/pageSize;elsepageCount=rowCount/pageSize+1;ps=ct.prepareStatement(select * from users limit +pageSize*(pageNow-1)+,+pageSize+);rs=ps.executeQuery();while(rs.next()/将rs中的 每条记录封装到UserBean ubUserBean ub=new UserBean();ub.setUserId(rs.getInt(1);ub.setUserName(rs.getString(2);ub.setPasswd(rs.getString(3);ub.setMail(rs.getString(4);ub.setGrade(rs.getInt(5);ub.setmoney(rs.getInt(6);/将ub ,放入到ArrayList 中al.add(ub); catch (Exception ex) ex.printStackTrace(); finally this.close(); return al;/验证用户public boolean checkUser(String u,String p)boolean b=false;try /得到连接ConnDB cd=new ConnDB();ct=cd.getConn();ps=ct.prepareStatement(select passwd from users where username=?);ps.setString(1,u);rs=ps.executeQuery();if(rs.next()String dbPasswd=rs.getString(1);if(dbPasswd.equals(p)b=true; catch (Exception ex) ex.printStackTrace(); finally this.close(); return b;/关闭资源public void close()try if(rs!=null)rs.close();rs=null;if(ps!=null)ps.close();ps=null;if(ct!=null)ct.close();ct=null; catch (Exception ex) ex.printStackTrace(); 四、 用户登录模块设计该模块主要用来验证用户的登录信息,完成用户登录功能。以下是部分代码:/*login.java*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException try String info=request.getParameter(info);response.setContentType(text/html;charset=gbk);PrintWriter out = response.getWriter();out.println();out.println();out.println( 登陆界面);out.println( );/得到错误信息if (info!=null) out.println(你的信息错误);out.println( 登陆界面);out.println( );/使用的方法是get还是postout.println( 用户名 );out.println( 密 码 );System.out.print(cccccc);out.println(两周内不用重新登入);out.println( );out.println();out.println( );out.println();out.flush();out.close(); catch (Exception e) e.printStackTrace();验证用户登录信息功能/*logincheck.java*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException Statement sm=null;java.sql.Connection ct=null;ResultSet rs=null;try System.out.println(ddddd);String u=request.getParameter(username);String p=request.getParameter(passwd);/调用UserBeanCl 1.创建一个对象UserBeanCl ubc=new UserBeanCl();/创建statement/ sm=ct.createStatement(); System.out.println(eeeee);/ rs=sm.executeQuery(select passwd from users where username=+u+); System.out.println(ffff);/验证 /证明用户是存在(防止sql漏洞) /2。使用UserBeanCl的方法 if (ubc.checkUser(u, p) /有没有选中按钮String keep=request.getParameter(keep);if (keep!=null) /将用户名和密码保存到客户端(cookie)/创建cookieCookie name=new Cookie(myname,u);Cookie pass=new Cookie(mypasswd,p);/设置时间name.setMaxAge(14*24*3600);pass.setMaxAge(14*24*3600);/回写到客户端response.addCookie(name);response.addCookie(pass);/合法/将验证成功的信息写入session/得到sessionHttpSession hs=request.getSession(true);/修改session的存在时间,默认半小时发呆时间hs.setMaxInactiveInterval(9999);/秒计算hs.setAttribute(uname, u);/将servletContext中的visitTime中对应的值+String times=(String) this.getServletContext().getAttribute(visitTimes);/对times+再重新放回servletthis.getServletContext().setAttribute(visitTimes, (Integer.parseInt(times)+1)+);response.sendRedirect(Main); else response.sendRedirect(login);/写servlet的url,切记; catch (Exception e) e.printStackTrace();finallytry if(ct!=null)ct.close();if(rs!=null)rs.close(); catch (Exception e2) e2.printStackTrace();五、 用户记账模块设计/*PayCl.java*/package com.gcj;import java.sql.*;public class PayCl extends Pay public ResultSet rs;public void addpay()DBConnect dbc = null; try dbc = new DBConnect(); dbc.prepareStatement(INSERT INTO pay ( classid,payerid,paytypeid,money,project,message,addtime,inout ) VALUES ( ?,?,?,?,?,?,?,? ); dbc.setInt(1,Classid); dbc.setInt(2,Payerid); dbc.setInt(3,Paytypeid); dbc.setInt(4,Money); dbc.setBytes(5,Project.getBytes(gb2312); dbc.setBytes(6,Message.getBytes(gb2312); dbc.setBytes(7,Addtime.getBytes(gb2312); dbc.setInt(8,Inout); dbc.executeUpdate(); catch(Exception e) System.err.println(e); finally try dbc.close(); catch(Exception e) e.printStackTrace(); public void editpay() DBConnect dbc = null; try dbc = new DBConnect(); dbc.prepareStatement(UPDATE pay SET classid=?,payerid=?,paytypeid=?,money=?,project=?,message=?,addtime=? WHERE id=?); dbc.setInt(1,Classid); dbc.setInt(2,Payerid); dbc.setInt(3,Paytypeid); dbc.setInt(4,Money); dbc.setBytes(5,Project.getBytes(GB2312); dbc.setBytes(6,Message.getBytes(GB2312); dbc.setBytes(7,Addtime.getBytes(GB2312); dbc.setInt(8,Id); dbc.executeUpdate(); catch(Exception e) e.printStackTrace(); finally try dbc.close(); catch(Exception e) e.printStackTrace(); public void delpay() DBConnect dbc = null; try dbc = new DBConnect(); dbc.prepareStatement(delete from pay WHERE id=?); dbc.setInt(1,Id); dbc.executeUpdate(); catch(Exception e) e.printStackTrace(); finally try dbc.close(); catch(Exception e) e.printStackTrace(); /结束 public PayControl() 六、 跳转成功或失败界面当用户对程序进行操作时,系统提示操作成功或失败界面,便于用户更好的管理和使用系统。成功操作代码/*Ok.java*/操作成功界面package com.gcj;import javax.servlet.http.*;import java.io.*;public class Ok extends HttpServlet public void doGet(HttpServletRequest req,HttpServletResponse res)/业务逻辑 try /中文乱码res.setContentType(text/html;charset=gbk);PrintWriter pw=res.getWriter();/返回登录界面pw.println();pw.println();pw.println();pw.println(恭喜你,操作成功!);pw.println(返回主界面pw.println();pw.println(); catch (Exception ex) ex.printStackTrace(); public void doPost(HttpServletRequest req,HttpServletResponse res)this.doGet(req,res);失败操作代码/*Err.java*/package com.gcj;import javax.servlet.http.*;import java.io.*;public class Err extends HttpServlet pu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年薪金激励方案:股权期权激励合同
- 第五课 守望精神家园说课稿-2025-2026学年初中道德与法治九年级上册统编版(五四学制)
- 2025前期物业服务合同示范文本
- 第7课 重复操作用循环教学设计-2025-2026学年小学信息技术人教版2024五年级全一册-人教版2024
- 2025合同终止解除证明书
- 2025房屋交易中介服务合同模板
- 2025年病理学常见疾病病理变化模拟考试答案及解析
- 2024年郑州市骨科医院招聘真题
- 2024年宁波慈溪市事业单位招聘真题
- 2025年心理心理咨询师的基本概念考试试卷答案及解析
- 蚯蚓养殖和治污改土技术规程 第1部分:蚯蚓养殖和粪污处理
- 成人鼻肠管的留置与维护(2021团体标准解读)-20221004172843
- 机电安装验收证明书
- 熟识邮轮客舱房态讲解
- 汉字五行属性查询表
- 教科版科学三年级上册《1.1水到哪里去了》课件
- 项目验收签收单
- 食品公司员工培训计划书
- 风湿性疾病的影像学表现
- 万达宝软件逻辑计算笔试题
- 2023流域超标准洪水防御预案编制导则
评论
0/150
提交评论