图书管理系统(java)

图书管理系统(初级)

·前言

今天与大家分享的是一个小程序——图书管理系统,这里我们运用的是java基础的语法其中包括类和对象、继承、封装、多态、抽象类、接口还有数组等。

我们知道Java是一门面向对象的语言,所以在开始写代码之前我们需要进行几个步骤:

1.找到对象

一个图书管理系统包含了 书、书架、管理员、普通用户还有用户对书架的相关操作这些对象。

2.创建对象

这里我们根据分类把上面对象分成三个包,book与user还有operation,如图:

3.使用对象

将对象之间相互关联起来,组织到一起,所以我们创建了Main类作为运行的入口。

一、book包

1.Book类

//这是Book类,主要作用是定义书的基本属性,关键字private提现java的封装性,
//与priva配套的是一些get与set方法,这些方法方便操作priva修饰的变量
public class Book {
    private  String name;
    private  String author;
    private  int price;
    private  String type;
    private  boolean isborrow;

    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

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

    public String getType() {
        return type;
    }

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

    public boolean isIsborrow() {
        return isborrow;
    }

    public void setIsborrow(boolean isborrow) {
        this.isborrow = isborrow;
    }
//这里我们重写了toString()方法,为了更适应我们的程序
//其中运用了三目操作符 
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", " +((isborrow==true)?"已经借出":"未被借出") +
                '}';
    }
}

Book类中涉及到三目操作符,这里我们再讲一下三目操作符的计算方法,(表达式1?表达式2:表达式3)  如果表达式1为真则返回表达式2的值,为假返回表达式3的值,这是三目操作符的计算方法,这里用于判断书有没有被借出。

2.BookList类


//这是BookList类,里面定义了Book[]数组,这个类演示的是书架
//里面的private仍然是提现java的封装
public class BookList {
    private Book[] books;
    private int usedSize;//计算当前书架上实际存放书的数量
    public BookList(){
        //对书架上的书和数量进行初始化
        this.books = new Book[10];
        books[0] = new Book("三国演义","罗贯中",17,"小说");
        books[1] = new Book("西游记","吴承恩",15,"小说");
        books[2] = new Book("水浒传","曹雪芹",19,"小说");
        this.usedSize = 3;
    }

    public int getUsedSize() {
        return usedSize;
    }

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

    public Book getBook(int pos){
        return books[pos];
    }

    public void setBooks(int pos,Book book){
        books[pos] = book;
    }

    public Book[] getBooks() {
        return books;
    }
}

二、operatio包

这个包是整个程序最为关键的部分,包含图书管理上基本操作的实现,涉及了大量JAVA语言的基本语法与运用,下面我将进行逐步讲解。

1.IOPeration接口

为了更好的组织管理员与普通用户的操作,我在这里创建了接口后面让其余操作实现这个接口,在用户里以IOPeration接口创建数组,区分开管理员与普通用户的操作

//导包语句,接口中用到了book包里的BookList类创建对象作为形参
import book.BookList;

//这里接口的主要作用
public interface IOPeration {
    void work(BookList bookList);
}

2.AddOperation类

//导包语句
import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入书名:");
        String name = scanner.nextLine();

        System.out.println("请输入作者:");
        String author = scanner.nextLine();

        System.out.println("请输入类型:");
        String type = scanner.nextLine();

        System.out.println("请输入价格:");
        int price = scanner.nextInt();

        //创建Book对象进行接收书的基本信息
        Book book = new Book(name,author,price,type);

        //currentSize用于接收目前书架上书的数量
        int currentSize = bookList.getUsedSize();

        //用count接收书架上可以存放书籍的最大值
        int count = bookList.getBooks().length;

        //判断书架有没有空余位置
        if (currentSize==count){
            System.out.println("书架已经满了!!");
            return;
        }

        //遍历书架的书籍,判断书架上有没有这本书
        for (int i = 0; i < currentSize; i++) {
            Book book1 = bookList.getBook(i);
            if (book.getName().equals(book1.getName())){
                System.out.println("已经有这本图书了!!");
                return;
            }
        }

        //经过两轮判断确定可以增加书籍
        bookList.setBooks(currentSize,book);

        //更改目前书架上书的数量
        bookList.setUsedSize(currentSize+1);
        System.out.println("增加成功!!");
        return;
    }
}

