最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jdbc實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng)

 更新時(shí)間:2022年03月10日 12:20:38   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了jdbc實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

每位在學(xué)校學(xué)java的同學(xué)在期末會(huì)有java課程設(shè)計(jì),而選題很可能就是圖書(shū)管理系統(tǒng),此篇文章可以幫助到你。能力有限,代碼有bug可以下方的評(píng)論區(qū)指明

簡(jiǎn)介

圖書(shū)館管理系統(tǒng)分為用戶(hù)登錄和管理員登錄,整個(gè)系統(tǒng)的控制是在控制臺(tái)下進(jìn)行操作的。

用戶(hù)層

用戶(hù)可以進(jìn)行注冊(cè),登錄,借書(shū),查書(shū),密碼修改,還書(shū)等功能。

管理員層

管理員可以進(jìn)行對(duì)管理書(shū)籍包括新書(shū)上架,修改庫(kù)存信息等功能。

系統(tǒng)本身

系統(tǒng)本身可以根據(jù)用戶(hù)是否逾期進(jìn)行鎖定禁止借書(shū)的功能等。

需要掌握的java知識(shí)

java基礎(chǔ)語(yǔ)法,容器(list),jdbc,sql語(yǔ)句。

po層代碼

/**
 * 
 * 對(duì)數(shù)據(jù)庫(kù)的操作進(jìn)行單獨(dú)處理,更多的邏輯更改在更高的邏輯層編寫(xiě)。降低耦合
 *
 */
public class LibararyDao {

