JavaSE——(一)图书管理系统

前言

博文介绍:JavaSE初学者利用类和对象、封装继承多态、抽象类和接口的知识完成了一个图书管理系统
软件:IntelliJ IDEA Community Edition 2022.3.3

正文

一、对象打包

说明

Java是面向对象的语言,所以利用Java做项目的第一步就是把对象抽象,用类表示出来。本文图书管理系统是用户、书、操作(对象)之间交互完成的,所以我们第一步是要创建相关的类,由于一些类具有相关性,故把相关的类放到一个包下,可以使代码更有条理
在这里插入图片描述

(一)user包
User类

管理员和普通用户具有相同的属性(如:名字等),可以写一个User类作为父类,在父和子这样的继承体系下、通过方法的重写,可以通过父类的引用调用重写的方法实现多态(如:管理员和普通用户可以打印内容不同的菜单、管理员和普通用户实现不同的构造方法等)。

public abstract class User {
    protected String name;
    
    public Operation[] operation;
    
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
}
AdminUser类(管理员类-----继承于User类)
package user;

import operation.*;

import java.util.Scanner;

public class AdminUser extends User  {
    public AdminUser(String name) {
        super(name);
        super.operation=new Operation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation()};
    }

    @Override
    public int menu() {
        System.out.println("*********************");
        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("*********************");

        Scanner scanner=new Scanner(System.in);
        System.out.println("请选择对应功能");
        int choice= scanner.nextInt();
        System.out.println("*********************");
        return choice;
    }
}

NormalUser类(普通用户类-----继承于User类)
package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);
        super.operation=new Operation[]{new ExitOperation(),new FindOperation(),new BorrowedOperation(),new ReturnOperation()};
    }

    @Override
    public int menu() {
        System.out.println("*********************");
        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);
        System.out.println("请选择对应功能");
        int choice= scanner.nextInt();
        System.out.println("*********************");
        return choice;
    }
}

(二)book包
Book类(书)

一般类里的成员对象用Private修饰用来隐藏类的一些实现细节,成员方法用用Public修饰,Private修饰的成员变量只能在该类使用,所以要写一些方法能获得相关的成员变量

package book;

public class Book {
    private String name;
    private String author;
    private double price;
    private String type;
    private boolean isBorrowed;

    public Book(String name, String author, double 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 double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

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

    public boolean isBorrowed() {
        return isBorrowed;
    }

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

    public String bookIsBorrowed(){
        return this.isBorrowed==false?"未借出":"已借出";
    }

}
BookList类(书架)
package book;

public class BookList {
    private Book[] book=new Book[10];
    private int bookNum;

    public BookList() {
        book[0]=new Book("三国演义","罗贯中",17.8,"小说");
        book[1]=new Book("红楼梦","曹雪芹",17.8,"小说");
        book[2]=new Book("西游记","吴承恩",17.8,"小说");
        this.bookNum=3;
    }

    public Book[] getBook() {
        return book;
    }

    public void setBook(Book[] book) {
        this.book = book;
    }
    public void setBook(int num,Book addBook) { //方法的重载
        this.book[num]=addBook;
    }

    public int getBookNum() {
        return bookNum;
    }

    public void setBookNum(int bookNum) {
        this.bookNum = bookNum;
    }
}
(三)operation包

实现操作需要一定规范,这就用到了接口,具体的操作贯彻接口
在这里插入图片描述
Operation接口

package operation;

import book.BookList;

public interface Operation {
    public abstract void work(BookList bookList);

}

二、框架搭建

框架搭建肯定要写登录方法,登陆方法要选择用户身份并返回相应用户类,不同用户类由于方法重写会生成不同菜单(菜单的实现在用户类里),根据菜单返回一个int值,对应相应的操作,那么用户怎样根据返回值做对应的操作呢?这是一个很巧妙的问题!!!!!!
在User父类里定义一个存放操作的数组,利用方法重写在子类构造方法里里生成不同的操作组,就可以根据菜单提示返回的int值做数组下标访问不同的操作

import book.BookList;
import operation.Operation;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;

public class Main {
    public static User login(){
        System.out.println("请选择用户身份:0-管理员用户 1-普通用户");
        Scanner scanner=new Scanner(System.in);
        int num=scanner.nextInt();

        System.out.println("请输入用户姓名:");
        String name=scanner.next();

        System.out.println("hello "+name+" 欢迎来到图书管理系统小练习");

        if(num==0){
            return new AdminUser(name);
        }else{
            return new NormalUser(name);
        }
    }

    public static void doOperationWork(Operation operation, BookList bookList){
        operation.work(bookList);
    }

