jdbc Implements Library Borrowing System

  • 2021-06-29 11:10:58
  • OfStack

Preface

Every java student at school will have an java course design at the end of the semester. The most likely topic chosen is the Book Management System. This article can help you.Limited capabilities, code with comments below bug

brief introduction

The library management system is divided into user login and administrator login. The control of the whole system is operated under the console.

User Layer

Users can register, log on, borrow books, check books, modify passwords, return books and other functions.

Administrator level

Administrators can perform functions such as managing books, including new book shelves, modifying inventory information, and so on.

System itself

The system itself can lock the function of prohibiting borrowing according to whether the user has overdue or not.

java Knowledge Required

java Basic Syntax, Container (list), jdbc, sql Statement.

po Layer Code


/**
 * 
 *  Operations of the database are handled separately, and more logical changes are written at a higher logical level.Decrease coupling 
 *
 */
public class LibararyDao {

  /**
   *  Registered Books 
   * @param user  Register book information 
   * @return
   */
  public boolean addBook(Bookinfo bookinfo){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "insert into bookinfo (bookname,zuozhe,shuliang,shengyushuliang,date)"
          + " values (?,?,?,?,?) ";
      PreparedStatement pre =con.prepareStatement(sql);
      pre.setString(1, bookinfo.getBookname());
      pre.setString(2, bookinfo.getZuozhe());
      pre.setInt(3, bookinfo.getShuliang());
      pre.setInt(4, bookinfo.getShuliang());
      pre.setDate(5, new java.sql.Date(bookinfo.getData().getTime()));
      pre.execute();

    } catch (SQLException e) {
      System.out.println(" Book registration failed ");
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   *  Register Account 
   * @param user  Registration Information 
   * @return
   */
  public boolean addUser(User user){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "insert into userinfo (username,password,books) values (?,?,0) ";
      PreparedStatement pre =con.prepareStatement(sql);
      pre.setString(1, user.getUsername());
      pre.setString(2, user.getPassword());
      pre.execute();

    } catch (SQLException e) {
      System.out.println(" login has failed ");
      e.printStackTrace();
      return false;
    }
    return true;
  }


