图书管理系统的实现

news/2024/7/8 1:58:50

一、系统的介绍

  1. 进入图书管理系统的用户分为:管理员用户和普通用户。
  2. 管理员用户所执行的操作有:查找图书、新增图书、删除图书、显示图书、退出系统。
  3. 普通用户所执行的操作有:查找图书、借阅图书、归还图书、退出系统。

二、各模块代码的实现 

1、创建接口 

各操作类都要实现该接口,以便后期组织各操作类的对象: 

package operation;

import Book.BookList;

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

2、创建Book包

Book包里面存放book类及BookList类,相关代码如下:  

2.1 book类代码

package Book;

public class book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;

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

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

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

2.2 BookList类 

BookList类是用来实现存放图书的功能的,相当于书架。在这里我设置的书架上最多能存放10本书( int DEFAULT_CAPACITY = 10;),并且书架上已存有三国演义、西游记、红楼梦三本书。

package Book;

public class BookList {
    private book[] books;
    private int usedSize;  //记录当前书架上实际存放的书的数量
    private static final int DEFAULT_CAPACITY = 10;

    public BookList() {

        this.books = new book[DEFAULT_CAPACITY];
        this.books[0] = new book("三国演义","罗贯中",10,"小说");
        this.books[1] = new book("西游记","吴承恩",9,"小说");
        this.books[2] = new book("红楼梦","曹雪芹",19,"小说");

        this.usedSize = 3;
    }

    public book getBook(int pos) {
        return 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;
    }

    public book[] getBooks() {
        return books;
    }
}

3、 创建operation包

 operation包里面存放实现对图书进行操作的类,相关代码如下:

3.1 AddOperation类

该类实现新增图书的功能 

package operation;
import Book.BookList;
import Book.book;
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();
        for(int i = 0;i<currentSize;i++) {
            book book1 = bookList.getBook(i);
            if(book1.getName().equals(name)) {
                System.out.println("已有这本书,不再进行存放了!");
                return;
            }
        }
        if(currentSize==bookList.getBooks().length) {
            System.out.println("书架满了!");
        }else {
            bookList.setBooks(currentSize,book);
            bookList.setUsedSize(currentSize+1);
        }
    }
}

3.2 DelOperation类

 该类实现删除图书的功能 

package operation;
import Book.BookList;
import Book.book;
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 pos = -1;
        int i = 0;
        for (; i < currentSize; i++) {
            book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                pos = i;
                break;
            }
        }
        if (i>=currentSize) {
            System.out.println("没有你要删除的图书!");
            return;
        }
        //删除图书
        int j = pos;
        for (;j<currentSize-1;j++) {
            bookList.setBooks(j,bookList.getBook(j+1));
        }
        bookList.setBooks(j,null);
        bookList.setUsedSize(currentSize-1);
    }
}

3.3 ShowOperation类 

  该类实现显示图书的功能 

package operation;
import Book.BookList;
import Book.book;
public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书");
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            book book = bookList.getBook(i);
            System.out.println(book);

        }
    }
}

 3.4 BorrowOperation类

该类实现普通用户借阅图书的功能 

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

public class BorrowOperation 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 currenSize = bookList.getUsedSize();
        int i=0;
        for (;i<currenSize;i++) {
            book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                System.out.println(book);
                return;
            }
        }
        if (i == currenSize) {
            System.out.println("没有你要借阅的图书!");
        }
    }
}

3.5 ReturnOperation类 

该类实现普通用户归还图书的功能 

package operation;
import Book.BookList;
import Book.book;

import java.util.Scanner;

public class ReturnOperation 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 currenSize = bookList.getUsedSize();
        int i=0;
        for (;i<currenSize;i++) {
            book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                book.setBorrowed(false);
                System.out.println("归还成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("你归还的图书不存在!");
    }
}

3.6 FindOperation类 

该类实现查找图书的功能 

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

public class FindOperation 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 currenSize = bookList.getUsedSize();
        int i = 0;
        for (;i<currenSize;i++) {
            book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                System.out.println("找到了,信息如下:");
                System.out.println(book);
                return;
            }
        }
        if (i >= currenSize) {
            System.out.println("你要找的书不存在!");
        }
    }
}

