JavaSE基础---简单实现一个图书管理系统小程序

🎇前言:

        本章节将通过JavaSE的基本语法实现,并不会涉及其他领域的知识,该图书管理系统的小程序主要会用到类和对象、接口相关的知识点。

有关“类和对象”的内容具体可以看以下我前面的博客:

JavaSE基础(七)---类和对象之“类和对象的初步认知”_星河栀染的博客-CSDN博客Java中类和对象的初步认识,本章节将类和对象分成几个小篇章讲解里面的细节和表识。https://blog.csdn.net/weixin_50584850/article/details/123865302?spm=1001.2014.3001.5501

 

目录

 一、项目功能要求与设计思路

1、图书管理系统的功能要求

2、设计思路

3、实现结果展示 ​

二、图书管理的基本框架 

 1、创建书和书架

(1)定义Book类中的属性和方法

(2)定义BookList中的属性和方法

 2、创建用户  

(1)定义User类

(2)定义 AdminUser类

  (3)定义OrdinaryUser类

3、实现图书管理功能

4、Main

二、图书管理功能地实现

 (1)新增图书功能

   (2)查找图书功能

 (3)借阅图书功能

 (4)归还图书功能

 (5)显示图书功能

 (6)退出系统功能

 (7)删除图书功能*

三、完整代码

(1)Main:

(2)user包:

(3)book包: 

(4)iOperation包: 


 一、项目功能要求与设计思路

1、图书管理系统的功能要求

        作为我们平时认知的基本图书管理系统,最起码要有使用者和管理者两个身份。对应不同的身份,对其图书会进行不一样的操作。

        在登陆图书系统的时候,也得设计一个用户名相关的功能,但在这个小项目中不会实现太过复杂的功能,以基础的语法来实现。此处我们可以设计一个输入用户名,欢迎进入的提示语,之后通过输入具体的用户身份,来进行图书管理。

        使用者对应可以进行(1)借阅图书(2)归还图书(3)查询图书(4)退出系统,这几个操作;

        而管理者可以进行(1)新增图书(2)删除图书(3)显示图书(4)查询图书(5)退出系统这几个操作。


2、设计思路

图书管理设计思路图:        

  1.  首先输入用户名进入图书系统
  2. 选择用户的身份进入匹配的管理系统
  3. 根据管理系统菜单,使用对应的操作功能,对图书进行操作
  4. 新建图书(书名,作者名,价格,类型)
  5. 查询图书(判断是否存在书名,后输出该书信息)
  6. 显示图书(将系统中存在的书,输出所有书的信息)
  7. 删除图书(判断是否存在书名,后通过书名进行删除操作)
  8. 借阅、归还图书(判断是否存在书名,后进行借阅或归还操作)
  9. 退出系统(将系统中的书进行清空后,正常退出系统)

3、实现结果展示 


二、图书管理的基本框架 

        首先刚上手此项目,我们得创建该项目功能的一个基本框架,才能以便我们后续的功能实现。

        我们是没办法一下子把所有的功能实现一下子都想出来并用代码实现出来,得先创建框架后,再一步步理清之间关系,慢慢实现该项目!        

【注意】:在每一个类中的操作,记得要根据需要进行导包(一般IDEA会自动生成的)

 1、创建书和书架

作为图书管理,那就需要书和书架这两个类。

首先创建一个book包来存放,书Book和书架BookList这两个类。

 

(1)定义Book类中的属性和方法

通过定义书类Book,来设计书的属性信息有哪些。

每本书具有五个信息,分别是:

        ①书名 

        ②作者名 

        ③书的价格 

        ④书的类型 

        ⑤当前书的状态(未借阅/已借阅)

【注意】:对于定义书的属性,建议用private修饰符进行修饰,对外隐藏内部的实现,提高其安全性,但被private修饰得依靠类内的方法(Getter/Setter)才能对其访问。

之后再通过调用类中的构造方法,对其书的信息进行赋值,后续会在新增书的功能中使用到。

 对于定义类中访问静态成员变量的方法,可以通过快捷键(Alt+insert)或通过鼠标右键后点击->Generate

