数据库课程设计-JAVA-个人记账管理系统.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 JAVA 个人 记账 管理 系统
- 资源描述:
-
目 录 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));展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




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



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/3926161.html