Java——面向对象练习(图书管理系统的实现)

2023-11-20

Java——面向对象练习(图书管理系统的实现)


  在前面一段时间里,学习了 Java 面向对象的相关内容:包的使用、继承、多态、抽象类、接口等知识,现在为了巩固我们所学习的知识,接下来我们将从零到有实现一个简单版的图书管理系统的代码实现。


一、实现效果展示


(1)功能简介


(2)登陆界面

在这里插入图片描述

(3)菜单界面

在这里插入图片描述

(4)功能展示


1.显示图书
在这里插入图片描述

2.新增图书

在这里插入图片描述

3.删除图书

在这里插入图片描述

4.查找图书

在这里插入图片描述

5.借阅图书

在这里插入图片描述

6.归还图书

在这里插入图片描述

二、具体代码实现


1.类的设计


  我们通过这个管理系统的功能简介等,可以知道我们需要设计的几个类


(1)创建图书相关的类


先创建 package 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=" + isBorrowed +
                '}';
    }
}

  这个书的类中,有书的各种属性:书名、作者、价格、类别、借阅情况,同时将这些属性都封装起来。

创建 BookList 类, 用来保存 N 本书.

package book;

public class BookList {

    private Book[] books = new Book[100];
    private int usedSize;


    public BookList(){

        //默认有四本书

        books[0] = new Book("西游记","吴承恩",10,"小说" );
        books[1] = new Book("水浒传","施耐庵",20,"小说" );
        books[2] = new Book("红楼梦","曹雪芹",10,"小说" );
        books[3] = new Book("三国演义","罗贯中",10,"小说" );
        this.usedSize  = 4;
    }

    public Book getBooks(int pos) {
        return this.books[pos];
    }

    public void setBooks(int pos,Book book) {
        //默认放到顺序表的最后
        this.books[pos] = book;
    }

    public int getUsedSize() {
        return usedSize;
    }

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

  用顺序表的方式存储书籍,且在书架中默认有四本书,设置一个 现有书籍数量 usedSize的属性,在构造方法中存储四本书,usedSize = 4.


(2) 创建操作相关的类


先创建 package operation

接下来创建一组操作类, 每个类对应一个用户的动作.

在这里插入图片描述

  抽象出 Operation 的好处: 让操作和操作之间低耦合, 让操作和用户之间低耦合.


1.接口的实现

package operation;

import book.BookList;

public interface IOperation {
      void work(BookList bookList);
}

2.新增书籍

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

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

        for (int i = 0; i <bookList.getUsedSize() ; i++) {
            Book book = bookList.getBooks(i);
            if(name.equals(book.getName())){
                System.out.println("书架存在这本书,不能重复添加!");
                return;
            }
        }

        int currentSize = bookList.getUsedSize();

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

        bookList.setBooks(currentSize,book);

        bookList.setUsedSize(currentSize+1);

        System.out.println("增加成功!");
    }
}

3.删除书籍

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;


public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除书籍! ");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的图书的名字:");
        String name = scanner.nextLine();

        int currentSize = bookList.getUsedSize();

        int index = -1;

        for (int i = 0; i < currentSize; i++) {

            Book book = bookList.getBooks(i);

            if(name.equals(book.getName())) {
                //找到了这本书
                index = i;
            }

        }
        if(index == -1) {
            System.out.println("没有你要删除的书!");
            return;
        }

        for (int i = index; i < currentSize-1; i++) {
            Book book1 = bookList.getBooks(i+1);
            bookList.setBooks(i,book1);
            //bookList[i] = bookList[i+1];
        }

        //防止内存泄漏
        bookList.setBooks(currentSize-1,null);
        //控制usedSize
        bookList.setUsedSize(currentSize-1);

        System.out.println("删除成功!");
    }
}

4.展示书籍

package operation;

import book.Book;
import book.BookList;

public class DisplayOperation implements IOperation{
    @Override
    public void work(BookList bookList) {

        for (int i = 0; i <bookList.getUsedSize() ; i++) {
            Book book = bookList.getBooks(i);
            System.out.println(book);
            }
        }
    }