后续为了能通过书的引用变量名直接打印书的相关信息,我们可以在Book类中重写toString方法。

        由于书的借阅状态(isBollowed)会根据后续借阅图书功能发生更改,我们可以在重写toString方法时,通过三目运算符对isBollowed进行判断,其会在什么条件下输出“未借阅”/“已借阅”。

        我们刚开始定义书的属性时,没有通过构造方法初始化书的借阅状态isBollowed,因此isBollowed作为boolean类型,会默认为false。

 【注意】:Java中所有的类都有一个公共的父类就是Object类,一个类只要没有明显的继承一个类,则肯定是Object的子类。


(2)定义BookList中的属性和方法

 BookList类相当于是书架,里面是用存放书籍的。

那么作为书架,对应的一定会有一定的容量,总不可能可以一直增添书到书架上去。

我们首先可以先定义一个书的数组,数组长度可以自己定。(数组里的每一个元素都是书类)存放一本书时,会在对应的数组下标位置实例化一个书的对象。

 Book []books=new Book[10];
//此处定义一个长度为10的Book数组

相对应的我们还需要定义书架上书的数量(bookListSize)

private int bookListSize;
//书的数量,后续需根据对应书的数量,对书架上的书进行操作

而作为书架,一开始我们可以先在书架里放几本书,可以通过调用定义的BookList构造方法,来初始化书架内的书,并通过实例化Book对象,调用Book类中的构造方法来初始化书的信息,相当于就在书架上存放了书。 

public BookList() {
        books[0]=new Book("西游记","吴承恩",49,"小说");
        books[1]=new Book("水浒传","施耐庵",50,"小说");
        books[2]=new Book("三国演义","罗贯中",45,"小说");
        this.bookListSize=3;
}

而作为书架,我们也需要定义几个方法来对其进行操作,具体需要定义以下四种方法:

  • 为了进行对书的一系列操作,我们需要取得当前书架对象内具体存在的书籍数量bookListSize;
    public int getBookListSize() {
        return bookListSize;
    }
    //返回书架上书的数量
  • 后续我们在增添或删除书架上的书时,也需要对bookListSize书架上书的数量进行修改。
    public void setBookListSize(int s) {
        this.bookListSize = s;
    }
    //通过传参,将当前书架对象里的书数量进行修改
  • 如果我们要取得书架上书的信息,可以定义一个方法,通过传递书数组的下标来返回对应的数组位置上的书
    public  Book getBook(int s){
        return books[s];
    }
    
    //书架中定义了一个Book类数组,可以通过下标传参来返回对应的书对象    
  • 在增加书架上书籍的时候,需要在没有书的数组下标位置,实例化一个新的书对象。
    public void setBooks(int s,Book book){
        books[s]=book;
    }
    
    

 2、创建用户  

首先创建一个user的包

图书管理用户分为(1)管理员(2)普通用户,两个身份。

由于当我们选择不同的身份时,操作的系统(也就是操作的功能)也是不一样的。

此时我们可以用到多态的知识,定义一个父类User,让子类AdminUser和OrdinaryUser继承User。

之后,让父类的引用指向你所选择的子类对象(发生向上转型),再通过调用重写的方法来实现相关的操作。

(1)定义User类

①作为父类User,当我们选择完用户身份后,会打印出操作菜单,再根据需求进行不同的操作。

在操作系统打印出来时,前面会先打印出一个欢迎用户登录的界面。

那么我们需要定义一个成员变量name,而User,AdminUser和OrdinaryUser之间是父子继承关系,可以用proteced来修饰该成员变量。

protected String name;

 为了对其属性进行初始化,可以定义一个构造方法来初始【注意:子类也得对应定义构造方法】

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

②为了打印一个操作界面,我们需要定义一个打印菜单的方法;

但由于引用不同的子类,我们打印的操作菜单也是不一样的,那么这里也是运用到多态的知识点。在父类和子类中重写menu方法。

而父类中对该方法不用具体的描述,我们可以让该方法抽象化,相对应的父类也得变成抽象类。

public abstract int menu();

【注意:此处返回类型是int,主要是我们后面在输入对应操作的数字,可以返回该数去实现对应的接口操作】  

