java图书管理系统练习

个人感觉java的面向对象的思想比c++的更加深刻一些

首先是Main类

import books.Book;
import books.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {
    public static User logIn()
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的姓名");
        String name = sc.nextLine();
        System.out.println("请输入你的身份--0->普通用户 1->管理员");
        int choice = sc.nextInt();
        if(choice == 0)
        {
            return new NormalUser(name);
        }
        else
        {
            return new AdminUser(name);
        }

    }
    public static void main(String[] args) {
        BookList booklist = new BookList();
        User user = logIn();//这里通过多态对于使用者的身份的识
        //直接返回的是对象一开始就确定了身份
        //根据choice来调用指定的操作
        while(true) {
            int choice = user.menu();//利用堕胎进行实现
            user.doOperation(choice, booklist);
        }
    }
}

之后是book和booklist类

package books;

public class Book {
    private String name;
    private String autor;
    private int price;
    private String type;
    private boolean isLend;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAutor() {
        return autor;
    }

    public void setAutor(String auto) {
        this.autor = autor;
    }

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

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", autor='" + autor + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", isLend=" + isLend +
                '}';
    }

    public boolean isLend() {
        return isLend;
    }
    public void setLend(boolean lend) {
        isLend = lend;
    }
}
package books;
public class BookList {
      private Book []books = new Book[100];
      private int size;

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public BookList() {
        books[0] = new Book("三国演义","罗贯中",45,"小说");
        books[1] = new Book("水浒传","吴承恩",45,"小说");
      this.size = 2;
    }
    public Book getBook(int pos)
    {
        return this.books[pos];
    }
    public void addBook(Book b)
    {

        this.books[this.size++] = b;
    }
    public int find(String name)
    {
        for(int i = 0; i < this.size; i++)
        {
            if(books[i].getName().equals(name))
                return i;
        }
        return -1;
    }
    public void del(int idx){
        if(idx == this.size - 1)
        {
            this.size--;
            return;
        }
        for(int i = this.size - 1; i > idx; i--){
            this.books[i - 1]= this.books[i];
        }
        this.size--;
    }
    public void setLend(int idx){
        this.books[idx].setLend(true);
    }
    public void setReturn(int idx){
        this.books[idx].setLend(false);
    }

}

之后是相应的操作,其中首先实现操作接口规范操作类,在子类中重写方法即可

//Addoperation
package operation;

import books.Book;
import books.BookList;

import java.util.Scanner;

//利用接口进行操作的统一
public class AddOperation implements IOoperation{
    @Override
    public void work(BookList bl) {
        System.out.println("新增图书");
        Scanner src = new Scanner(System.in);
        System.out.println("请输入图书的名称");
        String name = src.nextLine();
        System.out.println("请输入图书的作者");
        String author = src.nextLine();
        System.out.println("请输入图书的类型");
        String type = src.nextLine();
        System.out.println("请输入图书的价格");
        int price = src.nextInt();//不建议在int之后直接输入string
        bl.addBook(new Book(name,author,price,type));
        System.out.println("加入成功");
    }
}

//BorrowOperation
package operation;

import books.BookList;

import java.util.Scanner;

/**
 * @autor jiaxiuze
 * @date 2023/4/29 21:31
 */
public class BorrowOperation implements IOoperation{
    @Override
    public void work(BookList bl) {
        System.out.println("借图书");
        System.out.println("请输入你要借阅图书的名称");
        Scanner src = new Scanner(System.in);
        String name = src.nextLine();
        int idx = bl.find(name);
        if(idx == -1)
        {
            System.out.println("没有这本书");
            return;
        }
        else if(bl.getBook(idx).isLend() == true){
            System.out.println("该书已被借阅");
            return;
        }
        bl.setLend(idx);
        System.out.println("借阅成功");
    }
}
//
//DelOperarion
package operation;

import books.BookList;

import java.util.Scanner;

public class DelOperation implements IOoperation{
    @Override
    public void work(BookList bl) {
        System.out.println("删除图书");
        System.out.println("请输入要删除的图书");
        Scanner src = new Scanner(System.in);
        String name = src.nextLine();
        int idx = bl.find(name);
        if(idx == -1)
        {
            System.out.println("没有相应书籍,无法删除");
            return;
        }
        bl.del(idx);
        System.out.println("删除成功");


    }
}

//ExitOperation
package operation;

import books.BookList;

public class ExitOperation implements IOoperation{
    @Override
    public void work(BookList bl) {
        System.out.println("退出系统");
        System.exit(0);//直接退出即可
    }
}
//
//findOperation
package operation;

import books.BookList;

import java.util.Scanner;

public class FindOperation implements IOoperation{
    @Override
    public void work(BookList bl) {
        System.out.println("查找图书");
        System.out.println("请输入你要查找的图书");
        Scanner src = new Scanner(System.in);
        String name = src.nextLine();
        int idx = bl.find(name);
        if(idx == -1)
        {
            System.out.println("没有该书籍");
            return;
        }
        System.out.println(bl.getBook(idx));
    }
}
//
//ReturnOperation

package operation;

import books.BookList;

import java.util.Scanner;
public class ReturnBook implements IOoperation{
    @Override
    public void work(BookList bl) {
        System.out.println("归还图书");
        System.out.println("请输入你要归还图书的名称");
        Scanner src = new Scanner(System.in);
        String name = src.nextLine();
        int idx = bl.find(name);
        if(idx == -1){
            System.out.println("没有查询到书籍");
            return;
        }
        if(bl.getBook(idx).isLend() == false)
        {
            System.out.println("该图书已被归还");
            return;
        }
        bl.setReturn(idx);
        System.out.println("归还成功");
    }
}
///
//showOperation
package operation;

import books.BookList;

import java.util.function.IntPredicate;

public class ShowOperation implements IOoperation {
    @Override
    public void work(BookList bl) {
        System.out.println("显示图书");
        int size = bl.getSize();
        for(int i = 0; i < size; i++)
        {
            System.out.println(bl.getBook(i));
        }
    }
}




最后是uesr,和operation一样的套路

//
//Adminuser
package user;

import operation.*;

import java.awt.*;
import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name)
    {

        super(name);
        //数组中的每一个元素都是一个对象
        this.operations = new IOoperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("管理员菜单");
        System.out.println("**************************");
        System.out.println("hello " + this.name + "欢迎来到图书小练习");
        System.out.println("1、查找图书");
        System.out.println("2、新增图书");
        System.out.println("3、删除图书");
        System.out.println("4、显示图书");
        System.out.println("0、退出系统");
        Scanner src = new Scanner(System.in);
        int choice = src.nextInt();
        return choice;
    }
}
//
//NormalUser
package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name)
    {
        super(name);
        //只要实现了相应的接口的类都可以放在接口数组中
        this.operations = new IOoperation[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnBook()
        };
    }

    @Override
    public int menu() {
        System.out.println("普通用户菜单");
        System.out.println("*******************************");
        System.out.println("hello " + super.name + "欢迎来到图书小练习");
        System.out.println("1、查找图书");
        System.out.println("2、借阅图书");
        System.out.println("3、归还图书");
        System.out.println("0、退出系统");
        System.out.println("请输入你的操作");
        Scanner src = new Scanner(System.in);
        int choice = src.nextInt();
        return choice;

    }
}

最后是Operation的接口

package operation;

import books.BookList;

/**
 * @autor jiaxiuze
 * @date 2023/4/29 21:26
 */
public interface IOoperation {
    void work(BookList bl);
    //接口进行规范标准

}

运行截图:

 基本上就这样,谢谢观看。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值