图书管理系统java版_java

本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询、插入、删除、修改。
内容:在数据库中创建一张书目信息表,包括书名、作者、出版社、出版日期、书号、价格字段。设计一个GUI界面进行书目管理。在该界面上有四个选项卡,分别是查询、插入、删除、修改。点击查询选项卡,出现的界面上有书名、作者、出版社、书号四个文本框,一个按钮和一个只读文本区。文本框内容可以为空,输入相应的查询信息后(例如根据书名查询可以仅输入书名),点击界面上的“查询”按钮,可以在界面下方的文本区中显示出符合条件的书目详细信息。点击插入选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。在文本框中输入信息后,点击“插入”按钮,该书目信息插入数据库表中。点击删除选项卡,出现的界面上有书名文本框和一个按钮,输入书名后点击“删除”按钮,该书目信息从数据库表中删除。点击修改选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。输入的书名必须是已存在的,否则会弹出消息框显示出错信息。输入信息后,点击“修改”按钮,数据库表中的相应书目信息被修改为新值。
源码:

BookInfo.java

 * 项目名称:图书管理系统
 * 版本:  1.0
 * 创建者: 张俊强
 * 创建时间:2016/5/26
 * */
package librarySystem; 

import java.awt.*; 

import javax.swing.*; 

import java.awt.event.*;
import java.sql.*; 

@SuppressWarnings("serial")
public class BookInfo extends JFrame implements ActionListener{
  //主角面上的控件
  private JLabel inputLabel;
  private JTextField inputText;
  private JButton searchBut; 

  private JTable bookTable;
  private JScrollPane bookScroll;
  private JButton addBut;
  private JButton modifyBut;
  private JButton deleteBut;
  private JButton refreshBut;
  private BookTableModel bookTableModel;
  public static void main(String[] args) throws SQLException {
    // TODO Auto-generated method stub
    BookInfo bookInfo=new BookInfo();
    bookInfo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    bookInfo.setBounds(350, 150, 600, 400);
    bookInfo.setVisible(true);
//   bookInfo.importSQL();//导出数据
    bookInfo.setMinWindowLayout();//设置数据
  }
  public BookInfo() throws SQLException{
    //创建主界面上的控件
    inputLabel=new JLabel("请输入书名:");
    inputText=new JTextField(10);
    searchBut=new JButton("查询");
    bookTableModel=new BookTableModel(); 

    bookTable=new JTable(bookTableModel);
    bookScroll=new JScrollPane(bookTable); 

    addBut=new JButton("添加");
    modifyBut=new JButton("修改");
    deleteBut=new JButton("删除");
    refreshBut=new JButton("刷新");
    searchBut.addActionListener(this);
    addBut.addActionListener(this);
    refreshBut.addActionListener(this);
    modifyBut.addActionListener(this);
    deleteBut.addActionListener(this); 

  } 