5.查找书籍

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

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

        for (int i = 0; i <booklist.getUsedSize() ; i++) {
            Book book = booklist.getBooks(i);
            if(name.equals(book.getName())){
                System.out.println("找到此书入下:");
                System.out.println(book);
                return ;
            }
        }

        System.out.println("没有这本书!");
    }
}


6.借阅书籍

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("借阅书籍");
        System.out.println("请输入要借阅的图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();


        for (int i = 0; i <bookList.getUsedSize(); i++) {

            Book book = bookList.getBooks(i);

            if(name.equals(book.getName()) && book.isBorrowed()==false) {
                //找到了就借阅
              book.setBorrowed(true);
              return ;
            }
        }
        System.out.println("借阅失败,没有此书 ,或此书已被借出");
    }
}

7.归还书籍

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();


        for (int i = 0; i <bookList.getUsedSize(); i++) {

            Book book = bookList.getBooks(i);

            if(name.equals(book.getName())) {
                //找到了就归还
                book.setBorrowed(false);
                System.out.println("归还成功!");
                return ;
            }
        }
        System.out.println("归还失败,没有此书!");
    }
}


8.退出系统

package operation;


import book.BookList;

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

(3)创建用户相关的类


1.父类 用户 user 的实现

package users;

import book.BookList;
import operation.*;

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


2.管理员用户的实现

package users;

import book.BookList;
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(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("hello"+this.name+" "+"欢迎来到图书小练习!");
        System.out.println("=========管理员菜单=========");
        System.out.println("=========0.退出系统=========");
        System.out.println("=========1.查找图书=========");
        System.out.println("=========2.新增图书=========");
        System.out.println("=========3.删除图书=========");
        System.out.println("=========4.显示图书=========");

        int choice = scanner.nextInt();
        return choice;
    }

    @Override
    public void doOperation(int choice, BookList bookList) {
        super.doOperation(choice, bookList);
    }
}


3.普通用户类的实现

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(){
            Scanner scanner = new Scanner(System.in);
            System.out.println("hello"+this.name+" "+"欢迎来到图书小练习!");
            System.out.println("========普通用户菜单=========");
            System.out.println("=========0.退出系统=========");
            System.out.println("=========1.查找图书=========");
            System.out.println("=========2.借阅图书=========");
            System.out.println("=========3.归还图书=========");

            int choice = scanner.nextInt();
            return choice;
        }

    @Override
    public void doOperation(int choice, BookList bookList) {
        super.doOperation(choice, bookList);
    }
}


Main 函数的设计

import book.Book;
import book.BookList;
import users.AdminUser;
import users.NormalUser;
import users.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-->管理员 0-->普通用户");
        int who  = scanner.nextInt();
        if(who == 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);
      }

    }

}

  本次练习的目的只是为了熟悉 Java面向对象的特性,在实现具体功能的业务逻辑时并没有那么严谨,希望大家多多指正!


  好了今天的分享到这里就结束了,感谢大家的观看.


  感谢关注!!


完!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java——面向对象练习(图书管理系统的实现) 的相关文章

