基于JAVA的图书数据库管理-具有新增,修改,删除,查询功能

本文介绍了一个使用Java和Access数据库实现的简单图书管理系统。该系统通过JDBC-ODBC桥接及ODBC驱动连接Access数据库,实现了基本的图书信息浏览、新增等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构类型JDBC-ODBC bridge plus ODBC driver;数据库采用Access。数据源是在ODBC设置好的“myBooK”。源程序如下:(最为练习,修改删除查询功能只留接口,没有编码实现)

import java.awt.*;
import java.awt.event.*;
//import java.beans.Statement;
import java.sql.*;
import javax.swing.*;


public class j03160301 extends JFrame{
 Connection ConnObj;
 Statement SQLStatement;
 ResultSet RS;
 
 JPanel contentPane;
 Panel panel1;
 Label L1,L2,L3,L4;
 TextField T1,T2,T3,T4;
 Button B1,B2,B3,B4,B5,B6,B7,B8,B9,B10;
 
 public j03160301(){
  contentPane=(JPanel)this.getContentPane();
  contentPane.setLayout(null);
  
  panel1=new Panel();
  //panel1.setBackground(BLACK);
  panel1.setBounds(0, 0, 380, 160);
  panel1.setLayout(null);
  panel1.setEnabled(false);
  
  contentPane.add(panel1);
  
  L1=new Label("ISBM: ");
  L1.setBounds(20, 40, 50, 25);
  panel1.add(L1);
  L2=new Label("bookname: ");
  L2.setBounds(20, 70, 50, 25);
  panel1.add(L2);
  L3=new Label("auther: ");
  L3.setBounds(20, 100, 50, 25);
  panel1.add(L3);
  L4=new Label("price: ");
  L4.setBounds(20, 130, 50, 25);
  panel1.add(L4);
  T1=new TextField();
  T1.setBounds(70, 40, 300, 25);
  T1.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e){
    T1_actionPerformed(e);
   }
  });
  panel1.add(T1);
  T2=new TextField();
  T2.setBounds(70, 70, 300, 25);
  T2.addActionListener(new myActionListener());
  panel1.add(T2);
  T3=new TextField();
  T3.setBounds(70, 100, 300, 25);
  T3.addActionListener(new myActionListener());
  panel1.add(T3);
  T4=new TextField();
  T4.setBounds(70, 130, 300, 25);
  T4.addActionListener(new myActionListener());
  panel1.add(T4);
  
  B1=new Button("第一条");
  B1.setBounds(new Rectangle(30,180,65,20));
  B1.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B1_mouseClicked(e);
   }
  });
  contentPane.add(B1);
  B2=new Button("上一条");
  B2.setBounds(new Rectangle(100,180,65,20));
  B2.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B2_mouseClicked(e);
   }
  });
  contentPane.add(B2);
  B3=new Button("下一条");
  B3.setBounds(new Rectangle(170,180,65,20));
  B3.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B3_mouseClicked(e);
   }
  });
  contentPane.add(B3);
  B4=new Button("最末条");
  B4.setBounds(new Rectangle(240,180,65,20));
  B4.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B4_mouseClicked(e);
   }
  });
  contentPane.add(B4); 
  B5=new Button("新增");
  B5.setBounds(new Rectangle(30,210,65,20));
  B5.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B5_mouseClicked(e);
   }
  });
  contentPane.add(B5);
  B6=new Button("修改");
  B6.setBounds(100, 210, 65, 20);
  B6.setEnabled(false);//因为这些功能暂时没有写。
  contentPane.add(B6);
  B7=new Button("删除");
  B7.setBounds(170, 210, 65, 20);
  B7.setEnabled(false);
  contentPane.add(B7);
  B8=new Button("查询");
  B8.setBounds(240, 210, 65, 20);
  B8.setEnabled(false);
  contentPane.add(B8);
  B9=new Button("确定");
  B9.setBounds(310, 180, 65, 20);
  B9.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B9_mouseClicked(e);
   }
  });
  contentPane.add(B9);
  
  B10=new Button("离开");
  B10.setBounds(310, 210, 65, 20);
  B10.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    B10_mouseClicked(e);
   }
  });
  contentPane.add(B10);
  
  this.setBounds(200,100, 415, 280);
  this.setTitle("新增");
  this.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.exit(0);
   }
  });
  this.setVisible(true);
  //===========================================
  //加载JDBC driver、连接数据库、送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 * FROM BookData");
   //执行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(Exception ecp)
  {
   JOptionPane.showMessageDialog(this, ecp.getMessage());
  }
 }//public j03160301() end
 class myActionListener implements ActionListener
 {
  public void actionPerformed(ActionEvent e)
  {
   ((TextField)e.getSource()).transferFocus();//按下回车键,focus往下一个组件
  }
 }
 
 protected void T1_actionPerformed(ActionEvent e) {
  //新增时先检验该条是否已经存在
  if(T1.getText().trim().equals(""))
   return;
  String newISBN=T1.getText().trim();
  if(newISBN.length()>13)
  {
   JOptionPane.showMessageDialog(T1, "ISBN字段最大长度为13");
   return;
  }
  try
  {
   RS=SQLStatement.executeQuery(
     "SELECT * FROM BookData WHERE ISBN='"+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(SQLException o){System.out.println(o.getMessage());}
  
 }

 void B1_mouseClicked(MouseEvent e)
 {
  try
  {
   RS.first();//move to the first item
   T1.setText(RS.getString("ISBN"));
   T2.setText(RS.getString("BookName"));
   T3.setText(RS.getString("Author"));
   T4.setText(String.valueOf(RS.getInt("Price")));
  }catch(SQLException ecp){}
 }//B1_mouseClicked(MouseEvent e) end;
 
 void B2_mouseClicked(MouseEvent e)
 {
  try
  {
   if(RS.previous())
   {//move to the previous item
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
   }
   else
   {
    //返回false表示移到了第一条之前
    RS.first();//再移到第一条;
    JOptionPane.showMessageDialog(B2, "移到第一条");
    //不需要改变T1-T4的文字,因为刚才已经显示第一条内容
   }
  }catch(SQLException ecp){}
 }//B2_mouseClicked(MouseEvent e) end;
 
 void B3_mouseClicked(MouseEvent e)
 {
  try
  {
   if(RS.next())
   {//move to the next item
    T1.setText(RS.getString("ISBN"));
    T2.setText(RS.getString("BookName"));
    T3.setText(RS.getString("Author"));
    T4.setText(String.valueOf(RS.getInt("Price")));
   }
   else
   {
    //返回false表示移到了最末条之后
    RS.last();//再移到最末条;
    JOptionPane.showMessageDialog(B3, "移到最末条");
    //不需要改变T1-T4的文字,因为刚才已经显示第一条内容
   }
  }catch(SQLException ecp){}
 }//B3_mouseClicked(MouseEvent e) end;
 
 void B4_mouseClicked(MouseEvent e)
 {
  try
  {
   RS.last();//move to the last item
   T1.setText(RS.getString("ISBN"));
   T2.setText(RS.getString("BookName"));
   T3.setText(RS.getString("Author"));
   T4.setText(String.valueOf(RS.getInt("Price")));
  }catch(SQLException ecp){}
 }//B4_mouseClicked(MouseEvent e) end;
 
 void B5_mouseClicked(MouseEvent e)
 {
  T1.setText(" ");
  T2.setText(" ");
  T3.setText(" ");
  T4.setText(" ");
  panel1.setEnabled(true);
  T2.setEnabled(false);
  T3.setEnabled(false);
  T4.setEnabled(false);
  B1.setEnabled(false);
  B2.setEnabled(false);
  B3.setEnabled(false);
  B4.setEnabled(false);
  B5.setEnabled(false);
  B9.setEnabled(true);
  B10.setEnabled(true);
  /*try
  {
   RS.last();//move to the last item
   T1.setText(RS.getString("ISBN"));
   T2.setText(RS.getString("BookName"));
   T3.setText(RS.getString("Author"));
   T4.setText(String.valueOf(RS.getInt("Price")));
  }catch(SQLException ecp){}*/
 }//B4_mouseClicked(MouseEvent e) end;
  void B9_mouseClicked(MouseEvent e) {//确认插入按钮;
  ToInsert();
 }
 private void ToInsert() {
  int checkPrice;
  if(T2.getText().trim().equals("")||T3.getText().trim().equals("")||T4.getText().trim().equals("")||T2.getText().trim().length()>50||T3.getText().trim().length()>30)
  {
   JOptionPane.showMessageDialog(B9, "有数据尚未填正确的值");
   return;
  }
  try//检查价格
  {
   checkPrice=Integer.parseInt(T4.getText().trim());
  }catch(NumberFormatException o)
  {
   JOptionPane.showMessageDialog(B9, "价格请填入整数");
   return;
  }
  
  String insertSQL="INSERT INTO BookData(ISBN,BookName,Author,Price)"+"VALUES('"+T1.getText().trim()+"','"+T2.getText().trim()
  +"','"+T3.getText().trim()+"','"+T4.getText().trim()+"')";
  try
  {
   System.out.println(insertSQL);
   SQLStatement.executeUpdate(insertSQL);
  }catch(SQLException o){
   JOptionPane.showMessageDialog(B9, o.getMessage());
  }
  try
  {
   RS=SQLStatement.executeQuery("SELECT *FROM BookData");
   RS.last();//移动到最后一条,因为增加的数据会加到数据库的最后一条后面;
   T1.setText(RS.getString("ISBN"));
   T2.setText(RS.getString("BookName"));
   T3.setText(RS.getString("Author"));
   T4.setText(String.valueOf(RS.getInt("Price")));
  }catch(SQLException o){JOptionPane.showMessageDialog(B9, o.getMessage());}
  
  
 }

  void B10_mouseClicked(MouseEvent e) {//清除按钮;
  try
  {
   RS=SQLStatement.executeQuery("SELECT * FROM BookData");
   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")));
   }
  }catch(SQLException o)
  {JOptionPane.showMessageDialog(B10,o.getMessage());}
  //控制画面操作过程
  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);
 }
 
 
 public static void main(String[] args)
 {
  new j03160301();
 }

}

