Java语言课程设计报告.docx
- 文档编号:3583225
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:24
- 大小:689.09KB
Java语言课程设计报告.docx
《Java语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《Java语言课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
Java语言课程设计报告
摘要
随着电子信息时代的飞速发展,Internet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息自动化的作用也越趋重要。
更大的自动化软件可以使我们从繁杂的事务中获得轻松,提高了我们的工作效率。
图书管理系统更加人性化操作是我们一直以来都追求的,良好的人机界面给管理人员还有使用的学生带来便利,同时也可以让借阅者更好的了解到自己的需求,这样就有理于学生的学习,还有管理人员的管理工作。
本系统将会涉及到图书馆日常管理工作的基本常见细节,诸如新图书的入库登记,图书的查询,图书的预定、退还手续的登记,费旧图书的清理撤除等,本系统所要实现的这些功能基本上涵盖了图书馆的日常管理工作,基本能够满足校园图书馆的工作人员的管理需要;同时还有读者系统个人信息查询,借阅情况查询,修改密码,方便了借阅者的借书需求;同时还人性化的提供了游客查询系统。
在对本系统的具体开发过程当中,将采用Java语言进行开发,以Access实现后台数据库,本系统是完全基于Swing图形化用户界面的单机版本。
【关键字】人性化游客查询图形化用户界面
目录
一课程设计的内容2
(一)课程设计主要内容2
(二)设计要求2
二设计方案2
(一)数据流图2
(二)总体设计2
(三)个体设计4
(1)各个模块的介绍4
(2)流程图
(3)代码实现15
三结果及数据分析
四结论15
五问题与讨论16
六参考文献16
一课程设计的内容
(1)课程设计主要内容
自学Swing图形界面设计和数据库程序设计。
开发用于某学校的图书馆管理系统。
该系统要求实现面向管理员的图书管理功能和面向读者的图书及个人信息查询。
具体包括以下功能模块:
借阅管理、图书管理、借阅证管理、图书查询和读者信息查询。
(2)设计要求
要求实现面向管理员的图书管理功能和面向读者的图书及个人信息查询。
具体包括以下功能模块:
借阅管理、图书管理、借阅证管理、图书查询和读者信息查询,可根据实际情况增加功能模块。
所写报告要表达清楚,让老师明白你做了哪些工作,掌握了哪些知识。
你所做的课程设计有何特点和优点。
二设计方案
(1)数据流图
数据库流图
(2)总体设计
系统设计的总体任务是实现图书信息管理的系统化,规范化和自动化。
要求实现的功能有1.图书信息的输入,包括图书书名、作者、出版社、出版日期、数量及定价等。
2.图书信息的查询,包括根据用户的要求实现利用图书信息的查询。
3图书信息的修改,要求能包括根据用户的要求实现利用图书信息的修改等
首先,考虑到由于操作人员的计算机知识可能较差,要求有良好的人机界面,所以决定使用图形界面。
利用图形界面,提供一个更加友好的方式。
用户就不会面对黑乎乎的命令行界面,可以利用鼠标来实现图书信息的修改删除,这样的系统就可以降低对用户的要求,通过将系统的各种功能封装,只是提供给用户一个简单的按钮,用户通过简单的利用鼠标点击按钮,就可以实现各种复杂的操作,这样就可以,提高系统的可用性。
当然复杂的实现过程对用户来说是不可以见的。
其次,考虑到使用图形界面的方式,当有很多数据时,就有必要使用数据库来保存数据了,使用数据库可以很好的利用数据库的海量存储功能,保存信息更加的方便。
理由之二是由于本系统管理的对象图书,都是学生,且每个数据内容具有较强的关联性,涉及的过程不是很复杂。
因此,比较适合于采用数据库管理。
理由之三是因为当对数据进行各种修改操作时,使用数据库可以更加方便的保存用户的各种修改操作。
理由之四是将数据库与图形界面向结合能提供一个更加友好的界面。
最后一点,是在进行图书信息的插入,修改,删除时,要求能显示执行结果,成功或者失败,在操作失败时要求能提供失败信息,主要是通过判断执行语句的返回值是否为真。
为真说明执行成功,为假则说明操作失败,这时系统会打印堆栈信息,同时提示用户操作失败。
如果操作成功要求能自动刷新,将最新结果显示出来,这主要是通过refresh的事件监听实现的,当操作成功时,重新执行查询操作,查询数据库中最新的结果。
并显示出来,以上是基本思路。
(三)个体设计
(1)各个模块的介绍
1.登陆界面
打开程序后可以看到有两个可供选择的按钮,分别为“登陆”、“图书检索”,其分别实现的功能是以学生/管理员身份登陆图书馆,对图书馆系统进行各项操作;另外一个则是以游客身份查询图书,不需要登陆就可以查询图书,方便了在图书馆的查询以及防止个人信息的泄漏。
2.游客查询界面
以游客身份进入图书管理系统,这个功能主要是在图书馆内部查询机使用的,这样的一个功能可以不需要进行登录操作,就可以进行查询操作,方便借阅者查询图书还有保护个人信息。
这个功能的实现其实是跟登录后对图书进行查询是完全一样的,只是界面有点不同,且少了一些操作。
classConsultinformationsFrameextendsJFrame
{
privateJPanelcontentPane;
privateFlowLayoutmyLayout=newFlowLayout();//构造XYLayout布局管理器
//创建显示信息使用的组件
privateJLabellabel1=newJLabel("书名:
");
privateJTextFieldnoField=newJTextField(8);
privateJButtonaddRecordButton=newJButton("搜索");
privateJButtonbackdButton=newJButton("退出");
Vectorvector;
Stringtitle[]={"书名","作者","出版社","出版日期","单价","可借数量"};//表头
Connectionconnect=null;//声明Connection接口对象connect
ResultSetrSet=null;//定义数据库查询的结果集
Statementstat=null;//定义查询数据库的Statement对象
AbstractTableModeltm;//声明一个AbstractTableModel类对象tm
publicConsultinformationsFrame()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try{
jbInit();
}catch(Exceptione)
{
e.printStackTrace();
}}
privatevoidjbInit()throwsException{
contentPane=(JPanel)this.getContentPane();//初始化组件
contentPane.setLayout(myLayout);//设置容器的布局管理对象
setSize(newDimension(1020,600));//设置容器窗口的大小
setTitle("学生信息管理系统");
addRecordButton.addActionListener(newjava.awt.event.ActionListener()
{//注册按钮事件监听对象,实现ActionListener接口的actionPerformed方法
publicvoidactionPerformed(ActionEvente)
{queryByNoButton_actionPerformed(e);}});
backdButton.addActionListener(newjava.awt.event.ActionListener()
{//注册按钮事件监听对象,实现ActionListener接口的actionPerformed方法
publicvoidactionPerformed(ActionEvente)
{backButton_actionPerformed(e);}});
createTable();//在初始化函数中调用createtable()函数显示表格
contentPane.add(label1);
contentPane.add(noField);
contentPane.add(addRecordButton);
contentPane.add(backdButton);}
voidcreateTable(){
JTabletable;
JScrollPanescroll;
vector=newVector();
tm=newAbstractTableModel()
{publicintgetColumnCount()
{returntitle.length;}
publicintgetRowCount()
{returnvector.size();}
publicObjectgetValueAt(introw,intcolumn)
{if(!
vector.isEmpty())
return((Vector)vector.elementAt(row)).elementAt(column);
elsereturnnull;}
publicvoidsetValueAt(Objectvalue,introw,intcolumn{}
publicStringgetColumnName(intcolumn)
{returntitle[column];}
publicClassgetColumnClass(intc)
{returngetValueAt(0,c).getClass();}
publicbooleanisCellEditable(introw,intcolumn)
{returnfalse;}};
table=newJTable(tm);//生成数据表
table.setToolTipText("DisplayQueryResult");//设置帮助提示
table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);//设置表格调整尺寸模式
table.setCellSelectionEnabled(false);//设置单元格选择方式
table.setShowHorizontalLines(true);//设置是否显示单元格之间的分割线
table.setShowVerticalLines(true);
scroll=newJScrollPane(table);//给表格加上滚动杠
scroll.setPreferredSize(newDimension(1000,450));
contentPane.add(scroll);}
protectedvoidprocessWindowEvent(WindowEvente)
{super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING)
{System.exit(0);}}
voidqueryByNoButton_actionPerformed(ActionEvente){
Propertiesprop=newProperties();
prop.put("charSet","gb2312");
Stringsql;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//实例化JDBC-ODBC桥的驱动
Stringurl="jdbc:
odbc:
book1";//设置连接字符串
connect=DriverManager.getConnection(url,prop);//连接数据库stat=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
if(noField.getText().isEmpty())
sql="select*frominformation";
else
sql="select*frominformationwhere[name]='"+noField.getText()+"'";
rSet=stat.executeQuery(sql);
if(rSet.next()==false)
{JOptionPane.showMessageDialog(ConsultinformationsFrame.this,"数据库中没有您查询的书籍!
","书籍查询",1);}
else{vector.removeAllElements();
tm.fireTableStructureChanged();
rSet.previous();
while(rSet.next()){
Vectorrec_vector=newVector();
rec_vector.addElement(newString(rSet.getBytes
(1),"gbk"));
rec_vector.addElement(newString(rSet.getBytes
(2),"gbk"));
rec_vector.addElement(newString(rSet.getBytes(3),"gbk"));
rec_vector.addElement(newString(rSet.getBytes(4),"gbk"));
rec_vector.addElement(newString(rSet.getBytes(5),"gbk"));
rec_vector.addElement(rSet.getInt(6)+"");
vector.addElement(rec_vector);//向量rec_vector加入向量vector中
}}}
catch(SQLExceptionex){
System.out.println("/nSQL操作异常/n");
while(ex!
=null){
System.out.println("异常信息:
"+ex.getMessage());
System.out.println("SQL状态:
"+ex.getSQLState());
ex=ex.getNextException();
}}
catch(Exceptionex){
ex.printStackTrace();}
finally
{try{if(stat!
=null)
stat.close();
if(connect!
=null)
connect.close();
}catch(SQLExceptionex){
System.out.println("/nSQL操作异常/n");
System.out.println("异常信息:
"+ex.getMessage());
System.out.println("SQL状态:
"+ex.getSQLState());
}}}
voidbackButton_actionPerformed(ActionEvente)
{this.dispose();
MainJFramem=newMainJFrame();
m.setLocation(300,200);
m.setVisible(true);
}}
这部分的代码基本是参考课本的,然后进行主要项目进行修改,数据库的桥连、调用、显示、读取在这里代码给出,后面其他部分调用、使用部分就不重复出现了,在图书查询方面,这个程序做得还是有很大的缺陷的,但是由于时间关系,关键字查询功能不够好,在查询的时候需要完全输入才能查询到数据,如果要进行更进一步的修进的话,可以设置多关键字查询,如作者、图书分类、出版社等进行图书的更好筛选,这样就能更好的让读者可以查询借阅到自己需要的书籍。
3.学生界面
登陆界面后选择学生身份登陆,会调用到学生的账号密码的数据库,调用数据库进行匹配,若匹配成功则进入学生界面,学生界面如上图,具有查询个人信息、个人借阅情况、修改密码、图书查询与预约。
个人信息与借阅情况的代码基本是相似的,程序中我们把个人信息与借阅情况都存放在数据库内,通过把登陆时输入的账号赋给Vectorvector=newVector();
再进行传递,就能实现对数据在数据库的筛选,再通过settext()显示出来。
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
PrivateJFrameP=newPrivateJFrame();
P.setLocation(300,200);
P.setVisible(true);}
修改密码部分,在写程序的时候遇到的困难是在修改一个密码的时候会整一列的数据全部都修改了,没有进行匹配就全部修改掉,后来知道是没有对其匹配,PrivateconsultP=null;然后只对P的数据进行修改就不会出现同样的问题P.setVisible(true)。
学生查询预订部分,查询的功能跟游客查询的完全一样的,区别在于这里多了一个预约的选项,窗口截图如下:
privatevoidjButton4ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
PrivateconsultP=null;
try{P=newPrivateconsult();}
catch(ParseExceptionex)
{Logger.getLogger(StudentJFrame.class.getName()).log(Level.SEVERE,null,ex);}
P.setLocation(300,200);
P.setVisible(true);
this.dispose();
}
为了简化程序的难度,在这里的操作只是把预约的书直接当借了处理,更好的名字应该是叫借书,同时这部分也存在一点错误就是对于一些数量为1的书,但是数量大于1的书就预约不了,不知道在哪里出了错误。
4.管理员界面
1.修改密码
修改密码部分跟学生的操作是一样的,加入的操作是可以对其他管理员的密码进行修改。
但是同样问题还是出现了,如果正常去想的话,输入的账号是本来存在的,你修改密码并不会出现什么错误,但是我突然想到既然账号可以填写,我填一个数据库内没有的试试,结果问题真的来了。
我输入一个不存在的账号,密码好像是默认跟登录账号一样的,确定后,提示修改成功,但我有到数据库查找,发现没有增加这个记录项,所以这是一个Bug,不修改好的话,这个图书管理系统可能会被破坏的可能性,问题到打印前还是没有解决,代码如下:
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
NewpasswordN=newNewpassword();
N.setLocation(300,200);
N.setVisible(true);
}
privatevoidjButton3ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
NewAdminN=newNewAdmin();
N.setLocation(300,200);
N.setVisible(true);
}
2.书籍管理
这部分还是有用到前面的图书查询模块,这里增加的功能是管理功能,包括了图书的添加、删除、修改。
其中有两个操作不知道问题出在哪里,做添加还有修改的操作是时候会出现这个提示/nSQL操作异常/n异常信息:
[Microsoft][ODBCMicrosoftAccessDriver]INSERTINTO语句的语法错误。
但是引用基本一样的代码的学生管理模块,这两项就完全没有错误,两个模块的代码只是修改了应该修改的专属部分,但是却一个可以运行,另外一个却出现了问题,现在也是一筹莫展。
publicInformationbook()
{informationbookFrameframe=newinformationbookFrame();
if(packOk)frame.pack();
elseframe.validate();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=frame.getSize();
if(frameSize.height>screenSize.height)
frameSize.height=screenSize.height-100;
if(frameSize.width>screenSize.width)
frameSize.width=screenSize.width;frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
frame.setVisible(true);}
publicstaticvoidmain(String[]args){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
catch(Exceptione)
{e.printStackTrace();}newInformationbook();}}
classinformationbookFrameextendsJFrame{
privateJPanelcontentPane;
privateFlowLayoutmyLayout=newFlowLayout();//构造XYLayout布局管
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)