觉着有用就点个赞哦~
加一Q一带一你✅10319281✅邀一情一玛✅33339333✅进【0 9 1 9 1x . c o m 】✅已助上千人胜利翻盘,欢送减少,沟通交流!

一,性能

  1. 管理员登录
  2. 图书借阅信息管理
  3. 图书信息管理
  4. 管理员更改明码
  5. 退出零碎

二,工具

  • Eclipse Version: 2018-09 (4.9.0)
  • MySQL Workbench 8.0 CE
  • mysql-connector-java-8.0.13.jar

三、效果图:

登录界面:

主界面:

借阅书籍治理:

集体书库治理:

更改明码:

四、数据库设计

     1)图书表

     2)用户表

两个数据表间没有关联:

五、JAVA档次剖析

(1)逻辑图

(2)包构造,采纳MVC三层架构组织各个模块

 
-

六、次要Java代码剖析

Dao类(以BookDao为例)

1.  package pers.cyz.dao;    3.  import java.sql.Connection;    4.  import java.sql.PreparedStatement;    5.  import java.sql.ResultSet;    6.  import java.sql.SQLException;    7.  import java.sql.Statement;    8.  import java.util.ArrayList;    9.  import java.util.List;    11.  import pers.cyz.model.Book;    12.  import pers.cyz.util.DBUtil;    14.  /**    15.   * 数据库图书表信息数据拜访对象类,蕴含减少图书信息、删除图书信息    16.   * 、更新图书信息、查问图书信息、查问借阅信息和偿还图书    17.   *     18.   * @author 1651200111 陈彦志    19.   */    20.  public class BookDao {    23.      /**    24.   * 减少图书信息    25.   */    26.      public void addBook(Book book) throws Exception{    27.          // 首先拿到数据库的连贯    28.          Connection con = DBUtil.getConnection();    29.          String sql="insert into tb_books"    30.                  // ISBN、书名、图书价格、图书作者、出版社    31.                  + "(ISBN, book_name, book_price, book_author, published_house,"    32.                  // 分类号、借书人姓名、借书人电话、借书日期,已借天数    33.                  + "book_category, borrower_name, borrower_phone) "    34.                  + "values("    35.                  /*    36.   * 参数用?示意,相当于占位符,而后在对参数进行赋值。当真正执行时,    37.   * 这些参数会加载在SQL语句中,把SQL语句拼接残缺才去执行。这样就会缩小对数据库的操作    38.   */    39.                  + "?,?,?,?,?,?,?,?)";    40.          /*    41.   * prepareStatement这个办法会将SQL语句加载到驱动程序conn集成程序中,    42.   * 然而并不间接执行,而是当它调用execute()办法的时候才真正执行;    43.   */    44.          PreparedStatement psmt = con.prepareStatement(sql);    45.          // 先对应SQL语句,给SQL语句传递参数    46.          psmt.setString(1, book.getISBN());    47.          psmt.setString(2, book.getBookName());    48.          psmt.setFloat(3, book.getPrice());    49.          psmt.setString(4, book.getAuthor());    50.          psmt.setString(5, book.getPublishHouse());    51.          psmt.setString(6, book.getBookCategory());    53.          if (book.getBorrowerName() == null || book.getBorrowerName() == "") {    54.              psmt.setString(7, null);    55.          }    56.          else {    57.                psmt.setString(7, book.getBorrowerName());    58.          }    60.          if (book.getBorrowerPhone() == null || book.getBorrowerPhone() == "") {    61.               psmt.setString(8, null);      62.          }    63.          else {    64.              psmt.setString(8, book.getBorrowerPhone());      65.          }    67.          //执行SQL语句    68.          psmt.execute();    70.      }    73.      /**    74.   * 删除图书信息    75.   */    76.        public void delBook(int ID) throws SQLException{    77.            // 首先拿到数据库的连贯    78.            Connection con=DBUtil.getConnection();    79.            String sql="" +     80.                    "DELETE FROM tb_books "+                   81.                    // 参数用?示意,相当于占位符    82.                    "WHERE ID = ?";    83.            // 预编译sql语句    84.            PreparedStatement psmt = con.prepareStatement(sql);    85.            // 先对应SQL语句,给SQL语句传递参数    86.            psmt.setInt(1, ID);    87.            // 执行SQL语句    88.            psmt.execute();        89.        }    92.      /**    93.   * 更新图书信息    94.   */    95.      public void changeBook(Book book) throws SQLException{    96.          // 首先拿到数据库的连贯    97.          Connection con=DBUtil.getConnection();    98.          String sql="update tb_books "    99.                  + "set ISBN = ?, book_name = ?, book_price = ?, book_author = ?"    100.                  + ",published_house = ?, book_category = ?, borrower_name = ?, borrower_phone = ? "    101.                  // 参数用?示意,相当于占位符     102.                  + "where ID = ?";    103.          // 预编译sql语句    104.          PreparedStatement psmt = con.prepareStatement(sql);    105.          // 先对应SQL语句,给SQL语句传递参数    106.          psmt.setString(1, book.getISBN());    107.          psmt.setString(2, book.getBookName());    108.          psmt.setFloat(3, book.getPrice());    109.          psmt.setString(4, book.getAuthor());    110.          psmt.setString(5, book.getPublishHouse());    111.          psmt.setString(6, book.getBookCategory());    112.          if (book.getBorrowerName().equals("")) {    113.              psmt.setString(7, null);    114.          }    115.          else {    116.               psmt.setString(7, book.getBorrowerName());    117.          }    119.          if (book.getBorrowerPhone().equals("")) {    120.              psmt.setString(8, null);    121.          }    122.          else {    123.               psmt.setString(8, book.getBorrowerPhone());    124.          }    125.          psmt.setInt(9, book.getID());    126.          // 执行SQL语句    127.          psmt.execute();        128.      }    132.      /**    133.   * 查问书籍信息    134.   */    135.      public List<Book> query() throws Exception{               136.          Connection con = DBUtil.getConnection();                137.          Statement stmt = con.createStatement();               138.          ResultSet rs = stmt.executeQuery("select "    139.                  // ISBN、书名、作者、图书价格、出版社    140.                  + "ID, ISBN, book_name, book_author, book_price, published_house, "    141.                  // 分类号、借书人姓名、借书人电话    142.                  + "book_category, borrower_name, borrower_phone "    143.                  + "from tb_books");              144.          List<Book> bookList = new ArrayList<Book>();               145.          Book book = null;           146.          // 如果对象中有数据,就会循环打印进去    147.          while (rs.next()){                   148.              book = new Book();             149.              book.setID(rs.getInt("ID"));    150.              book.setISBN(rs.getString("ISBN"));    151.              book.setBookName(rs.getString("book_name"));               152.              book.setAuthor(rs.getString("book_author"));    153.              book.setPrice(rs.getFloat("book_price"));    154.              book.setPublishHouse(rs.getString("published_house"));    155.              book.setBookCategory(rs.getString("book_category"));    156.              book.setBorrowerName(rs.getString("borrower_name"));    157.              book.setBorrowerPhone(rs.getString("borrower_phone"));    158.              bookList.add(book);                159.          }               160.          return bookList;          161.      }    164.      /**    165.   * 查问借阅信息    166.   *     167.   * @return    168.   *         bookList    169.   */    170.      public List<Book> borrowQuery() throws Exception{               171.          Connection con = DBUtil.getConnection();                172.          Statement stmt = con.createStatement();               173.          ResultSet rs = stmt.executeQuery(""    174.                  // ID、书名、借书人姓名、借书人电话    175.                  + "SELECT ID, book_name, borrower_name, borrower_phone "    176.                  + "FROM tb_books "    177.                  + "WHERE borrower_name IS NOT NULL"    178.                  );              179.          List<Book> bookList = new ArrayList<Book>();               180.          Book book = null;             181.          // 如果对象中有数据,就会循环打印进去    182.          while (rs.next()){                   183.              book = new Book();             184.              book.setID(rs.getInt("ID"));    185.              book.setBookName(rs.getString("book_name"));               186.              book.setBorrowerName(rs.getString("borrower_name"));    187.              book.setBorrowerPhone(rs.getString("borrower_phone"));    188.              bookList.add(book);                189.          }               190.          return bookList;          191.      }    193.      /**    194.   * 更新图书信息,偿还图书    195.   */    196.      public void returnBook(Book book) throws SQLException{    197.          // 首先拿到数据库的连贯    198.          Connection con=DBUtil.getConnection();    199.          String sql="UPDATE tb_books "    200.                  // ISBN、图书名称、作者、价格    201.                  + "SET "    202.                  // 借书人姓名、借书人电话    203.                  + "borrower_name = ?, borrower_phone = ? "    204.                  // 参数用?示意,相当于占位符     205.                  + "WHERE ID = ?";    206.          // 预编译sql语句    207.          PreparedStatement psmt = con.prepareStatement(sql);    208.          // 先对应SQL语句,给SQL语句传递参数    209.          psmt.setString(1, book.getBorrowerName());    210.          psmt.setString(2, book.getBorrowerPhone());    211.          psmt.setInt(3, book.getID());    212.          // 执行SQL语句    213.          psmt.execute();        214.      }    217.  }    

重点内容 :

JDBC进行简略的数据库增删改查

具体参考:https://www.cnblogs.com/Qian123/p/5339164.html#_labelTop

Model类(以Book为例)

1.  package pers.cyz.model;    3.  /**    4.   * 图书模型类,蕴含数据库图书表各对应的字段get、set办法    5.   *     6.   * @author 1651200111 陈彦志    7.   */    8.  public class Book {    9.      private int ID;    10.      // ISBN号    11.      private String ISBN;    12.      // 图书名称    13.      private String bookName;    14.      // 图书价格    15.      private float price;    16.      // 图书作者    17.      private String author;    18.      // 出版社    19.      private String publishedHouse;    20.      // 图书分类号    21.      private String bookCategory;    22.      // 借书人姓名    23.      private String borrowerName;    24.      // 借书人电话    25.      private String borrowerPhone;    27.      /**    28.   * 获取ID    29.   */    30.      public int getID() {    31.          return ID;    32.      }    33.      /**    34.   * 设置ID    35.   */    36.      public void setID(int iD) {    37.          ID = iD;    38.      }    40.      /**    41.   * 获取ISBN    42.   */    43.      public String getISBN() {    44.          return ISBN;    45.      }    46.      /**    47.   * 设置ISBN    48.   */    49.      public void setISBN(String iSBN) {    50.          ISBN = iSBN;    51.      }    54.      /**    55.   * 获取图书名称    56.   */    57.      public String getBookName() {    58.          return bookName;    59.      }    60.      /**    61.   * 设置图书名称    62.   */    63.      public void setBookName(String bookName) {    64.          this.bookName = bookName;    65.      }    68.      /**    69.   * 获取图书价格    70.   */    71.      public float getPrice() {    72.          return price;    73.      }    74.      /**    75.   * 设置图书价格    76.   */    77.      public void setPrice(float price) {    78.          this.price = price;    79.      }    82.      /**    83.   * 获取图书作者    84.   */    85.      public String getAuthor() {    86.          return author;    87.      }    88.      /**    89.   * 设置图书作者    90.   */    91.      public void setAuthor(String author) {    92.          this.author = author;    93.      }    96.      /**    97.   * 获取出版社    98.   */    99.      public String getPublishHouse() {    100.          return publishedHouse;    101.      }    102.      /**    103.   * 设置出版社    104.   */    105.      public void setPublishHouse(String publishedHouse) {    106.          this.publishedHouse = publishedHouse;    107.      }    110.      /**    111.   * 获取图书分类信息    112.   */    113.      public String getBookCategory() {    114.          return bookCategory;    115.      }    116.      /**    117.   * 设置图书分类信息    118.   */    119.      public void setBookCategory(String bookCategory) {    120.          this.bookCategory = bookCategory;    121.      }    124.      /**    125.   * 获取借书人姓名    126.   */    127.      public String getBorrowerName() {    128.          return borrowerName;    129.      }    130.      /**    131.   * 设置借书人姓名    132.   */    133.      public void setBorrowerName(String borrowerName) {    134.          this.borrowerName = borrowerName;    135.      }    138.      /**    139.   * 获取借书人电话    140.   */    141.      public String getBorrowerPhone() {    142.          return borrowerPhone;    143.      }    144.      /**    145.   * 设置借书人电话    146.   */    147.      public void setBorrowerPhone(String borrowerPhone) {    148.          this.borrowerPhone = borrowerPhone;    149.      }    152.  }    

重点内容 :

次要就是数据库对应表中各对应的字段get、set办法

    Eclipse技巧:

        Shift + alt + s  -> Generate Getters and Setters -> Select all -> Generate 主动生成set、get办法

Controller类(以BookAction为例)

1.  package pers.cyz.controller;    3.  import java.util.List;    5.  import javax.swing.JTable;    6.  import javax.swing.JTextField;    8.  import pers.cyz.dao.BookDao;    9.  import pers.cyz.model.Book;    12.  /**    13.   * 图书信息行为管制类,蕴含减少图书、删除图书    14.   * 、 批改图书、和初始化集体书库治理窗体表格    15.   *     16.   * @author 1651200111 陈彦志    17.   */    18.  public class BookAction {    22.      /**    23.   * 初始化窗体表格    24.   * @return    25.   *         results    26.   */    27.      @SuppressWarnings("rawtypes")    28.      public Object[][] initializTable(String[] columnNames) throws Exception{    29.          BookDao bookDao = new BookDao();    30.          List list = bookDao.query();    31.          Object[][] results = new Object[list.size()][columnNames.length];    33.          for(int i = 0; i < list.size(); i++) {    34.              Book book = (Book)list.get(i);                    36.              results[i][0] = book.getID();    37.              results[i][1] = book.getBookName();    38.              results[i][2] = book.getAuthor();    39.              results[i][3] = book.getPrice();    40.              results[i][4] = book.getISBN();    41.              results[i][5] = book.getPublishHouse();    42.              results[i][6] = book.getBookCategory();        44.              String borrowerName =  book.getBorrowerName();    45.              if (borrowerName == null) {        46.                  borrowerName = "";        47.                  results[i][7] = borrowerName;    48.              }    49.              else {        50.                  results[i][7] = borrowerName;    51.              }    53.              String borrowerPhone = book.getBorrowerPhone();        54.              if (borrowerPhone == null) {            55.                  borrowerPhone = "";        56.                  results[i][8] = borrowerPhone;    57.              }        58.              else {        59.                  results[i][8] = borrowerPhone;    60.              }    61.          }               62.          return results;    63.  }    66.       /**    67.   * 增加图书信息    68.   */    69.      public void addBookInformation (JTextField textFieldISBN, JTextField textFieldName    70.   ,JTextField textFieldPrice, JTextField textFieldAuthor, JTextField textFieldPublishedHouse    71.   , JTextField textFieldBookCategory, JTextField textFieldBorrowName    72.   , JTextField textFieldBorrowPhone) throws Exception {    74.          BookDao bookDao=new BookDao();    75.          Book book=new Book();         77.          book.setISBN(textFieldISBN.getText());          78.          book.setBookName(textFieldName.getText());    79.          float price = Float.parseFloat(textFieldPrice.getText());    80.          book.setPrice(price);    81.          book.setAuthor(textFieldAuthor.getText());    82.          book.setPublishHouse(textFieldPublishedHouse.getText());    83.          book.setBookCategory(textFieldBookCategory.getText());    85.          if (textFieldBorrowName.getText() == null ||textFieldBorrowName.getText() == "" ) {    86.              book.setBorrowerName(null);    87.          }    88.          else {    89.               book.setBorrowerName(textFieldBorrowName.getText());    90.          }    92.          if (textFieldBorrowPhone.getText() == null || textFieldBorrowPhone.getText() == "") {    93.              book.setBorrowerPhone(null);    94.          }    95.          else {    96.              book.setBorrowerPhone(textFieldBorrowPhone.getText());    97.          }    99.          //增加图书    100.          bookDao.addBook(book);    101.      }    105.      /**    106.   * 删除图书信息    107.   */    108.      public void delBookInformation (JTable table) throws Exception {    110.          int selRow = table.getSelectedRow();    111.          int ID = Integer.parseInt(table.getValueAt(selRow, 0).toString());    113.          BookDao bookDao=new BookDao();    114.          Book book=new Book();         116.          book.setID(ID);    118.          // 删除图书信息    119.          bookDao.delBook(ID);    120.      }    123.      /**    124.   * 批改图书信息    125.   */    126.      public void changeBookInformation (JTextField textFieldISBN, JTextField textFieldName    127.   ,JTextField textFieldPrice, JTextField textFieldAuthor, JTextField textFieldPublishedHouse    128.   , JTextField textFieldBookCategory, JTextField textFieldBorrowerName    129.   , JTextField textFieldBorrowerPhone, JTable table) throws Exception{    131.          BookDao bookDao=new BookDao();    132.          Book book=new Book();         134.          int selRow = table.getSelectedRow();    135.          int ID = Integer.parseInt(table.getValueAt(selRow, 0).toString());        136.          book.setID(ID);    138.          book.setISBN(textFieldISBN.getText());          139.          book.setBookName(textFieldName.getText());    140.          book.setAuthor(textFieldAuthor.getText());    141.          float price = Float.parseFloat(textFieldPrice.getText());    142.          book.setPrice(price);    143.          book.setPublishHouse(textFieldPublishedHouse.getText());    144.          book.setBookCategory(textFieldBookCategory.getText());    145.          book.setBorrowerName(textFieldBorrowerName.getText());    146.          book.setBorrowerPhone(textFieldBorrowerPhone.getText());    148.          //批改图书    149.          bookDao.changeBook(book);           150.      }    153.  } 

util类(以DBUtil为例)

1.  package pers.cyz.util;    3.  import java.sql.Connection;    4.  import java.sql.DriverManager;    5.  import java.sql.SQLException;    7.  /**    8.   * 连贯数据库类,蕴含一个对外提供获取数据库连贯的办法    9.   *     10.   * @author 1651200111 陈彦志    11.   */    12.  public class DBUtil {    14.      // 数据库连贯门路    15.      private static final String URL = "jdbc:mysql://127.0.0.1:3306/db_books?"    16.              + "useUnicode = true & serverTimezone = GMT"    17.              // MySQL在高版本须要指明是否进行SSL连贯    18.              + "& characterEncoding = utf8 & useSSL = false";    19.      private static final String NAME = "root";    20.      private static final String PASSWORD = "root";    21.      private static Connection conn = null;    23.      // 动态代码块(将加载驱动、连贯数据库放入动态块中)    24.       static{    25.              try {    26.                  // 加载驱动程序    27.                  Class.forName("com.mysql.cj.jdbc.Driver");    28.                  // 获取数据库的连贯    29.                  conn = DriverManager.getConnection(URL, NAME, PASSWORD);    30.              } catch (ClassNotFoundException e) {    31.                  e.printStackTrace();    32.              } catch (SQLException e) {    33.                  e.printStackTrace();    34.              }    35.          }    37.       // 对外提供一个办法来获取数据库连贯     38.       public static Connection getConnection(){         39.           return conn;           40.       }    43.  }    

util类(以BackgroundImage为例)

1.  package pers.cyz.util;    3.  import java.awt.Container;    5.  import javax.swing.ImageIcon;    6.  import javax.swing.JFrame;    7.  import javax.swing.JLabel;    8.  import javax.swing.JPanel;    10.  /**    11.   * 设置背景图片类    12.   *     13.   * @author 1651200111 陈彦志    14.   */    15.  public class BackgroundImage {    17.      public BackgroundImage(JFrame frame,Container container,String ImageName) {    18.          // 限定加载图片门路    19.          ImageIcon icon= new ImageIcon("res/" + ImageName);        21.          final JLabel labelBackground = new JLabel();    22.          ImageIcon iconBookManageSystemBackground = icon;    23.          labelBackground.setIcon(iconBookManageSystemBackground);    24.          // 设置label的大小    25.          labelBackground.setBounds(0,0,iconBookManageSystemBackground.getIconWidth()    26.                  ,iconBookManageSystemBackground.getIconHeight());            27.          // 将背景图片标签放入桌面面板的最底层    28.          frame.getLayeredPane().add(labelBackground,new Integer(Integer.MIN_VALUE));    29.          // 将容器转换为面板设置为通明    30.          JPanel panel = (JPanel)container;    31.          panel.setOpaque(false);    33.      }    36.  }    

重点内容 :

将图片标签放在窗体底层面板,而后将窗体转化为容器,将容器面板设为通明,背景图片就设置好了,之后就能够间接在该容器中增加组件