这是我大学期间做的第一个项目,用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大佬很多,我还是个新人,写的不好,欢迎大佬们对我指指点点
最后,博客写的不易,各位的点赞就是我创作的最大动力,我们下篇文章见