Java实现一个简单的图书管理系统

编程之家收集整理的这篇文章主要介绍了Java实现一个简单的图书管理系统编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目录

实现目标

项目展示

实现过程

类的设计

1. 创建图书相关的类

2.创建操作相关的类

3.创建用户相关的类 

4.进行整合

5.实现具体的每个 Operation

源码


实现目标

1、简单的登录

2、管理

查阅书籍
增加书籍
删除书籍
打印书籍列表
退出

3、用户端

查询书籍 
借阅书籍 
归还书籍
退出

项目展示

        

实现过程

类的设计


1. 创建图书相关的类

创建 package book  创建 Book 类,表示一本书

package book;
import javax.swing.*;


public class Book {
    private String @R_301_6889@; //书名
    private String author; //作者
    private int price; //价格
    private String type; // 类型
    private boolean isBorrowed = false; //认未借出
    //构造方法 
    public Book(String @R_301_6889@,String author,int price,String type) {
        this.@R_301_6889@ = @R_301_6889@;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    //提供get和set方法
    public String get@R_301_6889@() {
        return @R_301_6889@;
    }

    public voID set@R_301_6889@(String @R_301_6889@) {
        this.@R_301_6889@ = @R_301_6889@;
    }

    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;
    }

    public String getType() {
        return type;
    }

    public voID setType(String type) {
        this.type = type;
    }

    public boolean getBorrowed() {
        return isBorrowed;
    }

    public voID setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

    @OverrIDe
    public String toString() {
        return "Book{" +
                "@R_301_6889@='" + @R_301_6889@ + '\'' +
                ",author='" + author + '\'' +
                ",price=" + price +
                ",type='" + type + '\'' +
                //",isBorrowed=" + isBorrowed +
                (isBorrowed ? " 已借出": " 未借出")+
                '}';
    }

}
  

创建 BookList 类, 用来保存 N 本书.

package book;

public class BookList {
    private Book[] books = new Book[10];
    private int usedSize;

    //构造方法 初始化书 先放三本书
    public BookList() {
        this.books[0] = new Book("三国演义","罗贯中",17,"小说");
        this.books[1] = new Book("西游记","吴承恩",20,"小说");
        this.books[2] = new Book("水浒传","施耐庵",31,"小说");
        this.usedSize = 3;
    }
    //get和set方法 便于后续得到和设置书的位置、书的数量
    public Book getBook(int pos){
        return this.books[pos];
    }

    public voID setBook(int pos,Book book){
        this.books[pos] = book;
    }

    public int getUsedSize() {
        return usedSize;
    }

    public voID setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }

}

2.创建操作相关的类

 先创建 package operation 创建接口

 
package operation;

import book.BookList;

public interface IOperation {
    voID work(BookList bookList);
}

接下来创建一组操作类, 每个类对应一个用户的动作.

AddOperation                      增加书籍
DelOperation                       删除书籍
FindOperation                     查找书籍         
displayOperation                展示书籍
BorrowOperation                借阅书籍
Returnoperation                 归还书籍
Exitoperation                      退出系统

先把空类创建好, 不着急实现细节.
抽象出 Operation 的好处: 让操作和操作之间低耦合, 让操作和用户之间低耦合.

3.创建用户相关的类 

创建 package user

创建 User 类, 这是一个抽象类

package user; 
// User 类是一个抽象类,每个子类需要做两件事情 
// 1. 初始化对应的操作数组  2. 实现 Menu 菜单

abstract public class User {
    protected String @R_301_6889@;
    protected IOperation[] iOperations;
    public User(String @R_301_6889@) {
        this.@R_301_6889@ = @R_301_6889@;
    }

    // 显示菜单
    abstract public int menu();
    // 根据用户选项执行操作
    public voID doIOperation(int choice,BookList bookList){
        this.iOperations[choice].work(bookList);
    }
}

创建管理员类, 是 User 的子类.

package user;

import operation.*;

import java.util.Scanner;

