数据库课程设计_JAVA 个人记账管理系统_第1页
数据库课程设计_JAVA 个人记账管理系统_第2页
数据库课程设计_JAVA 个人记账管理系统_第3页
数据库课程设计_JAVA 个人记账管理系统_第4页
数据库课程设计_JAVA 个人记账管理系统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录1 前言12 需求分析12。1 课程设计目的12.2 课程设计任务12。3 设计环境12。4 开发语言23 分析和设计23。1 系统E-R模型23。2 表空间及表的设计23。3 视图设计53。4 存储过程、函数、包的设计63。5 触发器设计73。6 角色、用户、权限设计83.7 备份方案设计94 课程设计总结94。1 程序运行结果94。2 设计结论11参考文献12致 谢12附 录131 前言设计一个个人记账管理系统,用JAVA来编写。综合运用JAVA的基础和算法设计的基本原则,用PLSQL Developer,orcale等工具实现.功能包括收入记录、支出记录、查询功能、报表,并将记录保

2、存在数据库中,通过连接数据库可以查询所有记录,可以通过选择日期将符合条件的记录显示在查询框中,可以选择收入或支出查询收入记录或者支出记录。用户可以通过报表了解到指定时间段内收入总和、支出总和、余额.2 需求分析2。1课程设计目的通过专业课程设计,即大型数据库系统课程设计,有助于培养学生综合运用数据库相关知识解决实际问题的能力.本设计要求对实际问题进行需求分析,提炼实际问题中的数据,建立关系模型,并在大型数据库中得以实现。同时要求对数据库的运营、管理及使用上进行必要的规划和实现。2。2 课程设计任务针对某管理信息系统的需求,设计一个数据库系统。具体内容如下:(1) 根据需求,建立ER模型。通过E

3、R图表示。(2) 在此基础上,设计物理表结构,编写创建数据库表的语句。较高要求为在设计创建数据表语句的同时考虑性能上的要求,采用相关的磁盘存储技术。(3) 从实际查询应用出发,为一些主要的应用模块设计至少3个参数化视图.(4) 针对常用的业务,创建包,同时实现一个函数放入包中。(5) 从数据检验的角度出发,为相关的表建立至少1个触发器。(6) 从数据更新或修改的角度出发,设计至少1个存储过程。(7) 从安全的角度出发,规划系统的角色、用户、权限,并通过SQL实现。(8) 预计每个表的大致容量和增长速度。指定备份的方案,写出相关的备份命令.(9) 以上所有命令及脚本均需测试,在设计报告中说明其功

4、能并记录其输出。2。3 设计环境(1)WINDOWS2000/2003/XP系统(2)Oracle数据库管理系统2。4 开发语言PL/SQL语言3 分析和设计3。1 系统ER模型图31个人记账管理系统ER图3。2 表空间及表的设计- Create tablecreate 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 in

5、itrans 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 mine

6、xtents 1 maxextents unlimited ); Create tablecreate 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 );- Cr

7、eate/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_idnumber主键,收入idin_nameVarchar2(50)收入项in_dateVarchar2(50)收入日期in_mo

8、neyNumber(10,2)收入金额in_commentVarchar2(500)收入备注图3-2收入表列名类型说明out_idnumber主键,支出idout _nameVarchar2(50)支出项out _dateVarchar2(50)支出日期out _moneyNumber(10,2)支出金额out _commentVarchar2(500)支出备注 图33 支出表3。3 视图设计图34 收入视图图3-5 支出视图3。4 存储过程、函数、包的设计图3-6存储过程图37包的设计3。5 触发器设计(1)收入触发器create or replace trigger tri_auto_in

9、come_id before insert on bank_income for each rowdeclare- local variables herebegin 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 rowdeclare- local variables herebegin select seq_out_i

10、d。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 huanghuaidentified by "123456"default tablespace SY

11、STEMtemporary tablespace TEMP profile DEFAULT;grant select,update,insert on bank_income to huanghua with grant option3.7 备份方案设计(1)启动SQLplus,以SYSDBA身份登录数据库(2)查询当前数据库所有数据文件、控制文件、联机重做文件的位置SQLselect file_name from dba_data_files;SQL>SELECT member FROM vlogfile;SQLSELECT value FROM v$parameter WHERE n

12、ame=control_files';(3)关闭数据库SQLSHUTDOWN IMMEDIATE(4)复制所有数据文件、联机重做文件以及控制文件到备份磁盘可以直接在操作系统中使用复制、粘贴方式进行(5)重新启动数据库SQL>STARTUP4 课程设计总结4。1运行结果如下图所示: 图41 个人记账管理界面图4-2 收入记录界面图43支出记录界面图44 查询收入支出界面图45 报表界面4。2、设计总结这次我们的课程设计题目是个人记账管理系统。通过此次课程设计,掌握到了数据库系统的开发方法.同时也加深了对刚刚学习的JAVA的印象.整个代码在写的过程中出现了很多问题。有的实在解决不了的