③后续我们会对书籍进行各种操作,那么我们会定义一个接口,让多个类来实现这个接口功能。在User中我们可以定义一个接口数组来存放这些实现这些接口的类对象。

public IOpeartion []iOpeartions;

④有接口数组,那就有相对于接口功能实现,通过后续返回的操作菜单的数字(choice)和书架对象(booklist),来对其进行一系列的操作。

public void doOperation(int choice,BookList bookList){
    iOpeartions[choice].work(bookList);
}

(2)定义 AdminUser类

对于打印的操作界面,是在AdminUser和OrdinaryUser中实现,那么根据前面User中定义的抽象方法,我们必须在子类中重写该方法,从而达到多态的效果。

管理员类,我们需要有以下五种操作:

  • 新增图书
  • 删除图书
  • 显示图书
  • 查询图书
  • 退出系统

 之后通过输入对应下标的数字,返回其choice给User中的doOperation进行操作即可。

退出系统功能,我们可以将其设置为接口数组下标0的位置,其他的操作功能依次对应。

上面定义父类后,相对应的子类AdminUser,需要进行定义构造方法,构造方法内还需通过super(name)来调用父类中的构造方法进行初始化。

而且我们也需要对父类中的接口数组进行初始化,来使其内部包含我们所需要的操作。

public AdminUser(String name) {
    super(name);
    iOpeartions=new IOpeartion[]{
        new ExitOperation(),    //退出系统
        new AddOperation(),     //新增图书
        new DeleteOperation(),  //删除图书
        new DisplayOperation(), //显示图书
        new FindOperation()    //查询图书
    };
}

打印菜单方法:

@Override
    public int menu() {
        System.out.println("=============================");
        System.out.println("欢迎"+this.name+"使用图书管理系统");
        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();
        System.out.println("=============================");
        return choice;

    }

(3)定义OrdinaryUser类

该普通用户OrdinaryUser的定义和上面的管理员类AdminUser一样,只是在打印操作菜单和构造方法内稍作进行修改即可.

 构造方法:

public OrdinaryUser(String name) {
        super(name);
        iOpeartions=new IOpeartion[]{
            new ExitOperation(),    //退出系统
            new BorrowOperation(),  //借阅图书
            new ReturnOperation(),  //归还图书
            new FindOperation()     //查询图书    
        };
    }

打印菜单方法:

 @Override
    public int menu() {
        System.out.println("=============================");
        System.out.println("欢迎"+this.name+"使用图书借阅系统");
        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();
        System.out.println("=============================");
        return choice;
    }

3、实现图书管理功能

从前面可知,我们可以创建一个接口和多个操作类,让这些类来实现接口功能。通过接口我们可以实现多态来对书架进行各种的操作。

首先先创建一个iOperation包,之后在包内定义接口和类。

其中一共7种操作,对应7个类。

 

 接口内需定义一个抽象方法work,参数为BookList类(需要对书架进行操作,因此传一个书架对象过去)。

public interface IOpeartion {
    public abstract void work(BookList bookList);
}

下面将对各个操作类进行定义,但我们先不对其进行功能的代码实现,我们得先把具体的框架构建出来。

①AddOperartion

package iOperation;

import book.BookList;
public class AddOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("新增图书");
    }
}

②BorrowedOperation

package iOperation;

import book.BookList;
public class BorrowedOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("借阅图书");
    }
}

③DeleteOperation

package iOperation;

import book.BookList;
public class DeleteOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("删除图书");
    }
}

④DisplayOperation

package iOperation;

import book.BookList;
public class DisplayOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("显示图书");
    }
}

⑤ExitOperation

package iOperation;

import book.BookList;
public class ExitOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("退出系统");
    }
}

⑥FindOperation

package iOperation;

import book.BookList;
public class FindOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("查询图书");
    }
}

⑦ReturnOperation

package iOperation;

import book.BookList;
public class ReturnOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
       System.out.println("归还图书");
    }
}

4、Main

前面说了这么多,作为一个程序怎么说都得要有一个入口Main。

我们在Main中,需要实例化一个书架对象(没有书架还怎么进行下面的操作)和定义一个登录界面。

登录界面通过定义一个静态方法即可

