数据库系统实验报告图书馆管理系统oraclejava.docx
《数据库系统实验报告图书馆管理系统oraclejava.docx》由会员分享,可在线阅读,更多相关《数据库系统实验报告图书馆管理系统oraclejava.docx(21页珍藏版)》请在冰豆网上搜索。
数据库系统实验报告图书馆管理系统oraclejava
湖南科技大学
数学与计算科学学院
数据库系统
课程设计
课程设计题目:
图书馆管理系统
指导教师:
刘*芳
学生院系:
数学学院
学生班级:
信计*班
学生姓名:
黎*文
学生学号:
**
一、任务书1
二、相关技术与环境介绍2
三、需求分析2
四、概念结构设计3
五、逻辑结构设计5
六、数据库实施6
6.1数据库的建立和表空间的建立6
6.2数据库用户的建立7
6.3java前端编程8
13
七、系统测试方案和测试报告13
八、系统的主要功能和使用说明14
8.1功能说明:
14
8.2使用说明14
8.3图书管理系统数据库安全:
15
九.系统安装说明15
9.1数据库的安装15
9.2java前端程序的安装15
十.课程设计心得15
10.1实验心得16
10.2总结16
一.任务书
1.题目:
图书馆管理系统
2.内容及要求:
(1)创建数据库存储信息
(2)开发java前端程序,使用数据库。
(3)具有实际应用价值
3.实验成员分工:
黎*文:
主要负责物理结构,数据库实施,数据库与前端的连接处理操作。
沈*杰:
主要负责系统界面、概念与逻辑结构的设计,并进行维护调试。
二.相关技术与环境介绍
开发工具:
oracle11g,Eclipse4.5
开发语言:
Java
开发环境:
JDK1.8
运行环境:
Windows10
其他辅助工具:
PowerDesigner165,edrawmax
核心技术:
JOBC对数据库的操作,java操作界面的设计,各种布局方式和插件
(1)使用JFrame控件进行界面设计
(2)使用静态字段实现窗体间的数据传递
(3)使用代码方式向容器控件中添加控件
(4)数据库连接和前台操作
(5)数据库和开发工具之间的编码转换
三.需求分析
图书馆管理系统是一个高度集成的图书信息处理系统,通过将图书馆的各种功能进行整合,从而达到显示检索信息,提高工作效率,降低管理成本等目的。
一个典型的图书馆管理系统应该能够管理所有的图书种类,图书信息以及读者信息,还需要提供各种图书信息的检索查询功能。
该系统还需要能够对图书的借阅,归还进行管理,并对读者的罚款进行自动计算。
通过该系统的自动化管理,能够大大减少图书馆管理人员,还能减少管理人员的工作任务,从而降低管理开销和成本。
一个完整的图书馆管理系统包括前台和后台,前台主要是显示在计算机屏幕上的显示界面,有各种指令按钮,操作框以及文本框,后台主要是为前台的一些操作提供一些必要的数据,也就是一个相对于系统比较完整的数据库,操作员以及各类图书的信息,借书者的信息等等。
此次的图书馆管理系统有如下几个重要功能:
(1)管理员可以方便进行图书管理,用户管理,管理员管理。
图书管理包括图书信息以及图书分类的添加,修改,删除。
用户管理包括用户信息的添加,删除,修改。
管理员管理包括管理员信息的添加,删除,修改等。
(2)管理员可以修改自己的以及用户密码,修改前需先核实自己的原始密码。
(3)实现模糊查询,使用户得到更多的相关记录。
并且考虑使用的方便性,一些经常使用的输入无须用户输入,比如进行图书查询时图书分类只须用户做选择就可以。
(4)如果出现超期未还的情况,能够就做出记录,并作出相应处罚处理。
四.概念结构设计
4.1E-R图的设计
(1)学生E-R图:
(2)管理员E-R图:
(3):
图书E-R图:
(4)数据库关系图:
(5)系统逻辑图:
4.2数据库的设计
(1)建立orcl数据库
(2)建立LIBRARYTEST表空间
(3)在表空间中建立用户libadmin,进行权限的设置,为最高权限
(4)登录libadmin用户,创建libstudent用户,只具有查询的权限
(5)根据4.1中(4)图建立7个表。
五.逻辑结构设计
1.图书(BOOK)的逻辑结构:
2.超期图书(ECEEDTIME):
3.丢失图书(LOSERBOOK):
4.管理员权限表(MSANAGER):
5.预约图书:
6.借阅记录:
7.学生用户:
以上为各种表的逻辑结构。
六.数据库实施
6.1数据库的建立和表空间的建立
直接在oracle数据库OEM企业管理其中直接操作。
界面化操作省略。
6.2数据库用户的建立
(1)//创建libadmin用户:
connsystem/Kyq020520//登录system超级用户
createuserlibadmin
identifiedby123456
defaulttablespaceLIBRARYTEST
grantcreatesession,resourcetolibadmin
grantcreateuser,resourcetolibadmin
(2)//创建libstudent用户
connsystem/Kyq020520//登录libadmin用户
createuserlibstudent
identifiedby123456
defaulttablespaceLIBRARYTEST
grantcreatesession,resourcetolibstudent
(3)部分权限分配
GRANTALTERON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
GRANTDELETEON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
GRANTINDEXON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
GRANTINSERTON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
GRANTREFERENCESON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
GRANTSELECTON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
GRANTUPDATEON"LIBRARYTEST"."BOOK"TO"LIBADMIN"WITHGRANTOPTION
(4)初始数据的插入
给出一个学生表的建立和插入代码:
createtablestudent
(
StuNOintprimarykey,
StuNamevarchar(50),
StuAgeint,
StuSexvarchar(50),
Classvarchar(50),
Departmentvarchar(50),
Telchar(11),
Permittedvarchar(50),
Passwordvarchar(20)
);
insertintostudentvalues(10001,'陈小诗',20,'女','计算机1班','计算机系',2592921,'是','number1');
insertintostudentvalues(10004,'何二',22,'男','计算机1班','计算机系',2568975,'是','number4');
insertintostudentvalues(10006,'宋江',20,'男','计算机2班','计算机系',1234667,'是','number6');
6.3java前端编程
6.3.1数据库连接类DataBase:
packagecom.listen;
importjavax.swing.*;
importjava.sql.*;
publicclassDataBase
{
Connectioncon=null;//声明Connection引用
Statementstat;
ResultSetrs;
intcount;
Stringsql;
publicstaticStringmessage;//声明一个静态成员变量
publicstaticLoginlog;
publicDataBase(Stringuser,StringpassWord){
try{//加载orac的驱动类,并创建数据库连接
con=DriverManager.getConnection("jdbc:
oracle:
thin:
"
+"@127
stat=con.createStatement();//创建Statement对象
}
catch(Exceptione){//如果从Login类传的参数不对,则提示出错
JOptionPane.showMessageDialog(log,"用户IP或端口号错误!
!
!
"+"信息",JOptionPane.INFORMATION_MESSAGE);
}
}
publicvoidselectDb(Stringsql){//声明select方法
try{
rs=stat.executeQuery(sql);
}
catch(Exceptionie){ie.printStackTrace();}
}
publicintupdateDb(Stringsql){//声明update方法
try{
//因为oracle数据库的默认编码方式是gbk,而eclipse的默认编码方式也是gbk,所以不存在转码问题
//sql=newString(sql.getBytes(),"ISO-8859-1");//转码
//sql=newString(sql.getBytes(),"UTF-8");
count=stat.executeUpdate(sql);
}
catch(Exceptionie){ie.printStackTrace();}
returncount;
}
publicvoiddbClose(){//声明close方法
try{con.close();
}
catch(Exceptione){e.printStackTrace();}
}
publicstaticvoidmain(String[]args){
DataBaseapp=newDataBase("libadmin","Kyq020520");
try{
//转化数据类型
Sy
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace()
}
}
}
登陆窗体的界面设计我依然采用的是比较传统的方法,新建一个类BookLoginFrame类,用来显示登录窗体。
在该窗体中需要使用到四类控件,分别是JLabel、JTextFieid、JPasswordField以及JButton。
其中控件JLabel是用来显示顶部的图片以及标签文本;控件JTextFieid用来接收用户名输入信息;控件JPasswordField用来接收密码输入信息;控件JButton用来创建登陆和重置按钮。
定义一个Login类。
设计结果如下:
在主窗体中可以显示其他功能窗体,所以需要在该窗体中加入一个桌面窗体。
通过将其他功能窗体加入到该窗体中。
从而实现多窗体显。
同时在主窗口体中,还需要添加一个main方法,该方法为系统入口的方法,通过执行该方法来执行系统。
这儿给出他的构造函数:
管理面界面操作构造函数:
publicRoot(StringmgNo)
{
this.mgNo=mgNo;//获得管理员ID
mg=newManager(mgNo);//创建管理员管理面板
this.setManager();//设置管理员权限
this.initJp();//初始化卡片布局面板
this.addTreeListener();//为树节点注册事件监听器
for(inti=1;i<9;i++)
{//向根节点添加子节点
dtm.insertNodeInto(dmtn[i],dmtn[0],i-1);
}
jt.setEditable(false);//设置该树中节点是可编辑的
this.add(jsplr);//将包含树的滚动窗口添加进窗体
jsplr.setLeftComponent(jt);//将包含树的滚动窗口添加进左边的子窗口
jp.setBounds(200,50,600,500);//为jp设置大小位置并添加进右边的子窗口
jsplr.setRightComponent(jp);
jsplr.setDividerLocation(200);//设置分隔条的初始位置
jsplr.setDividerSize(4);//设置分隔条的宽度
jlRoot.setFont(newFont("Courier",Font.PLAIN,30));
jlRoot.setHorizontalAlignment(JLabel.CENTER);
jlRoot.setVerticalAlignment(JLabel.CENTER);
//设置窗体的关闭动作,标题,大小,位置及可见性
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Imageimage=newImageIcon("ico.gif").getImage();
this.setIconImage(image);
this.setTitle("图书管理系统");
//设置窗体首次出现的大小和位置--自动居中
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
intcenterX=screenSize.width/4;
intcenterY=screenSize.height/4;
intw=800;//本窗体宽度
inth=600;//本窗体高度
//this.setBounds(centerX,centerY,w,h);
this.setBounds(centerX-w/2,centerY-h/2-100,w,h);//设置窗体出现在屏幕中央
this.setExtendedState(JFrame.MAXIMIZED_BOTH);//窗体全屏
this.setVisible(true);//设置窗体可见
jt.setShowsRootHandles(true);//设置显示根节点的控制图标
}
测试后界面如下:
和管理员界面设计类类似,但是由于学生权限的限制,所以学生用户部分功能不能使用,构造方法也是类似,简单给出构造函数。
publicStudentSystem(){
this.initJp();
jt.addTreeSelectionListener(newTreeSelectionListener(){//用内部类显示树的各选择节点
publicvoidvalueChanged(TreeSelectionEvente){
DefaultMutableTreeNodecdmtn=
(DefaultMutableTreeNode)e.getPath().getLastPathComponent();
NodeValue1cnv=(NodeValue1)cdmtn.getUserObject();
cl.show(jp,"root");//显示主界面
}
cl.show(jp,"ts");//显示"查询图书"界面
}
cl.show(jp,"OrderBook");//显示"预约图书"界面
}
cl.show(jp,"GuaShi");//显示"归还挂失图书"界面
}
inti=JOptionPane.showConfirmDialog(StudentSystem.this,
"是否退出系统","消息",JOptionPane.YES_NO_OPTION);
if(i==JOptionPane.YES_OPTION){System.exit(0);}
}
}
};
for(inti=1;idtm.insertNodeInto(dmtn[i],dmtn[0],i-1);
}
jt.setEditable(false);//设置该树中节点是不可编辑的
this.add(jsplr);//将包含树的滚动窗口添加进窗体
jsplr.setLeftComponent(jt);//将包含树的滚动窗口添加进左边的子窗口
//为jp设置大小位置并添加进右边的子窗口
jp.setBounds(200,50,300,400);jsplr.setRightComponent(jp);
jsplr.setDividerLocation(150);//设置分隔条的初始位置
jsplr.setDividerSize(4);//设置分隔条的宽度
jlRoot.setFont(newFont("Courier",Font.PLAIN,30));
jlRoot.setHorizontalAlignment(JLabel.CENTER);
jlRoot.setVerticalAlignment(JLabel.CENTER);
//设置窗体的关闭动作,标题,大小,位置及可见性
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//对标题和logo图片进行初始化
Imageimage=newImageIcon("ico.gif").getImage();
this.setIconImage(image);
this.setTitle("学生管理系统");
//设置窗体首次出现的大小和位置--自动居中
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
intcenterX=screenSize.width/2;intcenterY=screenSize.height/2;
intw=500;//本窗体宽度inth=400;//本窗体高度
this.setBounds(centerX-w/2,centerY-h/2-100,w,h);//设置窗体出现在屏幕中央
this.setExtendedState(JFrame.MAXIMIZED_BOTH);//窗体全屏
this.setVisible(true);
jt.setShowsRootHandles(true);//设置显示根节点的控制图标
}
运行界面如下:
6.4功能完善
剩下还有10个类,分别实现上述菜单中的功能,在eclipse模块管理器中可以看出大概结构如下:
七.系统测试方案和测试报告
页面测试:
逐个测试每个页面是否可以正确显示,显示页面是否美观,易懂,测试各菜单能否正常运行。
经测试,所有界面均可以正确显示,显示页面比较美观,易懂,各菜单均能正常运行。
功能测试:
对每个菜单下的功能逐一测试,尽最大可能发现潜在的错误。
经测试,每个菜单下的功能均能实现,暂未发现其潜在的错误。
需求测试:
根据需求分析的内容,测试系统是否和当初的设计一样。
经测试,所设计的图书馆管理系统基本满足当初的设计需求。
其他详情见答辩。
八.系统的主要功能和使用说明
8.1功能说明:
(1)有关读者种类标准的制定、种类信息的输入、包括种类编号、种类名称、借书数量、借书期限等。
(2)读者有关信息的修改、查询等。
(3)读者基本信息的输入,包括读者编号、读者姓名、班级、院系等。
(4)读者基本信息的查询、修改
(5)书籍信息的输入,包括书籍编号、书籍名称、书籍所属类别、作者、出版社、出版日期、在库数、价格。
(6)借书信息包括借书证号、书籍编号、借出日期、拖欠日期、罚款种额
(7)图书管理书籍号、管理员编号、销书数量、销书日期。
(8)超级用户可以设置其他管理员,并登记到管理员表中。
(1)学生能登录学生界面。
并实现相应操作。
(2)查询图书的种类,及其各种信息,本系统不支持模糊查询。
(3)预约图书,对丢失的图书进行挂失登记。
8.2使用说明
(1)点击可执行文件。
登录名为“1001”(默认为超级管理员)密码为“1001”。
(2)进入管理系统后即可更改超级管理员密码。
然后设置其他管理员,并授予相应的权限。
(3)以管理员用户登陆能使用以下所有功能:
(1)在管理员处(由管理者自行设置)进行注册登记。
(2)在登录界面输入相应注册账号和密码即可登录。
(3)以学生用户登陆能使用以下所有功能:
8.3图书管理系统数据库安全:
数据库的转储和恢复是系统正式运行后最重要的维护工作之一。
要针对不同的应用要求制定不同的转储计划,以保证一旦发生故障能尽快将数据库恢复到某种一致的状态,并尽可能减少对数据库的破坏。
一周进行使用OEM对数据库进行备份。
各级环境数据库系统主管单位应保证以下安全保护措施的正常执行:
(1)环境数据库系统重要部分的冗余或备份措施。
(2)计算机病毒防治措施。
(3)网络攻击防范、追踪措施。
(4)环境数据库系统运行和用户操作日志记录保存60日以上措施。
(5)记录环境数据库系统用户网络地址的措施。
(6)环境数据库系统身份登记和识别确认措施。
九.系统安装说明
9.1数据库的安装
(1)登陆oracle官网下载oracle11g
(2)安装JDK1.8
(3)数据库管理的安装,并建立“ORCL”数据库实例。
具体内容见模块六
9.2java前端程序的安装
打开给出相应的“图书馆管理系统.jar”文件,即可使用系统。
十.课程设计心得
10.1实验心得
1.人机交互缺乏,对错误的抛出处理不当,考虑到的情况不够全面。
2.对于数据库的连接仅限于本机,无法实现联网工作,所以对于软件的可移植性不够。
虽然用文件的方式操作能够解决这一问题,但是对于数据处理太繁琐。
3.对于系统设计方面的问题,一定要有计划和流程图,不能想一步做一步,最后会导致问题的处理不够全面。
4.应该该有一个良好的编码习惯,类的定义,方法的定义,一定要有一套规则,方便检查调试,使别人能够轻易地看懂。
5.套系统适用于比较小型的图书馆,而且对管理员和学生的要求比较高,需要对系统足够了解之后才能正常使用。
.
10.2总结
整个设计通过了软件和硬件上的调试。
我想这对于自己以后的学习和工作都会有很大的帮助。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在