3.7 ExitOperation类

该类实现退出程序的功能 

package operation;
import Book.BookList;
public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出程序");
        System.exit(0);
    }
}

4、创建user包 

user包里面装入User类、NomalUser类和AdminUser类, NomalUser类(普通用户)和AdminUser类(管理员用户)分别继承User类。

4.1 User类

package user;

import Book.BookList;
import operation.IOperation;

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

4.2 NomalUser类

package user;
import operation.IOperation;
import operation.*;
import java.util.Scanner;
public class NomalUser extends User{
    public NomalUser(String name) {
        super(name);
        this.iOperation = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }
    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();

        return choice;
    }
}

4.3 AdminUser类 

package user;
import operation.IOperation;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        this.iOperation = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation(),
        };
    }
    public int menu() {
        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();

        return choice;
    }
}

三、 主方法的实现

import Book.BookList;
import user.AdminUser;
import user.NomalUser;
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 NomalUser(name);
        }
    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while (true) {
            int choice = user.menu();
           // System.out.println("choice:"+choice);
            user.doOperation(choice,bookList);
        }
    }
}

这个图书管理系统的缺点:

  • 没有做到持久化的存储(比如,管理员增加了一本图书后,在下一次运行的时候,增加的图书就不存在了
  • 只是用到了数组

  


http://lihuaxi.xjx100.cn/news/1615907.html

相关文章

大数据学习(9)-hadoop集群计算速度影响因素

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

前端 - 将非 jpeg 格式图片转为 jpeg 格式、压缩图片

目录 将非 jpeg 格式图片转为 jpeg 格式压缩图片使用 将非 jpeg 格式图片转为 jpeg 格式 /common/compressImage/convertImage // 思路是创建一个图片&#xff0c;将file等于这个图片&#xff0c;然后创建一个canvas图层 &#xff0c;将canvas等比例缩放&#xff0c; //然后用…

【Leetcode刷题(数据结构)】:三路划分与三数随机取中的思想实现快速排序的再优化

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右 子序列中所有元素均…

M1Mac开启x86_64命令行archlinux虚拟机的最佳实践(qemu)

categories: [Tips] tags: Linux MacOS 写在前面 UTM 虚拟机可以卸载了, 命令行才是永远滴神, M1 MacBook Air 又能再战了! 之前一直用 UTM 的虚拟化开启 x86_64 的 Linux 虚拟机的, 但是我发现 UTM 好像不是必须的, 只要有qemu 就可以了, 下面就看看如何不通过图形界面前端…

ubuntu20.04 vins-fusion 运行记录

过程记录 环境&#xff1a; ubuntu20.04 opencv4.2.0(此次使用) 3.3.1(其他程序在使用) vins-fusion vision_opencv 1.下载VINS-Fusion和cv_bridge&#xff0c;并进行修改&#xff0c;方便使用opencv4.2.0和对应的cv_bridge。 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src…

机器人命令表设计

演算命令 CLEAR 将数据 1 上被指定的编号以后的变数的内容&#xff0c;以及数据 2 上仅被指定的个数都清除至 0。 INC 在被指定的变数内容上加上 1。 DEC 在被指定的变数内容上减掉 1。 SET 在数据 1 上设定数据 2。 ADD 将数据 1 和数据 2 相加&#xff0c;得出的结果保存在数…

【Power BI】Power BI 入门指南:版本、下载和报表创建的步骤

文章目录 一、前言二、了解 Power BI 版本三、下载 Power BI Desktop四、如何开始使用 Power BI Desktop五、在 Power BI Desktop 中创建报表六、文末总结 一、前言 Power BI 是微软于 2013 年推出的产品&#xff0c;为一款商业智能与数据可视化工具。它通过引人注目的视觉效果…

BAT学习——计算当前路径下指定格式文件的MD5值,将文件名与MD5值写入文本

将以下内容粘贴到bat脚本中&#xff0c;双击运行&#xff0c;生成MD5.txt文件&#xff0c;需要其他格式&#xff0c;修改循环中的.rar 多个格式使用or分开 *.rar or *.bat脚本内容 echo off setlocal enabledelayedexpansionrem 设置输出文件名 set "outputFileMD5.txt&…