其中进行的一系列操作可以用一个while循环起来,之后即可不断地进行书籍操作,直到我们选择退出系统后才结束。        

import book.BookList;
import user.*;
import java.util.Scanner;

public class Main {
    public static User login(){
        System.out.println("请输入你的名字:>");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();    //输入用户姓名
        System.out.println("请输入你的身份:>(1)管理员   (2)普通用户");
        int choice=scanner.nextInt();
        if(choice==1){
            return new AdminUser(name);
        } else{
          return new  OrdinaryUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList=new BookList();
        User user=login();        //此处会发生向上转型(login()返回的是一个子类对象)
        while(true){
            int choice=user.menu();    //通过user类中的menu()进行操作选择
            user.doOperation(choice,bookList);//根据所选的操作进行执行
        }
    }
}

二、图书管理功能地实现

(1)新增图书功能

想要在书架中新增新的书,我们首先得先实例化一个新的书对象,并对其进行初始化。

通过Scanner输入所需要地信息(书名、作者名、价格、类型)后,将其传到构造方法内。

信息处理好后,接下来就是得修改书架书的数量(setBookListSize)和放置书(setBooks)。

首先定义一个变量currentSize,来确定书架目前书的数量,也是当作下标来使用。

通过currentSize来修改数量和放置书,书架类中定义了一个书数组,相对于一个书架的假想。从左到右是从下标0开始,那么currentSize在放置书时,即是一个新的未存放书的位置,在此位置进行增添书籍。

修改数量,直接调用booklist中的setBookListSize,传入currentSize+1即可。

package iOperation;
import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOpeartion{
    @Override
    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("请输入书的价格:");
        int price=scanner.nextInt();
        System.out.println("请输入书的类型:");
        String type=scanner.next();

        int currentSize=bookList.getBookListSize();
        Book book=new Book(name,author,price,type);//实例化一本新的书

        bookList.setBooks(currentSize,book);    //放置新书
        bookList.setBookListSize(currentSize+1);    //修改书的数量
        System.out.println("新增图书《"+name+"》成功!");
    }
}

 (2)查找图书功能

要实现查找图书的功能,需要我们通过输入书名,来对书数组进行遍历查找是否存在该书,存在则打印书的信息,不存在则打印不存在。

①首先定义currentSize变量,然后通过编写输入name语句。

②以currentSize为比较的次数范围,遍历数组并进行判断是否有该书。

通过调用传入该类中的booklist,调用其中的getBook(i)来获取对应数组位置的书,再通过该书访问其名字,最后借助equals()方法来判断跟name是否一样。

找到后打印其书的信息,并用return语句返回.

if(bookList.getBook(i).getName().equals(name)){
    System.out.println("找到了该书");
        System.out.println(bookList.getBook(i));
        return;
}

④遍历结束后,仍未找到则打印“找不到该书”。

package iOperation;

import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要查询的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println("找到了该书");
                System.out.println(bookList.getBook(i));
                return;
            }
        }
        System.out.println("找不到该书");
    }
}

(3)借阅图书功能

借阅图书刚开始需要做的代码实现跟上面的查询图书相似,都是需要先查找是否存在此书,再进行操作。直到遍历判断前的代码都是一样的。

只需要在找到该书后,通过booklist调用getBook(i),再通过获取的书,调用内部的isBollowed()方法,来更改其借阅状态。

但要是该书已经在此之前已被借走,那么只需再添加一个(if语句),因为前面定义的Book类中,默认书的借阅状态为fasle(未借阅),判断是否还为false。

package iOperation;

import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要借阅的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                if(bookList.getBook(i).isBollowed()==false){
                    System.out.println("借阅成功!");
                    bookList.getBook(i).setBollowed(true);
                    return;
                } else{
                    System.out.println("此书已被借走!");
                    return;
                }
            }
        }
        System.out.println("找不到此书!");
    }
}

(4)归还图书功能

归还图书系统只需在借阅图书的基础上,将遍历数组的语句内部更改为判断是否有此书存在后,将该书的状态修改为未借阅状态即可。(通过booklist.getBook(i).setBollowed(false)修改)

package iOperation;