  /**
   *  Query Users 
   * @param user  information 
   * @return
   */
  public ResultSet queryUser(User user){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "select * from userinfo where username = ? ";
      PreparedStatement pre;
      pre = con.prepareStatement(sql);
      pre.setString(1, user.getUsername());
      ResultSet r =pre.executeQuery();
      return r;
    } catch (SQLException e) {
      System.out.println(" Query failed ");
      e.printStackTrace();
      return null;
    }
  }


  /**
   *  Update Holdings 
   * @param user  information 
   * @return
   */
  public boolean updateUserbooks(User user){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "update userinfo set books = ? where username = ? ";
      PreparedStatement pre;
      pre = con.prepareStatement(sql);
      pre.setInt(1, user.getBooks());
      pre.setString(2, user.getUsername());
      int r =pre.executeUpdate();
      if(r>0){
        return true;
      }else{
        return false;
      }
    } catch (SQLException e) {
      System.out.println(" Query failed ");
      e.printStackTrace();
      return false;
    }
  }

  /**
   *  Insert in Borrowing List 
   * @param username  Borrower 
   * @param bookname  Title 
   * @return
   */
  public boolean addborrowinfo(String username,String bookname){
    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "insert into borrowinfo (username,bookname,borrowdate,returndate)"
          + " values (?,?,?,?) ";
      PreparedStatement pre;
      pre = con.prepareStatement(sql);
      pre.setString(1, username);
      pre.setString(2, bookname);
      pre.setDate(3, new java.sql.Date(new Date().getTime()));
      pre.setDate(4, new java.sql.Date(DateUtil.addMonth(new Date()).getTime()));
      pre.execute();

    } catch (SQLException e) {
      System.out.println(" Failed to borrow books ");
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   *  Search Books 
   * @param bookname  Title 
   * @return
   */
  public ResultSet queryBook(String bookname){
    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "select * from bookinfo where bookname ='"+bookname+"'";
      PreparedStatement pre;
      pre = con.prepareStatement(sql);
      ResultSet r =pre.executeQuery();
      return r;
    }
    catch (SQLException e) {
      System.out.println(" Failed to borrow books ");
      e.printStackTrace();
      return null;
    }}
  /**
   *  Query all books 
   * @return
   */
  public ResultSet queryAllBook(){
    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "select * from bookinfo ";
      PreparedStatement pre;
      pre = con.prepareStatement(sql);
      ResultSet r =pre.executeQuery();
      return r;
    }
    catch (SQLException e) {
      System.out.println(" Failed to borrow books ");
      e.printStackTrace();
      return null;
    }
  }
  /**
   *  paging  
   * @param page
   * @return
   */
    public ResultSet querySubBookInfo(int page){
      try {

        Connection con =JDBCutil.creatConnection();
        PreparedStatement pre;
        String sql = "select * from bookinfo limit ?,5 ";

        pre = con.prepareStatement(sql);
        pre.setInt(1, page);
        ResultSet r =pre.executeQuery();

        return r;
      }
      catch (SQLException e) {
        System.out.println(" Failed to borrow books ");
        e.printStackTrace();
        return null;
      }


  }
  /**
   *  Data Pages  5 Bar data is 1 group 
   * @return
   */
  public int queryPageInfo(){

    try {
      int zongshu = 0;
      Connection con =JDBCutil.creatConnection();
      String sql1 = "select count(id) as cou from bookinfo ";

      Statement sta =con.createStatement();
      ResultSet res =sta.executeQuery(sql1);
      if(res.next())
      {
        zongshu = res.getInt("cou");
        if(zongshu == 0)return 0;
      }
      int a =0;
      if(zongshu%5==0){
        a = zongshu/5;
      }else{
        a = zongshu/5+1;
      }

      return a;
    }
    catch (SQLException e) {
      System.out.println(" Failed to borrow books ");
      e.printStackTrace();
      return -1;
    }

  }


  /**
   *  Update remaining quantity 
   * @param bookname  Title 
   * @param sysl  Number 
   * @return
   */
  public boolean updateBookinfo(String bookname,int sysl){
    try {
      Connection con =JDBCutil.creatConnection();

      String sql = "update bookinfo set shengyushuliang = ? where bookname = ?";
      PreparedStatement pre;
      pre = con.prepareStatement(sql);
      pre.setInt(1,sysl);
      pre.setString(2, bookname);

      int r =pre.executeUpdate();

      if(r>0){
        return true;
      }else{
        return false;
      }
    } catch (SQLException e) {
      System.out.println(" Failed to borrow books ");
      e.printStackTrace();
      return false;
    }
    }



    /*public boolean queryBook(String...strings){
      try {
        Connection con =JDBCutil.creatConnection();
        String sql = "select bookname from bookinfo where 1=1 ";

        PreparedStatement pre;
        pre = con.prepareStatement(sql);
        ResultSet r =pre.executeQuery();
        if(r.next()){
          return true;
        }else{
          return false;
        }
      } catch (SQLException e) {
        System.out.println(" Failed to borrow books ");
        e.printStackTrace();
        return false;
      }*/
    /**
     *  Query the user for all borrowing information  
     * @param username
     * @return
     */
  public ResultSet queryBorrowinfo(String username){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "select * from borrowinfo where username = '"+username+"'";
      PreparedStatement pre = con.prepareStatement(sql);
      ResultSet r =pre.executeQuery();
      return r;
    } catch (SQLException e) {
      System.out.println(" Query failed ");
      e.printStackTrace();
      return null;
    }
  }
  /**
   *  Query borrowing information 
   * @param username
   * @return
   */
  public ResultSet queryBorrowinfo(String username,String bookname){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "select * from borrowinfo where username = ? and bookname = ?";
      PreparedStatement pre = con.prepareStatement(sql);
      pre.setString(1, username);
      pre.setString(2, bookname);
      ResultSet r =pre.executeQuery();
      return r;
    } catch (SQLException e) {
      System.out.println(" Query failed ");
      e.printStackTrace();
      return null;
    }

  }
  /**
   *  Delete Borrowed Books 
   * @param username  Name 
   * @param bookname  Title 
   * @return
   */
  public boolean deleteBorrowInfo(String username,String bookname){

    try {
      Connection con =JDBCutil.creatConnection();
      String sql = "delete from borrowinfo where username = ? and bookname = ? ";
      PreparedStatement pre = con.prepareStatement(sql);
      pre.setString(1, username);
      pre.setString(2, bookname);
      pre.execute();
      return true;
    } catch (SQLException e) {
      System.out.println(" Query failed ");
      e.printStackTrace();
      return false;
    }
  }

}