  /**
   * 注冊(cè)圖書(shū)
   * @param user 注冊(cè)圖書(shū)信息
   * @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("圖書(shū)注冊(cè)失敗");
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   * 注冊(cè)賬號(hào)
   * @param user 注冊(cè)信息
   * @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("注冊(cè)失敗");
      e.printStackTrace();
      return false;
    }
    return true;
  }


  /**
   * 查詢(xún)用戶(hù)
   * @param user 信息
   * @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("查詢(xún)失敗");
      e.printStackTrace();
      return null;
    }
  }


  /**
   * 更新持有書(shū)
   * @param user 信息
   * @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("查詢(xún)失敗");
      e.printStackTrace();
      return false;
    }
  }

  /**
   * 借書(shū)表中插入
   * @param username 借書(shū)人
   * @param bookname 書(shū)名
   * @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("借書(shū)失敗");
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   * 查書(shū)
   * @param bookname 書(shū)名
   * @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("借書(shū)失敗");
      e.printStackTrace();
      return null;
    }}
  /**
   * 查詢(xún)所有的書(shū)籍
   * @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("借書(shū)失敗");
      e.printStackTrace();
      return null;
    }
  }
  /**
   * 分頁(yè) 
   * @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("借書(shū)失敗");
        e.printStackTrace();
        return null;
      }


  }
  /**
   * 數(shù)據(jù)頁(yè)數(shù) 五條數(shù)據(jù)為一組
   * @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("借書(shū)失敗");
      e.printStackTrace();
      return -1;
    }

  }


  /**
   * 更新剩余數(shù)量
   * @param bookname 書(shū)名
   * @param sysl 數(shù)量
   * @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("借書(shū)失敗");
      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("借書(shū)失敗");
        e.printStackTrace();
        return false;
      }*/
    /**
     * 查詢(xún)用戶(hù)的所有的借閱信息 
     * @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("查詢(xún)失敗");
      e.printStackTrace();
      return null;
    }
  }
  /**
   * 查詢(xún)借閱信息
   * @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("查詢(xún)失敗");
      e.printStackTrace();
      return null;
    }

  }
  /**
   * 刪除借書(shū)
   * @param username 人名
   * @param bookname 書(shū)名
   * @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("查詢(xún)失敗");
      e.printStackTrace();
      return false;
    }
  }

}

control層代碼

/**
 * asdfasd 發(fā)斯蒂芬
 * 
 */

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);


  }

  /**
   * 用戶(hù)登錄
   * @param user 傳過(guò)來(lái)的賬號(hào)密碼
   * @return 返回1為登陸成功 2為不存在 3異常
   */
  public int loginUser(User user){

    ResultSet rs =bookdao.queryUser(user);//驗(yàn)證用戶(hù)是否存在
    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 傳過(guò)來(lái)的賬號(hào)密碼
   * @return 返回1為登陸成功 2為不存在 3異常
   */
  public int loginGuanli(User user){

    ResultSet rs =bookdao.queryUser(user);//驗(yàn)證管理員是否存在
    try {
      if(rs!=null&&rs.next()){
        boolean b =rs.getString("password").equals(user.getPassword());
        int b1 = rs.getInt("isguanli");//管理員標(biāo)志位1
        if(b&&b1==1){
          return 1;
        }
      }return 2;
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 3;
    }  

  }
  /**
   * 查詢(xún)書(shū)籍列表
   * @return 返回1為查詢(xún)成功并已經(jīng)輸出 2為失敗或其他
   */
  public int queryBookinfo(){

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



  }
  /**
   * 查詢(xún)書(shū)籍?dāng)?shù)量和剩余數(shù)量
   * @return 返回1為查詢(xún)成功并已經(jīng)輸出 2為失敗或其他
   */
  public ResultSet queryBookK(String bookname){

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

  }
  /**
   * 查詢(xún)書(shū)籍
   * @return 返回1為查詢(xún)成功并已經(jīng)輸出 2為失敗或其他
   */
  public int queryBook(String bookname){
    try {
      ResultSet r =bookdao.queryBook(bookname);
      while(r!=null&&r.next()){
        System.out.println("書(shū)名"+r.getString("bookname")+"作者"+
            r.getString("zuozhe")+"總數(shù)"+r.getInt("shuliang")+"剩余數(shù)量"+r.getInt("shengyushuliang"));
      }
      if(r==null)return 2;
      return 1;
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 2;
    }

  }

  /**
   * 加入新的圖書(shū)信息
   * @param bookinfo 書(shū)籍的詳細(xì)信息
   * @return 1成功 2失敗
   */
  public int addBookinfo(Bookinfo bookinfo){
    boolean b = bookdao.addBook(bookinfo);
    if(b)return 1;
    return 2;
  }




  /**
   * 注冊(cè)用戶(hù)
   * @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;
  }

  /**
   * 查詢(xún)用戶(hù)所有信息
   * @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;
    }


  }


  /**
   * 借書(shū) 先檢查書(shū)是否存在,再檢查書(shū)籍是否有庫(kù)存,然后檢查是否已結(jié)借此書(shū)
   * 最后以上檢查沒(méi)有錯(cuò)誤,就可以借書(shū)。 用戶(hù)持有數(shù)量增加,借書(shū)信息詳解錄入,庫(kù)存更新
   * 
   * 注意事項(xiàng) 
   * 1 resultset 默認(rèn)指向數(shù)據(jù)前一個(gè)位置 必須 用 next 
   * 2 需要加入事務(wù) 防止出現(xiàn)錯(cuò)誤造成數(shù)據(jù)表更新不一致
   * @param bookname 書(shū)名
   * @return
   */
  public String borrowBook(String bookname,User user){
    try {
      if(!bookdao.queryBook(bookname).next()){
        return "借書(shū)失敗-書(shū)籍不存在";}

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

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

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


          //加入借閱詳細(xì)信息
          boolean b1 =bookdao.addborrowinfo(user.getUsername(), bookname);


          //更新借書(shū)數(shù)量
          ResultSet rs1 = bookdao.queryUser(user);
          rs1.next();
          user.setBooks(rs1.getInt("books")+1);
          bookdao.updateUserbooks(user);


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

          return b1?(b2?"借書(shū)成功":"借書(shū)失敗"):("借書(shū)失敗");

        }
       }

      return null;

    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return "借書(shū)失敗-其他錯(cuò)誤";
    }


  }
  /**還書(shū)
   * 更新用戶(hù)持有數(shù),歸還書(shū)的庫(kù)存,刪除借書(shū)信息表中信息
   * @param user 更新數(shù)據(jù)數(shù) 
   * @param bookinfo 更新庫(kù)存后的數(shù)
   * @return
   */
  public int returnBook(User user,String bookname){

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

      //更新持有書(shū)數(shù)
      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;
    }

  }



  /**
   * 查詢(xún)用戶(hù)的借書(shū)情況
   * @param user 用戶(hù)
   * @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;
    }
  }
  /**
   * 指定頁(yè)碼
   * @param age
   */
  public void fenyeInfo(int age){
    int i =bookdao.queryPageInfo();
    System.out.println("總頁(yè)數(shù):"+i);
    try {
      if(i>0){
        ResultSet r = bookdao.querySubBookInfo((age-1)*5);
        while(r!=null&&r.next()){
          System.out.println("書(shū)名"+r.getString("bookname")+"作者"+
          r.getString("zuozhe")+"總數(shù)"+r.getInt("shuliang")+"剩余數(shù)量"+r.getInt("shengyushuliang"));  
          }
      }  

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

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


  }

  /**
   * 更新圖書(shū)信息
   * 更新作者,庫(kù)存,剩余數(shù)量,不更新日期,書(shū)名(不就是添加了新的書(shū)籍了嗎)
   * 可更新任務(wù)可以多選
   * 
   * 書(shū)名進(jìn)行判斷是否存在
   * 庫(kù)存和剩余數(shù)量進(jìn)行邏輯上的驗(yàn)證
   */
  public void updateBookinfo(String bookname){
    Scanner scan = new Scanner(System.in);

    System.out.println("更新作者輸入:1,跳過(guò)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);
    }
    //如果更新了庫(kù)存,剩余數(shù)量也會(huì)跟著更新 需要判斷庫(kù)存邏輯的正確性
    System.out.println("更新數(shù)量輸入2,跳過(guò)22");
    int ii = scan.nextInt();
    if(ii==2){
      System.out.println("請(qǐng)更新庫(kù)存數(shù)量");
      int newsum = scan.nextInt();
      //判斷數(shù)量邏輯的正確性
      ResultSet r = queryBookK(bookname);
      int oldsum=0;int sykc=0;//舊庫(kù)存和剩余數(shù)量
      try {
        while(r.next()){
          oldsum = r.getInt("shuliang");
          sykc = r.getInt("shengyushuliang");
        }
        if(newsum>oldsum){
          sykc+=newsum-oldsum;//記錄更新后的剩余數(shù)量
          //System.out.println("根據(jù)已有庫(kù)存,庫(kù)存總量為---"+newsum);
        }
        else if(newsum<oldsum&&newsum>=sykc){//如何新的庫(kù)存少于就庫(kù)存。判斷新庫(kù)存與剩余數(shù)量的關(guān)系
          sykc-=newsum;
        }else{
          System.out.println("輸入錯(cuò)誤");
          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層

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;

/**
 * 視圖類(lèi),也是界面的顯示層。程序運(yùn)行的入口
 * 想說(shuō)的話(huà):
 * 如果使用web作為v層,只需要把bookrun方法拆開(kāi)就可以了。對(duì)應(yīng)會(huì)話(huà)跟蹤,把 private static User user 存入session對(duì)象就可以了
 * 框架的話(huà)用springmvc 。對(duì)于dao加入orm框架(hibernate ,mybatis)。整合起來(lái)也就是常見(jiàn)的ssm體系或ssh體系
 * 數(shù)據(jù)庫(kù)的選擇更是隨你心情。mysql SQLserver 等等。
 * 項(xiàng)目bug仔細(xì)看的話(huà)很多。本意想給入門(mén)的同學(xué)一個(gè)思路方向。對(duì)于一些變量的命名請(qǐng)不要學(xué)我(偷懶),養(yǎng)成一個(gè)良好的
 * 習(xí)慣。祝你在編程的道路上越走越遠(yuǎn)??!
 */
public class View {
  //controller 業(yè)務(wù)控制類(lèi)
  private static BookController bookc = new BookController();
  //登陸后的用戶(hù)跟蹤類(lèi)似session
  private static User user;
  //控制主界面的循環(huán)
  private static boolean flag = true;
  //接受控制臺(tái)輸入
  private static Scanner scan = new Scanner(System.in);

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



  //主界面  應(yīng)該考慮其他輸入的限定 (當(dāng)輸入字符時(shí),系統(tǒng)停止運(yùn)行)
  public static void bookRun(){
      try{
        do{
          System.out.println("歡迎來(lái)到圖書(shū)借閱系統(tǒng)\n登陸輸入: 1\n注冊(cè)輸入: 2\n管理員管理:3");
          int i1 = scan.nextInt();

          switch (i1) {
          case 1://登陸邏輯
            System.out.println("輸入賬號(hào)");
            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("登陸失敗,檢查密碼或者賬號(hào)");
              }
            break;

          case 2:
            //注冊(cè)邏輯 可以添加驗(yàn)證密碼 進(jìn)行密碼的確定  java api有把明文進(jìn)行處理的方法,請(qǐng)自行搜索
            //還可以加入正則表達(dá)式進(jìn)行賬號(hào)的限定(對(duì)于特殊字符輸入的處理等)
            System.out.println("輸入申請(qǐng)賬號(hào)");
            String username1 = scan.next();
            System.out.println("密碼");
            String password1 = scan.next();
            //此處可以再次確認(rèn)密碼的邏輯
            System.out.println(addUser(new User(username1, password1)));
            System.out.println("返回上一層");

            break;

          case 3://管理員邏輯
            System.out.println("輸入管理員賬號(hào)");
            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("登陸失敗,檢查密碼或者賬號(hào)");
            }

            break;

          default :
            System.out.println("輸入序號(hào)不正確");
            break;
          }

        }while(flag);


      }catch(InputMismatchException e){
        System.out.println("輸入異常,請(qǐng)重啟系統(tǒng)");
      }


  }

  //此處可以添加新的功能而不影響已有功能 (可以改為switch語(yǔ)句)
  private static void loginGuanliSuccess() {
    while(true){
      System.out.println("添加圖書(shū):1\n更改圖書(shū)信息:2\n返回:3");
      int i = scan.nextInt();
      if(i==1){
        addBook();
      }else if(i==2){
        updateBookinfo();
      }else if(i==3){
        return;
      }
    }

  }

//更新圖書(shū)
/**
 * 更新圖書(shū) 只有管理員權(quán)限可以操作
 */
  private static void updateBookinfo() {



    //應(yīng)該判斷書(shū)名是否存在 contro層設(shè)計(jì)
    System.out.println("請(qǐng)輸入書(shū)名");
    String bookname = scan.next();
    int a = bookc.queryBook(bookname);
    if(a!=1){
      System.out.println("不存在,已返回上一層");
      return;
    }

/*   System.out.println("更新作者輸入1,跳過(guò)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);
    }
    //如果更新了庫(kù)存,剩余數(shù)量也會(huì)跟著更新 需要判斷庫(kù)存邏輯的正確性
    System.out.println("更新數(shù)量輸入2,跳過(guò)22");
    int ii = scan.nextInt();
    if(ii==2){
      //判斷數(shù)量邏輯的正確性
      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("更新后的數(shù)量錯(cuò)誤");
        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);
  }


//添加圖書(shū) 需要保證名字唯一性
  private static void addBook() {
    System.out.println("圖名");
    String bookname = scan.next();
    System.out.println("作者");
    String zuozhe = scan.next();
    System.out.println("數(shù)量");
    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("錯(cuò)誤");
    }

  }

  //注冊(cè)界面的實(shí)現(xiàn)
  private static String addUser(User user){
    switch (bookc.addUser(user)) {
    case 1:
      return "注冊(cè)成功";

    case 2:
      return "用戶(hù)已注冊(cè)";

    case 3:
      return "其他錯(cuò)誤,重試";
    }

    return "其他錯(cuò)誤,重試";

  }
  //登陸功能實(shí)現(xiàn)
  private static void loginSuccess(User user ){
    while (true){
      System.out.println("查看借閱信息請(qǐng)輸入:1,借書(shū):2,還書(shū):3,賬號(hào)信息:4,退出:5"
          + "查詢(xún)圖書(shū):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("請(qǐng)輸入書(shū)名");

        queryBook(scan.next());
        break;
      case 7: break;
      default:
        System.out.println("輸入錯(cuò)誤");
        break;
      }
    }


  }
  //查詢(xún)借閱信息
  private static void borrowInfo(User user ){
    List<BorrowInfo> l=bookc.queryborrowinfo(user);
    if(l==null||l.isEmpty()){
      System.out.println("沒(méi)有借閱信息");
      return;
    }
    for (BorrowInfo borrowInfo : l) {
      System.out.println(borrowInfo);
    }

  }
  //借書(shū)
  private static void borrowBook(User user){
    System.out.println("請(qǐng)輸入借閱的書(shū)籍名稱(chēng)");
    String bookname =scan.next();
    String flog = bookc.borrowBook(bookname, user);
    System.out.println(flog);
    System.out.println("是否繼續(xù)借書(shū):y|n");
    String flog1 = scan.next();
    if(flog1.equalsIgnoreCase("y")){
      borrowBook(user);
    }
  }
  //還書(shū)
  private static void returnBook(User user1 ){
    List<BorrowInfo> l=bookc.queryborrowinfo(user1);
    if(l==null||l.isEmpty()){
      System.out.println("沒(méi)有借閱信息");
      return;
    }
    for (BorrowInfo borrowInfo : l) {
      System.out.println(borrowInfo);
    }
    System.out.println("請(qǐng)輸入要還書(shū)籍的名字");
    String bookname = scan.next();
    int flog =bookc.returnBook(user1, bookname);
    if(flog==1){
      System.out.println("還書(shū)成功");
    }else{
      System.out.println("失敗");
    }
    System.out.println("是否繼續(xù)還書(shū):y|n");
    String flog1 = scan.next();
    if(flog1.equalsIgnoreCase("y")){
      returnBook(user1);
    }  

  }
  //用戶(hù)信息
  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("書(shū)籍不存在");
  }

  private static void GuanliFace(){
    while(true){
      System.out.println("查詢(xún)書(shū)籍列表請(qǐng)輸入 :1;添加圖書(shū):2;使用分頁(yè)查看書(shū)籍列表");
      int i =scan.nextInt();
      switch (i) {
      case 1:
        int i1= bookc.queryBookinfo();
        if(i1==2)System.out.println("錯(cuò)誤");
        break;
      case 2:
        System.out.println("書(shū)名");
        String booknname1 = scan.next();
        System.out.println("作者");
        String zuozhe1 = scan.next();
        System.out.println("數(shù)量");
        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("錯(cuò)誤");
        break;
      case 3:
      default:
        System.out.println("錯(cuò)");
        break;
      }
    }

  }

  private static void fenyeInfo(){

  }


}

數(shù)據(jù)庫(kù)

/用戶(hù)表
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;


/借書(shū)信息
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;

/書(shū)籍信息 字段用的拼音:-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;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中RSA加密解密的實(shí)現(xiàn)方法分析

    Java中RSA加密解密的實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Java中RSA加密解密的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了java實(shí)現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長(zhǎng)度/密文長(zhǎng)度/明文長(zhǎng)度的參考說(shuō)明,需要的朋友可以參考下
    2017-07-07
  • 詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)

    詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)

    如果將堆理解為二叉樹(shù),那么樹(shù)中任一非葉結(jié)點(diǎn)的關(guān)鍵字均不大于(或不小于)其左右孩子(若存在)結(jié)點(diǎn)的關(guān)鍵字,堆排序的時(shí)間復(fù)雜度為O(N*logN),這里我們就來(lái)詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)
    2016-06-06
  • Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法

    Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法

    這篇文章主要介紹了Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 一文搞懂Java項(xiàng)目中枚舉的定義與使用

    一文搞懂Java項(xiàng)目中枚舉的定義與使用

    枚舉就是用enum修飾是一種Java特殊的類(lèi),枚舉是class、底層是繼承了java.lang.Enum類(lèi)的實(shí)體類(lèi)。本文將詳解枚舉的定義與使用,需要的可以參考一下
    2022-06-06
  • Eclipse運(yùn)行android項(xiàng)目報(bào)錯(cuò)Unable to build: the file dx.jar was not loaded from the SDK folder的解決辦法

    Eclipse運(yùn)行android項(xiàng)目報(bào)錯(cuò)Unable to build: the file dx.jar was not

    今天小編就為大家分享一篇關(guān)于Eclipse運(yùn)行android項(xiàng)目報(bào)錯(cuò)Unable to build: the file dx.jar was not loaded from the SDK folder的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • springboot中如何使用minio存儲(chǔ)容器

    springboot中如何使用minio存儲(chǔ)容器

    大家好,本篇文章主要講的是springboot中如何使用minio存儲(chǔ)容器,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-02-02
  • Java中equals()方法的理解與使用方法例子

    Java中equals()方法的理解與使用方法例子

    本文主要介紹了Java中的equals()方法,equals()方法是Object類(lèi)的方法,用于比較兩個(gè)對(duì)象是否相等,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-10-10
  • 一篇文章教你將JAVA的RabbitMQz與SpringBoot整合

    一篇文章教你將JAVA的RabbitMQz與SpringBoot整合

    這篇文章主要介紹了如何將JAVA的RabbitMQz與SpringBoot整合,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • IDEA感覺(jué)不香了AI智能編程工具Cursor使用圖文教程

    IDEA感覺(jué)不香了AI智能編程工具Cursor使用圖文教程

    這篇文章主要介紹了IDEA感覺(jué)不香了AI智能編程工具Cursor使用,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java Collection集合遍歷運(yùn)行代碼實(shí)例

    Java Collection集合遍歷運(yùn)行代碼實(shí)例

    這篇文章主要介紹了Java Collection集合遍歷運(yùn)行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

宜黄县| 澎湖县| 连州市| 溆浦县| 盐山县| 洞口县| 手游| 正阳县| 象山县| 赣榆县| 那坡县| 阿合奇县| 沂南县| 镇沅| 依安县| 安阳市| 道孚县| 咸丰县| 塔城市| 娄烦县| 合阳县| 天气| 西充县| 即墨市| 舞钢市| 通城县| 汾阳市| 息烽县| 铜鼓县| 射阳县| 馆陶县| 兴文县| 磴口县| 茂名市| 麻城市| 海晏县| 谢通门县| 大洼县| 象州县| 河西区| 茂名市|