  void setMinWindowLayout(){
    //主界面布局
    Container con1=new Container();
    con1.setLayout(new FlowLayout());
    con1.add(inputLabel);
    con1.add(inputText);
    con1.add(searchBut);
    con1.add(refreshBut);
    Container con2=new Container();
    con2.setLayout(new FlowLayout());
    con2.add(addBut);
    con2.add(modifyBut);
    con2.add(deleteBut);
    this.setLayout(new BorderLayout());
    this.add(con1,BorderLayout.NORTH);
    this.add(bookScroll,BorderLayout.CENTER);
    this.add(con2,BorderLayout.SOUTH);
    this.validate();
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getSource()==searchBut){
      if(!this.inputText.getText().equals("")){
        String bookName=this.inputText.getText();
        String sql="SELECT * FROM book_info WHERE book_name ='"+bookName+"'";
        try {
        bookTableModel=new BookTableModel(sql);
        bookTable.setModel(bookTableModel);
      } catch (SQLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      } 

      }else{
        JOptionPane.showMessageDialog(this,"输入不能为空", "提示",JOptionPane.PLAIN_MESSAGE);
      }
    }
    else if(e.getSource()==addBut){
      @SuppressWarnings("unused")
      AddBookDialog addWin=new AddBookDialog(this,"添加图书",true);
      this.refreshTable();
    }
    else if(e.getSource()==refreshBut){
      this.refreshTable();
    }
    else if(e.getSource()==deleteBut){
      int rowNum=bookTable.getSelectedRow();
      if(rowNum<0||rowNum>bookTable.getRowCount()){
        JOptionPane.showMessageDialog(this,"未选中", "提示",JOptionPane.PLAIN_MESSAGE);
      }
      else{
        //System.out.print(bookName);
        int n = JOptionPane.showConfirmDialog(null, "确认删除吗?", "确认删除框", JOptionPane.YES_NO_OPTION);
        if (n == JOptionPane.YES_OPTION) {
          String bookNum=(String) bookTable.getValueAt(rowNum, 0);
          String sql="DELETE FROM book_info WHERE book_num= '"+bookNum+"'";
          bookTableModel.deleteBook(sql);
          this.refreshTable();
          JOptionPane.showMessageDialog(this,"删除成功", "提示",JOptionPane.PLAIN_MESSAGE);
        } else if (n == JOptionPane.NO_OPTION) {
          return;
        }
      }
    }
    else if(e.getSource()==modifyBut){
      bookTable.setModel(bookTableModel);
      int rowNum=bookTable.getSelectedRow();
      if(rowNum<0||rowNum>bookTable.getRowCount()){
        JOptionPane.showMessageDialog(this,"未选中", "提示",JOptionPane.PLAIN_MESSAGE);
      }
      else{
        @SuppressWarnings("unused")
        ModifyBook modifyWin=new ModifyBook(this,"修改信息",true,bookTableModel,rowNum);
        this.refreshTable();
      }
    } 

  }
  public void refreshTable(){
    BookTableModel searchBook;
    try {
      searchBook = new BookTableModel("SELECT * FROM book_info");
      bookTable.setModel(searchBook);
      bookTableModel=searchBook;
    } catch (SQLException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
  }
}

BookTableModel.java

package librarySystem;
import java.sql.*;
import java.util.*; 

/*
 * 图书表模型
 * */