control Layer Code


/**
 * asdfasd 发斯蒂芬
 * 
 */

package library.controller;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import library.dao.LibararyDao;
import library.po.Bookinfo;
import library.po.BorrowInfo;
import library.po.User;

public class BookController {
  private static LibararyDao bookdao;
  private BorrowInfo b;
  public BookController() {
    if(bookdao == null) bookdao = new LibararyDao();
  }

  public static void main(String[] args) {
  //System.out.println(new BookController().addUser(new User("123", "dvdf")));
      //System.out.println(new BookController().borrowBook("123", new User("123", "dvdf")));
  // new BookController().fenyeInfo(2);


  }

  /**
   * 用户登录
   * @param user 传过来的账号密码
   * @return 返回1为登陆成功 2为不存在 3异常
   */
  public int loginUser(User user){

    ResultSet rs =bookdao.queryUser(user);//验证用户是否存在
    try {
      if(rs!=null&&rs.next()){
        boolean b =rs.getString("password").equals(user.getPassword());
        if(b){
          return 1;
        }
      }
      return 2;
    } catch (SQLException e) {
      e.printStackTrace();
      return 3;
    }  

  }

  /**
   * 管理员登陆
   * @param user 传过来的账号密码
   * @return 返回1为登陆成功 2为不存在 3异常
   */
  public int loginGuanli(User user){

    ResultSet rs =bookdao.queryUser(user);//验证管理员是否存在
    try {
      if(rs!=null&&rs.next()){
        boolean b =rs.getString("password").equals(user.getPassword());
        int b1 = rs.getInt("isguanli");//管理员标志位1
        if(b&&b1==1){
          return 1;
        }
      }return 2;
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 3;
    }  

  }
  /**
   * 查询书籍列表
   * @return 返回1为查询成功并已经输出 2为失败或其他
   */
  public int queryBookinfo(){

    try {
      ResultSet r =bookdao.queryAllBook();
      while(r!=null&&r.next()){
        System.out.println("书名"+r.getString("bookname")+"作者"+
            r.getString("zuozhe")+"总数"+r.getInt("shuliang")+"剩余数量"+r.getInt("shengyushuliang"));
      }
      if(r==null)return 2;
      return 1;
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 2;
    }



  }
  /**
   * 查询书籍数量和剩余数量
   * @return 返回1为查询成功并已经输出 2为失败或其他
   */
  public ResultSet queryBookK(String bookname){

      ResultSet r =bookdao.queryBook(bookname);
      return r;

  }
  /**
   * 查询书籍
   * @return 返回1为查询成功并已经输出 2为失败或其他
   */
  public int queryBook(String bookname){
    try {
      ResultSet r =bookdao.queryBook(bookname);
      while(r!=null&&r.next()){
        System.out.println("书名"+r.getString("bookname")+"作者"+
            r.getString("zuozhe")+"总数"+r.getInt("shuliang")+"剩余数量"+r.getInt("shengyushuliang"));
      }
      if(r==null)return 2;
      return 1;
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 2;
    }

  }

  /**
   * 加入新的图书信息
   * @param bookinfo 书籍的详细信息
   * @return 1成功 2失败
   */
  public int addBookinfo(Bookinfo bookinfo){
    boolean b = bookdao.addBook(bookinfo);
    if(b)return 1;
    return 2;
  }




