Java最新【Java 基础语法】纯 Java《图书管理系统》练习,面试题附答案

分享

首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:

(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)

其次分享一些技术知识,以截图形式分享一部分:

Tomcat架构解析:

算法训练+高分宝典:

Spring Cloud+Docker微服务实战:

最后分享一波面试资料:

切莫死记硬背,小心面试官直接让你出门右拐

1000道互联网Java面试题:

Java高级架构面试知识整理:

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

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

新增、删除、查找、借阅、归还、显示所有书籍、退出系统

由于对于书架的操作我们其实就可以抽象的看成下面这样的函数

public void work(BookList bookList);

所以我们先看下接口的代码

2.2.1 操作接口

public interface IOperation {

public void work(BookList bookList);

}

这里其实就用到了接口和抽象类

接着我们再通过各种操作去继承接口,并完善各自的内容

2.2.2 新增书籍

public class AddOperation implements IOperation{

@Override

public void work(BookList bookList) {

if(bookList.getSize()==10){

System.out.println(“书库已满,无法增加书籍”);

return;

}

Scanner reader = new Scanner(System.in);

String name;

String author;

int price;

String type;

System.out.print(“请输入你要新增的书名:”);

name=reader.nextLine();

System.out.print(“请输入该书的作者:”);

author=reader.nextLine();

System.out.print(“请输入该书的价格:”);

price=reader.nextInt();

reader.nextLine();

System.out.print(“请输入该书的类型:”);

type=reader.nextLine();

int pos=bookList.getSize();

Book book = new Book(name, author, price, type);

bookList.setBooks(pos, book);

bookList.setSize(bookList.getSize()+1);

}

}

2.2.3 删除书籍

public class DelOperation implements IOperation{

@Override

public void work(BookList bookList) {

if(bookList.getSize()==0){

System.out.println(“书库无书,无法进行删除操作”);

return;

}

Scanner reader = new Scanner(System.in);

String name;

System.out.print(“请输入你要删除的书名:”);

name=reader.nextLine();

for(int i=0;i<bookList.getSize();i++){

if(name.equals(bookList.getBook(i).getName())){

while(bookList.getSize()-i-1!=0){

bookList.setBooks(i,bookList.getBook(i+1));

i++;

}

bookList.setSize(bookList.getSize()-1);

return;

}

}

System.out.println(“书库无该图书,无法进行删除操作”);

}

}

2.2.4 查找书籍

public class FindOperation implements IOperation{

@Override

public void work(BookList bookList) {

if(bookList.getSize()==0){

System.out.println(“书库无书”);

return;

}

Scanner reader = new Scanner(System.in);

String name;

System.out.print(“请输入你要查找的书名:”);

name=reader.nextLine();

for(int i=0;i<bookList.getSize();i++){

if(name.equals(bookList.getBook(i).getName())){

System.out.println(“已查询找到该书,信息如下:”);

System.out.println(bookList.getBook(i));

return;

}

}

System.out.println(“未查询到该书”);

}

}

2.2.5 借阅书籍

public class LendOperation implements IOperation{

@Override

public void work(BookList bookList) {

if(bookList.getSize()==0){

System.out.println(“书库无书,无法进行借阅”);

return;

}

Scanner reader = new Scanner(System.in);

String name;

System.out.print(“请输入你要借阅的书名:”);

name=reader.nextLine();

for(int i=0;i<bookList.getSize();i++){

if(name.equals(bookList.getBook(i).getName())){

if(bookList.getBook(i).isLent()==false) {

bookList.getBook(i).setLent(true);

System.out.println(“借阅成功”);

}else{

System.out.println(“该书已被他人借阅,借阅失败”);

}

return;

}

}

System.out.println(“未查询到该书,借阅失败”);

}

}

2.2.6 归还书籍

public class ReturnOperation implements IOperation{

@Override

public void work(BookList bookList) {

Scanner reader = new Scanner(System.in);

String name;

System.out.print(“请输入你要归还的书名:”);

name=reader.nextLine();

for (int i =0;i<bookList.getSize();i++){

if(name.equals(bookList.getBook(i).getName())){

if(bookList.getBook(i).isLent()==true){

bookList.getBook(i).setLent(false);

System.out.println(“该书归还成功”);

return;

}else{

System.out.println(“该书未被借阅,操作错误”);

return;

}

}

}

System.out.println(“未查询到你要归还的书籍,操作错误”);

}

}