    public static void main(String[] args) {
        User user=login();
        BookList booklist=new BookList();
        while(true) {
            int choice = user.menu();
            doOperationWork(user.operation[choice],booklist);
        }
    }
}

三、功能实现

(一)增加图书
package operation;

import book.Book;
import book.BookList;
import java.util.Scanner;

public class AddOperation implements Operation {
    @Override
    public void work(BookList bList) {
        System.out.println("新增图书");
        Scanner scanner=new Scanner(System.in);

        System.out.println("请输入新增图书的名字:");
        String name= scanner.next();

        System.out.println("请输入新增图书的作者:");
        String author= scanner.next();

        System.out.println("请输入新增图书的价格:");
        double price= scanner.nextDouble();

        System.out.println("请输入新增图书的类型:");
        String type= scanner.next();

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

        int num=bList.getBookNum();

        bList.setBook(num,addBook);

        bList.setBookNum(num+1);

        System.out.println("添加成功");

        System.out.println("*********************");
    }
}

(二)删除图书
package operation;

import book.Book;
import book.BookList;
import java.util.Scanner;

public class DelOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书");

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入需要删除的书名:");
        String bookname=scanner.nextLine();

        int i = 0;
        int flag=-1;
        for (; i < bookList.getBookNum(); i++) {
            if(bookname.equals(bookList.getBook()[i].getName())){
                flag=i;
                break;
            }
        }
        if(i==bookList.getBookNum()){
            System.out.println("没有找到这本书!");
        }else {
            for (int j = i; j < bookList.getBookNum()-1; j++) {
                Book book=bookList.getBook()[j+1];
                bookList.getBook()[j]=book;
            }
            bookList.setBook(bookList.getBookNum()-1,null);
            bookList.setBookNum(bookList.getBookNum()-1);
            System.out.println("删除图书成功");
        }

        System.out.println("*********************");
    }
}

(三)查找图书
package operation;

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

public class FindOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入需要查找的书名:");
        String bookname=scanner.nextLine();

        int i = 0;
        for (; i < bookList.getBookNum(); i++) {
            if(bookname.equals(bookList.getBook()[i].getName())){
                System.out.println("找到了!");
                System.out.print("{书名:"+bookList.getBook()[i].getName());
                System.out.print(",作者:"+bookList.getBook()[i].getAuthor());
                System.out.print(",价格:"+bookList.getBook()[i].getPrice());
                System.out.print(",类型:"+bookList.getBook()[i].getType());
                System.out.print(","+bookList.getBook()[i].bookIsBorrowed()+"}");

                System.out.println();
                break;
            }
        }
        if(i==bookList.getBookNum()){
            System.out.println("没有找到这本书!");
        }

        System.out.println("*********************");
    }
}
(四)显示图书
package operation;

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

public class FindOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入需要查找的书名:");
        String bookname=scanner.nextLine();

        int i = 0;
        for (; i < bookList.getBookNum(); i++) {
            if(bookname.equals(bookList.getBook()[i].getName())){
                System.out.println("找到了!");
                System.out.print("{书名:"+bookList.getBook()[i].getName());
                System.out.print(",作者:"+bookList.getBook()[i].getAuthor());
                System.out.print(",价格:"+bookList.getBook()[i].getPrice());
                System.out.print(",类型:"+bookList.getBook()[i].getType());
                System.out.print(","+bookList.getBook()[i].bookIsBorrowed()+"}");

                System.out.println();
                break;
            }
        }
        if(i==bookList.getBookNum()){
            System.out.println("没有找到这本书!");
        }

        System.out.println("*********************");
    }
}

(五)借阅图书
package operation;

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

public class BorrowedOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入需要借阅的书名:");
        String bookname=scanner.nextLine();

        int i = 0;

        for (; i < bookList.getBookNum(); i++) {
            if((bookname.equals(bookList.getBook()[i].getName()))&&bookList.getBook()[i].isBorrowed()==false){
                bookList.getBook()[i].setBorrowed(true);
                System.out.println("借阅成功!");
                break;
            }else if((bookname.equals(bookList.getBook()[i].getName()))&&bookList.getBook()[i].isBorrowed()==true){
                System.out.println("已借出!");
                break;
            }
        }
        if(i==bookList.getBookNum()){
            System.out.println("没有找到这本书!");
        }
        
        System.out.println("*********************");
    }
}
(六)归还图书
package operation;

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

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

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入需要归还的书名:");
        String bookname=scanner.nextLine();

        int i = 0;

        for (; i < bookList.getBookNum(); i++) {
            if((bookname.equals(bookList.getBook()[i].getName()))&&bookList.getBook()[i].isBorrowed()==true){
                bookList.getBook()[i].setBorrowed(false);
                System.out.println("归还成功!");
                break;
            }else if((bookname.equals(bookList.getBook()[i].getName()))&&bookList.getBook()[i].isBorrowed()==false){
                System.out.println("已归还!");
                break;
            }
        }
        if(i==bookList.getBookNum()){
            System.out.println("没有找到这本书!");
        }
        System.out.println("*********************");
    }
}
(七)退出系统
package operation;

import book.BookList;

public class ExitOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("退出登录");
        System.exit(0);
    }
}

总结

gitee网址:https://gitee.com/zy-small-watermelon/java.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值