  /**
   * 注册用户
   * @param user
   * @return
   */
  public int addUser(User user){
    ResultSet rs =bookdao.queryUser(user);
    try {

      if(rs!=null&&!rs.next()){
        boolean b =bookdao.addUser(user);
        if(b)return 1; 
      }
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 3;
    }  
    return 2;
  }

  /**
   * 查询用户所有信息
   * @param user
   * @return
   */
  public int queryUser(User user){
    ResultSet r = bookdao.queryUser(user);
    try {
      if(r.next()){
        user.setBooks(r.getInt("books"));
        System.out.println(user);
        return 1;
      }
        return 2;

    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 2;
    }


  }


  /**
   * 借书 先检查书是否存在,再检查书籍是否有库存,然后检查是否已结借此书
   * 最后以上检查没有错误,就可以借书。 用户持有数量增加,借书信息详解录入,库存更新
   * 
   * 注意事项 
   * 1 resultset 默认指向数据前1个位置 必须 用 next 
   * 2 需要加入事务 防止出现错误造成数据表更新不1致
   * @param bookname 书名
   * @return
   */
  public String borrowBook(String bookname,User user){
    try {
      if(!bookdao.queryBook(bookname).next()){
        return "借书失败-书籍不存在";}

      ResultSet querybookrs = bookdao.queryBook(bookname);
      while(querybookrs.next()){
        int t = querybookrs.getInt("shengyushuliang");
        if(t<1){return "库存不足";}

        ResultSet rs =bookdao.queryBorrowinfo(user.getUsername());

        if(rs!=null&&!rs.next()){


          //加入借阅详细信息
          boolean b1 =bookdao.addborrowinfo(user.getUsername(), bookname);


          //更新借书数量
          ResultSet rs1 = bookdao.queryUser(user);
          rs1.next();
          user.setBooks(rs1.getInt("books")+1);
          bookdao.updateUserbooks(user);


          //更新库存
          boolean b2 =bookdao.updateBookinfo(bookname, t-1);
          //System.out.println(b1+" "+b2);

          return b1?(b2?"借书成功":"借书失败"):("借书失败");

        }
       }

      return null;

    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return "借书失败-其他错误";
    }


  }
  /**还书
   * 更新用户持有数,归还书的库存,删除借书信息表中信息
   * @param user 更新数据数 
   * @param bookinfo 更新库存后的数
   * @return
   */
  public int returnBook(User user,String bookname){

    boolean b1 = bookdao.deleteBorrowInfo(user.getUsername(),bookname);
    boolean b2 = false;
    boolean b3 = false;
    try {
      //更新库存
      ResultSet r = bookdao.queryBook(bookname);
      if(r.next()){
        int i = r.getInt("shengyushuliang");
        b2 = bookdao.updateBookinfo(bookname,i+1);
      }

      //更新持有书数
      r = bookdao.queryUser(user);
      if(r.next()){
        int i = r.getInt("books");
        user.setBooks(i-1);
        b3 =bookdao.updateUserbooks(user);
      }

      if(!b1||!b2||!b3){
        return 2;
      }
      return 1;
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 2;
    }

  }



  /**
   * 查询用户的借书情况
   * @param user 用户
   * @return 返回借阅信息
   */
  public List<BorrowInfo> queryborrowinfo(User user){


    ResultSet r =  bookdao.queryBorrowinfo(user.getUsername());
    List<BorrowInfo> l = new ArrayList<BorrowInfo>();
    try {
      while(r!=null&&r.next()){

        b = new BorrowInfo();
        b.setUsername(r.getString("username"));
        b.setBookname(r.getString("bookname"));
        b.setBorrowdate(r.getDate("borrowdate"));
        b.setReturndate(r.getDate("returndate"));
        l.add(b);

      }
      return l;
    } catch (SQLException e) {

      e.printStackTrace();
      return null;
    }
  }
  /**
   * 指定页码
   * @param age
   */
  public void fenyeInfo(int age){
    int i =bookdao.queryPageInfo();
    System.out.println("总页数:"+i);
    try {
      if(i>0){
        ResultSet r = bookdao.querySubBookInfo((age-1)*5);
        while(r!=null&&r.next()){
          System.out.println("书名"+r.getString("bookname")+"作者"+
          r.getString("zuozhe")+"总数"+r.getInt("shuliang")+"剩余数量"+r.getInt("shengyushuliang"));  
          }
      }  

    } catch (SQLException e) {
      e.printStackTrace();
    }

  }
  /**
   * 指定上下页
   * @param age
   */
  public void fenyeInfo(String age){


  }

