大学的第一个项目,JDBC实现图书管理系统

简介: 大学的第一个项目,JDBC实现图书管理系统

这是我大学期间做的第一个项目,用JDBC连接数据库实现图书管理系统,不是什么大项目,也上不了什么台面。刚起步,能力水平属实有限,之前无任何项目经历,做的不是很好,我也在不断学习中,如果哪里有需要改正或者写的不好的地方,欢迎大家评论区留言进行指正,我虚心接受各位大佬的批评。

以后几期的项目我也会以写博客的形式,跟大家分享我的学习经历和我的所学所得。

先给大家放一手我的构建目录

一共14个java文件,也是写了2天的代码了,差点去世。。。。。。。。。

对项目的简单介绍:

数据库中一共有4个表:管理员表、存放书的表、借还记录表、用户表。在eclipse控制台通过输入来增删查改数据库中表的数据,如图:

因为数据中有4个表所以我在项目里建了4个接口分别为:AdministratorDao、BookDao、RecordDao、UserDao。

以及这4个接口的实现类:AdministratorDaoImpl、BookDaoImpl、RecordDaoImpl、UserDaoImpl。

最后是4个封装类对应4个表,每个表的属性和数据库对应表的字段是一样的,分别是:Administrator、Book、Record、User。

数据库情况如图所示:


里面的 id字段我设置的是自增字段类型,但是在数据库里先删除再增加,id的值就会变,不是按顺序的,我也不知道这个问题如何解决~~,

比较头疼,好在对我整个功能实现并无太大影响。

BaseDao的话是一个关键的接口,里面说简单点存放的就是我上面说的4个接口的一些公共操作。

Test就是最终的实现类,运行这个类就能执行这个项目。

下面我将我的代码放给大家,比较多,大家按照我说的理解,我Test类写的注释还是相当良心的,不说了,下面放代码:

里面有些代码冗余比较多,可能比较乱,有些方法写的不是很好,肯定是有更好的解决方法,但总算基本功能是可以实现的,说到底还是我水平太低,我也一直在学习中~~,大家多担待担待。

com.etc.dao

BaseDao

