图书信息管理系统 JAVA课程设计.docx
《图书信息管理系统 JAVA课程设计.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统 JAVA课程设计.docx(14页珍藏版)》请在冰点文库上搜索。
图书信息管理系统JAVA课程设计
软件学院
课程设计报告书
课程名称Java面向对象程序设计
设计题目图书信息管理系统
专业班级
学号
姓名
指导教师
2011年6月
1设计时间
第16周(2011年6月6日-2011年6月10日)
2设计目的
目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。
3设计任务
在指导教师同意的情况下,学生根据所给的题目,也可自行选择题目设计。
基本要求:
•设计工作量为完成一个中小型规模的软件和1份软件设计报告书
•设计必须根据进度计划按期完成
4设计内容
4.1需求分析
4.1.1问题描述
设计一个图书信息管理程序
4.1.2基本要求
要求如下:
(1)使用图形用户界面
(2)图书信息包括:
书ISBN号、书名、作者、出版时间、出版社,其余可自行丰富。
(3)用数据库建立1或2个图书信息表。
(不限使用哪种数据库)
(4)能连接数据库并实现查询、增、删、改等功能。
4.2总体设计
4.2.1访问数据库
1配置ODBC数据源
2加载JDBC驱动程序Class.forName(“DriverName”);其中,DriverName是要加载的JDBC驱动程序名称,该名称可以根据数据库供应商提供的JDBC驱动程序的种类来确定。
3创建数据库的连接创建于指定数据库的连接,需要使用DriverManager类的getConnection()方法。
如果成功与数据库建立了连接,则返加一个Connection对象。
否则Java应用程序将会抛出一个SQLException异常。
使用该方法的语法格式如下所示:
Connectioncon=DriverManager.getConnection(URL,user,password);其中,参数URL是一个字符串,它表示要连接的数据库,即数据库的具体位置。
JDBCURL的语法和结构如下:
Jdbc:
<子协议名>:
<子名称>其中jdbc作为协议是固定不变的,<子协议名>是使用的驱动程序名称,子名称可以根据子协议的改变而变化。
4.2.2程序模块
importjava.sql.*;
publicclassDatabaseextendsFrame
{TextAreataInfo=newTextArea();
Database()
{super("数据库连接");
setSize(200,150);
this.getContentPane().add(taInfo);
}
publicvoidconnecion()
{try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundExceptionex){taInfo.setText(ex.getMessage());
System.exit(-1);}
try{StringURL="jdbc:
odbc:
管理";
Connectioncon=DriverManager.getConnection(URL);
if(!
con.isClosed()){taInfo.setText("数据库连接成功");}
else{taInfo.setText("数据库连接失败");}
con.close();
}
catch(SQLExceptionex){taInfo.setText(ex.getMessage());}
}
4.3详细设计
4.3.1添加控制面板
contentPane=(JPanel)this.getContentPane();
contentPane.setLayout(null);
panel1=newPanel();//创建一个面板
//panel1.setBackground(BLACK);
panel1.setBounds(0,0,380,160);
panel1.setLayout(null);
panel1.setEnabled(false);
contentPane.add(panel1);//添加面板
4.3.2添加标签
L1=newLabel("ISBM:
");
L1.setBounds(20,40,50,25);
panel1.add(L1);
L2=newLabel("bookname:
");
L2.setBounds(20,70,50,25);
panel1.add(L2);
L3=newLabel("auther:
");
L3.setBounds(20,100,50,25);
panel1.add(L3);
L4=newLabel("price:
");
L4.setBounds(20,130,50,25);
panel1.add(L4);
T1=newTextField();
T1.setBounds(70,40,300,25);
T1.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente){
T1_actionPerformed(e);
}
});
panel1.add(T1);
T2=newTextField();
T2.setBounds(70,70,300,25);
T2.addActionListener(newmyActionListener());
panel1.add(T2);
T3=newTextField();
T3.setBounds(70,100,300,25);
T3.addActionListener(newmyActionListener());
panel1.add(T3);
T4=newTextField();
T4.setBounds(70,130,300,25);
T4.addActionListener(newmyActionListener());
panel1.add(T4);
4.3.3添加按钮
B1=newButton("第一条");
B1.setBounds(newRectangle(30,180,65,20));
B1.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B1_mouseClicked(e);
}
});
contentPane.add(B1);
B2=newButton("上一条");
B2.setBounds(newRectangle(100,180,65,20));
B2.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B2_mouseClicked(e);
}
});
contentPane.add(B2);
B3=newButton("下一条");
B3.setBounds(newRectangle(170,180,65,20));
B3.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B3_mouseClicked(e);
}
});
contentPane.add(B3);
B4=newButton("最末条");
B4.setBounds(newRectangle(240,180,65,20));
B4.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B4_mouseClicked(e);
}
});
contentPane.add(B4);
B5=newButton("新增");
B5.setBounds(newRectangle(30,210,65,20));
B5.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B5_mouseClicked(e);
}
});
contentPane.add(B5);
B6=newButton("修改");
B6.setBounds(100,210,65,20);
B6.setEnabled(false);//因为这些功能暂时没有写。
contentPane.add(B6);
B7=newButton("删除");
B7.setBounds(170,210,65,20);
B7.setEnabled(false);
contentPane.add(B7);
B8=newButton("查询");
B8.setBounds(240,210,65,20);
B8.setEnabled(false);
contentPane.add(B8);
B9=newButton("确定");
B9.setBounds(310,180,65,20);
B9.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B9_mouseClicked(e);
}
});
contentPane.add(B9);
B10=newButton("离开");
B10.setBounds(310,210,65,20);
B10.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
B10_mouseClicked(e);
}
});
contentPane.add(B10);
this.setBounds(200,100,415,280);
this.setTitle("新增");
this.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
this.setVisible(true);
4.3.4加载JDBCdriver、连接数据库、送SELECT语句、返回结果集
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载数据库驱动程序;
ConnObj=DriverManager.getConnection("jdbc:
odbc:
myBook");//连接ODBC设置的myBook数据源;
SQLStatement=ConnObj.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//其后由此Statement对象执行SQL指令时,返回的会是可卷动且制度的ResultSet对象
RS=SQLStatement.executeQuery("SELECT*FROMBookData");
//执行SELECT语句,会返回一个结果集
//查询myBook数据源的BOOKDATA数据表全部字段的记录
//必须先向下移到第一条;next(),因为一开始是指到第一条之前;
if(RS.next())
{
//RS内至少有一条记录才会返回true,有一条记录才能读取这条记录个字段的数据;
T1.setText(RS.getString("ISBN"));
T2.setText(RS.getString("BookName"));
T3.setText(RS.getString("Author"));
T4.setText(String.valueOf(RS.getInt("Price")));
//前三个字段都是文字,最后一个是长整数;
}
else
JOptionPane.showMessageDialog(this,"myBook数据库内无任何数据");
}catch(Exceptionecp)
{
JOptionPane.showMessageDialog(this,ecp.getMessage());
}
}//publicj03160301()end
4.3.5检验
protectedvoidT1_actionPerformed(ActionEvente){
//新增时先检验该条是否已经存在
if(T1.getText().trim().equals(""))
return;
StringnewISBN=T1.getText().trim();
if(newISBN.length()>13)
{
JOptionPane.showMessageDialog(T1,"ISBN字段最大长度为13");
return;
}
try
{
RS=SQLStatement.executeQuery(
"SELECT*FROMBookDataWHEREISBN='"+newISBN+"'");
if(RS.next())
{
T1.setText(RS.getString("ISBN"));
T2.setText(RS.getString("BookName"));
T3.setText(RS.getString("Author"));
T4.setText(String.valueOf(RS.getInt("Price")));
JOptionPane.showMessageDialog(T1,"此笔数据已存在");
}
else{//不得再更改新的一条ISBN
panel1.setEnabled(true);
T1.setText(newISBN);
T1.setEditable(true);
T2.setEnabled(true);
T3.setEnabled(true);
T4.setEnabled(true);
B9.setEnabled(true);
T2.requestFocus();
}
}catch(SQLExceptiono){System.out.println(o.getMessage());}
}
4.3.6按钮
voidB1_mouseClicked(MouseEvente)
{
try
{
RS.first();//movetothefirstitem
T1.setText(RS.getString("ISBN"));
T2.setText(RS.getString("BookName"));
T3.setText(RS.getString("Author"));
T4.setText(String.valueOf(RS.getInt("Price")));
}catch(SQLExceptionecp){}
}//B1_mouseClicked(MouseEvente)end;
4.3.7控制画面操作过程
panel1.setEnabled(true);
T1.setEnabled(true);
T2.setEnabled(true);
T3.setEnabled(true);
T4.setEnabled(true);
B1.setEnabled(true);
B2.setEnabled(true);
B3.setEnabled(true);
B4.setEnabled(true);
B5.setEnabled(true);
B9.setEnabled(false);
B10.setEnabled(false);
4.4测试
5总结与展望
经过了一周的课程设计,现在终于有了一点的心得,原本以为我对java还是比较的了解的,所以一向以为java的课程设计应该不会觉得很难,可是事实并不是我所想的那样,如果老师不给我们框架的话,我想就算给我两个月的时间我也不可能做的出来.
通过对java的课程设计,我了解并发现了很多调试程序的方法,而且懂得了如何处理错误的方法。
对java语言以及java的使用得到了进一步的提高。
针对书本知识得到了进一步的巩固,具体化就是加深了我对java数据库连接的理解等。
对程序的深层理解,清楚程序中每一步的功能,在程序的运行中是十分重要的。
在今后的学习中我要注意这方面,使得我的编程能力能有进一步的提高。
在这个过程中,我要综合考虑系统功能,分析如何使得系统结构清晰、合理、简单和易于调试,如何使得抽象数据类型的实现尽可能做到数据封装,如何让基本操作的规格说明尽可能明确具体。
我深知详细设计的结果是对数据结构和基本操作作出进一步的求精。
本次的课程设计,我了解到做什么事情都要坚持到底,在做本次课程设计的时候我也曾遇到过大大小小的各种困难,但是,不管是什么困难我都挺过来了,我的不放弃精神,终于让我获得了丰富的成果。
在本次的课程设计中,为了写出程序,我查阅了大量的资料,了解到了更多额外的知识,使我的阅历更加丰富,经验值也不断的增长了。
不仅对我的学习提供了帮助,而且在意志力方面也得到了锻炼。
这次实践让我深刻的感受到,软件开发是集体智慧的结晶,要想做出一个好的程序,一定要有团队精神。
其次,无论干什么都要亲自去实践,积累经验,理论和实践相结合,才能成功。
参考文献
[1]Java程序设计实践教程/刘万军等编著.——北京:
清华大学出版社,2006.9ISBN7-302-13465-0
成绩评定
成绩教师签字