  /**
   * 更新图书信息
   * 更新作者,库存,剩余数量,不更新日期,书名(不就是添加了新的书籍了吗)
   * 可更新任务可以多选
   * 
   * 书名进行判断是否存在
   * 库存和剩余数量进行逻辑上的验证
   */
  public void updateBookinfo(String bookname){
    Scanner scan = new Scanner(System.in);

    System.out.println("更新作者输入:1,跳过11");
    int i =scan.nextInt();
    List<List<String>> list = new ArrayList<List<String>>();
    List<String> list1 = null;
    if(i==1){
      String newbookname = scan.next();
      list1 = new ArrayList<String>();
      list1.add("zuozhe");
      list1.add("'"+newbookname+"'");
      list.add(list1);
    }
    //如果更新了库存,剩余数量也会跟着更新 需要判断库存逻辑的正确性
    System.out.println("更新数量输入2,跳过22");
    int ii = scan.nextInt();
    if(ii==2){
      System.out.println("请更新库存数量");
      int newsum = scan.nextInt();
      //判断数量逻辑的正确性
      ResultSet r = queryBookK(bookname);
      int oldsum=0;int sykc=0;//旧库存和剩余数量
      try {
        while(r.next()){
          oldsum = r.getInt("shuliang");
          sykc = r.getInt("shengyushuliang");
        }
        if(newsum>oldsum){
          sykc+=newsum-oldsum;//记录更新后的剩余数量
          //System.out.println("根据已有库存,库存总量为---"+newsum);
        }
        else if(newsum<oldsum&&newsum>=sykc){//如何新的库存少于就库存。判断新库存与剩余数量的关系
          sykc-=newsum;
        }else{
          System.out.println("输入错误");
          return ;
        }



      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }



      list1 = new ArrayList<String>();
      list1.add("shuliang");
      list1.add(String.valueOf(newsum));
      list.add(list1);
      list1 = new ArrayList<String>();
      list1.add("shengyushuliang");
      list1.add(String.valueOf(sykc));
      list.add(list1);
    }
    bookdao.updateBookinfo(list, bookname);
  }

}

view Layer


package library.view;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

import library.controller.BookController;
import library.po.Bookinfo;
import library.po.BorrowInfo;
import library.po.User;

/**
 * 视图类,也是界面的显示层。程序运行的入口
 * 想说的话:
 * 如果使用web作为v层,只需要把bookrun方法拆开就可以了。对应会话跟踪,把 private static User user 存入session对象就可以了
 * 框架的话用springmvc 。对于dao加入orm框架(hibernate ,mybatis)。整合起来也就是常见的ssm体系或ssh体系
 * 数据库的选择更是随你心情。mysql SQLserver 等等。
 * 项目bug仔细看的话很多。本意想给入门的同学1个思路方向。对于1些变量的命名请不要学我(偷懒),养成1个良好的
 * 习惯。祝你在编程的道路上越走越远!!
 */
public class View {
  //controller 业务控制类
  private static BookController bookc = new BookController();
  //登陆后的用户跟踪类似session
  private static User user;
  //控制主界面的循环
  private static boolean flag = true;
  //接受控制台输入
  private static Scanner scan = new Scanner(System.in);

  public static void main(String[] args) {
   bookRun();
  }