import javax.swing.table.*;
@SuppressWarnings("serial")
public class BookTableModel extends AbstractTableModel{
  //表的元素
  private Vector<Vector<String>> rowData;
  private Vector<String> colName;
  // 数据库
  private PreparedStatement stmt;
  private ResultSet result;
  public BookTableModel(String sql) throws SQLException{
    this.initData(sql);
  }
  public BookTableModel() throws SQLException{
    this.initData("SELECT * FROM book_info");
  }
  public void initData(String sql) throws SQLException{
    setRowData(new Vector<Vector<String>>());
    setColName(new Vector<String>());
    getColName().add("书号");
    getColName().add("书名");
    getColName().add("作者");
    getColName().add("出版社");
    getColName().add("出版时间");
    getColName().add("价格");
    /*
     * 数据库的导入
     * */
    try {
      Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    String url= "jdbc:mysql://localhost:3306/device";
    String user="root";
    String password="zjq1314520";
    Connection con=DriverManager.getConnection(url,user,password);
    stmt = con.prepareStatement(sql);
    result=stmt.executeQuery();
    importSQL();
  }
  void importSQL() throws SQLException{
    // TODO Auto-generated method stub
    @SuppressWarnings("unused")
    boolean signNull=true;
    while(result.next()){
      Vector<String> item=new Vector<String>();
      for(int i=1;i<7;i++){
        item.add(result.getString(i));
      }
      getRowData().add(item);
      signNull=false;
    }
    result.close();
  }
  @Override
  public int getColumnCount() {//得到列数
    // TODO Auto-generated method stub
    return this.colName.size();
  } 

  @Override
  public int getRowCount() {//得到行数
    // TODO Auto-generated method stub
    return this.rowData.size();
  } 

  @Override
  public Object getValueAt(int row, int col) {//得到某行某列的数据
    // TODO Auto-generated method stub
    return (this.rowData.get(row)).get(col);
  } 

  @Override
  public String getColumnName(int column) {
    // TODO Auto-generated method stub
    return this.colName.get(column);
  } 

  public Vector<Vector<String>> getRowData() {
    return rowData;
  }
  public void setRowData(Vector<Vector<String>> rowData) {
    this.rowData = rowData;
  }
  public Vector<String> getColName() {
    return colName;
  }
  public void setColName(Vector<String> colName) {
    this.colName = colName;
  }
  public void addBook(String sql){
    try {
      stmt.executeUpdate(sql);
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
//   initData("SELECT * FROM book_info");
  }
  public void deleteBook(String sql){
    try {
      stmt.executeUpdate(sql);
    } catch (SQLException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
  }
}

AddBookDialog.java

package librarySystem; 

import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException; 

import javax.swing.*; 

@SuppressWarnings("serial")
public class AddBookDialog extends JDialog implements ActionListener{
  private JLabel bookNumLabel;
  private JLabel bookNameLabel;
  private JLabel bookWriterLabel;
  private JLabel bookPublishLabel;
  private JLabel bookPriceLabel;
  private JLabel bookTimeLabel;
  private JTextField bookNumText;
  private JTextField bookNameText;
  private JTextField bookWriterText;
  private JTextField bookPublishText;
  private JTextField bookPriceText;
  private JTextField bookTimeText; 

  private JButton submitBut;
  private JButton cancelBut;
  public AddBookDialog(Frame owner,String title,boolean model){
    //父窗口,窗口名,是否是模式窗口
    super(owner,title,model);
    bookNumLabel=new JLabel("书  号:");
    bookNameLabel=new JLabel("书  名:");
    bookWriterLabel=new JLabel("作  者:");
    bookPublishLabel=new JLabel("出版社:");
    bookPriceLabel=new JLabel("价  格:");
    bookTimeLabel=new JLabel("出版时间:"); 

    bookNumText=new JTextField(10);
    bookNameText=new JTextField(10);
    bookWriterText=new JTextField(10);
    bookPublishText=new JTextField(10);
    bookPriceText=new JTextField(10);
    bookTimeText=new JTextField(9); 

    submitBut=new JButton("确认");
    cancelBut=new JButton("取消");
    submitBut.addActionListener(this);
    cancelBut.addActionListener(this);
    this.setBounds(350,150,400,260);
    this.setResizable(false);
    this.setLayout(new BorderLayout());
    initLayout();
  }
  public void initLayout(){
    Container[] con1=new Container[6];
    for(int i=0;i<6;i++) con1[i]=new Container();
    con1[0].setLayout(new FlowLayout());
    con1[0].add(bookNumLabel);
    con1[0].add(bookNumText); 

    con1[1].setLayout(new FlowLayout());
    con1[1].add(bookNameLabel);
    con1[1].add(bookNameText); 

    con1[2].setLayout(new FlowLayout());
    con1[2].add(bookWriterLabel);
    con1[2].add(bookWriterText); 

    con1[3].setLayout(new FlowLayout());
    con1[3].add(bookPublishLabel);
    con1[3].add(bookPublishText); 

    con1[4].setLayout(new FlowLayout());
    con1[4].add(bookPriceLabel);
    con1[4].add(bookPriceText); 

    con1[5].setLayout(new FlowLayout());
    con1[5].add(bookTimeLabel);
    con1[5].add(bookTimeText); 

    Container con2=new Container();
    con2.setLayout(new BorderLayout());
    con2.add(con1[0],BorderLayout.NORTH);
    con2.add(con1[1],BorderLayout.CENTER);
    con2.add(con1[2],BorderLayout.SOUTH); 

    Container con3=new Container();
    con3.setLayout(new BorderLayout());
    con3.add(con1[3],BorderLayout.NORTH);
    con3.add(con1[4],BorderLayout.CENTER);
    con3.add(con1[5],BorderLayout.SOUTH); 

    Container con4=new Container();
    con4.setLayout(new FlowLayout());
    con4.add(submitBut);
    con4.add(cancelBut);
    Container con5=new Container();
    con5.setLayout(new BorderLayout());
    con5.add(con2,BorderLayout.NORTH);
    con5.add(con3,BorderLayout.CENTER);
    con5.add(con4,BorderLayout.SOUTH); 

    this.add(con5,BorderLayout.CENTER);
    this.validate();
    this.setVisible(true);
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getSource()==submitBut){
      if(bookNumText.getText().equals("")||bookNameText.getText().equals("")||
          bookWriterText.getText().equals("")||bookPublishText.getText().equals("")||
          bookPriceText.getText().equals("")||bookTimeText.getText().equals("")){
        //System.out.println("输入失败");
        JOptionPane.showMessageDialog(this,"输入不能有空", "提示",JOptionPane.PLAIN_MESSAGE);
      }
      else{
        //System.out.println("输入成功");
        String sql="insert into "
            + "book_info(book_num,book_name,book_writer,publish_house,book_price,publish_time)"
            + "values('"+bookNumText.getText()+"','"+bookNameText.getText()+"','"+bookWriterText.getText()+"','"+bookPublishText.getText()+"','"+bookPriceText.getText()+"','"+bookTimeText.getText()+"')";
        try {
          BookTableModel book=new BookTableModel();
          book.addBook(sql);
        } catch (SQLException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        JOptionPane.showMessageDialog(this,"添加成功", "提示",JOptionPane.PLAIN_MESSAGE);
        this.setVisible(false);
      }
    }
    if(e.getSource()==cancelBut){
      this.setVisible(false);
    }
  }
}

ModifyBook.java

package librarySystem; 

import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*; 

@SuppressWarnings("serial")
public class ModifyBook extends JDialog implements ActionListener{
  private JLabel bookNumLabel;
  private JLabel bookNameLabel;
  private JLabel bookWriterLabel;
  private JLabel bookPublishLabel;
  private JLabel bookPriceLabel;
  private JLabel bookTimeLabel;
  private JTextField bookNumText;
  private JTextField bookNameText;
  private JTextField bookWriterText;
  private JTextField bookPublishText;
  private JTextField bookPriceText;
  private JTextField bookTimeText;
  private JButton submitBut;
  private JButton cancelBut;
  private BookTableModel bookModel;
  private int rowNum;
  public ModifyBook(Frame owner,String title,boolean type,BookTableModel model,int row){
    super(owner,title,type);
    bookModel=model;
    rowNum=row;
    bookNumLabel=new JLabel("书  号:");
    bookNameLabel=new JLabel("书  名:");
    bookWriterLabel=new JLabel("作  者:");
    bookPublishLabel=new JLabel("出版社:");
    bookPriceLabel=new JLabel("价  格:");
    bookTimeLabel=new JLabel("出版时间:"); 

    bookNumText=new JTextField(10);
    bookNameText=new JTextField(10);
    bookWriterText=new JTextField(10);
    bookPublishText=new JTextField(10);
    bookPriceText=new JTextField(10);
    bookTimeText=new JTextField(9); 

    submitBut=new JButton("确认修改");
    cancelBut=new JButton("取消");
    submitBut.addActionListener(this);
    cancelBut.addActionListener(this);
    this.setBounds(350,150,400,260);
    this.setResizable(false);
    this.setLayout(new BorderLayout());
    this.setValue();
    this.initLayout(); 

  }
  public void initLayout(){
    Container[] con1=new Container[6];
    for(int i=0;i<6;i++) con1[i]=new Container();
    con1[0].setLayout(new FlowLayout());
    con1[0].add(bookNumLabel);
    con1[0].add(bookNumText); 

    con1[1].setLayout(new FlowLayout());
    con1[1].add(bookNameLabel);
    con1[1].add(bookNameText); 

    con1[2].setLayout(new FlowLayout());
    con1[2].add(bookWriterLabel);
    con1[2].add(bookWriterText); 

    con1[3].setLayout(new FlowLayout());
    con1[3].add(bookPublishLabel);
    con1[3].add(bookPublishText); 

    con1[4].setLayout(new FlowLayout());
    con1[4].add(bookPriceLabel);
    con1[4].add(bookPriceText); 

    con1[5].setLayout(new FlowLayout());
    con1[5].add(bookTimeLabel);
    con1[5].add(bookTimeText); 

    Container con2=new Container();
    con2.setLayout(new BorderLayout());
    con2.add(con1[0],BorderLayout.NORTH);
    con2.add(con1[1],BorderLayout.CENTER);
    con2.add(con1[2],BorderLayout.SOUTH); 

    Container con3=new Container();
    con3.setLayout(new BorderLayout());
    con3.add(con1[3],BorderLayout.NORTH);
    con3.add(con1[4],BorderLayout.CENTER);
    con3.add(con1[5],BorderLayout.SOUTH); 

    Container con4=new Container();
    con4.setLayout(new FlowLayout());
    con4.add(submitBut);
    con4.add(cancelBut);
    Container con5=new Container();
    con5.setLayout(new BorderLayout());
    con5.add(con2,BorderLayout.NORTH);
    con5.add(con3,BorderLayout.CENTER);
    con5.add(con4,BorderLayout.SOUTH);
    this.add(con5,BorderLayout.CENTER);
    this.validate();
    this.setVisible(true);
  }
  public void setValue(){
    this.bookNumText.setText((String) bookModel.getValueAt(rowNum, 0));
    this.bookNumText.setEditable(false); 

    this.bookNameText.setText((String) bookModel.getValueAt(rowNum, 1));
    this.bookWriterText.setText((String) bookModel.getValueAt(rowNum, 2));
    this.bookPublishText.setText((String) bookModel.getValueAt(rowNum, 3));
    this.bookTimeText.setText((String) bookModel.getValueAt(rowNum, 4));
    this.bookPriceText.setText((String) bookModel.getValueAt(rowNum, 5));
    this.validate();
  }
  @Override
  public void actionPerformed(ActionEvent e) {
  // System.out.println(bookPriceText.getText());
    // TODO Auto-generated method stub
    if(e.getSource()==submitBut){
      if(bookNumText.getText().equals("")||bookNameText.getText().equals("")||
          bookWriterText.getText().equals("")||bookPublishText.getText().equals("")||
          bookPriceText.getText().equals("")||bookTimeText.getText().equals("")){
        //System.out.println("输入失败");
        JOptionPane.showMessageDialog(this,"修改不能有空", "提示",JOptionPane.PLAIN_MESSAGE);
      }
      else{
        int n = JOptionPane.showConfirmDialog(null, "确认修改吗?", "确认修改框", JOptionPane.YES_NO_OPTION);
        if (n == JOptionPane.YES_OPTION) {
          String sql="UPDATE book_info SET book_name ='"+bookNameText.getText()+"', book_writer= '"+bookWriterText.getText()+"',publish_house='"+bookPublishText.getText()+"',book_price='"+bookPriceText.getText()+"',publish_time='"+bookTimeText.getText()+"' WHERE book_num = '"+bookNumText.getText()+"' ";
          try {
            BookTableModel book=new BookTableModel();
            book.addBook(sql);
          } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
          }
          JOptionPane.showMessageDialog(this,"修改成功", "提示",JOptionPane.PLAIN_MESSAGE);
          this.setVisible(false);
        } else if (n == JOptionPane.NO_OPTION) {
          return;
        }
      }
    }
    if(e.getSource()==cancelBut){
      this.setVisible(false);
    }
  }
}

程序运行结果:
主界面:

查询界面:

添加图书界面:

修改界面:

删除操作:

数据库界面:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
图书管理系统
java图书管理系统、java图书管理系统代码、java简单图书管理系统、图书管理系统java案例、java web图书管理系统,以便于您获取更多的相关知识。

时间: 2024-09-17 03:33:47

图书管理系统java版_java的相关文章

AJAX省市区三级联动下拉菜单(java版)_java

此小程序的功能主要是采用异步请求方式从数据库中调取省市区信息显示到下拉列表: 代码如下: 建立数据库中的代码和一些配置文件信息就省略了,主要有JavaScript中的代码为: $(document).ready(function(){ $.get("getProvince.do", function(result){ $("#showp").html(result); }); }) var xmlhttp; function mysend(str){ $(docum

浅析12306售票算法(java版)_java

1.以G71列车为例,首先对车次站台进行占位编码(从1开始到最后一站递加) 对以上占位简单描述以下:G71总共18个站点那么我们的单个座位的座位标识可以用十八位长度的二进制字符串表示10000000000000000每一位代表一个站点,每天放票前初始化到下面的订票表中,数据如下余票根据座位标识中的0的个数决定最大余票数量 订票表中的始发受限站点和终到受限站点可以灵活搭配(这个就可以实现限制站点发售) 2.查询余票 如果我们要查询日期为2016-06-11,始发站保定东站(3)到韶关站(15)的G

微信随机生成红包金额算法java版_java

最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发.  public class WxAlgorithm{ /** * @param moneySum 输入总金额 * @param redNum 输入红包数量 */ private static void wxAlgorithm(double moneySum, int redNum) { // 设置最小的金额 double moneyMin = 0.01

一个简陋的java图书管理系统_java

本文代码为原创一个简陋的管理系统,只做功能的测试.并没有去完善所有应有的功能,只做了输入输出查找,仅供参考!  菜单部分:  import java.util.Scanner; public class Menu { int Min = 1; int Max = 3; public void getMenu(){ System.out.println("1.显示/2.输入/3.查找"); } public void getFindMenu(){ System.out.println(&

求帮忙求帮忙,java图书管理系统

问题描述 求帮忙求帮忙,java图书管理系统 java 设计一个具有数据插入.修改.删除.显示和查询功能的图书管理程序.设计要求用户登录功能: (2)设计程序运行界面: (3)能用菜单选择各功能.说明: (1)数据包括:书名.作者.书号.出版社.出版日期和单价 : (2)可对图书信息修改: (3)可增加或删除图书信息: (4)可显示所有保存的图书信息: (5)可按书名.作者.书号或出版社进行图书信息的查询. 解决方案 这个项目需要很多东西的,而且界面问题需要好好设计的,你可以慢慢编写,如果有什么

求助-怎么用oracle做一个图书管理系统?

问题描述 怎么用oracle做一个图书管理系统? 刚刚学习oracle,要做一个图书管理系统,但是不怎么会这个,还在慢慢学习中,请各位大神指点一二,谢谢了. 解决方案 图书管理系统数据库设计图书管理系统 java代码图书管理系统

简单实现Java版学生管理系统_java

本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下 package BookDemo_1; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test { public static void main(String[] args) { StudentSys stuSys=new StudentSys("学生管理系统"); stuSys.initWi

Java设计模块系列之书店管理系统单机版(二)_java

Java-单机版的书店管理系统(练习设计模块和思想_系列 一 ): http://www.jb51.net/article/91004.htm 介绍 小提示:上面一点有一个目录,可以快速定位到自己需要看的类. 今天对前面的代码有了小小的修改,让代码更加完善了一点. 至于用户唯一标识码uuid,会在以后修改成程序内部生成的, 现在的uuid还是由用户自己设置. 今天对这个程序,添加了用户界面的表现层的一部分,增加了公共类 枚举, 下面贴出目前我写的这个程序的全部代码:我会逐渐的写完这个程序的,请大

java代码-怎么用JAVA编写图书管理系统

问题描述 怎么用JAVA编写图书管理系统 我需要一套完整的图书管理系统,自己弄的老出错....有没有大神帮忙啊