import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要归还的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println("归还成功"); 
                bookList.getBook(i).setBollowed(false);
                return;
            }
        }
        System.out.println("书架上原本没有此书!");
    }
}

(5)显示图书功能

显示图书功能只需通过定义的书数量currentSize,然会对数组进行遍历,调用booklist中的getBook(i)来回获取对应的书,最后输出书的信息即可。

package iOperation;

import book.BookList;

public class DisplayOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

 (6)退出系统功能

为了避免内存泄漏,我们将书架的数据全部销毁掉(利用存放书的方法,将数组内部全部置为空)

使用System.exit(0) 正常退出程序

package iOperation;

import book.BookList;

public class ExitOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        System.out.println("图书管理系统已退出!");
        int currentSize= bookList.getBookListSize();
        for (int i = 0; i <currentSize; i++) {
            bookList.setBooks(i,null);
        }
        System.exit(0);
    }
}

(7)删除图书功能*

此功能相较于前面几个功能,会稍微有些难实现。

首先看到删除二字,可以联想到借助数组中后者覆盖前者的方法,将想要删除的元素进行覆盖,从而实现删除的效果。

要实现这个效果,需要两个for循环,第一个for循环查询是否该书存在第二for循环进行覆盖操作,进行覆盖操作需要所删除书的下标位置i和当前数组的长度currentSize

 那么我们的第二次循环,得根据找到对应书的下标i为起始条件,然后以currentSize-1为范围来进行覆盖操作。

覆盖操作,只需先实例化当前下标的下一个位置的书,然后通过调用setBooks(int s,Book book)将后者books[j+1]覆盖于前者books[j]

if(bookList.getBook(i).getName().equals(name)){
    for (int j = i; j <currentSize-1; j++) {
        Book book=bookList.getBook(j+1);
        bookList.setBooks(j,book);
    }
}

🤔为什么此处的currentSize要减1呢?

如果我们没有减1的话,当覆盖操作进行到currentSize(以上面为例,currentSize为6)下标位置后,因为会通过j+1,取得下一个下标位置的书赋给前一个位置,此时会出现越界现象,将数组中不存放书的位置(下标6)null赋给前一个位置(下标5).

所以只需对currentSize-1,遍历到最后,将下标5的位置赋给下标4的位置即可。

 执行覆盖之后,还需通过调用booklist中的setBookListSize()方法修改书架内书的数量,毕竟都已经删除了书,自然都修改书的数量。

package iOperation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DeleteOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要删除的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                for (int j = i; j <currentSize-1; j++) {
                    Book book=bookList.getBook(j+1);
                    bookList.setBooks(j,book);
                }
                bookList.setBookListSize(currentSize-1);
                System.out.println("删除成功!");
                return;
            }
        }
        System.out.println("找不到此书");

    }
}

 

三、完整代码

(1)Main:

Main:

import book.BookList;
import user.*;
import java.util.Scanner;

public class Main {
    public static User login(){
        System.out.println("请输入你的名字:>");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        System.out.println("请输入你的身份:>(1)管理员   (2)普通用户");
        int choice=scanner.nextInt();
        if(choice==1){
            return new AdminUser(name);
        } else{
          return new  OrdinaryUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList=new BookList();
        User user=login();
        while(true){
            int choice=user.menu();
            user.doOperation(choice,bookList);
        }
    }
}

(2)user包:

User:

package user;
import book.BookList;
import iOperation.IOpeartion;

public abstract class User {
    protected String name;
    public IOpeartion []iOpeartions;

    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
    public void doOperation(int choice,BookList bookList){
        iOpeartions[choice].work(bookList);
    }
}

AdminUser:

package user;

import iOperation.*;

import java.util.Scanner;