public class adminUser extends User{
    public adminUser(String @R_301_6889@) {
        super(@R_301_6889@);
        this.iOperations = new IOperation[]{ //操作数组
                new Exitoperation(),//0.退出系统
                new FindOperation(),//1.查找图书
                new AddOperation(),//2.增加图书
                new DelOperation(),//3.删除图书
                new displayOperation()//4.显示图书
        };

    }
    @OverrIDe
    public int menu(){
        System.out.println("==========管理员菜单=========");
        System.out.println("hello! "+this.@R_301_6889@);
        System.out.println("1.查找图书");
        System.out.println("2.增加图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("0.退出系统");
        System.out.println("============================");

        Scanner scanner = new Scanner(system.in);
        int choice = scanner.nextInt();
        return choice;//根据所选的数字 匹配不同的操作功能
    }

}

创建普通用户类,是User的子类

package user;

import operation.*;

import java.util.Scanner;

public class normalUser extends User{
    public normalUser(String @R_301_6889@) {
        super(@R_301_6889@);
        this.iOperations = new IOperation[]{ //操作数组
                new Exitoperation(),new FindOperation(),new BorrowedOperation(),new Returnoperation()
        };

    }
    @OverrIDe
    public int menu(){
        System.out.println("==========普通用户菜单=========");
        System.out.println("hello! "+this.@R_301_6889@);
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("============================");

        Scanner scanner = new Scanner(system.in);
        int choice = scanner.nextInt();
        return choice;//根据所选的数字 匹配不同的操作功能
    }

}

4.进行整合


创建 Main 类和 main 方法, 搭建整体逻辑

import book.BookList;
import user.adminUser;
import user.normalUser;
import user.User;

import java.util.Scanner;

public class  Main {
    public static User login(){ //登陆
        System.out.println("请输姓名:");
        Scanner scanner = new Scanner(system.in);
        String @R_301_6889@ = scanner.nextline();
        System.out.println("请选择你的身份:");
        System.out.println("0.管理员    1.普通用户 ");
        int who = scanner.nextInt(); //判断身份
        if (who == 0){
            return new adminUser(@R_301_6889@);//向上转型
        }else {
            return new normalUser(@R_301_6889@);//向上转型
        }
    }

    public static voID main(String[] args) {
        BookList bookList = new BookList();//准备数据

        User user = login();//登陆用户

        while (true){
            int choice = user.menu();//显示菜单
            user.doIOperation(choice,bookList);
        }


    }
}

5.实现具体的每个 Operation

查找书籍:

import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("查找书籍!");
        Scanner scanner = new Scanner(system.in);
        System.out.println("请输入你要查找的书名:");
        String @R_301_6889@ = scanner.nextline();

        int size = bookList.getUsedSize();
        for (int i = 0; i < size;i++){
            Book book = bookList.getBook(i);
            if (book.get@R_301_6889@().equals(@R_301_6889@)){
                System.out.println("找到这本书的信息如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有这本书!");
    }


}

增加图书:

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation {
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("新增图书");
        System.out.println("请输入图书的名字:");
        Scanner scanner = new Scanner(system.in);
        String @R_301_6889@ = scanner.nextline();
        System.out.println("请输入图书的作者:");
        String author = scanner.nextline();
        System.out.println("请输入图书的类型:");
        String type = scanner.nextline();//输入String类型不能写在int后面
        System.out.println("请输入图书的价格:");
        int price = scanner.nextInt();
        //注意 使用nextline读取字符串时 不能在前面读取整数 将其写在最后


        Book book = new Book(@R_301_6889@,author,price,type);

        int size = bookList.getUsedSize();
        for (int i = 0; i < size;i++){
            Book bookCur = bookList.getBook(i);
            if (bookCur.get@R_301_6889@().equals(@R_301_6889@)){
                System.out.println("已包含这本书!增加失败");
                return;
            }
        }
        bookList.setBook(size,book);
        bookList.setUsedSize(size+1);
        System.out.println("增加成功!");
    }
}

借阅图书:

package operation;


import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowedOperation implements IOperation{
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("借阅图书");
        System.out.println("请输入书名:");
        Scanner scanner = new Scanner(system.in);
        String @R_301_6889@ = scanner.nextline();

        int size = bookList.getUsedSize();
        for (int i = 0; i < size;i++){
            Book bookCur = bookList.getBook(i);
            if (bookCur.get@R_301_6889@().equals(@R_301_6889@)){
                bookCur.setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
        System.out.println("没有此书!借阅失败");
    }
}

删除书籍:

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOperation {
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("删除书籍");
        System.out.println("请输入图书的名字:");
        Scanner scanner = new Scanner(system.in);
        String @R_301_6889@ = scanner.nextline();

        int size = bookList.getUsedSize();
        int i = 0;
        int index = 0;
        for (; i < size;i++){
            Book bookCur = bookList.getBook(i);
            if (bookCur.get@R_301_6889@().equals(@R_301_6889@)){
                index = i;//定位到i下标的书
                break;
            }
        }
        if (i == size){
            System.out.println("没有此书!删除失败");
            return;
        }
        //使用for循环让后一个位置的书前移一位
        for (int j = index; j < size-1 ; j++){
            Book book = bookList.getBook(j+1);//得到j+1位置的书
            bookList.setBook(j,book);//将其设置为j位置
        }
        bookList.setUsedSize(size-1);
        System.out.println("删除成功!");

    }
}

