Java最全图书管理系统--Java实现_图书类静态方法(1),java面试题大汇总github

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}


###### 3.User类:定义了用户的一些属性(用户编号,用户名,密码和是否为管理员的标记),并且写了属性的get、set、toSting方法



package Java100_1006;

import Java100_1006.operations.IOperation;

abstract public class User {
// 使用这个 User 类来表示一个用户
// ±---------±------------±-----±----±--------±---------------+
// | Field | Type | Null | Key | Default | Extra |
// ±---------±------------±-----±----±--------±---------------+
// | userId | int(11) | NO | PRI | NULL | auto_increment |
// | username | varchar(20) | YES | | NULL | |
// | password | varchar(20) | YES | | NULL | |
// | isAdmin | int(11) | YES | | NULL | |
// ±---------±------------±-----±----±--------±---------------+
// 针对此处的 isAdmin, 并不是直接使用一个 boolean 变量来区分, 而是使用两个不同的子类.
// 原因是, 管理员和普通用户支持的方法, 是不一样的.
private int userId;
private String userName;
private String passWord;

// 包含了一个数组, 数组里面就是该用户支持的哪些操作.
// 针对普通用户, 和管理员, 分别设置不同的操作.
IOperation[] operations;

//普通用户和管理员看到的菜单也不同
abstract public int menu();
public void doOperation(int choice) {
    operations[choice].work();
}

public int getUserId() {
    return userId;
}

public void setUserId(int userId) {
    this.userId = userId;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getPassWord() {
    return passWord;
}

public void setPassWord(String passWord) {
    this.passWord = passWord;
}

@Override
public String toString() {
    return "User{" +
            "userId=" + userId +
            ", userName='" + userName + '\'' +
            ", passWord='" + passWord + '\'' +
            '}';
}

}


###### 4.用户分为两种:普通用户和管理员,所以应该分别建立两个类来描述这两个用户。


\*\*4.1NormalUser类:\*\*描述普通用户,实现普通用户的构造方法,并打印普通用户的操作界面。



package Java100_1006;

import Java100_1006.operations.*;

import java.util.Scanner;

//普通用户
public class NormalUser extends User{
//普通用户的构造方法
public NormalUser(){
this.operations = new IOperation[]{
//0.退出
new ExitOperation(),
//1.查看书籍列表
new DisplayOperation(),
//2. 查找指定书籍
new FindOperation(),
//3.借阅书籍
new BorrowOperation(),
//4. 归还书籍
new ReturnOperation()
};
}

//打印普通用户的菜单
@Override
public int menu() {
    System.out.println("=============================");
    System.out.println("欢迎您"+this.getUserName()+"!");
    System.out.println("1. 查看书籍列表");
    System.out.println("2. 查找指定书籍");
    System.out.println("3. 借阅书籍");
    System.out.println("4. 归还书籍");
    System.out.println("0. 退出系统");
    System.out.println("=============================");
    System.out.println("请输入您的选项:");
    Scanner scanner = new Scanner(System.in);
    int choice = scanner.nextInt();
    return choice;
}

}


**4.2Admin类**:描述管理员,实现管理员的构造方法并打印管理员的操作界面



package Java100_1006;

import Java100_1006.operations.*;

import java.util.Scanner;

//管理员
public class Admin extends User{
//管理员的构造方法
public Admin(){
//初始化operation
//继承与User类,所以可以使用父类的中的数组
this.operations = new IOperation[]{
//0. 退出系统
new ExitOperation(),
//1. 查看书籍列表
new DisplayOperation(),
//2. 查找指定书籍
new FindOperation(),
//3. 新增书籍
new AddOperation(),
//4. 删除书籍
new DeleteOperation()
};
}
//打印管理员的菜单
@Override
public int menu() {
System.out.println(“");
System.out.println("欢迎您, " + this.getUserName() + "! 您是管理员! “);
System.out.println(“1. 查看书籍列表”);
System.out.println(“2. 查找指定书籍”);
System.out.println(“3. 新增书籍”);
System.out.println(“4. 删除书籍”);
System.out.println(“0. 退出系统”);
System.out.println(”
”);
System.out.println("请输入选项: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}


###### 5.DBUtil类:封装与数据库建立连接的操作(主要用JDBC来编写)



package Java100_1006;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//先建立这个类来 封装 数据库建立连接的操作
//具体步骤:
//1.创建DataSouse实例
//2.根据DataSouse创建对应的Connection
public class DBUtil {
private static final String URL = “jdbc:mysql://127.0.0.1:3306/bookmanager?characterEncoding=utf8&useSSL=false”;
private static final String USERNAME = “root”;
private static final String PASSWORD = “1234”;

//懒汉模式:
private static DataSource dataSource = null;

//初始情况下,dataSource为null,没有被实例化
//首次调用getDataSource()时才会被实例化
private static DataSource getDataSource(){
    if(dataSource == null){
        dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl(URL);
        ((MysqlDataSource)dataSource).setUser(USERNAME);
        ((MysqlDataSource)dataSource).setPassword(PASSWORD);
    }
    return dataSource;
}

//提供一个方法来建立连接
//用static来修饰,那么就无需实例化DBUtil实例就能调用这个方法,更加方便
public static Connection getConnection() throws SQLException {
    return getDataSource().getConnection();
}

//释放资源
public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){
    try{
        if(resultSet != null){
            resultSet.close();
        }
        if(statement != null){
            statement.close();
        }
        if(connection != null){
            connection.close();
        }
    }catch (SQLException e){
        e.printStackTrace();
    }

}

}


###### 6.BookDao类:封装 对表的增删查改操作



package Java100_1006;

import Java100_1006.Book;
import Java100_1006.DBUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//封装 对Book表的增删查改操作
public class BookDao {

//1.新增书籍(插入)
public boolean add(Book book){
    //把book对象插入数据库的书籍表中
    Connection connection = null;
    PreparedStatement statement = null;
    try {
        //1.和数据库建立连接
        connection = DBUtil.getConnection();

        //2.拼装sql语句
        String sql = "insert into book values(null,?,?,?,?,?)";
        statement = connection.prepareStatement(sql);
        statement.setString(1,book.getName());
        statement.setString(2,book.getAuthor());
        statement.setInt(3,book.getPrice());
        statement.setString(4,book.getType());
        statement.setInt(5,book.isBorrowed()?1:0);

        //3.执行SQL
        int ret = statement.executeUpdate();
        if(ret == 1)
            return true;
        return false;

    }catch (SQLException e){
        e.printStackTrace();
    }finally {
        DBUtil.close(connection,statement,null);
    }
    return false;
}
//2.查找所有书籍(查找)
public List<Book> selectAll() {
    List<Book> list = new ArrayList<>();
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;

    try {
        //1.与数据库建立连接
        connection = DBUtil.getConnection();
        //2.拼装SQL
        String sql = "select \* from book";
        statement = connection.prepareStatement(sql);
        //3.执行SQL
        resultSet = statement.executeQuery();
        //4.遍历结果集合
        while(resultSet.next()){
            //取出当前行的这些列,构造一个Book对象来
            Book book = new Book();
            book.setBookId(resultSet.getInt("bookId"));
            book.setName(resultSet.getString("name"));
            book.setAuthor(resultSet.getString("author"));
            book.setPrice(resultSet.getInt("price"));
            book.setType(resultSet.getString("type"));
            book.setBorrowed(resultSet.getInt("isBorrowed")==1);
            //把这个book对象添加到链表中
            list.add(book);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        DBUtil.close(connection,statement,resultSet);
    }
    return list;
}
//3.根据名字查找书籍(查找)
public List<Book> selectByName(String name){
    List<Book> list = new ArrayList<>();
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;

    try {
        //1.先与数据库建立连接
        connection = DBUtil.getConnection();
        //2.拼装SQL语句
        String sql = "select \* from book where name=?";
        statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        //3.执行SQL
        resultSet = statement.executeQuery();
        //4.遍历结果集合
        while(resultSet.next()){
            Book book = new Book();
            book.setBookId(resultSet.getInt("bookId"));
            book.setName(resultSet.getString("name"));
            book.setAuthor(resultSet.getString("author"));
            book.setPrice(resultSet.getInt("price"));
            book.setType(resultSet.getString("type"));
            book.setBorrowed(resultSet.getInt("isBorrowed") == 1);
            list.add(book);
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        DBUtil.close(connection,statement,resultSet);
    }
    return list;
}
//4.删除书籍(删除)
public boolean delete(int bookId){
 Connection connection = null;
 PreparedStatement statement = null;
    try {
        //1.建立连接
        connection = DBUtil.getConnection();
        //2.拼装SQL
        String sql = "delete from book where bookId=?";
        statement = connection.prepareStatement(sql);
        statement.setInt(1,bookId);
        //3.执行SQL
        int ret = statement.executeUpdate();
        if(ret != 1){
            return  false;
        }
        return true;
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        DBUtil.close(connection,statement,null);
    }
    return false;
}
//5.借书(修改)
public boolean borrowBook(int bookId){

    Connection connection = null;
    //statement1用于查找操作
    PreparedStatement statement1 = null;
    //statement2用于修改操作
    PreparedStatement statement2 = null;
    ResultSet resultSet = null;
    try {
        //1.建立连接
        connection = DBUtil.getConnection();
        //要借书,就必须知道这本书存不存在,所以我们先查找,再操作
        //2.拼装SQL
        String sql = "select \* from book where bookId=?";
        statement1 = connection.prepareStatement(sql);
        statement1.setInt(1,bookId);
        //3.执行SQL
        resultSet = statement1.executeQuery();
        //4.遍历结果,预期结果要么是1条,要么是0条
        if(resultSet.next()){
            //进入if就说明书是存在的
            boolean isBorrowed = (resultSet.getInt("isBorrowed")==1);
            if(isBorrowed) {
                //说明书已经被借出了,不能再次借阅
                System.out.println("书已经借出! 无法再次借出! bookId = " + bookId);
                return false;
            }
        }else{
            //进入else,那么书是不存在的
            System.out.println("书不存在! 无法借出! bookId = " + bookId);
            return false;
        }
        //[接下来是开始进行借书逻辑]
        //5.拼装SQL
        sql = "update book set isBorrowed=1 where bookId=?";
        statement2 = connection.prepareStatement(sql);
        statement2.setInt(1,bookId);

        //6.执行SQL
        int ret = statement2.executeUpdate();
        if(ret != 1){
            return false;
        }
        return true;

    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement2 != null){
            try {
                statement2.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement1 != null){
            try {
                statement1.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    return false;
}
//6.还书(修改)
public boolean returnBook(int bookId){
    Connection connection = null;
    PreparedStatement statement1 = null;
    PreparedStatement statement2 = null;
    ResultSet resultSet = null;
    try {
        connection = DBUtil.getConnection();
        //查询书是否存在
        String sql = "select \* from book where bookId=?";
        statement1 = connection.prepareStatement(sql);
        statement1.setInt(1,bookId);
        resultSet = statement1.executeQuery();
        if(resultSet.next()){
            //进入if语句就说明这本书存在于书籍名单中
            boolean isBorrowed = (resultSet.getInt("isBorrowed")==1);
            if(!isBorrowed){
                System.out.println("书没有借出, 没必要还! bookId = " + bookId);
                return false;
            }
        }else{
            //不是图书系统中的书,不需要还
            System.out.println("书不存在, 无法归还! bookId = " + bookId);
            return false;
        }
        //[还书]
        //修改书籍的借出状态就可
        sql = "update book set isBorrowed=0 where bookId=?";
        statement2 = connection.prepareStatement(sql);
        statement2.setInt(1,bookId);
        int ret = statement2.executeUpdate();
        if(ret != 1){
            return false;
        }
        return true;
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement2 != null){
            try {
                statement2.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement1 != null){
            try {
                statement1.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    return false;
}

}


###### 7.UserDao类:封装 识别用户的操作



package Java100_1006;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {
//实现根据用户名找密码这样一个过程(用户名 唯一)
public User selectByName(String name){
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = DBUtil.getConnection();
String sql = “select * from user where username=?”;
statement = connection.prepareStatement(sql);
statement.setString(1,name);
resultSet = statement.executeQuery();
if(resultSet.next()){
//存在这个用户,返回一个User对象
//判断这个用户是普通用户还是管理员
boolean isAdmin = (resultSet.getInt(“isAdmin”))==1;
User user = null;
if (isAdmin){
user = new Admin();
}else{
user = new NormalUser();
}
user.setUserId(resultSet.getInt(“userId”));
user.setUserName(resultSet.getString(“username”));
user.setPassWord(resultSet.getString(“password”));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(connection,statement,resultSet);
}
return null;
}
}


###### 8.operations包:创建IOperation接口和实现这个接口的其他类


**接口:**



package Java100_1006.operations;

//后续的增加 删除 借书 还书 等操作都要实现这个接口
public interface IOperation {
void work();
}


**8.1:AddOperation类:增加书籍**



package Java100_1006.operations;

import Java100_1006.Book;
import Java100_1006.BookDao;

import java.util.Scanner;

public class AddOperation implements IOperation{
@Override
public void work() {
System.out.println(“新增书籍!”);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入书名: ");
String bookName = scanner.next();
System.out.println("请输入作者: ");
String author = scanner.next();
System.out.println(“请输入价格:”);
int price = scanner.nextInt();
System.out.println(“请输入类别:”);
String type = scanner.next();
//假设新增书籍都是未借出的状态
Book book = new Book();
book.setName(bookName);
book.setAuthor(author);
book.setPrice(price);
book.setType(type);
BookDao bookDao = new BookDao();
boolean ret = bookDao.add(book);
if(ret){
System.out.println(“新增书籍成功”);
}else{
System.out.println(“新增书籍失败!”);
}
}
}


**8.2BorrowOperation类:借阅书籍**



package Java100_1006.operations;

import Java100_1006.BookDao;

import java.util.Scanner;

public class BorrowOperation implements IOperation{
@Override
public void work() {
System.out.println(“借阅书籍!”);
Scanner scanner = new Scanner(System.in);
System.out.println(“请输入要借阅的书籍id:”);
int bookId = scanner.nextInt();
BookDao bookDao = new BookDao();
boolean ret = bookDao.borrowBook(bookId);
if (ret) {
System.out.println(“借阅书籍成功!”);
} else {

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

image.png

更多笔记分享

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

Dao();
boolean ret = bookDao.borrowBook(bookId);
if (ret) {
System.out.println(“借阅书籍成功!”);
} else {

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

[外链图片转存中…(img-x0DWGFQp-1715341654662)]

[外链图片转存中…(img-tjidU1jK-1715341654663)]

更多笔记分享

[外链图片转存中…(img-UaOIdFui-1715341654663)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值