2.2.7 显示所有书籍信息

public class DisplayOperation implements IOperation{

@Override

public void work(BookList bookList) {

if(bookList.getSize()==0){

System.out.println(“书库无书”);

}

for(int i=0;i<bookList.getSize();i++){

System.out.println(bookList.getBook(i));

}

}

}

2.2.8 退出系统

public class ExitOperation implements IOperation{

@Override

public void work(BookList bookList) {

System.out.println(“图书管理系统已退出,欢迎下次使用!”);

System.exit(0);

}

}

上述具体操作其实就是你对一个顺序表进行一系列操作,当你去思考敲它们时,会发现是整个工程比较简单的一环

2.3 用户(user 包)


这个包里即我要构造的用户(管理员和普通用户),因此我先创建了父类 User。那么一个用户的基本信息有什么呢?

  • 用户名
  • 菜单:我们假想当我们去 ATM 机取钱时,我们可以看到一个界面
  • 用户要进行的操作

那么我们先看我的代码吧!

2.3.1 User 类

abstract public class User {

protected String name;

protected IOperation[] iOperations;

public User(String name) {

this.name = name;

}

abstract public int menu();

public void doOperation(int choice, BookList bookList){

iOperations[choice].work(bookList);

}

}

此时你会发现除了用户名的定义,其他属性和行为都有点细节问题需要思考

  • 菜单:因为普通用户和管理员的菜单是不同的,而我们不需要父类去实现具体的代码,所以我修改成了抽象类
  • 用户要进行的操作:其实整合框架的时候才很容易理解上述代码中的
protected IOperation[] iOperations;
public void doOperation(int choice, BookList bookList){
    iOperations[choice].work(bookList);
}
因为我们是需要用户去进行这些操作,而我个人针对普通用户和管理员设计成的界面其实如下图![在这里插入图片描述](https://img-blog.csdnimg.cn/7c7da9390b424f20ae2e6183685dd08f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5ZCe5ZCe5ZCQ5ZCQ5aSn6a2U546L,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center)
所以我先创建了一个操作的数组,注意此时我没有创建对象,因为普通用户和管理员的对象(即操作)是不同的,看上述菜单就知道。之后构造了一个方法(即用户用来调用操作的),将对应操作的序号,以及要操作的对象传进去,就可以实现这些操作的使用

那么现在对于管理员和普通用户的定义也很简单了,即要将菜单和操作数组的对象进行修改

2.3.2 AdminUser 类

public class AdminUser extends User{

public AdminUser(String name){

super(name);

this.iOperations = new IOperation[]{new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new DisplayOperation()};

}

public int menu(){

System.out.println(“========= 管理员菜单 =========”);

System.out.println(“1:查找图书”);

System.out.println(“2:新增图书”);

System.out.println(“3:删除图书”);

System.out.println(“4:显示所有图书”);

System.out.println(“0:退出系统”);

System.out.print(“请输入您要执行的操作序号:”);

Scanner reader = new Scanner(System.in);

int index = reader.nextInt();

return index;

}

}

2.3.3 NormalUser 类

public class NormalUser extends User{

public NormalUser(String name){

super(name);

this.iOperations = new IOperation[]{new ExitOperation(), new FindOperation(), new LendOperation(), new ReturnOperation()};

}

public int menu(){

System.out.println(“========= 用户菜单 =========”);

System.out.println(“1:查找图书”);

System.out.println(“2:借阅图书”);

System.out.println(“3:归还图书”);

System.out.println(“0:退出系统”);

System.out.print(“请输入您要执行的操作序号:”);

Scanner reader = new Scanner(System.in);

int index = reader.nextInt();

return index;

}

}

4. 整合代码(含主类代码)

==================================================================================

其实我个人在写代码时肯定不可能各各细节都一步到位,肯定是在大框架下边写边改。

而既然有了上述各包的代码,我们最终主类中怎么将他们整合呢?先直接上代码

public class Main {

public static User login(){

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

算法刷题(PDF)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

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

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

上代码

public class Main {

public static User login(){

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)

[外链图片转存中…(img-bXvM1LEc-1715417019348)]

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

[外链图片转存中…(img-ta3UybdK-1715417019349)]

算法刷题(PDF)

[外链图片转存中…(img-82C9xV2W-1715417019349)]

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值