3.DelOperation类

//导包语句
import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入图书名:");
        String name = scanner.nextLine();

        //pos用于记录所要删除书籍的位置
        int pos = -1;
        int i = 0;

        //currentSize用于接收目前书架上书的数量
        int currentSize = bookList.getUsedSize();

        //用for循环遍历书架,搜寻目标书籍
        for ( ; i <currentSize ; i++) {
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                pos = i;
                break;
            }
        }
     
        if (i==currentSize){
            System.out.println("没有找到您要删除的图书!!");
            return;
        }


        int j = pos;
        //用for循环遍历书架,让目标书籍被后面书籍覆盖,实现删除效果
        for (; j < currentSize-1; j++) {
            Book book = bookList.getBook(j+1);
            bookList.setBooks(j,book);
        }
        bookList.setUsedSize(currentSize-1);
        System.out.println("删除成功!!");
    }
}

4.ShowOperation类

//导包语句
import book.Book;
import book.BookList;

public class ShowOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        System.out.println("显示图书!!");

        //currentSize用于接收目前书架上书的数量
        int currentSize = bookList.getUsedSize();

        //用for循环遍历数组并进行打印
        for (int i = 0; i <currentSize ; i++) {
            Book book = bookList.getBook(i);
            System.out.println(book);
        }
    }
}

5.FindOperation类

//导包语句
import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("查找图书!!");
        System.out.println("请输入所查找的书名:--》");
        String name = scanner.nextLine();

        //currentSize用于接收目前书架上书的数量
        int currentSize = bookList.getUsedSize();

        //用for循环遍历书架,搜寻目标书籍
        for (int i = 0; i <currentSize ; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){
                System.out.println("所查找图书信息如下:");
                System.out.println(book);
                return;
            }
        }

        System.out.println("没有找到您要查找的图书!!");
        return;
    }
}

6.ExitOperation类

//导包语句
import book.BookList;

public class ExitOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        System.out.println("退出系统!!");
        //Java中自带的退出系统方法
        System.exit(0);
    }
}

7.BorrowOperation类

//导包语句
import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("借阅图书!!");
        System.out.println("请输入您要借阅图书的书名:");
        String name = scanner.nextLine();
 
        //currentSize用于接收目前书架上书的数量
        int currentSize = bookList.getUsedSize();

        //用for循环遍历书架,搜寻目标书籍
        for (int i = 0; i <currentSize ; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){
                book.setIsborrow(true);
                System.out.println("借阅成功!!");
                return;
            }
        }
        System.out.println("没有找到您要借阅的图书!!!");
        return;
    }
}

8.ReturnOperation类

//导包语句
import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOPeration{
    @Override
    //重写work()方法
    public void work(BookList bookList) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入您要归还图书的书名:");
        String name = scanner.nextLine();

        //currentSize用于接收目前书架上书的数量
        int currentSize = bookList.getUsedSize();

        //用for循环遍历书架,搜寻目标书籍
        for (int i = 0; i <currentSize ; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){
                book.setIsborrow(false);
                System.out.println("归还成功!!");
                return;
            }
        }
        System.out.println("没有找到您要归还的图书!!!");
        return;
    }
}

 三、user包

1.抽象类User

不管是管理员或者是普通用户都是属于用户,所以这里我创建了User类作为父类,里面定义用户共同的属性,然后通过继承,继承给子类AdminUser与NormalUser,这里提现了Java三大特性的继承,因为子类拥有相同的行为但又有不同实现步骤,所以我将User定为抽象类,将子类要实现的方法定义在这里,在子类进行重写。

import book.BookList;
import operation.IOPeration;

public abstract class User {
    protected String name;
    //根据身份的不同,在数组中添加不同的操作
    protected IOPeration[] ioPerations;

    public User(String name) {
        this.name = name;
    }

    public abstract int menu();
    public abstract void doOperation(int pos, BookList bookList);
}

