还剩26页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
目录TOC\o1-2\h\z\u1前言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前言设计一个个人记账管理系统,用J__A来编写综合运用J__A的基础和算法设计的基本原则,用PLSQLDeveloper,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表空间及表的设计--CreatetablecreatetableBANK_INCOMEIN_IDNUMBERnotnullIN_NAMEVARCHAR250IN_DATEVARCHAR250IN_MONEYNUMBER102IN_COMMENTVARCHAR2500tablespa__USERSpctfree10initrans1__xtrans255storageinitial64Kminextents1__xextentsunlimited;--Create/Recreatepri__ryuniqueandforeignkeyconstraintsaltertableBANK_INCOMEaddconstraintPK_IN_IDpri__rykeyIN_IDusingindextablespa__USERSpctfree10initrans2__xtrans255storageinitial64Kminextents1__xextentsunlimited;--CreatetablecreatetableBANK_OUTOUT_IDNUMBERnotnullOUT_NAMEVARCHAR250OUT_DATEVARCHAR250OUT_MONEYNUMBER102OUT_COMMENTVARCHAR2500tablespa__USERSpctfree10initrans1__xtrans255storageinitial64Kminextents1__xextentsunlimited;--Create/Recreatepri__ryuniqueandforeignkeyconstraintsaltertableBANK_OUTaddpri__rykeyOUT_IDusingindextablespa__USERSpctfree10initrans2__xtrans255storageinitial64Kminextents1__xextentsunlimited;列名类型说明in_idnumber主键,收入idin_nameVarchar250收入项in_dateVarchar250收入日期in_moneyNumber102收入金额in_commentVarchar2500收入备注图3-2收入表列名类型说明out_idnumber主键,支出idout_nameVarchar250支出项out_dateVarchar250支出日期out_moneyNumber102支出金额out_commentVarchar2500支出备注图3-3支出表
3.3视图设计图3-4收入视图图3-5支出视图
3.4存储过程、函数、包的设计图3-6存储过程图3-7包的设计
3.5触发器设计1收入触发器createorrepla__triggertri_auto_income_idbeforeinsertonbank_incomeforeachrowdeclare--localvariablesherebeginselectseq_income_id.nextvalinto:new.in_idfromdual;endtri_auto_income_id;2支出触发器createorrepla__triggerTRI_AUTO_OUT_IDbeforeinsertonbank_outforeachrowdeclare--localvariablesherebeginselectseq_out_id.nextvalinto:new.out_idfromdual;endTRI_AUTO_OUT_ID;
3.6角色、用户、权限设计--CreatetherolecreateroleROLE1;--给角色授权grantselectupdateinsertonbank_incometorole1grantselectupdateinsertonbank_outtorole1--Createtheusercreateuserhuanghuaidentifiedby123456defaulttablespa__SYSTEMtemporarytablespa__TEMPprofileDEFAULT;grantselectupdateinsertonbank_incometohuanghuawithgrantoption
3.7备份方案设计1启动SQL*plus以SYSDBA身份登录数据库2查询当前数据库所有数据文件、控制文件、联机重做文件的位置SQLselectfile_namefromdba_data_files;SQLSELECTmemberFROMv$logfile;SQLSELECTvalueFROMv$parameterWHEREname=’control_files’;3关闭数据库SQLSHUTDOWNIMMEDIATE4__所有数据文件、联机重做文件以及控制文件到备份磁盘可以直接在操作系统中使用__、粘贴方式进行5重新启动数据库SQLSTARTUP4课程设计总结
4.1运行结果如下图所示:图4-1个人记账管理界面图4-2收入记录界面图4-3支出记录界面图4-4查询收入支出界面图4-5报表界面
4.
2、设计总结这次我们的课程设计题目是个人记账管理系统通过此次课程设计,掌握到了数据库系统的__方法同时也加深了对刚刚学习的J__A的印象整个代码在写的过程中出现了很多问题有的实在解决不了的问题,就去问教我们J__A的柳小文老师,老师也非常乐意帮助我解决一些困难有的时候不懂的问题就去上网搜索答案,或者自己去看书学习需要自主,对这一点我颇有感触此次课程设计结束之后,我还意犹未尽,因为从中感觉到了写代码的趣味于是,我就开始想方设法找点小的应用程序去写因为这样的学习方法是最快也是最有效的方式比老师上课讲要好的多而且大学生也应该培养自己的动手能力而动手能力只能来自于自己从头到尾的去写一个不大的应用程序了解整个创作的一个大体思路,在写的过程中还要不断地去请教我们的老师因为他们对实际应用程序的把握比我们要强的多当然,学无止境,不能因为这么一点小的成就就止步不前前路很漫长,但我相信只要自己肯用心去学习,Nothingisimpossible!____
[1]孙风栋,刘蕾等.Oracle10g数据库基础教程[M].北京电子工业出版社,
2012.
10.
[2]王珊,萨师煊.数据库系统概论[M]北京高等教育出版社,
2006.
5.
[3]J__aProgrammingJ__a程序设计[M]北京清华大学出版社,
2010.
1.致谢感谢我们的指导老师柳小文老师,谢谢她在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术同时也感谢校__给我们这次难得的锻炼机会,让我们能更好的理解和实践Oracle数据库,让我们对数据库有了更深刻的认知,对已学知识有了更进一步的巩固总之,通过这次课程设计,我获益良多附录主要代码/***数据库工具类*@authorAdministrator**/publicclassDBUtil{/***专用于取得数据库的连接*@return*/publicstaticConnectiongetConn{Connectionconn=null;try{//加载驱动//取得连接conn=Driver__nager.getConnectionurlscotttiger;}catchEx__ptione{e.printStackTra__;}returnconn;}/***专用于关闭连接*@paramconn*@paramstat*/publicstaticvoidcloseConnConnectionconnStatementstat{try{stat.close;conn.close;}catchEx__ptione2{e
2.printStackTra__;}}}收入数据处理代码/***数据处理*@authorAdministrator**/publicclassIncomeDao{/***用于保存收入项到数据库*@paramincome*/publicvoids__eIncomeInComeincome{Connectionconn=null;PreparedStatementstat=null;try{conn=DBUtil.getConn;//得到预编译执行器stat=conn.prepareStatementinsertintobank_incomein_namein_datein_moneyin_commentvalues;//设置参数//stat.setInt12;stat.setString1income.getInName;stat.setString2income.getInDate;stat.setFloat3income.getMoney;stat.setString4income.getComment;//执行stat.execute;}catchEx__ptione{e.printStackTra__;}finally{DBUtil.closeConnconnstat;}}}支出数据处理代码/***支出的数据处理*@authorAdministrator**/publicclassOutDao{/***用于保存支出项到数据库*@paramincome*/publicvoids__eOutcomeOutout{Connectionconn=null;PreparedStatementstat=null;try{//加载驱动//取得连接conn=Driver__nager.getConnectionurlscotttiger;//得到预编译执行器stat=conn.prepareStatementinsertintobank_outout_nameout_dateout_moneyout_commentvalues;//设置参数stat.setString1out.getOutName;stat.setString2out.getOutDate;stat.setFloat3out.getMoney;stat.setString4out.getComment;//执行stat.execute;}catchEx__ptione{e.printStackTra__;}finally{try{stat.close;conn.close;}catchEx__ptione2{e
2.printStackTra__;}}}}收入支出查询代码/***收入支出查询*@authorAdministrator**/publicclassQueryDao{/***取得数据的记录,并封装成__*@return*/publicArrayListgetInList{Connectionconn=null;PreparedStatementstat=null;ResultSetrs=null;//新建一个__用来装outArrayListInComeinList=newArrayListInCome;try{//得到连接conn=DBUtil.getConn;//SQL语句执行器stat=conn.prepareStatementselect*frombank_income;//执行SQL查询,得到结果集rs=stat.executeQuery;whilers.next{//从记录中取值参数类型字段名StringinName=rs.getStringin_name;StringinDate=rs.getStringin_date;floatmoney=rs.getFloatin_money;Stringcomment=rs.getStringin_comment;//封装成对象InComein=newInComeinNameinDatemoneycomment;//将对象装载到__中inList.addin;}}catchEx__ptione{e.printStackTra__;}finally{DBUtil.closeConnconnstat;}//返回returninList;}/***取得数据的记录,并封装成__*@return*/publicArrayListgetOutList{Connectionconn=null;PreparedStatementstat=null;ResultSetrs=null;//新建一个__用来装outArrayListOutoutList=newArrayListOut;try{//得到连接conn=DBUtil.getConn;//SQL语句执行器stat=conn.prepareStatementselect*frombank_out;//执行SQL查询,得到结果集rs=stat.executeQuery;whilers.next{//从记录中取值参数类型字段名StringoutName=rs.getStringout_name;StringoutDate=rs.getStringout_date;floatmoney=rs.getFloatout_money;Stringcomment=rs.getStringout_comment;//封装成对象Outout=newOutoutNameoutDatemoneycomment;//将对象装载到__中outList.addout;}}catchEx__ptione{e.printStackTra__;}finally{DBUtil.closeConnconnstat;}//返回returnoutList;}}报表代码publicclassreportFrameextendsJFrameimplementsActionListener{privateJPanelcontentPane;privateJTextFieldtextf;privateJTextFieldtextl;privateJTabletable;/***Launchtheapplication.*/publicstaticvoid__inString[]args{EventQueue.invokeLaternewRunnable{publicvoidrun{try{reportFrameframe=newreportFrame;frame.setVisibletrue;}catchEx__ptione{e.printStackTra__;}}};}/***Createtheframe.*/publicreportFrame{setTitle\u62A5\u8868;setResizablefalse;this.addWindowListenernewWindowAdapter{@OverridepublicvoidwindowClosingWindowEventarg0{//只销毁本窗口,不退出虑拟机}};setDefaultCloseOperationJFrame.DO_NOTHING_ON_CLOSE;this.setIconI__genewI__geIconi__ge/person.JPG.getI__ge;setBounds100100441342;contentPane=newJPanel;contentPane.setBordernewEmptyBorder5555;setContentPanecontentPane;//设置背景===============I__geIconimg=newI__geIconi__ge/____.jpg;finalJLabellblImg=newJLabelimg;this.getLayeredPane.addlblImgnewIntegerInteger.MIN_VALUE;lblImg.setBounds0lblImg.getHeight457542;JPanelgetContentPane.setOpaquefalse;//======================contentPane.setLayoutnull;JLabelrepo=newJLabel\u62A5\u8868\u8BB0\u5F55;repo.setBounds10256115;contentPane.addrepo;JLabellblNewLabel=newJLabel\u65E5\u671F\uFF1A;lblNewLabel.setBounds81253915;contentPane.addlblNewLabel;textf=newJTextField;textf.setBounds118227321;contentPane.addtextf;textf.setColumns10;JLabellabel=newJLabel\u5230;label.setBounds224252115;contentPane.addlabel;textl=newJTextField;textl.setColumns10;textl.setBounds241227221;contentPane.addtextl;JButtonbtnDate1=newJButton...;btnDate
1.addMouseListenernewMouseAdapter{@OverridepublicvoidmouseClickedMouseEventevent{//弹出日期框父窗口模式输入框xynewDatePanelreportFrame.thistruetextfevent.getXOnScreenevent.getYOnScreen;}};btnDate
1.setBounds195222123;contentPane.addbtnDate1;JButtonbtnDate2=newJButton...;btnDate
2.addMouseListenernewMouseAdapter{@OverridepublicvoidmouseClickedMouseEventevent{//弹出日期框父窗口模式输入框xynewDatePanelreportFrame.thistruetextlevent.getXOnScreenevent.getYOnScreen;}};btnDate
2.setBounds316212123;contentPane.addbtnDate2;JScrollPanescrollPane=newJScrollPane;scrollPane.setBounds1056413214;contentPane.addscrollPane;//建表头String[]header={收入/支出项日期金额备注};//建数据模型dtm=newDefaultTableModelnullheader;table=newJTabledtm;scrollPane.setViewportViewtable;JButtoninquiry=newJButton\u67E5\u8BE2;inquiry.addActionListenerthis;inquiry.setActionCom__ndquery;inquiry.setBounds347217623;contentPane.addinquiry;JLabeloutlabel=newJLabel\u652F\u51FA\u5408\u8BA1\uFF1A;outlabel.setBounds102857215;contentPane.addoutlabel;JLabellabel_1=newJLabel\u6536\u5165\u5408\u8BA1\uFF1A;label_
1.setBounds1632857415;contentPane.addlabel_1;JLabellabel_2=newJLabel\u4F59\u9__D\uFF1A;label_
2.setBounds3132854415;contentPane.addlabel_2;textoutsum=newJTextField;textoutsum.setBounds872826621;contentPane.addtextoutsum;textoutsum.setColumns10;textinsum=newJTextField;textinsum.setColumns10;textinsum.setBounds2372826621;contentPane.addtextinsum;textyu=newJTextField;textyu.setColumns10;textyu.setBounds3572826621;contentPane.addtextyu;}staticdoubleinsum=0outsum=0re__nent=0;DefaultTableModeldtm=null;privateJTextFieldtextoutsum;privateJTextFieldtextinsum;privateJTextFieldtextyu;publicvoidactionPerformedActionEventevent{ifevent.getActionCom__nd.equalsexit{this.dispose;}elseifevent.getActionCom__nd.equalsquery{//去数据库查询得到数据QueryDaoqueryDao=newQueryDao;//取得__ArrayListInComeinList=queryDao.getInList;ArrayListOutoutList=queryDao.getOutList;//清空表格的历史数据dtm.setRowCount0;insum=outsum=0;//显示在表格中forInComein:inList{//将数据加载到表格模型中outdtm.addRownewO__ect[]{in.getInNamein.getInDatein.getMoneyin.getComment};insum+=in.getMoney;textinsum.setTextString.valueOfinsum;}//显示在表格中forOutout:outList{//将数据加载到表格模型中dtm.addRownewO__ect[]{out.getOutNameout.getOutDateout.getMoneyout.getComment};outsum+=out.getMoney;textoutsum.setTextString.valueOfoutsum;}re__nent=insum-outsum;textyu.setTextString.valueOfre__nent;}}}。