  //主界面  应该考虑其他输入的限定 (当输入字符时,系统停止运行)
  public static void bookRun(){
      try{
        do{
          System.out.println("欢迎来到图书借阅系统\n登陆输入: 1\n注册输入: 2\n管理员管理:3");
          int i1 = scan.nextInt();

          switch (i1) {
          case 1://登陆逻辑
            System.out.println("输入账号");
            String username = scan.next();
            System.out.println("密码");
            String password = scan.next();

            int i =bookc.loginUser(new User(username, password));

            if(i==1){

              System.out.println("登陆成功");
              user = new User(username, password);
              loginSuccess(user);

            }else if(i!=1){
              System.out.println("登陆失败,检查密码或者账号");
              }
            break;

          case 2:
            //注册逻辑 可以添加验证密码 进行密码的确定  java api有把明文进行处理的方法,请自行搜索
            //还可以加入正则表达式进行账号的限定(对于特殊字符输入的处理等)
            System.out.println("输入申请账号");
            String username1 = scan.next();
            System.out.println("密码");
            String password1 = scan.next();
            //此处可以再次确认密码的逻辑
            System.out.println(addUser(new User(username1, password1)));
            System.out.println("返回上1层");

            break;

          case 3://管理员逻辑
            System.out.println("输入管理员账号");
            String username2 = scan.next();
            System.out.println("密码");
            String password2 = scan.next();
            user = new User(username2, password2);
            int i2 =bookc.loginGuanli(user);
            if(i2==1){
              loginGuanliSuccess();
            }else{
              System.out.println("登陆失败,检查密码或者账号");
            }

            break;

          default :
            System.out.println("输入序号不正确");
            break;
          }

        }while(flag);


      }catch(InputMismatchException e){
        System.out.println("输入异常,请重启系统");
      }


  }

  //此处可以添加新的功能而不影响已有功能 (可以改为switch语句)
  private static void loginGuanliSuccess() {
    while(true){
      System.out.println("添加图书:1\n更改图书信息:2\n返回:3");
      int i = scan.nextInt();
      if(i==1){
        addBook();
      }else if(i==2){
        updateBookinfo();
      }else if(i==3){
        return;
      }
    }

  }

//更新图书
/**
 * 更新图书 只有管理员权限可以操作
 */
  private static void updateBookinfo() {



    //应该判断书名是否存在 contro层设计
    System.out.println("请输入书名");
    String bookname = scan.next();
    int a = bookc.queryBook(bookname);
    if(a!=1){
      System.out.println("不存在,已返回上1层");
      return;
    }

/*   System.out.println("更新作者输入1,跳过11");
    int i =scan.nextInt();
    List<List<String>> list = new ArrayList<List<String>>();
    List<String> list1 = null;
    if(i==1){
      String newbookname = scan.next();
      list1 = new ArrayList<String>();
      list1.add("zuozhe");
      list1.add("'"+newbookname+"'");
      list.add(list1);
    }
    //如果更新了库存,剩余数量也会跟着更新 需要判断库存逻辑的正确性
    System.out.println("更新数量输入2,跳过22");
    int ii = scan.nextInt();
    if(ii==2){
      //判断数量逻辑的正确性
      ResultSet r =bookc.queryBookK(bookname);
      try {
        int i1=0;int i2=0;
        while(r.next()){
          i1 = r.getInt("shuliang");
          i2 = r.getInt("shengyushuliang");
        }
        if(ii>i1){
          i2+=ii-i1;
        }
        if(ii<i1&&ii>=i2){

        }
        System.out.println("更新后的数量错误");
        return;



      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }




      String newkucun= scan.next();
      list1 = new ArrayList<String>();
      list1.add("shuliang");
      list1.add(newkucun);
      list.add(list1);
    }*/

    bookc.updateBookinfo(bookname);
  }


//添加图书 需要保证名字唯1性
  private static void addBook() {
    System.out.println("图名");
    String bookname = scan.next();
    System.out.println("作者");
    String zuozhe = scan.next();
    System.out.println("数量");
    int  shuliang = scan.nextInt();
    Bookinfo bookinfo = new Bookinfo(bookname, zuozhe, shuliang, shuliang,new Date());
    int i =bookc.addBookinfo(bookinfo);
    if(i==1){
      System.out.println("添加成功");

    }else{
      System.out.println("错误");
    }

  }