package com.etc.dao;
 //将增删改查这4个操作的共有语句整理进来
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
    private static final String DRIVER="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    private static final String URL="jdbc:mysql://localhost:3306/xiangmu";
    private static final String USERNAME="root";
    private static final String USERPWD="root";
    //获取连接对象
    public static Connection getConnection() {
      try {
        Class.forName(DRIVER);
      } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
      }
      Connection conn=null;
      try {
        conn = DriverManager.getConnection(URL, USERNAME, USERPWD);
      } catch (SQLException e) {
        e.printStackTrace();
      }
      return conn;
    }
                                                                          //代表多个Object对象
    public static PreparedStatement setParam(Connection conn,String sql,Object...param) throws SQLException{
      PreparedStatement pstmt=null;
      pstmt=conn.prepareStatement(sql);
      for(int i=0;i<param.length;i++) {
        pstmt.setObject(i+1, param[i]);
      }
      return pstmt;
    }
    //增删改的通用方法
    public static int exeUpdate(PreparedStatement pstmt) throws SQLException  {
      int result=0;
        //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
      result=pstmt.executeUpdate();
      return result;
    }
    public static void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs) {
      try {
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
        if(rs!=null) {
          rs.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
}

AdministratorDao

package com.etc.dao;
import java.util.List;
import com.etc.entity.Administrator;
import com.etc.entity.User;
public interface AdministratorDao {
  void administratorAdd(Administrator administrator);
  void administratorDel(int  id);
  void administratorUpdate(Administrator administrator);
  List<Administrator> administratorQuery();
}

BookDao

package com.etc.dao;
import java.util.List;
import com.etc.entity.Book;
import com.etc.entity.User;
public interface BookDao {
  void bookAdd(Book book);
  void bookDel(String  name);
  void bookUpdate(Book book);
  List<Book> bookQuery();
}

RecordDao

package com.etc.dao;
import java.util.List;
import com.etc.entity.Book;
import com.etc.entity.Record;
import com.etc.entity.User;
public interface RecordDao {
  void recordAdd(Record record);
  void recordDel(String  name);
  void recordUpdate(Record record);
  List<Record> recordQuery();
}

UserDao

package com.etc.dao;
import java.util.List;
import com.etc.entity.User;
public interface UserDao {
  void userAdd(User user);
  void userDel(String  name);
  void userUpdate(User user);
  List<User> userQuery();
}

com.etc.dao.impl

AdministratorDaoImpl

package com.etc.dao.impl;
import com.etc.dao.*;
import com.etc.entity.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.etc.dao.BaseDao;
import com.etc.dao.UserDao;
import com.etc.test.*;
public class AdministratorDaoImpl implements AdministratorDao {
  Administrator administrator=new Administrator();
  public void administratorAdd(Administrator administrator) {
    String sql="INSERT INTO administrator(id,account,password) VALUES(?,?,?)";
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = BaseDao.getConnection();
      pstmt=BaseDao.setParam(conn,sql,administrator.getId(),administrator.getAccount(),administrator.getPassword());
      int result=BaseDao.exeUpdate(pstmt);
      if(result>0) {
        System.out.println("插入成功!");
      }else {
        System.out.println("插入失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      BaseDao.closeAll(conn,pstmt,null);
    }
}
@Override
public void administratorDel(int  id) {
String sql="delete from user where id=?";
Connection conn=null;
PreparedStatement pstmt=null;
try {
  conn = BaseDao.getConnection();
  pstmt=BaseDao.setParam(conn,sql,administrator.getId());
  int result=BaseDao.exeUpdate(pstmt);
  if(result>0) {
    System.out.println("删除成功!");
  }else {
    System.out.println("删除失败!");
  }
} catch (SQLException e) {
  e.printStackTrace();
}finally {
  BaseDao.closeAll(conn,pstmt,null);
}
}
@Override
public void administratorUpdate(Administrator administrator) {
String sql="UPDATE administrator SET  account=? ,password=? WHERE id=?";
Connection conn=null;
PreparedStatement pstmt=null;
try {
  conn = BaseDao.getConnection();
  pstmt=BaseDao.setParam(conn,sql,administrator.getAccount(),administrator.getPassword(),administrator.getId());
  int result=BaseDao.exeUpdate(pstmt);
  if(result>0) {
    System.out.println("修改成功!");
  }else {
    System.out.println("修改失败!");
  }
} catch (SQLException e) {
  e.printStackTrace();
}finally {
  BaseDao.closeAll(conn,pstmt,null);
}
}
@Override
public List<Administrator> administratorQuery() {
    String sql="SELECT * from administrator";
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;
    List<Administrator> list=new ArrayList<Administrator>();
    try {
      conn = BaseDao.getConnection();
      pstmt=BaseDao.setParam(conn,sql);
      rs=pstmt.executeQuery();
      while(rs.next()) {
        int id=rs.getInt("id");
        String account=rs.getString("account");
        String password=rs.getString("password");
          list.add(new Administrator(id,account,password));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(rs!=null) {
          rs.close();
        }
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
return list;
}
}

BookDaoImpl

package com.etc.dao.impl;
import com.etc.dao.*;
import com.etc.entity.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.etc.dao.BaseDao;
import com.etc.dao.UserDao;
import com.etc.entity.Book;
public class BookDaoImpl implements BookDao {
  Book book = new Book();
  @Override
  public void bookAdd(Book book) {
    String sql = "INSERT INTO book(name,author,price) VALUES(?,?,?)";
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = BaseDao.getConnection();
      pstmt = BaseDao.setParam(conn, sql, book.getName(), book.getAuthor(), book.getPrice());
      int result = BaseDao.exeUpdate(pstmt);
      if (result > 0) {
        System.out.println("插入成功!");
      } else {
        System.out.println("插入失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      BaseDao.closeAll(conn, pstmt, null);
    }
  }
  @Override
  public void bookDel(String name) {
    String sql = "delete from book where name=?";
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = BaseDao.getConnection();
      pstmt = BaseDao.setParam(conn, sql, name);
      int result = BaseDao.exeUpdate(pstmt);
      if (result > 0) {
        System.out.println("删除成功!");
      } else {
        System.out.println("删除失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      BaseDao.closeAll(conn, pstmt, null);
    }
  }
  @Override
  public void bookUpdate(Book book) {
    String sql = "UPDATE book SET  name=? ,author=?,price=? WHERE id=?";
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = BaseDao.getConnection();
      pstmt = BaseDao.setParam(conn, sql, book.getName(), book.getAuthor(), book.getPrice(), book.getId());
      int result = BaseDao.exeUpdate(pstmt);
      if (result > 0) {
        System.out.println("更新成功!");
      } else {
        System.out.println("更新失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      BaseDao.closeAll(conn, pstmt, null);
    }
  }
  @Override
  public List<Book> bookQuery() {
    String sql = "SELECT * from book";
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List<Book> list = new ArrayList<Book>();
    try {
      conn = BaseDao.getConnection();
      pstmt = BaseDao.setParam(conn, sql);
      rs = pstmt.executeQuery();
      while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        String author = rs.getString("author");
        int price = rs.getInt("price");
        list.add(new Book(id, name, author, price));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (pstmt != null) {
          pstmt.close();
        }
        if (conn != null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
    return list;
  }
  public void bookSelect(String name) {     //图书模糊查询
    String sql = "SELECT * FROM book WHERE name LIKE ? ";
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    boolean flag=false;
    try {
      conn = BaseDao.getConnection();
      pstmt = BaseDao.setParam(conn, sql, "%" + name + "%");
      rs = pstmt.executeQuery();
      while(rs.next()) {
        flag=true;
        String bookname = rs.getString("name");
        System.out.println("《" + bookname + "》");
      } 
    if(!flag) {
        System.out.println("书库中暂无该书信息!");  //如果书库中没有要查找的是
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      BaseDao.closeAll(conn, pstmt, null);
    }
  }
}

RecordDaoImpl

package com.etc.dao.impl;
import  com.etc.dao.*;
import com.etc.entity.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.etc.dao.BaseDao;
import com.etc.dao.UserDao;
public class RecordDaoImpl implements RecordDao {
        Record  record=new Record();
  @Override
  public void recordAdd(Record record) {
    String sql="INSERT INTO record(bookname,user) VALUES(?,?)";
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = BaseDao.getConnection();
      pstmt=BaseDao.setParam(conn,sql,record.getBookname(),record.getUser());
      int result=BaseDao.exeUpdate(pstmt);
      if(result>0) {
        System.out.println("借书成功!");
      }else {
        System.out.println("借书失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      BaseDao.closeAll(conn,pstmt,null);
    }
}
@Override
public void recordDel(String  name) {
String sql="delete from record where bookname=?";
Connection conn=null;
PreparedStatement pstmt=null;
try {
  conn = BaseDao.getConnection();
  pstmt=BaseDao.setParam(conn,sql,name);
  int result=BaseDao.exeUpdate(pstmt);
  if(result>0) {
    System.out.println("还书成功!");
  }else {
    System.out.println("还书失败!");
  }
} catch (SQLException e) {
  e.printStackTrace();
}finally {
  BaseDao.closeAll(conn,pstmt,null);
}
}
@Override
public void recordUpdate(Record record) {
String sql="UPDATE record SET bookname=?  WHERE user=?";
Connection conn=null;
PreparedStatement pstmt=null;
try {
  conn = BaseDao.getConnection();
  pstmt=BaseDao.setParam(conn,sql,record.getBookname(),record.getUser());
  int result=BaseDao.exeUpdate(pstmt);
  if(result>0) {
    System.out.println("更新成功!");
  }else {
    System.out.println("更新失败!");
  }
} catch (SQLException e) {
  e.printStackTrace();
}finally {
  BaseDao.closeAll(conn,pstmt,null);
}
}
@Override
public List<Record> recordQuery() {
    String sql="SELECT * from record";
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;
    List<Record> list=new ArrayList<Record>();
    try {
      conn = BaseDao.getConnection();
      pstmt=BaseDao.setParam(conn,sql);
      rs=pstmt.executeQuery();
      while(rs.next()) {
        int id=rs.getInt("id");
        String bookname=rs.getString("bookname");
        String user=rs.getString("user");
        System.out.println("id:"+id+" bookname: "+bookname+" user: "+user);
        list.add(new Record(id,bookname,user));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(rs!=null) {
          rs.close();
        }
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
return list;
}
}

UserDaoImpl

package com.etc.dao.impl;
import com.etc.dao.*;
import com.etc.entity.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.etc.dao.BaseDao;
import com.etc.dao.UserDao;
import com.etc.entity.Book;
public class UserDaoImpl implements UserDao {
  User user=new User();
  @Override
  public void userAdd(User user) {
        String sql="INSERT INTO user(account,password) VALUES(?,?)";
        String sql1="SELECT * FROM  user WHERE account=?";
        Connection conn=null;
        PreparedStatement pstmt=null;
        PreparedStatement pstmt1=null;
        ResultSet rs=null;
        try {
          conn = BaseDao.getConnection();
          pstmt1=BaseDao.setParam(conn,sql1,user.getAccount()); //判断用户名是否已经存在
          rs=pstmt1.executeQuery();
          if(rs.next()) {
            System.out.println("对不起您要注册的用户已经存在!,请重新输入");
          }
          else 
          {
          pstmt=BaseDao.setParam(conn,sql,user.getAccount(),user.getPassword());
          int result=BaseDao.exeUpdate(pstmt);
          if(result>0) {
            System.out.println("插入成功!");
          }else {
            System.out.println("插入失败!");
          }
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }finally {
          BaseDao.closeAll(conn,pstmt,null);
        }
  }
  @Override
  public void userDel(String  name) {
    String sql="delete from user where account=?";
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = BaseDao.getConnection();
      pstmt=BaseDao.setParam(conn,sql,name);
      int result=BaseDao.exeUpdate(pstmt);
      if(result>0) {
        System.out.println("删除成功!");
      }else {
        System.out.println("删除失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      BaseDao.closeAll(conn,pstmt,null);
    }
  }
  @Override
  public void userUpdate(User user) {
    String sql="UPDATE user SET  account=? ,password=? WHERE id=?";
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = BaseDao.getConnection();
      pstmt=BaseDao.setParam(conn,sql,user.getAccount(),user.getPassword(),user.getId());
      int result=BaseDao.exeUpdate(pstmt);
      if(result>0) {
        System.out.println("修改成功!");
      }else {
        System.out.println("修改失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      BaseDao.closeAll(conn,pstmt,null);
    }
  }
  @Override
  public List<User> userQuery() {
        String sql="SELECT * from user  ";
        Connection conn=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        List<User> list=new ArrayList<User>();
        try {
          conn = BaseDao.getConnection();
          pstmt=BaseDao.setParam(conn,sql);
          rs=pstmt.executeQuery();
          while(rs.next()) {
            int id=rs.getInt("id");
            String account=rs.getString("account");
            String password=rs.getString("password");
            list.add(new User(id,account,password));
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }finally {
          try {
            if(rs!=null) {
              rs.close();
            }
            if(pstmt!=null) {
              pstmt.close();
            }
            if(conn!=null) {
              conn.close();
            }
          } catch (SQLException e) {
            e.printStackTrace();
          }
        }
    return list;
  }
}

com.etc.entity

Administrator

package com.etc.entity;
public class Administrator {
  private  int  id;//用户编号
  private String account;  //用户名
  private String password;  //密码
  public Administrator() {
    super();
  }
  public Administrator(int id, String account, String password) {
    super();
    this.id = id;
    this.account = account;
    this.password = password;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getAccount() {
    return account;
  }
  public void setAccount(String account) {
    this.account = account;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  @Override
  public String toString() {
    return "Administrator [id=" + id + ", account=" + account + ", password=" + password + "]";
  }
}

Book

package com.etc.entity;
public class Book {
  private int id;//书名编号
  private String name;//书名
  private String author;//作者
  private int price;//价格
  public Book() {
    super();
  }
  public Book(int id, String name, String author, int price) {
    super();
    this.id = id;
    this.name = name;
    this.author = author;
    this.price = price;
  }
  public Book(String name, String author, int price) {
    super();
    this.name = name;
    this.author = author;
    this.price = price;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  public int getPrice() {
    return price;
  }
  public void setPrice(int price) {
    this.price = price;
  }
  @Override
  public String toString() {
    return "Book [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + "]";
  }
}

Record

package com.etc.entity;
public class Record {
  private  int  id; //记录编号
  private  String bookname; //书名编号
  private String user; //用户名
  public Record() {
    super();
  }
  public Record(String bookname, String user) {
    super();
    this.bookname = bookname;
    this.user = user;
  }
  public Record(int id, String bookname, String user) {
    super();
    this.id = id;
    this.bookname = bookname;
    this.user = user;
  }
  @Override
  public String toString() {
    return "Record [id=" + id + ", bookname=" + bookname + ", user=" + user + "]";
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getBookname() {
    return bookname;
  }
  public void setBookname(String bookname) {
    this.bookname = bookname;
  }
  public String getUser() {
    return user;
  }
  public void setUser(String user) {
    this.user = user;
  }
}

User

package com.etc.entity;
public class User {
  private int  id;//用户编号
  private String account;  //用户名
  private String password;  //密码
  public User() {
    super();
  }
  public User(String account, String password) {
    super();
    this.account = account;
    this.password = password;
  }
  public User(int id, String account, String password) {
    super();
    this.id = id;
    this.account = account;
    this.password = password;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getAccount() {
    return account;
  }
  public void setAccount(String account) {
    this.account = account;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", account=" + account + ", password=" + password + "]";
  }
}

com.etc.test

Test

package com.etc.test;
import com.etc.dao.impl.*;
import com.etc.entity.*;
import java.util.ArrayList;
import java.util.Scanner;
//图书管理系统
public class Test {
  public static void main(String[] args) throws Exception {
    boolean flag1 = false; // 判断用户名和密码是否正确
    boolean flag2 = true; // 判断是否回到主菜单
    ArrayList<Administrator> listAdministrator = new ArrayList(); // 存放管理员
    ArrayList<User> listUser = new ArrayList();// 存放用户
    ArrayList<Book> listBook = new ArrayList(); // 存放书
    BookDaoImpl bdi = new BookDaoImpl(); // 实现方法的对象
    UserDaoImpl udi = new UserDaoImpl();
    AdministratorDaoImpl adi = new AdministratorDaoImpl();
    RecordDaoImpl rdi = new RecordDaoImpl();
    User user = new User(); // 新建用户对象
    Administrator administrator = new Administrator();// 新建管理员对象
    Scanner sc = new Scanner(System.in);
    do { // 如果flag2=true就回到主菜单
      flag2 = false;// 重设flag2
      System.out.println("****************欢迎来到图书管理系统*************");
      System.out.println("\t\t(请输入1到6范围的整数)");
      System.out.println(
          "1.以管理员方式登录\t2.以普通用户方式登录" + "\n" + "3.展示书库内的所有书籍\t4.注册用户" + "\n" + "5.检索图书(模糊查询) \t6.退出系统");
      int num = sc.nextInt(); // 获取操作指令
      if (num > 6) { // 判断输入是否为1到6的数字
        System.out.println("请输入1到6的数字!");
        flag2 = true;
      }
      switch (num) {
      case 1:
        do {  //管理员名或者密码输入错误返回此处
          System.out.print("管理员名:");
          String administratorname = sc.next();
          System.out.print("管理员密码:");
          String administratorpassword = sc.next();
          administrator.setAccount(administratorname); // 设置管理员名和管理员密码
          administrator.setPassword(administratorpassword);
          listAdministrator = (ArrayList<Administrator>) adi.administratorQuery();
          for (Administrator administrator1 : listAdministrator) {
            if ((administrator1.getAccount()).equals(administrator.getAccount()) // 判断数据库中是否存在输入的管理员名和密码
                && (administrator1.getPassword()).equals(administrator.getPassword())) {
              System.out.println("登录成功!");
              System.out.println("当前管理员id为:" + administrator1.getId());
              flag1 = true;
              break;
            }
          }
          if (!flag1) {          // 如果管理名或者密码输入错误
            System.out.println("管理名或者管理密码输入错误!请重新输入");
          }
        } while (!flag1);   //判定条件
        while (flag1) { // 如果登录成功
          System.out.println("请输入要进行的操作:\n1.添加用户\t2.删除用户\n3.添加书籍\t4.删除书籍\n5.修改管理员信息\t6.退出\n7.回到主菜单 ");
          int operate = sc.nextInt(); // 获取操作指令
          switch (operate) {
          case 1: // 添加用户
            System.out.println("请输入要添加的用户信息:");
            System.out.println("用户名:");
            String userName = sc.next();
            System.out.println("用户密码:");
            String userPassword = sc.next();
            User user1 = new User(userName, userPassword);
            udi.userAdd(user1); // 用户添加方法
            break;
          case 2:// 删除用户
            System.out.println("请输入要删除的用户名:");
            String delUserName = sc.next();
            udi.userDel(delUserName); // 用户删除方法
            break;
          case 3:// 添加书
            System.out.println("请输入要添加书的信息:(书名,作者,价格)");
            System.out.println("书名:");
            String bookName = sc.next();
            System.out.println("作者:");
            String bookAuthor = sc.next();
            System.out.println("价格:");
            int bookPrice = sc.nextInt();
            Book book1 = new Book(bookName, bookAuthor, bookPrice);
            bdi.bookAdd(book1); // 添加书方法
            break;
          case 4:// 删除书
            System.out.println("请输入要删除书的书名:");
            String delBookName = sc.next();
            bdi.bookDel(delBookName); // 删除书方法
            break;
          case 5:// 修改管理员信息
            System.out.println("请输入你要修改的管理员的id:");
            int updateAdministratorId = sc.nextInt();
            System.out.println("请输入修改后的管理员用户名:");
            String updateAdministratorName = sc.next();
            System.out.println("请输入修改后的管理员密码:");
            String updateAdministratorPassword = sc.next();
            Administrator administrator2 = new Administrator(updateAdministratorId, updateAdministratorName,
                updateAdministratorPassword);
            adi.administratorUpdate(administrator2);// 修改管理员信息方法
            break;
          case 6:
            System.out.println("退出成功!");
            System.exit(0);// 退出
            break;
          case 7: // 设置boolean条件,回到主菜单
            flag1 = false;
            flag2 = true;
            break;
          }
        }
        break;
      case 2: // 用户名登录
        do {                            //用户员名或者密码输入错误返回此处
          System.out.print("用户名:");
          String username = sc.next();
          System.out.print("用户密码:");
          String userpassword = sc.next();
          user.setAccount(username); // 设置用户名和密码
          user.setPassword(userpassword);
          listUser = (ArrayList<User>) udi.userQuery();
          for (User user1 : listUser) {
            if ((user1.getAccount()).equals(user.getAccount()) // 判断数据库中是否存在输入的用户名和密码
                && (user1.getPassword()).equals(user.getPassword())) {
              System.out.println("登录成功!");
              System.out.println("当前用户id为:" + user1.getId());
              flag1 = true;
              break;
            }
          }
          if (!flag1) { // 如果用户名或者密码输入错误
            System.out.println("用户名或者密码输入错误!请重新输入");
          }
        } while (!flag1);    //判定条件
        while (flag1) { // 如果成功登录
          System.out.println("请输入您需要的操作:\n1.借书\t2.还书\n3.修改用户信息\t4.退出系统\n5.回到主菜单");
          int operation = sc.nextInt();
          switch (operation) {
          case 1:// 借书
            System.out.println("请输入要借书的书名:");
            String bookName = sc.next();
            System.out.println("借书者:");
            String personName = sc.next();
            Record record1 = new Record(bookName, personName); // 书名和借书者
            rdi.recordAdd(record1);// 借书方法
            break;
          case 2:// 还书
            System.out.println("请输入要还书的图书书名:");
            String delBookName = sc.next();
            rdi.recordDel(delBookName);
            break;
          case 3:// 修改用户信息
            System.out.println("请输入要修改账户的id");
            int updateUserId = sc.nextInt();
            System.out.println("请输入修改后的用户名");
            String updateUserName = sc.next();
            System.out.println("请输入修改后的密码");
            String updateUserPassword = sc.next();
            User user2 = new User(updateUserId, updateUserName, updateUserPassword);
            udi.userUpdate(user2);
            break;
          case 4: // 退出系统
            System.out.println("退出系统成功!");
            System.exit(0);
            break;
          case 5:// 回到主菜单
            flag1 = false;
            flag2 = true;
            break;
          }
        }
        break;
      case 3: // 展示书库所有书籍
        listBook = (ArrayList<Book>) bdi.bookQuery();
        for (Book book1 : listBook) { // 遍历输出
          System.out.println("图书编号:" + book1.getId() + "," + " 书名:" + "《" + book1.getName() + "》" + ","
              + " 作者:" + book1.getAuthor() + "," + "  价格:" + book1.getPrice() + "元");
        }
        flag2 = true; // 回到主菜单
        break;
      case 4: // 注册用户
        System.out.println("请输入要注册的用户信息:");
        System.out.println("用户名:");
        String userName = sc.next();
        System.out.println("用户密码:");
        String userPassword = sc.next();
        User user2 = new User(userName, userPassword);
        udi.userAdd(user2); // 用户注册
        flag2 = true; // 回到主菜单
        break;
      case 5: // 检索图书
        System.out.println("请输入要查询图书的书名:");
        String bookName = sc.next();
        bdi.bookSelect(bookName); // 检索图书方法
        System.out.println("是否回到主菜单?   1.回到主菜单    2.退出系统");
        int operation1 = sc.nextInt();
        if (operation1 == 1) {
          flag2 = true;
        } else {
          System.out.println("退出系统成功!");
          System.exit(0);
        }
        break;
      case 6:
        System.out.println("退出系统成功!期待您的下次使用");
        System.exit(0);
        break;
      }
    } while (flag2 == true);// 判断是否回到主菜单
  }
}

对总体功能进行描述:

1.数据库中的管理员表是内定的,管理员是无法被添加的,也无法被删除,但是可以修改管理员信息。

2.要借书必须先登录,有管理员登录和普通用户登录2种方式,没有账号的,第一次可以先注册。
3.管理员和用户要是密码或者用户名错误会跳出提示,要求重新输入,注册或者添加用户,是不允许用户名重名的,如果重名,会跳出提示。

4.查询图书的话支持模糊查询,不用输入全名,只需部分名字。要是书库中没有这个图书会显示,书库中无该书。
5.操作完毕可以选择返回主菜单。

其他实现方法没啥好说,无非就是增删改查,和嵌套增删改查,比较值得说的就是这个模糊查询见图:

还有一个是判断用户名是否存在,存在的话无法注册或者添加用户见图:

管理员登录成功后具有如下权限:

用户登录成功后具有如下权限:

(因为后面修改管理员和用户名是根据id修改的,所以我这里返回一个id

借书或者还书输入相应书名即可借书和还书。

整个项目功能差不多就是这样,我自己感觉比较不足的是,record这张表,也就是借还记录表,我没有创建借书还书日期date字段,应该再设立一个还书提醒时间,比如说规定借书不能超过2个月,当你借书的时候,会提示你应还日期。但是水平有限,这个我实在不会搞~~。

这篇博客就写到这里,CSDN大佬很多,我还是个新人,写的不好,欢迎大佬们对我指指点点

最后,博客写的不易,各位的点赞就是我创作的最大动力,我们下篇文章见

目录
相关文章
|
18天前
|
SQL Java 数据库连接
JDBC编程相关知识(实现图书管理系统进阶版)(下)
JDBC编程相关知识(实现图书管理系统进阶版)
25 0
|
18天前
|
Java 关系型数据库 MySQL
JDBC编程相关知识(实现图书管理系统进阶版)(上)
JDBC编程相关知识(实现图书管理系统进阶版)
23 0
|
1月前
|
关系型数据库 MySQL Java
启动项目出现com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法
启动项目出现com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法
|
1月前
|
消息中间件 存储 缓存
开源一个教学型分库分表示例项目 shardingsphere-jdbc-demo
在笔者心中,**消息队列**,**缓存**,**分库分表**是高并发解决方案三剑客。 分库分表之所以被广泛使用,因为工程相对简单,但分库分表并不仅仅是分片,还是需要考虑如何扩缩容(全量同步、增量同步、数据校验等)。
开源一个教学型分库分表示例项目 shardingsphere-jdbc-demo
|
11月前
|
SQL druid Java
JDBC 望舒客栈项目 万字详解
JDBC 第八节 望舒客栈项目 巩固Java和JDBC基础的不二之选!(代码量较大)
134 0
|
数据安全/隐私保护
使用JDBC+javafx写一个简单功能齐全的图书管理系统2
使用JDBC+javafx写一个简单功能齐全的图书管理系统
117 0
|
Java 数据库连接 数据库
使用JDBC+javafx写一个简单功能齐全的图书管理系统1
使用JDBC+javafx写一个简单功能齐全的图书管理系统
140 0
|
JSON 前端开发 Java
【前端+后端项目】 - 论坛信息管理系统(Web+servlet+MySQL+JDBC)
现在我们可以基于模板的方式,通过服务器把数据渲染到页面中,然后直接返回完整的页面给浏览器。
360 0
|
Java 关系型数据库 MySQL
#java项目#《水果库存系统1.0》(java(jdbc)+mysql)(二)
3.4FruitDAOimpl类实现FruitDAO 3.5Menu类 3.5.1showMainMenu()显示主菜单 3.5.2showFruitInfo()查看特定水果信息 3.5.3delFruit()水果下架 3.5.4showFruitList()查看水果列表; 3.5.5addFruit()添加水果库存信息 3.5.6exit()退出
284 0
#java项目#《水果库存系统1.0》(java(jdbc)+mysql)(二)
|
设计模式 Java 关系型数据库
#java项目#《水果库存系统1.0》(java(jdbc)+mysql)(一)
水果库存系统1.0 一:水果库存系统简介: 二:前置知识 三结构说明 3.1Client类 3.2fruit类 3.3FruitDAO接口
274 0
#java项目#《水果库存系统1.0》(java(jdbc)+mysql)(一)