软 件 学 院
课程设计报告
课程名称 面向对象程序设计
设计题目 图书信息管理
专业班级
学 号
姓 名
指导教师
2010 年 12 月
目 录
1 设计时间……………………………………………………1
2 设计目的……………………………………………………1
3 设计任务……………………………………………………1
4 设计内容……………………………………………………1
4.1概要设计………………………………………………1
4.1.1 体系结构设计……………………………………1
4.1.2 数据库设计……………………………………….2
4.2自定义类及接口说明…………………………………2
4.2.1登录模块…………………………………………2
4.2.2 图书查询模块……………………………………………3
4.2.3 图书删除模块…………………………………………3
4.2.4 图书更改模块…………………………………………3
4.2.5图书入库模块……………………………………………4
4.2.6图书显示模块…………………………………………4
4.3 程序源码及运行与调试……………………………… …4
4.3.1 程序源码………………………………………………4
4.3.2 运行界面………………………………………………13
4.3.3 错误调试………………………………………………14
5
与展望……………………………………… ……………16
参考文献………………………………………… ………………17
1 设计时间
2010年12月20日—2010年12月31日
2 设计目的
《面向对象程序设计课程设计》的教学目的是培养学生软件系统开发
综合设计能力和创新精神。在教师的启发和引导下,学生能自主地进行科技文献检索,进行方案设计、编写代码、调试程序,对方案进行综合分析与评述等。
3设计任务
(1)使用图形用户界面实现。
(2)该应用程序面向的使用者是图书管理员。
(3)图书信息包括:书ISBN号、书名、作者、出版时间、出版社,其余可自行丰富。
(4)用数据库建立1或2个图书信息
(不限使用哪种数据库)。
(5)能连接数据库并实现对相关信息的录入、查询、修改、删除等功能,相关界面要用GUI完成。查询要求按书号或书名查询;修改、删除图书信息必须输入书号,然后对书名、作者、出版社等进行修改,或对该条记录进行删除。
(6)系统使用的GUI组件不得少于5种,越全面越好,但要合适(和谐界面)。
4 设计内容
4.1 概要设计
4.1.1 体系结构设计
1 程序分析与说明
图书入库的实现:该模块输入图书的各种信息,如果录入成功则出现对话框,显示录入成功。
图书查询的实现:该模块以输入图书号来查询图书信息,图书信息包括图书名、图书号、作者、出版社和出版时间.
图书删除的实现:该模块以图书名来进行删除。首先,输入图书名,点击删除,如果
删除成功则出现对话框,显示删除成功。
图书更改的实现:该模块以输入图书号来进行更改。首先,输入图书数据库中已有的
图书名,然后输入要更改的信息,点击更新则更改。
图书显示的实现:该模块显示数据库中所有的图书的信息。
2 系统功能结构图
图书管理
身份验证
图书入库
显示
图书更改
图书查询
图书删除
管理模块
登录模块
图4-1
4.1.2 数据库设计
表4-1 tushu1
列名
数据类型
长度
允许空
Isbn
char
40
√
Shuming
char
40
√
zuozhe
char
16
√
Cbtime
char
20
√
cbshe
char
40
√
表4-2 huiyuan
列名
数据类型
长度
允许空
id
char
8
ps
char
8
4.2自定义类及接口说明
4.2.1登录模块
(1)类名:Deng
(2)父类:JFrame
(3)作用:用户的身份验证
(4)主要成员变量:
JButton jb,jb1; //定义各按钮
JTextField jtf; //定义文本行
JPasswordField ps; //定义密码输入文本行
JLabel jl,jl1,jl2 //定义各个标签
(5)主要成员方法:
public Deng() //初始化各部件定义和事件监听设置显示窗口的布局
4.2.2 图书查询模块
(1)类名:MySQLChaxun
(2)父类:JFrame
(3)作用:查询图书信息
(4)主要成员变量:
JTextField jtf; //定义文本行
JLabel jl; //定义标签
JTextArea jta; //定义文本区
JButton jb,jb1 //定义各个按钮
(5)主要成员方法:
MySQLChaxun() //初始化各部件定义和事件监听设置显示窗口的布局
4.2.3 图书删除模块
(1)类名:MySQLDel
(2)父类:JFrame
(3)作用:删除图书信息
(4)主要成员变量:
JTextField jtf; //定义文本行
JLabel jl; //定义标签
JButton jb,jb1 //定义各个按钮
(5)主要成员方法:
MySQLChaDel() //初始化各部件定义和事件监听设置显示窗口的布局
4.2.4 图书更改模块
(1)类名:MySQLGeng
(2)父类:JFrame
(3)作用:更改图书信息
(4)主要成员变量:
JTextField jtf1, jtf2, jtf3, jtf4,jtf0; //定义各个文本行
JLabel jl1, jl2, jl3, jl4, jl0; //定义各个标签
JButton jb,jb1; //定义各个按钮
(5)主要成员方法:
MySQLChaGeng() //初始化各部件定义和事件监听设置显示窗口的布局
4.2.5图书入库模块
(1)类名:MySQLInsert
(2)父类:JFrame
(3)作用:添加新的图书信息
(4)主要成员变量:
JTextField jtf1, jtf2, jtf3, jtf4,jtf0; //定义各个文本行
JLabel jl1, jl2, jl3, jl4, jl0; //定义各个标签
JButton jb,jb1; //定义各个按钮
(5)主要成员方法:
MySQLInsert () //初始化各部件定义和事件监听设置显示窗口的布局
4.2.6图书显示模块
(1)类名:MySQCha
(2)父类:JFrame
(3)作用:显示图书信息
(4)主要成员变量:
JTextArea jta; //定义文本区
JButton jb,jb1; //定义各个按钮
(5)主要成员方法:
MySQLCha () //初始化各部件定义和事件监听设置显示窗口的布局
..
4.3 程序源码及运行与调试
4.3.1 程序源码
1登录
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class Deng extends JFrame {
JButton jb;
JTextField jtf;
JPasswordField ps;
JLabel jl,jl1,jl2;
static Statement st;
static{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tushu";
String user = "sa";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
st=conn.createStatement();
}
catch (Exception e) {}
}
public Deng(){
jtf=new JTextField(8);
ps=new JPasswordField(8);
jb=new JButton("确定");
jb.addActionListener(new Mysql());
jl=new JLabel("登录名称");
jl1=new JLabel("用户密码");
jl2=new JLabel("欢迎登录图书管理系统 ");
Container container =getContentPane();
JPanel p = new JPanel();
JPanel jp = new JPanel();
jp.add(jl2);
jp.setVisible(true);
p.add(jp);
jp = new JPanel();
jp.add(jl);
jp.add(jtf);
p.add(jp);
jp = new JPanel();
jp.add(jl1);
jp.add(ps);
jp.setVisible(true);
p.add(jp);
jp = new JPanel();
jp.add(new JLabel(" "));
jp.add(jb);
jp.add(new JLabel(" "));
jp.add(new JLabel(" "));
jp.setVisible(true);
p.add(jp);
container.add(p);
setTitle(" 登陆窗口");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 250);
setLocation(350,350);
setVisible(true);
}class Mysql implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
String str1 = jtf.getText().trim();
String str2 = ps.getText().trim();
String s="use tushu select * from huiyuan";
ResultSet rs=st.executeQuery(s);//获得结果集
while(rs.next()){
if(rs.getString(1).equals (str1)&&
rs.getString(2).equals(str2))
{
dispose();
b ms=new b();
break;
}
}
rs.close();}
catch (Exception ee) {}
}
}
public static void main (String args[]){
new Deng();}
}
2管理
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class b extends JFrame{
b(){
JPanel p=new JPanel();
JPanel jp=new JPanel();
jb1=new JButton("查询");
jb2=new JButton("显示");
jb3=new JButton("删除");
jb4=new JButton("更新");
jb5=new JButton("添加");
jp.setLayout(new FlowLayout());
jb1.addActionListener(new b1());
jb2.addActionListener(new b2());
jb3.addActionListener(new b3());
jb4.addActionListener(new b4());
jb5.addActionListener(new b5());
Container container =getContentPane();
jp.add(new JLabel(" "));
jp.add(jb1 );
jp.add(new JLabel("查询需要的图书信息 "));
jp.setVisible(true);
p.add(jp);
jp=new JPanel();
jp.add(new JLabel(" "));
jp.add(jb2 );
jp.add(new JLabel("获得所有图书信息"));
jp.setVisible(true);
p.add(jp);
jp=new JPanel();
jp.add(jb3 );
jp.add(new JLabel("删除图书信息"));
jp.setVisible(true);
p.add(jp);
jp=new JPanel();
jp.add(jb4 );
jp.add(new JLabel("修改图书信息"));
jp.setVisible(true);
p.add(jp);
jp=new JPanel();
jp.add(jb5 );
jp.add(new JLabel("添加图书信息"));
jp.setVisible(true);
p.add(jp);
container.add(p );
this.setTitle("图书管理系统");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 250);
this.setLocation(350,350);
this.setVisible(true);}
JButton jb1,jb2,jb3,jb4,jb5;
class b1 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb1){
dispose();
MySQLChaxun s1=new MySQLChaxun();
}
}
}
class b2 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb2){
dispose();
MySQLCha s2=new MySQLCha();
}
}
}
class b3 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb3){
dispose()
MySQLDel s3=new MySQLDel();
}
}
}
class b4 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb4){
dispose();
MySQLGeng s4=new MySQLGeng();
}
}
}
class b5 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb5){
dispose();
MySQLInsert s5=new MySQLInsert();
}
}
}
}
class x{
public static void main (String args[]){
new b();
}
}
3 图书入库
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class MySQLInsert extends JFrame{
JTextField jtf1, jtf2, jtf3, jtf4,jtf0;
JLabel jl1, jl2, jl3, jl4, jl0;
JButton jb1,jb;
static Statement st;
static{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tushu";
String user = "sa";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
st = conn.createStatement();
}
catch (Exception e) {}
}
public MySQLInsert(){
jtf0 = new JTextField(15);
jtf1 = new JTextField(15);
jtf2 = new JTextField(15);
jtf3 = new JTextField(15);
jtf4 = new JTextField(15);
jl0 = new JLabel("书ISBN号");
jl1 = new JLabel(" 书名");
jl2 = new JLabel(" 作者");
jl3 = new JLabel(" 出版时间");
jl4 = new JLabel(" 出版社");
jb1 = new JButton(" 添加");
jb=new JButton("返回");
Container container =getContentPane();
JPanel jp1 = new JPanel();
JPanel jp= new JPanel();
jp1.setLayout(new GridLayout(5, 2));
jp1.add(jl0); jp1.add(jtf0);
jp1.add(jl1); jp1.add(jtf1);
jp1.add(jl2); jp1.add(jtf2);
jp1.add(jl3); jp1.add(jtf3);
jp1.add(jl4); jp1.add(jtf4);
jp.add(jb1);jp.add(jb);
jb1.addActionListener(new mysql());
jb.addActionListener(new Mysql1());
container.add(jp1, BorderLayout.CENTER);
container.add(jp, BorderLayout.SOUTH);
setTitle("添加窗口");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 250);
setLocation(350,350);
setVisible(true);
}
class mysql implements ActionListener{
public void actionPerformed(ActionEvent e){
try{ String str1 = jtf1.getText().trim();
String str2 = jtf2.getText().trim();
String str3 = jtf3.getText().trim();
String str4 = jtf3.getText().trim();
String str0 = jtf0.getText().trim();
String sql = "use tushu insert into tushu1(isbn,shuming,zuozhe,cbtime,cbshe) values('" + str0 + "','" + str1 + "','" + str2 + "','" + str3 + "','" + str4 + "');";
st.executeUpdate(sql);
JOptionPane.showMessageDialog(MySQLInsert.this,"数据添加成功","提示对话框",1);
}
catch (Exception ee) {}
}
}
class Mysql1 implements ActionListener{
public void actionPerformed(ActionEvent e1){
if(e1.getSource()==jb){
dispose();
b ms=new b();
}
}
}
public static void main(String args[]){
new MySQLInsert();
}
4.3.2 运行界面
图4-2 登录界面
图4-3 管理界面
图4-4 图书查询界面
图4-5 图书删除界面
图4-6 图书入库界面
图4-7 图书显示界面
4.3.3 错误调试
(1)在MySQLCha类MySQLCha方法中出现定义的按钮jb变为无效的
原因:在程序的开始声明了改按钮,然后再实例化的时候又声明了一遍。
如何解决:将实例化中的JButton
(2)在MySQLCha 中的内部类Mysql类actionPerformed方法中出现找不到对象错误。
原因:在sql语句中把与数据库对应的字段名拼写错了
如何解决:把ibsn改成isbn
(3)在MySQLCha 中的内部类Mysq类actionPerformed方法中出现找不到数据源错误。
原因:没有引用数据源
如何解决:在sql语句前面加一句use tushu
(4)在MySQLCha询中内部类actionPerformed方法中输入图书号却显示处信息
原因:把获取信息的的方法写成了getInt,所以只能显示整型的数据,而数据库中的定义为char型
如何解决:把getInt改成getString
(5)在在MySQLCha询中内部类actionPerformed方法中点击按钮返回时返回时,原先的对话框不能关
原因:没有对原来的界面进行处理。
如何解决:原来的界面应该在操作后执行dispose();
(6)在b类中各个组件排列不够整齐
原因:没有把JPanel还有JFrame的默认布局的点
如何解决:设置JPanel的布局
(7)在MySQLCha类actionPerformed方法中判定事件源出现问题。
原因:没有搞清”equals()”和”==”的区别。
如何解决:将”==”改为”equals()”。
(8)在b类中运行后窗体总是出现在左上角
原因:没有设置窗体的坐标
如何解决:添加语句setLocation()
5 总结与展望
经过两个星期的努力,终于完成了这次的课程设计。
通过这次的课程设计,我学到了很多的东西,让我更进一步地了解了Java编程语言,对sql server数据库也有了更进一步的了解。同时也查阅了大量的资料,提高了动手制作能力,同时也体会到了团队的力量是不可缺少的,也提高了团队协作的效率。
通过自己的直接实践积累了项目设计的经验,特别是在与数据库连接的时候,翻查了大量的资料,最终在老师的帮助下,终于连接成功。的解决。还有在解决页面跳转问题时,才能使我的程序更完整。我想以后碰到类似的问题,我会轻松对亏同学帮忙
在实习中培养了我们勇于探索,严谨推理,实事求是,有过必改的学习态度,这在我们今后的学习中,和以后的工作中都是一种很好的工作态度,也是科学技术人员应具有的素质。
在本次的实训设计中,也深深地体会到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力,而我在很多方面还有欠缺。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。
参考文献
[1]刘万军,王松波.Java6程序设计, 北京:清华大学出版社,2009.
[2]刘正林,周纯杰.Java技术基础,武汉:华中科技大学出版社,2004.
[3]朱福喜,尹为民.Java语言与面向对象程序设计,武汉:武汉大学出版社,2002.
[4]孙艳春.面向对象程序设计,北京:机械工业出版社,2003.
[5] (美)梁著,万波等译, Java语言程序设计基础篇[M] ,第6版,机械工业出版社,2008.
成绩评定
成绩 教师签字