    public class AdminUser extends User {
    public AdminUser(String name) {
        super(name);
        iOpeartions=new IOpeartion[]{
                new ExitOperation(),
                new AddOperation(),
                new DeleteOperation(),
                new DisplayOperation(),
                new FindOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("=============================");
        System.out.println("欢迎"+this.name+"使用图书管理系统");
        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();
        System.out.println("=============================");
        return choice;

    }
}

OrdinaryUser:

 

package user;
import iOperation.*;

import java.util.Scanner;

public class OrdinaryUser extends User{
    public OrdinaryUser(String name) {
        super(name);
        iOpeartions=new IOpeartion[]{
            new ExitOperation(),
            new BorrowOperation(),
            new ReturnOperation(),
            new FindOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("=============================");
        System.out.println("欢迎"+this.name+"使用图书借阅系统");
        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();
        System.out.println("=============================");
        return choice;
    }

}

(3)book包: 

Book:

package book;
public class Book {
    private String name;    //书名
    private String author;  //作者名
    private int price;      //书的价格
    private String type;    //书的类型
    private boolean isBollowed;     //书的借阅状态

    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 isBollowed() {
        return isBollowed;
    }

    public void setBollowed(boolean bollowed) {
        isBollowed = bollowed;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", isBollowed=" + (isBollowed==false?"未借出":"已借出") +
                '}';
    }
}

 BookList:

package book;
public class BookList {
    Book []books=new Book[10];
    private int bookListSize;

    public BookList() {
        books[0]=new Book("西游记","吴承恩",49,"小说");
        books[1]=new Book("水浒传","施耐庵",50,"小说");
        books[2]=new Book("三国演义","罗贯中",45,"小说");
        this.bookListSize=3;
    }

    public int getBookListSize() {
        return bookListSize;
    }

    public void setBookListSize(int s) {
        this.bookListSize = s;
    }
    public  Book getBook(int s){
        return books[s];
    }
    public void setBooks(int s,Book book){
        books[s]=book;
    }
}

(4)iOperation包: 

IOperation(接口): 

package iOperation;

import book.BookList;

public interface IOpeartion {
    public abstract void work(BookList bookList);
}

AddOperation:

package iOperation;
import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOpeartion{
    @Override
    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("请输入书的价格:");
        int price=scanner.nextInt();
        System.out.println("请输入书的类型:");
        String type=scanner.next();
        int currentSize=bookList.getBookListSize();
        Book book=new Book(name,author,price,type);
        bookList.setBooks(currentSize,book);
        bookList.setBookListSize(currentSize+1);
        System.out.println("新增图书《"+name+"》成功!");
    }
}

BollowOperation:

package iOperation;

import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要借阅的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                if(bookList.getBook(i).isBollowed()==false){
                System.out.println("借阅成功!");
                bookList.getBook(i).setBollowed(true);
                return;
                } else{
                    System.out.println("此书已被借走!");
                    return;
                }
            }
        }
        System.out.println("找不到此书!");
    }
}

DeleteOperation:

package iOperation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DeleteOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要删除的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                for (int j = i; j <currentSize-1; j++) {
                    Book book=bookList.getBook(j+1);
                    bookList.setBooks(j,book);
                }
                bookList.setBookListSize(currentSize-1);
                System.out.println("删除成功!");
                return;
            }
        }
        System.out.println("找不到此书");

    }
}

DisplayOperation:

package iOperation;

import book.BookList;

public class DisplayOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

ExitOperation:

package iOperation;

import book.BookList;

public class ExitOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        System.out.println("图书管理系统已退出!");
        int currentSize= bookList.getBookListSize();
        for (int i = 0; i <currentSize; i++) {
            bookList.setBooks(i,null);
        }
        System.exit(0);
    }
}

FindOperation:

package iOperation;

import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要查询的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println("找到了该书");
                System.out.println(bookList.getBook(i));
                return;
            }
        }
        System.out.println("找不到该书");
    }
}

ReturnOpeartion:

package iOperation;

import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOpeartion{
    @Override
    public void work(BookList bookList) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要归还的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getBookListSize();
        for (int i = 0; i < currentSize; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println("归还成功");
                bookList.getBook(i).setBollowed(false);
                return;
            }
        }
        System.out.println("书架上原本没有此书!");
    }
}

自此,利用JavaSE基本语法实现的图书管理系统到这里就结束了。

虽然此图书系统小程序不难实现,但我们可以借助此小程序来巩固和加深所学的知识点,对语法的掌握也会更加深刻!

其中如有哪有错误或不足之处,还希望各位大佬能指点一二。


 

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星河栀染

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值