随机推荐

  • Unity3D:按键生成物件,Instantia…

    在按下按键之后 可以在画面中生成之前定义好了的物体 这里使用了Instantiate函数来生成 1 先在游戏中定一个空物件GameObject 创建空物件快捷键 ctrl shift n 2 在视图中放置 3 编写脚本 脚本 SpaceCh
  • Ubuntu设置共享文件夹(解决/mnt 目录下没有 hgfs 目录)

    目录 1 Windows创建一个共享文件夹 2 在虚拟机的设置中选择Windows下的共享文件夹 3 在Ubuntu中查看共享文件夹 4 解决 mnt 目录下没有 hgfs 目录 5 设置共享文件夹以后 mnt hgfs下没有出现共享文件夹
  • 2022 ICML 论文合集(附Code和数据集)

    1 Sharp MAML Sharpness Aware Model Agnostic Meta Learning Task 元学习 代码链接 https github com mominabbass sharp maml 数据集 http
  • 链表常见题总结一

    链表可以说是笔试面试的重点 因为写一个链表相关的题可以在短时间写出来 并且考验测试人的水平 特别将平时经常做的链表的题拿上来 做个小结 1 求单链表中结点的个数 2 将单链表反转 3 查找单链表中的倒数第K个结点 k gt 0 4 查找单链
  • 【C语言】进制输出加上前缀

    对于八进制数字 它没法和十进制 十六进制区分 因为八进制 十进制和十六进制都包含 0 7 这几个数字 对于十进制数字 它没法和十六进制区分 因为十六进制也包含 0 9 这几个数字 如果十进制数字中还不包含 8 和 9 那么也不能和八进制区分
  • Fiddler抓去HTTP/HTTPS数据包

    默认情况下 Fiddler是抓不到Java程序的HTTP HTTPS的通信的 1 配置抓取HTTP HTTPS通信 只要为Java程序设置HTTP代理 指向localhost 8888即可 方法一 使用如下方式启动Java程序 java D
  • HTML 教程- (HTML5 标准)

    HTML 教程 HTML5 标准 超文本标记语言 英语 HyperText Markup Language 简称 HTML 是一种用于创建网页的标准标记语言 您可以使用 HTML 来建立自己的 WEB 站点 HTML 运行在浏览器上 由浏览
  • Angular_组件间通讯

    组件间通讯 1 组件间通讯 父组件向子组件输入属性用 Input amount number 2 组件输出属性 1 在发射的组件内部定义发射的EventEmitter对象 Output lastPrice EventEmitter
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y
  • CentOS和CentOS Stream的区别你知道吗?

    CentOS 8生命周期的结束 2020年年底的时候 红帽宣布CentOS 8将在一年后结束生命周期 当时这个消息在开发者圈子炸了锅 很多人以为CentOS要自此消失了 实际情况是CentOS并没有消失 只是名字更换为了CentOS Str
  • Spring Cloud Alibaba、Spring Cloud 版本升级、版本号对应情况和一些注意事项等

    参考文档 优质博客 https blog csdn net Thinkingcao article details 105652632 Spring官方文档 https spring io SpringCloud官方文档 https spr
  • 小米无线蓝牙耳机Air2 SE如何连接MacPro

    若设备可以搜索到小米真无线蓝牙耳机Air2 SE但无法配对 建议您 1 若设备连接了WiFi 2 4Ghz 由于蓝牙和WiFi共用天线 且工作在相同的频段 故当WiFi传输数据量较大时 蓝牙会受到干扰 建议关闭WiFi后再尝试配对 2 将左
  • @Scheduled参数及cron表达式解释

    Scheduled支持以下8个参数 1 cron 表达式 指定任务在特定时间执行 2 fixedDelay 表示上一次任务执行完成后多久再次执行 参数类型为long 单位ms 3 fixedDelayString 与fixedDelay含义
  • 2018年中国STEAM教育行业发展现状及发展前景分析

    转自 http www chyxx com industry 201801 609261 html STEAM 教育包括科学 Science 技术 Technology 工程 Engineering 艺术 Art 数学 Mathematic
  • glog的编译,配置,使用

    glog是Google推出的轻量级C log开源库 使用起来比较简单 自己可以下载源码直接编译 支持Windows和linux 下载编译 glog下载路径 https code google com p google glog 需要翻墙才能
  • js 根据总页数 和 规律的页面名称 动态创建分页条

    公有变量最好用明明空间限制一下 var totalPage 0 var currentPage 1 var menuType 0 var totalCount 0 var first page 首页 var prev page 上一页 va
  • mybatis实现代码自动生成

    1 在pom文件中加入代码自动生成插件
  • 光圈,焦距,工作距离与景深之间的关系。

    光圈 光圈越大 景深越小 光圈越小 景深越大 焦距 焦距越长 景深越小 焦距越短 景深越短 工作距离 工作距离越小 景深越小 工作距离越大 景深越大
  • linux和shell的关系

    shell的理解 shell翻译成壳的意思 它是包裹在linux内核外层的 一个可通过一系列的linux命令对操作系统发出相关指令的人机界面 shell可以通过其条件语句和循环语句等 把一系列linux命令结合在一起 形成一个相当于面向过程
  • Java——面向对象练习(图书管理系统的实现)

    文章目录 Java 面向对象练习 图书管理系统的实现 一 实现效果展示 1 功能简介 2 登陆界面 3 菜单界面 4 功能展示 二 具体代码实现 1 类的设计 1 创建图书相关的类 2 创建操作相关的类 1 接口的实现 2 新增书籍 3 删