2.AdminUser类

//导包语句
import book.BookList;
import operation.*;

import java.util.Scanner;

public class AdminUser extends User{
    //构造方法,进行初始化
    public AdminUser(String name) {
        super(name);
        ioPerations = new IOPeration[]{
                new ExitOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation(),
                new FindOperation()
        };
    }
    public int menu(){
        Scanner scanner = new Scanner(System.in);
        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.println("######################");
        System.out.println("请输入您要进行的操作:--》");
        int choice = scanner.nextInt();
        return choice;
    }
    //实现选择所要进行的操作
    public void doOperation(int pos,BookList bookList){
        IOPeration ioPeration = ioPerations[pos];
        ioPeration.work(bookList);
    }
}

3.NormalUser类

//导包语句
import book.BookList;
import operation.*;

import java.util.Scanner;

public class NormalUser extends User{
    //构造方法,进行初始化
    public NormalUser(String name) {
        super(name);
        ioPerations = new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
        };
    }
    public int menu(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("######普通用户########");
        System.out.println("     1.查找图书");
        System.out.println("     2.借阅图书");
        System.out.println("     3.归还图书");
        System.out.println("     0.退出系统");
        System.out.println("######################");
        System.out.println("请输入您要进行的操作:--》");
        int choice = scanner.nextInt();
        return choice;
    }
  //实现选择所要进行的操作
    public void doOperation(int pos, BookList bookList){
        IOPeration ioPeration = ioPerations[pos];
        ioPeration.work(bookList);
    }
}
四、Main类

在这个类中涉及到了向上转型,多态,动态绑定。

//导包语句
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {
    //方法作用是实现登录操作,返回类型User确定身份
    public static User login(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的姓名:--》");
        String name = scanner.nextLine();
        System.out.println("请选择您的身份:1.管理员  2.普通用户 --》");
        int choice = scanner.nextInt();
        if(choice==1){
            return new AdminUser(name);
        }else{
            return new NormalUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        //向上转型
        User user = login();
        while (true){
//管理员与普通用户都有menu()方法,不同对象有不同效果,体现了Java的多态
            int choice = user.menu();
            user.doOperation(choice,bookList);
        }
    }
}

五、尾声

来到这里,我们的图书管理系统(初级)也就算讲解完毕了,当然这只是一个初级版本这个图书管理系统还有很多不完善的地方,比如没有做到持久化的存储,当前运用的只是数组,想要做到持久的存储我们可以将图书存到文件里或者放到数据库中,后面也可以做成网页交互的,还可以加更多的框架,这只是一个开始,想要做到后面那样我还需要继续的学习,后面我会持续更新与改进我们的图书管理系统,如果感觉讲解的还不错,麻烦给博主点点关注呗,您的关注与评论是对我最大的支持,求求了~~

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
好的,你需要一个图书管理系统Java代码,是吗?那么,下面是一个简单的图书管理系统Java代码示例,你可以根据自己的需求进行修改和完善。 ```java import java.util.Scanner; public class Library { public static void main(String[] args) { int n=0; Scanner sc=new Scanner(System.in); System.out.println("请输入图书数量:"); n=sc.nextInt(); Book[] books=new Book[n]; for(int i=0;i<n;i++){ System.out.println("请输入第"+(i+1)+"本书的信息:"); System.out.println("书名:"); String name=sc.next(); System.out.println("作者:"); String author=sc.next(); System.out.println("价格:"); double price=sc.nextDouble(); books[i]=new Book(name,author,price); } System.out.println("图书信息如下:"); for(int i=0;i<n;i++){ System.out.println(books[i].toString()); } } } class Book{ private String name; private String author; private double price; public Book(String name,String author,double price){ this.name=name; this.author=author; this.price=price; } 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 double getPrice(){ return price; } public void setPrice(double price){ this.price=price; } @Override public String toString(){ return "书名:"+name+",作者:"+author+",价格:"+price; } } ``` 这段代码实现了一个简单的图书管理系统,可以输入图书的数量和每本书的信息,然后将所有图书的信息输出。你也可以根据自己的需求进行修改和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值