收藏 分销(赏)

数据库课程设计-JAVA-个人记账管理系统.doc

上传人:精*** 文档编号:3926161 上传时间:2024-07-23 格式:DOC 页数:21 大小:76.54KB 下载积分:10 金币
下载 相关 举报
数据库课程设计-JAVA-个人记账管理系统.doc_第1页
第1页 / 共21页
数据库课程设计-JAVA-个人记账管理系统.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
目 录 1 前言1 2 需求分析1 2.1 课程设计目的1 2.2 课程设计任务1 2.3 设计环境1 2。4 开发语言2 3 分析和设计2 3。1 系统E—R模型2 3。2 表空间及表的设计2 3.3 视图设计5 3。4 存储过程、函数、包的设计6 3。5 触发器设计7 3.6 角色、用户、权限设计8 3。7 备份方案设计9 4 课程设计总结9 4.1 程序运行结果9 4。2 设计结论11 参考文献12 致 谢12 附 录13 1 前言 设计一个个人记账管理系统,用JAVA来编写。综合运用JAVA的基础和算法设计的基本原则,用PLSQL Developer,orcale等工具实现。功能包括收入记录、支出记录、查询功能、报表,并将记录保存在数据库中,通过连接数据库可以查询所有记录,可以通过选择日期将符合条件的记录显示在查询框中,可以选择收入或支出查询收入记录或者支出记录。用户可以通过报表了解到指定时间段内收入总和、支出总和、余额。 2 需求分析 2.1课程设计目的 通过专业课程设计Ⅱ,即大型数据库系统课程设计,有助于培养学生综合运用数据库相关知识解决实际问题的能力。本设计要求对实际问题进行需求分析,提炼实际问题中的数据,建立关系模型,并在大型数据库中得以实现。同时要求对数据库的运营、管理及使用上进行必要的规划和实现。 2。2 课程设计任务 针对某管理信息系统的需求,设计一个数据库系统。具体内容如下: (1) 根据需求,建立ER模型.通过ER图表示. (2) 在此基础上,设计物理表结构,编写创建数据库表的语句.较高要求为在设计创建数据表语句的同时考虑性能上的要求,采用相关的磁盘存储技术。 (3) 从实际查询应用出发,为一些主要的应用模块设计至少3个参数化视图。 (4) 针对常用的业务,创建包,同时实现一个函数放入包中。 (5) 从数据检验的角度出发,为相关的表建立至少1个触发器. (6) 从数据更新或修改的角度出发,设计至少1个存储过程。 (7) 从安全的角度出发,规划系统的角色、用户、权限,并通过SQL实现。 (8) 预计每个表的大致容量和增长速度。指定备份的方案,写出相关的备份命令。 (9) 以上所有命令及脚本均需测试,在设计报告中说明其功能并记录其输出。 2.3 设计环境 (1)WINDOWS2000/2003/XP系统 (2)Oracle数据库管理系统 2。4 开发语言 PL/SQL语言 3 分析和设计 3。1 系统E-R模型 图3-1个人记账管理系统E—R图 3。2 表空间及表的设计 -— Create table create table BANK_INCOME( IN_ID NUMBER not null, IN_NAME VARCHAR2(50), IN_DATE VARCHAR2(50), IN_MONEY NUMBER(10,2), IN_COMMENT VARCHAR2(500) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create/Recreate primary, unique and foreign key constraints alter table BANK_INCOME add constraint PK_IN_ID primary key (IN_ID) using index tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create table create table BANK_OUT ( OUT_ID NUMBER not null, OUT_NAME VARCHAR2(50), OUT_DATE VARCHAR2(50), OUT_MONEY NUMBER(10,2), OUT_COMMENT VARCHAR2(500) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -— Create/Recreate primary, unique and foreign key constraints alter table BANK_OUT add primary key (OUT_ID) using index tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); 列名 类型 说明 in_id number 主键,收入id in_name Varchar2(50) 收入项 in_date Varchar2(50) 收入日期 in_money Number(10,2) 收入金额 in_comment Varchar2(500) 收入备注 图3—2收入表 列名 类型 说明 out_id number 主键,支出id out _name Varchar2(50) 支出项 out _date Varchar2(50) 支出日期 out _money Number(10,2) 支出金额 out _comment Varchar2(500) 支出备注 图3—3 支出表 3。3 视图设计 图3-4 收入视图 图3—5 支出视图 3。4 存储过程、函数、包的设计 图3—6存储过程 图3—7包的设计 3。5 触发器设计 (1)收入触发器 create or replace trigger tri_auto_income_id before insert on bank_income for each row declare -— local variables here begin select seq_income_id。nextval into:new。in_id from dual; end tri_auto_income_id; (2)支出触发器 create or replace trigger TRI_AUTO_OUT_ID before insert on bank_out for each row declare —- local variables here begin select seq_out_id。nextval into:new.out_id from dual; end TRI_AUTO_OUT_ID; 3。6 角色、用户、权限设计 —— Create the role create role ROLE1; —-给角色授权 grant select,update,insert on bank_income to role1 grant select,update,insert on bank_out to role1 —- Create the user create user huanghua identified by "123456” default tablespace SYSTEM temporary tablespace TEMP profile DEFAULT; grant select,update,insert on bank_income to huanghua with grant option 3。7 备份方案设计 (1)启动SQL*plus,以SYSDBA身份登录数据库 (2)查询当前数据库所有数据文件、控制文件、联机重做文件的位置 SQL〉select file_name from dba_data_files; SQL〉SELECT member FROM v$logfile; SQL>SELECT value FROM v$parameter WHERE name=’control_files’; (3)关闭数据库 SQL>SHUTDOWN IMMEDIATE (4)复制所有数据文件、联机重做文件以及控制文件到备份磁盘可以直接在操作系统中使用复制、粘贴方式进行 (5)重新启动数据库 SQL〉STARTUP 4 课程设计总结 4。1运行结果如下图所示: 图4—1 个人记账管理界面 图4—2 收入记录界面 图4-3支出记录界面 图4-4 查询收入支出界面 图4—5 报表界面 4。2、设计总结 这次我们的课程设计题目是个人记账管理系统.通过此次课程设计,掌握到了数据库系统的开发方法。同时也加深了对刚刚学习的JAVA的印象。整个代码在写的过程中出现了很多问题.有的实在解决不了的问题,就去问教我们JAVA的柳小文老师,老师也非常乐意帮助我解决一些困难.有的时候不懂的问题就去上网搜索答案,或者自己去看书。学习需要自主,对这一点我颇有感触。 此次课程设计结束之后,我还意犹未尽,因为从中感觉到了写代码的趣味。于是,我就开始想方设法找点小的应用程序去写.因为这样的学习方法是最快也是最有效的方式。比老师上课讲要好的多.而且大学生也应该培养自己的动手能力.而动手能力只能来自于自己从头到尾的去写一个不大的应用程序。了解整个创作的一个大体思路,在写的过程中还要不断地去请教我们的老师.因为他们对实际应用程序的把握比我们要强的多. 当然,学无止境,不能因为这么一点小的成就就止步不前.前路很漫长,但我相信只要自己肯用心去学习,Nothing is impossible! 参考文献 [1]孙风栋,刘蕾等。Oracle 10g数据库基础教程[M].北京:电子工业出版社,2012。10。 [2]王珊,萨师煊。数据库系统概论[M]北京:高等教育出版社,2006。5。 [3]Java Programming Java程序设计[M]北京:清华大学出版社,2010。1. 致 谢 感谢我们的指导老师柳小文老师,谢谢她在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术. 同时也感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践Oracle数据库,让我们对数据库有了更深刻的认知,对已学知识有了更进一步的巩固。 总之,通过这次课程设计,我获益良多. 附 录 主要代码: package com。sxt。bank。dao; import java。sql。Connection; import java.sql.DriverManager; import java。sql。Statement; /** * 数据库工具类 * @author Administrator * */ public class DBUtil { /** * 专用于取得数据库的连接 * @return */ public static Connection getConn(){ Connection conn=null; try { //加载驱动 Class.forName(”oracle。jdbc.driver.OracleDriver”); String url=”jdbc:oracle:thin:@172.19。95。36:1521:orcl"; //取得连接 conn=DriverManager。getConnection(url, "scott", ”tiger”); } catch (Exception e) { e。printStackTrace(); } return conn; } /** * 专用于关闭连接 * @param conn * @param stat */ public static void closeConn(Connection conn,Statement stat){ try { stat。close(); conn.close(); } catch (Exception e2) { e2.printStackTrace(); } } } 收入数据处理代码: package com。sxt。bank。dao; import java.sql。Connection; import java.sql.DriverManager; import java。sql。PreparedStatement; import com。sxt。bank。entity.InCome; /** * 数据处理 * @author Administrator * */ public class IncomeDao { /** * 用于保存收入项到数据库 * @param income */ public void saveIncome(InCome income){ Connection conn=null; PreparedStatement stat=null; try { conn=DBUtil。getConn(); //得到预编译执行器 stat=conn.prepareStatement(”insert into bank_income(in_name,in_date,in_money,in_comment) values(?,?,?,?)”); //设置参数 //stat。setInt(1,2); stat。setString(1, income。getInName()); stat。setString(2, income。getInDate()); stat。setFloat(3, income.getMoney()); stat.setString(4, income。getComment()); //执行 stat。execute(); } catch (Exception e) { e.printStackTrace(); }finally{ DBUtil。closeConn(conn, stat); } } } 支出数据处理代码: package com。sxt。bank.dao; import java。sql.Connection; import java。sql。DriverManager; import java。sql.PreparedStatement; import com。sxt。bank.entity.Out; /** * 支出的数据处理 * @author Administrator * */ public class OutDao { /** * 用于保存支出项到数据库 * @param income */ public void saveOutcome(Out out){ Connection conn=null; PreparedStatement stat=null; try { //加载驱动 Class。forName(”oracle。jdbc.driver.OracleDriver”); String url="jdbc:oracle:thin:@172。19。95。36:1521:orcl”; //取得连接 conn=DriverManager。getConnection(url, ”scott", ”tiger”); //得到预编译执行器 stat=conn。prepareStatement(”insert into bank_out(out_name,out_date,out_money,out_comment) values(?,?,?,?)"); //设置参数 stat。setString(1,out。getOutName()); stat。setString(2, out.getOutDate()); stat.setFloat(3, out。getMoney()); stat。setString(4, out.getComment()); //执行 stat.execute(); } catch (Exception e) { e.printStackTrace(); }finally{ try { stat。close(); conn.close(); } catch (Exception e2) { e2。printStackTrace(); } } } } 收入支出查询代码: package com.sxt.bank。dao; import java。sql。Connection; import java.sql.PreparedStatement; import java.sql。ResultSet; import java。util.ArrayList; import com.sxt。bank.entity.InCome; import com。sxt。bank。entity。Out; /** * 收入支出查询 * @author Administrator * */ public class QueryDao { /** * 取得数据的记录,并封装成集合 * @return */ public ArrayList getInList(){ Connection conn=null; PreparedStatement stat=null; ResultSet rs=null; //新建一个集合用来装out ArrayList〈InCome> inList=new ArrayList〈InCome〉(); try { //得到连接 conn=DBUtil.getConn(); //SQL语句执行器 stat=conn。prepareStatement("select * from bank_income"); //执行SQL查询,得到结果集 rs=stat.executeQuery(); while(rs。next()){ //从记录中取值 参数类型 字段名 String inName=rs.getString(”in_name"); String inDate=rs。getString("in_date"); float money=rs。getFloat(”in_money”); String comment=rs.getString("in_comment"); //封装成对象 InCome in=new InCome(inName, inDate, money, comment); //将对象装载到集合中 inList.add(in); } } catch (Exception e) { e。printStackTrace(); }finally{ DBUtil.closeConn(conn, stat); } //返回 return inList; } /** * 取得数据的记录,并封装成集合 * @return */ public ArrayList getOutList(){ Connection conn=null; PreparedStatement stat=null; ResultSet rs=null; //新建一个集合用来装out ArrayList<Out〉 outList=new ArrayList〈Out〉(); try { //得到连接 conn=DBUtil.getConn(); //SQL语句执行器 stat=conn.prepareStatement(”select * from bank_out”); //执行SQL查询,得到结果集 rs=stat.executeQuery(); while(rs。next()){ //从记录中取值 参数类型 字段名 String outName=rs。getString("out_name"); String outDate=rs。getString(”out_date”); float money=rs。getFloat("out_money”); String comment=rs。getString(”out_comment”); //封装成对象 Out out=new Out(outName, outDate, money, comment); //将对象装载到集合中 outList。add(out); } } catch (Exception e) { e.printStackTrace(); }finally{ DBUtil。closeConn(conn, stat); } //返回 return outList; } } 报表代码: package com。sxt.bank。view; import java.awt.EventQueue; import java.awt。event。ActionEvent; import java。awt。event.ActionListener; import java.awt。event.MouseAdapter; import java。awt。event。MouseEvent; import java.awt。event。WindowAdapter; import java。awt。event.WindowEvent; import java。util。ArrayList; import javax.swing。ImageIcon; import javax.swing.JButton; import javax。swing。JFrame; import javax.swing。JLabel; import javax。swing.JPanel; import javax.swing。JScrollPane; import javax.swing。JTable; import javax。swing.JTextField; import javax.swing。border.EmptyBorder; import javax。swing。table。DefaultTableModel; import com.sxt。bank.dao。QueryDao; import com.sxt。bank。entity。InCome; import com。sxt.bank.entity。Out; import com。sxt。bank。util。DatePanel; public class reportFrame extends JFrame implements ActionListener { private JPanel contentPane; private JTextField textf; private JTextField textl; private JTable table; /** * Launch the application。 */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { reportFrame frame = new reportFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public reportFrame() { setTitle("\u62A5\u8868”); setResizable(false); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent arg0) { //只销毁本窗口,不退出虑拟机 reportFrame。this。dispose(); } }); setDefaultCloseOperation(JFrame。DO_NOTHING_ON_CLOSE); this。setIconImage(new ImageIcon(”image/person.JPG").getImage()); setBounds(100, 100, 441, 342); contentPane = new JPanel(); contentPane。setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); //设置背景=============== ImageIcon img = new ImageIcon(”image/chao.jpg”); final JLabel lblImg = new JLabel(img); this。getLayeredPane()。add(lblImg,new Integer(Integer.MIN_VALUE)); lblImg。setBounds(0, lblImg.getHeight(), 457, 542); ((JPanel)getContentPane())。setOpaque(false); //====================== contentPane。setLayout(null); JLabel repo = new JLabel(”\u62A5\u8868\u8BB0\u5F55”); repo。setBounds(10, 25, 61, 15); contentPane。add(repo); JLabel lblNewLabel = new JLabel("\u65E5\u671F\uFF1A”); lblNewLabel。setBounds(81, 25, 39, 15); contentPane.add(lblNewLabel); textf = new JTextField(); textf。setBounds(118, 22, 73, 21); contentPane。add(textf); textf。setColumns(10); JLabel label = new JLabel(”\u5230”); label.setBounds(224, 25, 21, 15); contentPane。add(label); textl = new JTextField(); textl。setColumns(10); textl。setBounds(241, 22, 72, 21); contentPane.add(textl); JButton btnDate1 = new JButton(”。。。"); btnDate1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { //弹出日期框 父窗口 模式 输入框 x y new DatePanel(reportFrame。this,true,textf,event.getXOnScreen(),event。getYOnScreen()); } }); btnDate1。setBounds(195, 22, 21, 23); contentPane。add(btnDate1); JButton btnDate2 = new JButton(”。。。”); btnDate2.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { //弹出日期框 父窗口 模式 输入框 x y new DatePanel(reportFrame。this,true,textl,event.getXOnScreen(),event.getYOnScreen()); } }); btnDate2.setBounds(316, 21, 21, 23); contentPane。add(btnDate2); JScrollPane scrollPane = new JScrollPane(); scrollPane。setBounds(10, 56, 413, 214); contentPane。add(scrollPane); //建表头 String[] header={”收入/支出项”,”日期",”金额”,"备注"}; //建数据模型 dtm=new DefaultTableModel(null,header); table = new JTable(dtm); scrollPane。setViewportView(table); JButton inquiry = new JButton(”\u67E5\u8BE2"); inquiry。addActionListener(this); inquiry.setActionCommand("query”); inquiry.setBounds(347, 21, 76, 23); contentPane.add(inquiry); JLabel outlabel = new JLabel(”\u652F\u51FA\u5408\u8BA1\uFF1A"); outlabel。setBounds(10, 285, 72, 15); contentPane。add(outlabel); JLabel label_1 = new JLabel("\u6536\u5165\u5408\u8BA1\uFF1A”); label_1。setBounds(163, 285, 74, 15); contentPane。add(label_1); JLabel label_2 = new JLabel(”\u4F59\u989D\uFF1A”); label_2。setBounds(313, 285, 44, 15); contentPane。add(label_2); textoutsum = new JTextField(); textoutsum。setBounds(87, 282, 66, 21); contentPane。add(textoutsum); textoutsum。setColumns(10); textinsum = new JTextField(); textinsum。setColumns(10); textinsum。setBounds(237, 282, 66, 21); contentPane。add(textinsum); textyu = new JTextField(); textyu。setColumns(10); textyu.setBounds(357, 282, 66, 21); contentPane.add(textyu); } static double insum=0,outsum=0,remanent=0; DefaultTableModel dtm=null; private JTextField textoutsum; private JTextField textinsum; private JTextField textyu; public void actionPerformed(ActionEvent event) { if(event。getActionCommand().equals("exit”)){ this。dispose(); }else if(event。getActionCommand().equals(”query”)){ //去数据库查询 得到数据 QueryDao queryDao=new QueryDao(); //取得集合 ArrayList<InCome> inList=queryDao。getInList(); ArrayList〈Out〉 outList=queryDao。getOutList(); //清空表格的历史数据 dtm。setRowCount(0); insum=outsum=0; //显示在表格中 for(InCome in:inList){ //将数据加载到表格模型中out dtm.addRow(new Object[]{in.getInName(),in.getInDate(),in.getMoney(),in.getComment()}); insum+=in.getMoney(); textinsum。setText(String。valueOf(insum)); } //显示在表格中 for(Out out:outList){ //将数据加载到表格模型中 dtm。addRow(new Object[]{out。getOutName(),out.getOutDate(),out。getMoney(),out。getComment()}); outsum+=out。getMoney(); textoutsum。setText(String。valueOf(outsum)); } remanent=insum-outsum; textyu。setText(String。valueOf(remanent));
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服