归还书籍

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class Returnoperation implements IOperation {
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("归还图书");
        System.out.println("请输入书名:");
        Scanner scanner = new Scanner(system.in);
        String @R_301_6889@ = scanner.nextline();

        int size = bookList.getUsedSize();
        for (int i = 0; i < size;i++){
            Book bookCur = bookList.getBook(i);
            if (bookCur.get@R_301_6889@().equals(@R_301_6889@)){
                bookCur.setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
        System.out.println("没有此书!归还失败");
    }
}

显示书籍

package operation;

import book.BookList;

public class displayOperation implements IOperation {
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("显示书籍!");
        int size = bookList.getUsedSize();
        for (int i = 0; i < size ; i++){
            System.out.println(bookList.getBook(i));
        }
    }
}

退出系统

package operation;

import book.BookList;

public class Exitoperation implements IOperation{
    @OverrIDe
    public voID work(BookList bookList) {
        System.out.println("退出系统");
        System.exit(0);
    }
}

解锁查看全部内容

付费后查看完整内容
限时 微信扫码支付 ¥9.9 19.9

总结

以上是编程之家为你收集整理的Java实现一个简单的图书管理系统全部内容,希望文章能够帮你解决Java实现一个简单的图书管理系统所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Android相关文章

优化输出文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习
作者:半身风雪上篇:ThreadLocal进阶解析系列文章简介:什么叫做CAS呢?CAS 本名叫做:Compare And Swap。本文将通过CAS 的实现,JDK中相关的原子操作,及原子操作的三大问题,来全面的解析CAS。CAS 原理解析一、什么是原子操作?如何实现原子操作?二、CAS 实现原子操作的三大问题2.1、ABA 问题2.2、开销问题2.3、只能保证一个共享变量的原子操作。三、Jdk 中相关原子操作类的使用3.1、AtomicInteger3.2、AtomicIntegerArra.
Java 内存模型即 Java Memory Model,简称JMM。JMM 定义了Java 虚拟机 (JVM)在计算机内存(RAM)中的工作方式。JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JVM 的。Java1.5 版本对其进行了重构,现在的 Java 仍沿用了 Java1.5 的版本。Jmm 遇到的问题与现代计算机中遇到的问题是差不多的。 物理计算机中的并发问题,物理机遇到的并发问题与虚拟机中的情况有不少 相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参考意义。
这是小空坚持写的Android新手向系列,欢迎品尝。大佬(√)新手(√√√)先说结论使用系统的CalendarView基本上就是自找麻烦,适宜的应用场景少之又少。还是建议使用三方封装的吧,截至2022年3月9日。https://github.com/huanghaibin-dev/CalendarView Star数8.1Khttps://github.com/prolificinteractive/material-calendarview Star数5.8Khttps://github.com/ki
Android 眼睛 显示隐藏密码(ImageView)在前端中我们知道用javascript就可以可以很容易实现,那么在Android中怎么实现这个功能呢?
Capstone反汇编的使用
JAVA开发中经常会遇到不方便使用数据库,但又要进行结构化数据计算的场景。JAVA早期没有提供相关类库,即使排序、分组这种基本计算也要硬写代码,开发效率很低。后来JAVA8推出了Stream库,凭借Lambda表达式、链式编程风格、集合函数,才终于解决了结构化数据计算类库从无到有的问题。比如排序:上面代码中的sorted是集合函数,可方便地进行排序。"(参数)->函数体"的写法即Lambda表达式,可以简化匿名函数的定义。两个sorted函数连在一起用属于链式编程风格,可以使多步骤计算变得直观。仍然以上面
用swing技术实现编写一个贪吃蛇大作战小游戏,项目供大家参考学习交流。
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注