13、问题,就去问教我们JAVA的柳小文老师,老师也非常乐意帮助我解决一些困难。有的时候不懂的问题就去上网搜索答案,或者自己去看书.学习需要自主,对这一点我颇有感触.此次课程设计结束之后,我还意犹未尽,因为从中感觉到了写代码的趣味。于是,我就开始想方设法找点小的应用程序去写。因为这样的学习方法是最快也是最有效的方式。比老师上课讲要好的多。而且大学生也应该培养自己的动手能力。而动手能力只能来自于自己从头到尾的去写一个不大的应用程序.了解整个创作的一个大体思路,在写的过程中还要不断地去请教我们的老师.因为他们对实际应用程序的把握比我们要强的多。当然,学无止境,不能因为这么一点小的成就就止步不前.前路很漫

14、长,但我相信只要自己肯用心去学习,Nothing is impossible!参考文献1孙风栋,刘蕾等。Oracle 10g数据库基础教程M.北京:电子工业出版社,2012.10。2王珊,萨师煊.数据库系统概论M北京:高等教育出版社,2006.5。3Java Programming Java程序设计M北京:清华大学出版社,2010.1。致 谢感谢我们的指导老师柳小文老师,谢谢她在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术.同时也感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践Oracle数据库,让我

15、们对数据库有了更深刻的认知,对已学知识有了更进一步的巩固。总之,通过这次课程设计,我获益良多。附 录主要代码: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;

16、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(C

17、onnection 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 cl

18、ass 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.setIn

19、t(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();finallyDBUtil.closeConn(conn, stat);支出数据处理代码:package com。sxt.bank。dao;import java。sq

20、l。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(

21、”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

22、(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();finallytry stat。close();conn。close(); catch (Exception e2) e2.printStackTrace();收入支出查询代码:package com。sxt。bank。dao;impo

23、rt 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

24、=null;PreparedStatement stat=null;ResultSet rs=null;/新建一个集合用来装outArrayListInCome inList=new ArrayListInCome();try /得到连接conn=DBUtil。getConn();/SQL语句执行器stat=conn。prepareStatement(”select from bank_income");/执行SQL查询,得到结果集rs=stat。executeQuery();while(rs.next() /从记录中取值 参数类型 字段名String inName=rs。getSt

25、ring(”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();finallyDBUtil.closeConn(conn, sta

26、t);/返回return inList;/ 取得数据的记录,并封装成集合 return /public ArrayList getOutList()Connection conn=null;PreparedStatement stat=null;ResultSet rs=null;/新建一个集合用来装outArrayList<Out> outList=new ArrayListOut>();try /得到连接conn=DBUtil。getConn();/SQL语句执行器stat=conn。prepareStatement(”select from bank_out”);/执行

27、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, c

28、omment);/将对象装载到集合中outList。add(out); catch (Exception e) e。printStackTrace();finallyDBUtil。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

29、 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 java

30、x。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 i

31、mplements 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.setVisib

32、le(true); catch (Exception e) e。printStackTrace(););/ * Create the frame。 */public reportFrame() setTitle(”u62A5u8868”);setResizable(false);this。addWindowListener(new WindowAdapter() Overridepublic void windowClosing(WindowEvent arg0) /只销毁本窗口,不退出虑拟机reportFrame。this。dispose(););setDefaultCloseOperati

33、on(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 JLab

34、el 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(”u62A5u8868u8BB0u5F55”);repo.setBounds(10, 25, 61, 15);con

35、tentPane。add(repo);JLabel lblNewLabel = new JLabel("u65E5u671FuFF1A”);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,

36、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() Overridepublic void mouseClicked(MouseEvent event) /弹出日期框 父窗口 模式 输入框 x y new Date

37、Panel(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() Overridepublic void mouseClicked(MouseEvent event) /弹出日期框 父窗口 模式 输入框 x y

38、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=”收入/支出项",”日期”,”金额”,

39、"备注";/建数据模型dtm=new DefaultTableModel(null,header);table = new JTable(dtm);scrollPane。setViewportView(table);JButton inquiry = new JButton(”u67E5u8BE2");inquiry。addActionListener(this);inquiry。setActionCommand(”query”);inquiry。setBounds(347, 21, 76, 23);contentPane.add(inquiry);JLabel

40、outlabel = new JLabel(”u652Fu51FAu5408u8BA1uFF1A”);outlabel。setBounds(10, 285, 72, 15);contentPane.add(outlabel);JLabel label_1 = new JLabel(”u6536u5165u5408u8BA1uFF1A");label_1。setBounds(163, 285, 74, 15);contentPane。add(label_1);JLabel label_2 = new JLabel(”u4F59u989DuFF1A”);label_2。setBounds(313, 285, 44, 15);contentPane。add(label_2);textoutsum = new JTextField();textoutsum。setBounds

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论