版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库课程设计实验报告摘要随着人类社会的不断进步,科学技术有了长足的开展,尤其是在当今中国知识经济时代,知识大爆炸带来了全球图书企业的飞速开展,这些书籍为科技的开展做出了巨大的奉献。人类短短的几十年创造了大量的书籍资源,但是图书数量之多,也使得其管理起来非常的繁琐,随着信息时代的到来,图书的信息化管理使得问题得以解决,图书馆管理系统的出现就显得水到渠成了。本系统主要上可以分为两大模块:图书馆管理员模块和读者登录模块,并在这两大模块下分成多个子模块。图书的使用对象是借阅者,例如学生,教师,管理员;而管理者同时也是图书馆的管理者。因此根据这些信息,本系统的主要功能就是:实现图书馆图书信息的管理和维护,如用户信息管理,管理员信息管理,图书浏览,书架管理信息,图书馆规那么维护,新书入库,整理图书,修改图书信息和进行查询等;以及系统的图书信息查询,图书的借出和归还等功能图书信息管理系统能够为用户提供充足的信息和快捷的查询手段.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、本钱低等。目录:第一章:需求分析1,学生用户端2,教师用户端第二章:总体设计1,系统分析2,可行性分析3,系统目标4,系统功能设计5,构建开发环境第三章:数据库设计1,数据库分析2,工程E-R图3,数据库表的设计第四章:程序模块设计1,用户登录模块2,数据库操纵框架3,登录界面实现4,管理端界面的设计5,查询图书界面模块6,借阅预约图书功能模块7,归还挂失图书功能8,图书超期处理模块9,学生用户管理模块10,,管理员管理模块11,超级管理员功能开发第五章:主要模块界面第六章:程序源代码第七章:参考文献1,需求分析当决定要开发一个信息系统时,首先要对信息系统的需求进行分析,需求分析要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节,定义软件的其他有效性需求。抽象出当前系统的逻辑模型。在理解当前系统“怎么做〞的根底上,抽取其“做什么〞的本质,从而从当前系统的物理模型抽象出当前系统的逻辑模型。在物理模型中有许多物理因素,随着分析工作的深入,有些非本质的物理因素就成为不必要的负担,因而需要对物理模型进行分析,区分出本质的物理因素就成为不必要的负担,因而需要对物理模型进行分析,区分出本质的和非本质的困素,去掉那些非本质的困素即可获得反映系统本质的逻辑模型。管理员登录过程:当管理员在登录页面输入正确的用户名和密码后,通过客户端和效劳器的双重校验,并且检测数据库中的对应的用户名和密码是否正确,如果是正确的,那么表示管理员登录成功并进入管理员操作页面学生用户端:查询图书,学生用户可以进行简单的查询和高级查询,预约图书,当要借的的书不在馆时,可以提前预约。挂失图书,图书丧失要挂失,可以在学生用户端实现。管理员端:学生用户管理,实现学生用户信息的修改,删减,添加,查询。图书管理,包括对图书的增加,删减,查询等。管理员管理:操作者包括超级管理员和普通管理员,超级管理员可以对普通管理员进行删减,查询等操作,而普通管理员只有修改自己密码的权限。借阅管理:主要是学生借阅管理,归还图书和缴纳罚款的管理。2,总体设计系统不但要满足客户提出的要求,同时也要考虑其性能。因此,在工程开发之前,首先要进行需求分析和可行性研究,这就是进行工程开发的根底。利用MVC设计模式,模块间实现高内聚,低耦合。界面设计美观大方,操作简单。功能完善,结构清晰。能够快速的进行图书馆信息,图书馆参数,书架,管理员等信息等系统的设置。能够快速、准确的进行读者类型管理的相关功能,如读者类型增加、修改、删除。能够快速、准确的进行读者档案管理的相关功能,如读者档案的详细信息的查看,读者档案的增加、修改、查询。能够快速、准确的进行图书类型管理的相关功能,如图书类型的增加、修改、删除。能够快速、准确的进行图书档案管理的相关功能,如图书档案的详细信息的查看,图书档案的增加、修改、删除。能够快速、准确的进行图书借阅的相关功能,如图书借阅,图书借阅查询,图书归还,图书续借等。能够快速准确的进行系统的相关功能查询,如图书借阅查询、图书到期查询、图书档案查询等。能够快速、准确的进行管理员的相关功能,如管理员的增加、修改管理员密码、删除管理员。能够快速、准确的进行管理员或者读者的登录。能够快速、准确的让读者进行读者功能模块的浏览。3,可行性研究可行性分析是对工程的可行程度进行分析,以便管理层对资金以及技术的投入进行决策,包括技术可行性,经济可行性,营运可行性。对于本工程而言,图书是人类获取知识最重要的途径,随着读者的日益增加,对图书的管理要求也增大很多,从图书馆的需求以及现有的技术等方面研究该图书管理系统的可行性。当前该图书馆的管理比拟粗放,还有大局部需要手工操作,对信息的维护不仅费用高而且工作量大,而且信息的平安性很难得到保障,学校支出了适量的资金进行本系统的开发。使用本系统后大局部工作将实现自动化,图书馆只需花费很少的人力和物力进行系统的维护即可。根据上述分析,公司为此工程结构清晰,功能合理,而且使用JAVASE技术能够进行开发,并实现客户的需求的全部功能,由于这是一个中小型系统,客户要求的开发时间完全充裕,利润与开发本钱也比拟高,这可在一定程度上提高了公司的效益,因此决定开发此工程。系统功能结构本系统包括学生端和管理员端,有借阅图书,预约图书,查询图书,挂失图书,超期交纳罚款等功能模块,结构如下:3,数据库设计数据库作为系统的根底,首先要保证其设计的合理性,在使用应用系统的时候,拥有设计合理的数据库往往可以起到事半功倍的效果,在系统的维护,功能拓展时,这一优点尤其得到很好的表达。系统包含的实体主要有:图书、学生、管理员等,下面将分别介绍各实体及实体间的E-R图。通过其E-R图读者可以更好地理解各实体的属性关系。下面就以学生实体为例,来进行介绍,学生E-R图如下图管理员管理员E-R图数据库表的设计主要有学生信息表和管理员信息表还有图书信息表为例字段名称数据类型字段大小是否主键是否为空说明STUNOIntN/A是否学号StuNameVarchar50否是姓名StuAgeIntN/A否是年龄StuSexVarchar50否是性别ClassVarchar50否是班级DepartmentVarchar50否是院系TelChar11否是PermittedVarchar50否是借阅许可PasswordVarchar20否是密码学生用户信息表字段名称数据类型字段大小是否主键是否为空说明mgNoIntN/A是否管理员IDPermittedVarchar50否否管理员权限PasswordVarchar50否否管理员密码管理员信息表字段名称数据类型字段大小是否主键是否为空说明BookNo是否图书IDBookName否是图书名称Auther否是图书作者Publishment否是出版社ButTime否是购进日期Borrowed否是是否借阅Ordered否是是否预约图书根本信息表字段名称数据类型字段大小是否主键是否为空说明BookNointN/A是否书号STUNOvarchar50否否学号BorrorTimevarchar50否是借阅时间ReturnTimevarchar50否是归还时间Borrowedvarchar50否是是否借阅Orderedvarchar50否是是否预约借阅图书信息字段名称数据类型字段大小是否主键是否为空说明StuNOIntN/a是否学号BookNOIntN/A否是书号BookNameVarchar50否是书名DelayTimevarchar50否是超期天数超期图书信息表字段名称数据类型字段大小是否主键是否为空说明BookNOIntN/A是否书号StuNamevarchar50否是学生姓名Classvarchar50否是班级BookNamevarchar50否是书名StuNOIntN/A否是学生IDAuthervarchar50否是作者预约图书表如上字段名称数据类型字段大小是否主键是否为空说明LBNOIntN/A是否挂失书号BookNOIntN/A否是书号BookNameVarchar50否是书名StuNOintN/A否是学生ID第四章:程序模块设计用户登录模块设计用户登录界面的主要功能是验证登录者的身份和权限,只有学生用户或管理员才能登录与之对应的管理系统。在登录界面,通过对各项登录条件的验证,就可以确认用户的使用权限。下面将介绍登陆模块的具体开发。登录界面开发界面构造器的实现管理员登录模块需要对管理员登录是输入的用户名和密码进行检验,当管理员输入用户名和密码后,系统需要对输入的参数与数据库中的所存储的参数进行比照,当用户名和密码相对应且都正确时能能够成功登录到管理员的操作首页Login.jsp是管理员的登录界面,主要功能是将管理员输入的用户名和密码提交到manager.action进行处理而且能够进行简单的客户端校验。Manager.action是对用户提交的用户名和密码进行效劳器端的校验。当用户提交了数据后,manager.action将调用managerdao中的check〔〕检测用户提交的数据是否匹配数据库中的数据,各代码如下所示Login.jsp代码如下:packagewyf.hxl;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.table.*;importjavax.swing.event.*;importjava.sql.*;importjava.util.*;importjava.util.Date;publicclassLoginextendsJFrameimplementsActionListener{privateJPaneljp=newJPanel();//创立JPanel对象privateJLabel[]jlArray={//创立标签组newJLabel("用户IP"),newJLabel("端口号"),newJLabel("用户名"),newJLabel("密码"),newJLabel("")};privateJButton[]jbArray={//创立按钮数组newJButton("学生登录"),newJButton("清空"),newJButton("管理员登录")};privateJTextField[]jtxtArray={//创立文本框newJTextField("localhost"),newJTextField("3306"),newJTextField("10001")};privateJPasswordFieldjpassword=newJPasswordField("");//创立密码框Stringsql;DataBasedb;publicLogin(){jp.setLayout(null);//设置JPanel的布局管理器for(inti=0;i<4;i++){//对标签与按钮控件循环处理jlArray[i].setBounds(30,20+i*50,80,25);//设置标签与按钮的大小和位置jp.add(jlArray[i]);//将标签和按钮添加进JPanel容器中}for(inti=0;i<3;i++){//设置按钮的大小位置并为其添加事件监听器jbArray[i].setBounds(10+i*120,230,100,25);jp.add(jbArray[i]);jbArray[i].addActionListener(this);}for(inti=0;i<3;i++){//设置文本框的大小位置并为其添加事件监听器jtxtArray[i].setBounds(80,20+50*i,180,25);jp.add(jtxtArray[i]);jtxtArray[i].addActionListener(this);}jpassword.setBounds(80,170,180,25);//设置密码框的大小位置jp.add(jpassword);//将密码框添加进JPanel容器jpassword.setEchoChar('*');//设置密码框的回显字符jpassword.addActionListener(this);//为密码框注册监听器jlArray[4].setBounds(10,280,300,25);//设置用于显示登录状态的标签的大小位置jp.add(jlArray[4]);//将标签添加进JPanel容器this.add(jp);Imageimage=newImageIcon("ico.gif").getImage();//对logo图片进行初始化this.setIconImage(image);//设置窗体的大小位置及可见性this.setTitle("登录");this.setResizable(false);this.setBounds(100,100,400,350);this.setVisible(true);}//实现ActionListener接口中的方法publicvoidactionPerformed(ActionEvente){//事件源为文本框Stringmgno=jtxtArray[2].getText().trim();StringmgIP=jtxtArray[0].getText().trim();Stringport=jtxtArray[1].getText().trim();Stringmessage=mgIP+":"+port;DataBase.message=message;//将本方法椎谋淞孔魑问持蹈鳧ataBase方法的私有变量DataBase.log=this;if(e.getSource()==jtxtArray[0]){jtxtArray[1].requestFocus();//切换输入焦点到密码框}if(e.getSource()==jtxtArray[1]){jtxtArray[2].requestFocus();//切换输入焦点到密码框}if(e.getSource()==jtxtArray[2]) {jpassword.requestFocus();//切换输入焦点到密码框}elseif(e.getSource()==jbArray[1]){//事件源为清空按钮//清空所有信息jlArray[4].setText("");jtxtArray[2].setText("");jpassword.setText("");//将输入焦点设置到文本框jtxtArray[2].requestFocus();}elseif(e.getSource()==jbArray[2]){//事件源为管理员登录按钮//判断用户名和密码是否匹配if(!mgno.matches("\\d+")){//如果用户名格式输入有误JOptionPane.showMessageDialog(this,"用户名格式错误!!!","信息",JOptionPane.INFORMATION_MESSAGE);return;}if(jtxtArray[0].getText().trim().equals("")){//如果"用户IP"文本框为空,提示JOptionPane.showMessageDialog(this,"用户IP不能为空!!!","信息",JOptionPane.INFORMATION_MESSAGE);return;}if(jtxtArray[1].getText().trim().equals("")){//如果"端口号"文本框为空,提示JOptionPane.showMessageDialog(this,"用户端口号不能为空!!!","信息",JOptionPane.INFORMATION_MESSAGE);return;}sql="selectmgNo,passwordfrommanagerwheremgNo="+Integer.parseInt(mgno);db=newDataBase();db.selectDb(sql);//以上三行是对用户名和密码进行查询,验证身份try{StringmgNo="";Stringpassword="";while(db.rs.next()){//取出结果集中数据并赋值mgNo=db.rs.getString(1).trim();password=db.rs.getString(2).trim();}if(jtxtArray[2].getText().trim().equals(mgNo)&&String.valueOf(jpassword.getPassword()).equals(password)){//登录成功jlArray[4].setText("恭喜您,登录成功!!!");newRoot(mgNo);this.dispose();}else{//登录失败jlArray[4].setText("对不起,登录失败!!!");}}catch(Exceptione1){e1.printStackTrace();}db.dbClose();//关闭数据库链接}elseif(e.getSource()==jbArray[0]){//事件源为学生登录按钮if(!jtxtArray[2].getText().trim().matches("\\d+")){//假设学号格式错误,输出提示对话框JOptionPane.showMessageDialog(this,"输入有误,学号只能为数字!!!","消息",JOptionPane.INFORMATION_MESSAGE);return;}if(jtxtArray[0].getText().trim().equals("")){//假设"用户IP"文本框输入为空,提示JOptionPane.showMessageDialog(this,"用户IP不能为空!!!","信息",JOptionPane.INFORMATION_MESSAGE);return;}if(jtxtArray[1].getText().trim().equals("")){//假设"端口号"文本框输入为空,提示JOptionPane.showMessageDialog(this,"用户端口号不能为空!!!","信息",JOptionPane.INFORMATION_MESSAGE);return;}//查询学号文本中所输学号是否存在于STUDENT表中sql="selectStuNO,PasswordfromSTUDENTwhereStuNO="+Integer.parseInt(jtxtArray[2].getText().trim());db=newDataBase();db.selectDb(sql);try{if(!(db.rs.next())){//假设学号错误,输出提示对话框JOptionPane.showMessageDialog(this,"输入了错误的学号!!","消息",JOptionPane.INFORMATION_MESSAGE);}else{//得到输入学号的学生的姓名和班级StringstuNO=db.rs.getString(1).trim(),password=db.rs.getString(2).trim();if(jtxtArray[2].getText().trim().equals(stuNO)&&String.valueOf(jpassword.getPassword()).equals(password)){//登录成功jlArray[4].setText("恭喜您,登录成功!!!");newStudentSystem();this.dispose();}else{//登录失败jlArray[4].setText("对不起,登录失败!!!");}}}catch(Exceptionex){ex.printStackTrace();}db.dbClose();//关闭数据库链接}}publicstaticvoidmain(String[]args){newLogin();}}登录失败:登录成功:学生端登录成功数据库操作类框架publicclassDataBase{Connectioncon=null;//声明Connection引用Statementstat;ResultSetrs;intcount;publicstaticStringmessage;//声明一个静态成员变量publicstaticLoginlog;publicDataBase(){try{//加载MySQL的驱动类,并创立数据库连接Class.forName("org.gjt.mm.mysql.Driver");//con=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root",null);con=DriverManager.getConnection("jdbc:mysql://"+message+"/test?useUnicode=true&characterEncoding=GBK","root","zhanghai");stat=con.createStatement();//创立Statement对象}catch(Exceptione){//如果从Login类传的参数不对,那么提示出错JOptionPane.showMessageDialog(log,"用户IP或端口号错误!!!","信息",JOptionPane.INFORMATION_MESSAGE);}}publicvoidselectDb(Stringsql){//声明select方法try{//sql=newString(sql.getBytes(),"ISO-8859-1");rs=stat.executeQuery(sql);}catch(Exceptionie){ie.printStackTrace();}}publicintupdateDb(Stringsql){//声明update方法try{sql=newString(sql);//转码count=stat.executeUpdate(sql);}catch(Exceptionie){ie.printStackTrace();}returncount;}publicvoiddbClose(){//声明close方法try{con.close();}catch(Exceptione){e.printStackTrace();}}42,}这段代码主要实现了加载MYSQL的JDBC驱动。并且创立了数据库连接和STATEMENT对象3,管理端界面的实现模块管理端界面的实现,窗体左边是一个树状列表控件,右边是一个卡片布局的面板,实现代码如下:packagewyf.hxl;importjava.awt.*;importjava.awt.event.*;importjavax.swing.event.*;importjavax.swing.*;importjavax.swing.tree.*;importjava.io.*;publicclassRootextendsJFrame{//创立节点数组DefaultMutableTreeNode[]dmtn={newDefaultMutableTreeNode(newNodeValue("图书馆管理系统")),newDefaultMutableTreeNode(newNodeValue("学生用户管理")),newDefaultMutableTreeNode(newNodeValue("图书管理")),newDefaultMutableTreeNode(newNodeValue("查询图书")),newDefaultMutableTreeNode(newNodeValue("借阅预约图书")),newDefaultMutableTreeNode(newNodeValue("归还挂失图书")),newDefaultMutableTreeNode(newNodeValue("交纳罚款")),newDefaultMutableTreeNode(newNodeValue("管理员管理")),newDefaultMutableTreeNode(newNodeValue("退出"))};DefaultTreeModeldtm=newDefaultTreeModel(dmtn[0]);//创立树模型,指定根节点为"学生管理系统"JTreejt=newJTree(dtm);//创立包含dtm树模型的JTree对象JScrollPanejsp=newJScrollPane(jt);//为JTree创立滚动窗体privateJSplitPanejsplr=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,true);//创立分割窗体对象privateJPaneljp=newJPanel();//创立JPanel对象Imageimage=newImageIcon("tsgl.jpg").getImage();ImageIconii=newImageIcon(image);privateJLabeljlRoot=newJLabel(ii);privateManagermg;//登陆管理员名StringmgNo;//管理员IDCardLayoutcl=newCardLayout();//获取卡片布局管理器引用publicRoot(StringmgNo){this.mgNo=mgNo;//获得管理员IDmg=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/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);//设置显示根节点的控制图标}publicvoidsetManager(){Stringsql="selectpermittedfrommanagerwheremgNo='"+mgNo+"'";DataBasedb=newDataBase();//创立数据库类对象db.selectDb(sql);//执行查询try{db.rs.next();//结果集游标下移Stringstr=db.rs.getString(1).trim();//得到管理员权限if(str.equals("0")){mg.setFlag(false);//设置管理员权限}}catch(Exceptione){e.printStackTrace();}}publicvoidinitJp(){jp.setLayout(cl);//设置布局管理器为卡片布局jp.add(jlRoot,"root");//添加根结点显示信息jp.add(newStudent(),"stu");//添加学生管理模块界面jp.add(newBookManage(),"bm");//添加图书管理模块界面jp.add(newSearchBook(),"sb");//添加查找图书管理界面jp.add(newBorrowBook(),"bb");//添加借阅预约图书模块界面jp.add(newReturnBook(),"rb");//添加归还挂失图书界面jp.add(this.mg,"Manager");//添加管理员管理模块界面jp.add(newExceedTime(),"et");//添加罚款处理界面}publicvoidaddTreeListener(){jt.addTreeSelectionListener(newTreeSelectionListener(){publicvoidvalueChanged(TreeSelectionEvente){DefaultMutableTreeNodecdmtn=//得到选中的节点对象(DefaultMutableTreeNode)e.getPath().getLastPathComponent();NodeValuecnv=(NodeValue)cdmtn.getUserObject();//得到自定义节点对象if(cnv.value.equals("图书馆管理系统")){//显示根结点信息cl.show(jp,"root");}if(cnv.value.equals("学生用户管理")){//显示学生用户管理界面cl.show(jp,"stu");}elseif(cnv.value.equals("图书管理")){//显示图书管理界面cl.show(jp,"bm");}if(cnv.value.equals("查询图书")){//显示查询图书界面cl.show(jp,"sb");}elseif(cnv.value.equals("借阅预约图书")){//显示借阅预约图书界面cl.show(jp,"bb");}elseif(cnv.value.equals("归还挂失图书")){//显示归还挂失图书界面cl.show(jp,"rb");}elseif(cnv.value.equals("交纳罚款")){//显示缴纳罚款界面cl.show(jp,"et");}elseif(cnv.value.equals("管理员管理")){//显示管理员管理界面cl.show(jp,"Manager");}elseif(cnv.value.equals("退出")){//显示退出界面inti=JOptionPane.showConfirmDialog(Root.this,"是否退出系统?","消息",JOptionPane.YES_NO_OPTION);if(i==JOptionPane.YES_OPTION){//退出系统System.exit(0);}}}});}publicstaticvoidmain(Stringargs[]){newRoot("wyf");}}classNodeValue{Stringvalue;//自定义节点对象字符属性publicNodeValue(Stringvalue){//构造器this.value=value;}publicStringgetValue(){//value的Get方法returnthis.value;}@OverridepublicStringtoString(){//重写toString方法returnvalue;}}3,查询图书功能实现模块当学生用户在学生信息系统中,单击‘查询图书’节点时,就会进入查询图书界面,页面开发的详细代码如下:packagewyf.hxl;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.table.*;importjavax.swing.event.*;importjava.sql.*;importjava.util.*;importjava.util.Date;publicclassSearchBookextendsJPanelimplementsActionListener{intflag;Stringsql;DataBasedb;//创立分割方向为上下的JSplitePane对象privateJSplitPanejsp=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true);privateJPaneljpt=newJPanel();//创立JPanel对象privateJPaneljpb=newJPanel();//创立表示下拉列表框数据模型的字符串数组privateString[]str={"书名","出版社","作者","购置时间"};privateJComboBoxjcb=newJComboBox(str);//创立下拉列表框privateJButtonjb=newJButton("提交"); //创立按钮privateJLabel[]jlArray=newJLabel[]{newJLabel("书名"),newJLabel("作者"),newJLabel("出版社")};privateJTextField[]jtxtArray=newJTextField[]{//创立文本框newJTextField(),newJTextField(),newJTextField(),newJTextField()};privateJRadioButton[]jrbArray={//创立单项选择按钮newJRadioButton("简单查询",true),newJRadioButton("高级查询")};privateButtonGroupbg=newButtonGroup();//创立按钮组Vector<String>head=newVector<String>();{//定义表头head.add("书号");head.add("书名");head.add("作者");head.add("出版社");head.add("购进时间");head.add("是否借阅");head.add("是否预约");}Vector<Vector>data=newVector<Vector>();//定义检索出的书的根本信息DefaultTableModeldtm=newDefaultTableModel(data,head); //创立表格模型JTablejt=newJTable(dtm);//创立Jtable对象JScrollPanejspn=newJScrollPane(jt);//将JTable封装到滚动窗格publicSearchBook(){this.setLayout(newGridLayout(1,1));//设置查询图书界面为网格布局//设置整个RetrunBook界面上下局部均为空布局管理器jpt.setLayout(null);jpb.setLayout(null);//设置单项选择框的大小、位置,并添加事件监听器jpt.add(jcb);jcb.setBounds(160,20,150,20);jcb.addActionListener(this);//添加JButton设置其大小位置并添加事件监听器jpt.add(jb);jb.setBounds(560,20,120,20);jb.addActionListener(this);for(inti=0;i<2;i++){//对单项选择按钮进行设置jrbArray[i].setBounds(20,20+i*40,100,20);jpt.add(jrbArray[i]);jrbArray[i].addActionListener(this);bg.add(jrbArray[i]);}for(inti=0;i<3;i++){//设置标签和文本框的坐标,并将其添加进JPaneljlArray[i].setBounds(120+i*200,60,80,20);jtxtArray[i].setBounds(200+i*180,60,120,20);jpt.add(jtxtArray[i]);jpt.add(jlArray[i]);}for(inti=0;i<3;i++){//设置文本框为不可用jtxtArray[i].setEditable(false);}//设置文本框的坐标,并添加进jptjtxtArray[3].setBounds(350,20,120,20);jpt.add(jtxtArray[3]);jsp.setTopComponent(jpt);//把jpt设置到jsp的上部窗格jsp.setBottomComponent(jspn);jsp.setDividerSize(4);this.add(jsp);jsp.setDividerLocation(100);//设置jsp中分割条的初始位置//设置窗体的大小位置及可见性this.setBounds(3,10,600,400);this.setVisible(true);}//为事件加载的监听器加上处理事件publicvoidactionPerformed(ActionEvente){if(jrbArray[0].isSelected()){//"简单查询"单项选择按钮被选中jtxtArray[3].setEditable(true);for(inti=0;i<jtxtArray.length-1;i++){//设置文本框为不可编辑jtxtArray[i].setEditable(false);}if(jcb.getSelectedIndex()>=0&&jcb.getSelectedIndex()<4){jtxtArray[3].requestFocus();if(e.getSource()==jb){//如果事件源为"提交"按钮,那么执行检索Stringstr=jtxtArray[3].getText().trim();if(str.equals("")){JOptionPane.showMessageDialog(this,"请输入必要的信息!!!","消息",JOptionPane.INFORMATION_MESSAGE);return;}if(jcb.getSelectedIndex()==0){//根据书名进行查询sql="select*fromBOOKwhereBookName='"+str+"'";jtxtArray[3].setText("");}elseif(jcb.getSelectedIndex()==1){//根据出版社进行查询sql="select*fromBOOKwherePublishment='"+str+"'";jtxtArray[3].setText("");}elseif(jcb.getSelectedIndex()==2){//根据作者进行查询sql="select*fromBOOKwhereAuthor='"+str+"'";jtxtArray[3].setText("");}else{//根据购进时间进行查询sql="select*fromBOOKwhereBuyTime='"+str+"'";jtxtArray[3].setText("");}db=newDataBase();;try{//进行转码sql=newString(sql);}catch(Exceptionae){ae.printStackTrace();}db.selectDb(sql);//从表中检索成功后,把查到的书的所有信息显示在界面下局部的表中Vector<Vector>vtemp=newVector<Vector>();try{intflag=0;while(db.rs.next()){//取到结果集flag++;Vector<String>v=newVector<String>();for(inti=1;i<=7;i++){//将每列添加到临时数组vStringstr1=db.rs.getString(i);str1=newString(str);//转码v.add(str1);}vtemp.add(v);//将各条记录添加到临时数组vtemp}if(flag==0){//查询失败,提示JOptionPane.showMessageDialog(this,"没有您要查找的内容!!!","消息",JOptionPane.INFORMATION_MESSAGE);return;}}catch(Exceptionea){ea.printStackTrace();}dtm.setDataVector(vtemp,head); //更新tablejt.updateUI();jt.repaint();db.dbClose();}}}if(jrbArray[1].isSelected()){//"高级查询"单项选择按钮被选中jtxtArray[0].requestFocus();//获得输入焦点jtxtArray[3].setEditable(false);for(inti=0;i<jtxtArray.length-1;i++){//将高级查询所涉及的文本框设为可编辑jtxtArray[i].setEditable(true);}if(e.getSource()==jb){//点击"提交"按钮intbz=this.seniorSearch();if(bz!=0){return;}db=newDataBase();db.selectDb(sql);//从表中检索成功后,把查到的书的所有信息显示在界面下局部的表中Vector<Vector>vtemp=newVector<Vector>();try{intflag=0;while(db.rs.next()){//取到结果集flag++;Vector<String>v=newVector<String>();for(inti=1;i<=7;i++){//将每列添加到临时数组vStringstr=db.rs.getString(i);str=newString(str.getBytes("ISO-8859-1"),"gb2312");v.add(str);}vtemp.add(v);//将各条记录添加到临时数组vtemp}if(flag==0){//查询失败,那么弹出提示对话框JOptionPane.showMessageDialog(this,"没有您要查找的内容!!!","消息",JOptionPane.INFORMATION_MESSAGE);return;}}catch(Exceptionea){ea.printStackTrace();}dtm.setDataVector(vtemp,head);//更新tablejt.updateUI();jt.repaint();db.dbClose();}}}publicintseniorSearch(){intflag=0;//设置标志位Stringstr0=jtxtArray[0].getText().trim();Stringstr1=jtxtArray[1].getText().trim();Stringstr2=jtxtArray[2].getText().trim();if(str0.equals("")&&str1.equals("")&&str2.equals("")){//文本框输入为空JOptionPane.showMessageDialog(this,"请输入必要的信息!!!","消息",JOptionPane.INFORMATION_MESSAGE);flag++;}if(((!str0.equals(""))&&(str1.equals(""))&&(str2.equals("")))||((str0.equals(""))&&(!str1.equals(""))&&(str2.equals("")))||((str0.equals(""))&&(str1.equals(""))&&(!str2.equals("")))){JOptionPane.showMessageDialog(this,"请使用简单查询!!!","消息",JOptionPane.INFORMATION_MESSAGE);flag++;}if((!str0.equals(""))&&(!str1.equals(""))&&(str2.equals(""))){//书名和作者组合sql="select*fromBOOKwhereBookName='"+str0+"'andAuthor='"+str1+"'";jtxtArray[0].setText("");jtxtArray[1].setText("");}if((!str0.equals(""))&&(str1.equals(""))&&(!str2.equals(""))){//书名和出版社组合sql="select*fromBookwhereBookName='"+str0+"'andPublishment='"+str2+"'";jtxtArray[0].setText("");jtxtArray[2].setText("");}if((str0.equals(""))&&(!str1.equals(""))&&(!str2.equals(""))){//作者与出版社组合sql="select*fromBookwhereAuthor='"+str1+"'andPublishment='"+str2+"'";jtxtArray[1].setText("");jtxtArray[2].setText("");}if((!str0.equals(""))&&(!str1.equals(""))&&(!str2.equals(""))){//三者组合sql="select*fromBookwhereBookName='"+str0+"'andPublishment='"+str2+"'andAuthor='"+str1+"'";jtxtArray[0].setText("");jtxtArray[1].setText("");jtxtArray[2].setText("");}returnflag;}}界面如下:〔2〕高级查询实现:if(jrbArray[1].isSelected()){//"高级查询"单项选择按钮被选中jtxtArray[0].requestFocus();//获得输入焦点jtxtArray[3].setEditable(false);for(inti=0;i<jtxtArray.length-1;i++){//将高级查询所涉及的文本框设为可编辑jtxtArray[i].setEditable(true);}if(e.getSource()==jb){//点击"提交"按钮intbz=this.seniorSearch();if(bz!=0){return;}db=newDataBase();db.selectDb(sql);//从表中检索成功后,把查到的书的所有信息显示在界面下局部的表中Vector<Vector>vtemp=newVector<Vector>();try{intflag=0;while(db.rs.next()){//取到结果集flag++;Vector<String>v=newVector<String>();for(inti=1;i<=7;i++){//将每列添加到临时数组vStringstr=db.rs.getString(i);str=newString(str.getBytes("ISO-8859-1"),"gb2312");v.add(str);}vtemp.add(v);//将各条记录添加到临时数组vtemp}if(flag==0){//查询失败,那么弹出提示对话框JOptionPane.showMessageDialog(this,"没有您要查找的内容!!!","消息",JOptionPane.INFORMATION_MESSAGE);return;}}catch(Exceptionea){ea.printStackTrace();}dtm.setDataVector(vtemp,head);//更新tablejt.updateUI();jt.repaint();db.dbClose();}4,借阅与预约图书功能模块:代码如下:publicclassBorrowBookextendsJPanelimplementsActionListener{//创立分割方向为上下的JSplitePane对象privateJSplitPanejsp1=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true);privateJPaneljp2=newJPanel();//创立按钮数组intflag;Stringsql;DataBasedb;privateJButtonjb2=newJButton("确定");privateJLabeljl3=newJLabel("您要借阅或预约的书号");privateJLabeljl4=newJLabel("请输入您的学号");//在jsp1添加文本框privateJTextFieldjtxt3=newJTextField();privateJTextFieldjtxt4=newJTextField();//在jp2设置单项选择框privateJRadioButton[]jrbArray={newJRadioButton("借阅图书",true),newJRadioButton("预约图书")};privateButtonGroupbg=newButtonGroup();Vector<String>head=newVector<String>(); //创立标题{head.add("书号");head.add("书名");head.add("作者");head.add("出版社");head.add("是否借阅");head.add("是否预约");}Vector<Vector>data=newVector<Vector>();//表格数据向量集合DefaultTableModeldtm=newDefaultTableModel(data,head);//创立表格模型JTablejt=newJTable(dtm);//创立Jtable对象JScrollPanejspn=newJScrollPane(jt);//将JTable放进滚动窗体publicBorrowBook(){this.setLayout(newGridLayout(1,1));//把jsp2设置到jsp1的上部窗格jsp1.setTopComponent(jp2);//设置jsp1的下部窗格jsp1.setBottomComponent(jspn);//设置jsp1,jsp2中分割条的初始位置jsp1.setDividerLocation(100);//设置分割控件位置jsp1.setDividerSize(4);//设置分割控件宽度jp2.setLayout(null);jb2.setBounds(380,20,100,20);//设置按钮的大小与位置//将按钮添加进JPaneljp2.add(jb2);jb2.addActionListener(this);//设置JLabel的坐标jl3.setBounds(80,60,130,20);jl4.setBounds(330,60,100,20);//把JLabel添加进JPaneljp2.add(jl3);jp2.add(jl4);jtxt3.setBounds(220,60,100,20);jtxt4.setBounds(430,60,100,20);jp2.add(jtxt3);jp2.add(jtxt4);for(inti=0;i<2;i++){jrbArray[i].setBounds(70+i*150,20,150,20);jp2.add(jrbArray[i]);bg.add(jrbArray[i]);}this.add(jsp1);//设置窗体的标题,大小位置及可见性this.setBounds(10,10,800,600);this.setVisible(true);}//为事件加载的监听器加上处理事件publicvoidactionPerformed(ActionEvente){if(e.getSource()==jb2){if(jtxt4.getText().equals("")){//为输入为空的情况进行处理JOptionPane.showMessageDialog(this,"输入不能为空,请重新输入!!!","信息",JOptionPane.INFORMATION_MESSAGE);return;}//查询学号文本中所输学号是否存在于STUDENT表中sql="select*fromSTUDENTwhereStuNO="+Integer.parseInt(jtxt4.getText().trim());db=newDataBase();db.selectDb(sql);Vector<Vector>vtemp=newVector<Vector>();try{if(!(db.rs.next())){//假设学号错误,输出提示对话框JOptionPane.showMessageDialog(this,"输入了错误的学号","消息",JOptionPane.INFORMATION_MESSAGE);}else{//得到输入学号的学生的姓名和班级StringstuName=db.rs.getString(2).trim();Stringclasses=db.rs.getString(5).trim();stuName=newString(stuName.getBytes("ISO-8859-1"),"gb2312");classes=newString(classes.getBytes("ISO-8859-1"),"gb2312");//假设学号正确,那么检查该学生是否有权限借书或预约if(db.rs.getString(8).trim().equals("否")){//假设无权限那么输出提示对话框JOptionPane.showMessageDialog(this,"您无此权限!!","消息",JOptionPane.INFORMATION_MESSAGE);}else{//假设有权限,那么查找所输入的书号是否存在于Book表中sql="select*fromBookwhereBookNO="+Integer.parseInt(jtxt3.getText().trim());db.selectDb(sql);do{//str6存Book表中记录中第6项,str7存第7项Stringstr6=null;Stringstr7=null;//定义输入书号所对应书的书名和作者StringbookName=null;Stringauthor=null;if(!(db.rs.next())){//假设Book表中没有该书号,那么输出提示对话框JOptionPane.showMessageDialog(this, "没有您要查找的内容","消息",JOptionPane.INFORMATION_MESSAGE);}Vector<String>v=newVector<String>();for(inti=1;i<=7;i++){//顺序到达所搜到的结果中的各项记录if(i==5){//str6=db.rs.getString(i+1);str6=newString(str6.getBytes("ISO-8859-1"),"gb2312");v.add(str6);}if(i==6){//str7=db.rs.getString(i+1);str7=newString(str7.getBytes("ISO-8859-1"),"gb2312");v.add(str7);}if(i==2){//bookName=db.rs.getString(i).trim();bookName=newString(bookName.getBytes("ISO-8859-1"),"gb2312");v.add(bookName);}if(i==3){//author=db.rs.getString(i).trim();author=newString(author.getBytes("ISO-8859-1"),"gb2312");v.add(author);}if(i==1){//Stringstr=db.rs.getString(i).trim();str=newString(str.getBytes("ISO-8859-1"),"gb2312");v.add(str);}if(i==4){//Stringstr=db.rs.getString(i).trim();str=newString(str.getBytes("ISO-8859-1"),"gb2312");v.add(str);}}vtemp.add(v);//更新结果框中的内容dtm.setDataVector(vtemp,head);jt.updateUI();jt.repaint();if(jrbArray[0].isSelected()){//选择了借图书if(str6.trim().equals("是")){//用户想借的书已经被借走,输出提示信息框JOptionPane.showMessageDialog(this,"此书已经被借","消息",JOptionPane.INFORMATION_MESSAGE);}elseif(str7.trim().equals("是")){//用户想借的书已被约不能借,提示JOptionPane.showMessageDialog(this,"此书已经被预约,不能再借","消息",JOptionPane.INFORMATION_MESSAGE);}else{//创立日期对象,以获得当前日期来记录借书时间和应还时间-Datenow=newDate();sql="updateBOOKsetBorrowed='是'whereBookNO="+Integer.parseInt(jtxt3.getText().trim());db.updateDb(sql);//成功,那么设置该书的Borrowed项为"是",输出借书成功信息框JOptionPane.showMessageDialog(this,"借书成功","消息",JOptionPane.INFORMATION_MESSAGE);sql="insertintoRECORDvalues("+Integer.parseInt(jtxt3.getText().trim())+","+Integer.parseInt(jtxt4.getText().trim())+",'"+(now.getYear()+1900)+"."+(now.getMonth()+1)+"."+now.getDate()+"',"+"'"+(now.getYear()+1900)+"."+(now.getMonth()+2)+"."+now.getDate()+"','否','否')";db.updateDb(sql);//将该书记录插入Record表中}}if(jrbArray[1].isSelected()){//选择了预约图书if(str7.trim().equals("是")){ //该书已经被预约,输出提示信息框JOptionPane.showMessageDialog(this,"此书已经被预约","消息",JOptionPane.INFORMATION_MESSAGE);}else{//预约成功,设置预约项Ordered为是,表示该书已经被预约sql="updateBOOKsetOrdered='是'whereBookNO="+Integer.parseInt(jtxt3.getText().trim());db.updateDb(sql);//输出预约成功信息框JOptionPane.showMessageDialog(this,"预约成功","消息",JOptionPane.INFORMATION_MESSAGE);sql="insertintoORDERREPORTvalues("+Integer.parseInt(jtxt3.getText().trim())+",'"+stuName+"','"+classes+"','"+bookName+"',"+Integer.parseInt(jtxt4.getText().trim())+",'"+author+"')";db.updateDb(sql);}}}while(db.rs.next());}}}catch(Exceptionex){ex.printStackTrace();}db.dbClose();//关闭数据库链接}}}5,归还挂失图书模块:代码:packagewyf.hxl;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.table.*;importjavax.swing.event.*;importjava.sql.*;importjava.util.*;importjava.util.Date;pub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 证人作证保证函
- 货架交易购销合同
- 货物采购合同收益
- 购车销售合同范本
- 购销合同更改补充协议书
- 购销合同的要素
- 购销合同贷款所需材料
- 贷款买房合同的权益保障
- 赴台保证书共筑友谊之路
- 软件市场营销与推广开发合同
- 2024年宁夏农垦集团招聘工作人员4名(高频重点提升专题训练)共500题附带答案详解
- 统编版2024年新教材七年级上册道德与法治9.1《增强安全意识》教案
- 陕煤集团笔试题库及答案
- 阿勒泰的地理风光与风土人情
- 2024版二次供水设备维保合同
- 《重庆物流发展状况》课件
- 《精细化管理》课件
- DB36- 1149-2019 工业废水铊污染物排放标准
- 田野调查的技术与理论智慧树知到期末考试答案章节答案2024年南开大学
- 2024北京市燃气集团限责任公司校园招聘100人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 开心六年级上册 Unit 4 Keeping Clean 单元测试 含听力书面材料及答案 1
评论
0/150
提交评论