- 注重版权,转载请注明原作者和原文链接
作者:码农BookSea
原文链接:https://editor.csdn.net/md?articleId=106062031
这是我大学期间做的第一个项目,用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大佬很多,我还是个新人,写的不好,欢迎大佬们对我指指点点
最后,博客写的不易,各位的点赞就是我创作的最大动力,我们下篇文章见