系统功能与特色: (1)图书类别信息管理:作为一个学校的图书馆,涉及到的图书是很多的,这就有必要对图书进行分门别类,这样有利于对图书查询管理。不同的图书类别可以借阅的天数也是不一样的,管理员登陆系统后可以对图书类别进行添加,更新删除操作。 (2)图书信息管理:当管理员对图书类别信息添加完成后,就可以开始进行图书信息的录入了,只有将图书馆拥有的图书录入系统中,读者朋友在登陆系统后才可以查询到自己喜欢的该图书。 (3)读者类别管理:为了方便图书馆的管理,系统对读者的类别进行了分别,不同的读者类别可以借阅图书的数目是不一样的。管理员在登陆系统后可以这个读者类别信息进行管理,包括添加读者类别信息,修改读者类别,删除读者类别,特别是执行删除操作时需要保持数据库表数据之间的一致性。 (4)读者信息管理:当管理员把读者类别信息编辑好完成后,就可以办理读者信息了,管理员可以添加新的读者信息,修改已经存在的读者信息,删除读者信息。 (5)图书借阅管理:读者可以登陆系统查询自己喜欢的图书,然后到图书馆进行图书借书的登记操作,当读者看完了书或需要归还时,需要拿着自己的图书图书馆进行归还,此时有管理员办理图书归还业务。当然,如果读者借阅了图书因某种原因忘记了归还,管理员还可以对这些信息进行统计,同时,管理员还可以对已经出借的图书进行续借的办理。 (6)系统设置: 管理员登陆系统后可以修改图书馆的信息,可以修改管理其他操作员的信息,可以管理书架信息。 (7)口令更改:无论是管理员或读者身份登陆系统后,都可以对自己的登陆密码进行修改操作,这样保证了系统的安全性。 (8)系统特点:采用MVC设计模式,完全采用面向对象的设计思想,使用了开源框架Struts。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值