【Java】实现简易的图书管理系统(继承,封装,多态)

简介: 【Java】实现简易的图书管理系统(继承,封装,多态)

前言


本篇文章我们来学习一个综合案例——图书管理系统,是对继承,封装和多态的一个小练习,通过这个案例可以加深我们对语法的理解。


一、实现的功能


实现对图书的管理,我们登录时有两个身份,一个是图书管理员,一个是普通用户,这两个实现的功能各不一样。



二、具体的代码


有三个包和一个main函数。


book包(书的信息和书架)

book包:

book类:


package book;
public class book {
    private  String name; //书名
    private  String  author;//作者
    private  int price;//价格
    private  String type;//类型如小说散文等
    private  boolean  isBorrowed;//是否被借出
    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 isBorrowed() {
        return isBorrowed;
    }
    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
    public book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }
    @Override
    public String toString() {
        return "book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ((isBorrowed==true)?"已经借出":"未借出")+'}';
    }
}


booklist类:

package book;
public class booklist {
    private book[]books=new book[10]; //最多可以放十本书
    private int usedSize;//实时记录,当前books这个数组中有多少本书。
   public booklist(){
       books[0]=new book("三国演义","罗贯中",19,"小说");
       books[1]=new book("西游记","吴承恩",19,"小说");
       books[2]=new book("红楼梦","曹雪芹",19,"小说");
        usedSize=3;
   }
   public book  getBook(int pos){
       return books[pos];     //找书
   }
   public void setBook(int pos,book Book){
       books[pos]=Book;   //增加书
   }
   public void  setUsedSize(int size){
       usedSize=size;        //实时修改当前书架上书的个数
   }
   public int  getUsedSize(){
//实时获取当前书的个数
       return usedSize;
   }
}


operation包(实现具体的功能)

AddOperation:

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("新增图书");
        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=new book(name,author,price,type);
        int currentSize=Booklist.getUsedSize();
        Booklist.setBook(currentSize,Book);
        Booklist.setUsedSize(currentSize+1);
        System.out.println("新增图书成功");
    }
}


BorrowOperation :

package operation;
import book.book;
import book.booklist;
import java.util.Scanner;
public class BorrowOperation implements  IOperation {
    @Override
    public void work(booklist Booklist) {
        System.out.println("请输入借阅图书的名字");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = Booklist.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            book Book = Booklist.getBook(i);
            if (Book.getName().equals(name)) {
              Book.setBorrowed(true);
                System.out.println("借阅成功");
                return;
            }
        }
    }
}


DelOperation:

package operation;
import book.book;
import book.booklist;
import sun.security.provider.certpath.CertId;
import java.util.Scanner;
public class DelOperation implements  IOperation{
    @Override
    public void work(booklist Booklist) {
        System.out.println("请输入删除图书的名字");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = Booklist.getUsedSize();
        int SIZE=0;
        for (int i = 0; i < currentSize; i++) {
            book Book = Booklist.getBook(i);
            if (Book.getName().equals(name)) {
                SIZE=i;
                break;
            }
        }
  for(int i=SIZE;i<currentSize-1;i++){
      book  Book= Booklist.getBook(i+1);
      Booklist.setBook(i,Book);
      Booklist.setUsedSize(currentSize-1);
      System.out.println("删除成功");
  }
    }
}


DisplayOperation:

package operation;
import book.book;
import book.booklist;
public class DisplayOperation implements IOperation{
    @Override
    public void work(booklist Booklist) {
        int currentSize = Booklist.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            book Book = Booklist.getBook(i);
                System.out.println(Booklist.getBook(i));
        }
    }
}


ExitOperation:

package operation;
import book.booklist;
public class ExitOperation implements IOperation {
    @Override
    public void work(booklist Booklist) {
        System.out.println("退出系统");
        System.exit(0);
    }
}


FindOperation:

import java.util.Scanner;
public class FindOperation implements IOperation{
    @Override
    public void work(booklist Booklist) {
        System.out.println("查找图书");
        int currentSize = Booklist.getUsedSize();
        System.out.println("请输入图书的名字");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        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("没有你要找的这本书");
    }
}


ReturnOperation:

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 name = scanner.nextLine();
        int currentSize = Booklist.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            book Book = Booklist.getBook(i);
            if (Book.getName().equals(name)) {
                Book.setBorrowed(false);
                System.out.println("归还成功");
                return;
            }
        }
    }
}


接口: IOperation

package operation;
import book.booklist;
public interface IOperation {
    void work(booklist Booklist);
}


user包(管理员 用户 main方法)

AdminUser:

package user;
import book.*;
import operation.*;
import java.util.Scanner;
public class AdminUser extends  User{
    public AdminUser(String name) {
        super(name);
        this.iOperations=new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation(),
        };
    }
    public int menu(){
        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.退出系统");
        System.out.println("请输入你的操作");
        Scanner scanner=new Scanner(System.in);
        int choice= scanner.nextInt();
        return choice;
    }
}


NormalUser:

package user;
import operation.*;
import java.util.Scanner;
public class NormalUser extends  User{
    public NormalUser(String name) {
        super(name);
this.iOperations=new IOperation[]{
        new ExitOperation(),
        new FindOperation(),
        new BorrowOperation(),
        new ReturnOperation(),
};
    }
    public int menu(){
        System.out.println("hello"+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();
        return choice;
    }
}


User:

package 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 void doOperation(int choice, booklist Booklist){
        this.iOperations[choice].work(Booklist);
    }
}


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 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) {
            int choice = user.menu(); //动态绑定
            user.doOperation(choice, Booklist);
        }
    }
}


总结


这个小程序可以加深我们对继承封装和多态的理解,可以让我们更熟悉语法。

本篇文章内容结束,感谢大家观看。如果意见或建议,可以在评论区留言,您的点赞是我更新的动力。我们下篇文章再见。

目录
相关文章
|
28天前
|
Java
怎么用Java 代码示例来展示继承的实现
本文通过Java代码示例展示继承机制:Animal为父类,Cat和Dog继承其属性与方法,并实现构造函数调用、方法重写与特有功能扩展,体现代码复用与多态特性。
74 4
|
4月前
|
Java 数据库连接 数据库
Java 组件详细使用方法与封装实战指南
本指南详解Java核心组件使用与封装技巧,涵盖跨平台开发、面向对象编程、多线程、数据库操作等关键内容,并提供工具类、连接池、异常及响应结果的封装方法。结合Spring框架、MyBatis、Spring Boot等主流技术,助你掌握高质量Java组件设计与开发实践。
181 2
|
14天前
|
Java 数据安全/隐私保护
在Java中,如何实现封装?
Java封装通过`private`隐藏属性,`public`暴露getter/setter方法,结合访问修饰符控制成员访问权限,实现数据安全与代码解耦,提升程序可维护性。
120 2
|
3月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
133 0
|
3月前
|
Java 关系型数据库 MySQL
Java项目实战(图书管理系统)
本项目为简易图书管理系统,实现图书增删改查、用户借阅归还及基础用户管理功能。采用Java语言,结合MySQL数据库与MVC架构,涵盖JDBC、Servlet、JSP等技术,适合初学者学习Java Web开发流程与项目结构设计。
163 2
|
6月前
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
227 0
|
7月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
224 0
|
8月前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
8月前
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。