  //注册界面的实现
  private static String addUser(User user){
    switch (bookc.addUser(user)) {
    case 1:
      return "注册成功";

    case 2:
      return "用户已注册";

    case 3:
      return "其他错误,重试";
    }

    return "其他错误,重试";

  }
  //登陆功能实现
  private static void loginSuccess(User user ){
    while (true){
      System.out.println("查看借阅信息请输入:1,借书:2,还书:3,账号信息:4,退出:5"
          + "查询图书:6修改密码:7\n");
      int i = scan.nextInt();
      switch (i) {
      case 1:
        borrowInfo(user);
        break;
      case 2:
        borrowBook(user);
        break;
      case 3:
        returnBook(user);
        break;
      case 4:
        queryUser(user);
        break;
      case 5:
        return ;
      case 6:
        System.out.println("请输入书名");

        queryBook(scan.next());
        break;
      case 7: break;
      default:
        System.out.println("输入错误");
        break;
      }
    }


  }
  //查询借阅信息
  private static void borrowInfo(User user ){
    List<BorrowInfo> l=bookc.queryborrowinfo(user);
    if(l==null||l.isEmpty()){
      System.out.println("没有借阅信息");
      return;
    }
    for (BorrowInfo borrowInfo : l) {
      System.out.println(borrowInfo);
    }

  }
  //借书
  private static void borrowBook(User user){
    System.out.println("请输入借阅的书籍名称");
    String bookname =scan.next();
    String flog = bookc.borrowBook(bookname, user);
    System.out.println(flog);
    System.out.println("是否继续借书:y|n");
    String flog1 = scan.next();
    if(flog1.equalsIgnoreCase("y")){
      borrowBook(user);
    }
  }
  //还书
  private static void returnBook(User user1 ){
    List<BorrowInfo> l=bookc.queryborrowinfo(user1);
    if(l==null||l.isEmpty()){
      System.out.println("没有借阅信息");
      return;
    }
    for (BorrowInfo borrowInfo : l) {
      System.out.println(borrowInfo);
    }
    System.out.println("请输入要还书籍的名字");
    String bookname = scan.next();
    int flog =bookc.returnBook(user1, bookname);
    if(flog==1){
      System.out.println("还书成功");
    }else{
      System.out.println("失败");
    }
    System.out.println("是否继续还书:y|n");
    String flog1 = scan.next();
    if(flog1.equalsIgnoreCase("y")){
      returnBook(user1);
    }  

  }
  //用户信息
  private static void queryUser(User user){
    int i =bookc.queryUser(user);
    if( i!=1){
      System.out.println("失败");
    }
  }

  private static void queryBook(String bookname){
    int i = bookc.queryBook(bookname);
    if(i!=1)System.out.println("书籍不存在");
  }

  private static void GuanliFace(){
    while(true){
      System.out.println("查询书籍列表请输入 :1;添加图书:2;使用分页查看书籍列表");
      int i =scan.nextInt();
      switch (i) {
      case 1:
        int i1= bookc.queryBookinfo();
        if(i1==2)System.out.println("错误");
        break;
      case 2:
        System.out.println("书名");
        String booknname1 = scan.next();
        System.out.println("作者");
        String zuozhe1 = scan.next();
        System.out.println("数量");
        int shuliang1 = scan.nextInt();
        Date date = new Date();
        int i3 = bookc.addBookinfo(new Bookinfo(booknname1, zuozhe1, shuliang1, shuliang1, date));
        if(i3==2)System.out.println("错误");
        break;
      case 3:
      default:
        System.out.println("错");
        break;
      }
    }

  }

  private static void fenyeInfo(){

  }


}

data base


/ User table 
CREATE TABLE `userinfo` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `username` varchar(20) COLLATE utf8_bin DEFAULT NULL,
 `password` varchar(20) COLLATE utf8_bin DEFAULT NULL,
 `books` int(10) DEFAULT NULL,
 `isguanli` int(10) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


/ Borrowing information 
CREATE TABLE `borrowinfo` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `username` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
 `bookname` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
 `borrowdate` date DEFAULT NULL,
 `returndate` date DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

/ Book Information   Phonetics for fields :-D
CREATE TABLE `bookinfo` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `bookname` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 `zuozhe` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
 `shuliang` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
 `shengyushuliang` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
 `date` date DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Related articles: