JavaSE图书管理系统

news2024/9/20 9:37:14

JavaSE图书管理系统

      • 思路
      • 一.Main方法
      • 二.User包
      • 1.User类
      • 2.NormaUser类
      • 3.AdminUser类
      • 三.book包
      • 1.BookList类
      • 2.Book类
      • 四.operation包
      • 1.IOPeration接口
      • 2.AddOperation类
      • 新增图书
      • 3.BorrowOperation类
      • 借阅图书
      • 4.DelOperation类
      • 删除图书
      • 5.FindOperation类
      • 查找图书
      • 6.ReturnOperation类
      • 归还图书
      • 7.ShowOperation类
      • 打印图书
      • 8.ExitOperation类
      • 退出系统

思路

实际上大概分为三步,关于书相关的放在book包里,关于用户相关的放在User包里,关于操作相关的我们放在Operation包里,不同的包用来管理不同的代码,那么为什么要把操作放在一个包里呢?原因是我们分为普通用户管理员用户,那么普通用户和管理员用户的操作是不一样的,我们放在一个类里面,不太好区分。
在这里插入图片描述
关于book包,operation包,user包里面的类和接口。
关于book包里,定义两个类,bookList为书架的类,book关于书的类。
关于operation包里的类都是对bookList的操作,如查找,删除等。
关于User的类,大致为管理员类和普通用户类,和普通的User类。

在这里插入图片描述

一.Main方法

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

    }
    public static void main(String[] args) {

        BookList booklist = new BookList();//书架创建
        //user 指向哪个对象 就看返回值是哪个
        User user = login();
        //登录

        while(true) {//重复执行操作
            int choice = user.menu();
            //看user指向哪个对象,就调用哪个菜单

            System.out.println("choice: " + choice);

            //根据choice 的选择,来决定调用的是哪个方法?

            user.doOperation(choice, booklist);
        }

    }
}

二.User包

1.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){
        ioPerations[choice].work(bookList);//拿到对象,调用对象的方法
    }
}

2.NormaUser类

package user;

import operation.*;

import java.util.Scanner;

public class NormaUser extends User {//普通用户
    public NormaUser(String name) {
        super(name);
        this.ioPerations = 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 sc = new Scanner(System.in);
        System.out.println("请输入你的操作: ");
        int choice = sc.nextInt();
        return choice;
    }
}

3.AdminUser类

package user;

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 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 sc = new Scanner(System.in);
        System.out.println("请输入你的操作: ");
        int choice = sc.nextInt();
        return choice;
    }
}

三.book包

1.BookList类

package book;

public class BookList {
    private Book[] books;
    private  int usedSize;//记录当前书架上 实际存放的书的数量
    public BookList(){
        this.books = new Book[10];
        this.books[0] = new Book("三国演义","罗贯中",10,"小说");
        this.books[1] = new Book("西游记","吴承恩",9,"小说");
        this.books[2] = new Book("红楼梦","曹雪芹",19,"小说");

        this.usedSize = 3;

    }

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
    public Book  getBook(int pos){
        return books[pos];
    }
    public void setBooks(int pos,Book book){
        books[pos] = book;
    }

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

}

2.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) ? ",已经借出" : ",未被借出")+
                '}';
    }
}


四.operation包

因为所以操作都是对于书架的,所以我们设置一个接口

1.IOPeration接口

package operation;

import book.BookList;

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

2.AddOperation类

新增图书

package operation;

import book.Book;
import book.BookList;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

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.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);
        System.out.println("请输入你要借阅的图书:");
        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("借阅成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("你借阅的图书不存在!!!");
    }
}

4.DelOperation类

删除图书

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

5.FindOperation类

查找图书

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();
        //遍历这个数组
        int currentSize = bookList.getUsedSize();
        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("没有找到这本书!");
    }
}

6.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("归还图书!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要归还的图书:");
        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("归还成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("你归还的图书不存在!!!");
    }
}

7.ShowOperation类

打印图书

package operation;

import book.Book;
import book.BookList;

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

8.ExitOperation类

退出系统

package operation;

import book.BookList;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1597511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity解决:导出安卓apk 安装时报错:应用未安装:软件包似乎无效

Unity2018.4.36 导出安卓apk 安装时报错&#xff1a;应用未安装&#xff1a;软件包似乎无效 解决办法&#xff1a;因为安装到安卓12 需要添加添加过滤规则 在AS工程AndroidManifest.xml 添加过滤规则即可。 android:exported"true"

初识ansible服务剧本playbook及剧本编写实例

目录 1、playbook剧本文件概念 1.1 剧本文件的结构由4部分组成 2、配置实例 实例1-编写一个实现批量安装mariadb数据库的剧本 实例2-编写一个创建一个目录/backup,并在目录喜爱创建01.txt文件的剧本 实例3-编写一个添加定时同步时间的定时任务剧本 错误反思 1、playbook剧…

MDK-ARM Keil5.38 下载安装环境搭建

一、keil软件介绍 KEIL是公司的名称&#xff0c;有时候也指KEIL公司的所有软件开发工具&#xff0c;目前2005年Keil由ARM公司收购&#xff0c;成为ARM的公司之一。 MDK&#xff08;Microcontroller Development Kit&#xff09; 也称MDK-ARM、KEIL MDK、RealView MDK、KEIL For…

不需要GPU就可以玩转模型,同时支持本地化部署

简单一款不需要GPU就可以在Win 机器跑的模型&#xff1a;Ollama&#xff1b;用于本地运行和部署大型语言模型&#xff08;LLMs&#xff09;的开源工具 关于Ollama的简要介绍 平台兼容性&#xff1a;Ollama支持多种操作系统&#xff0c;包括macOS、Linux和Windows&#xff0c;…

linux系统USB/IP远程共享USB设备 —— 筑梦之路

概述 USB/IP 是一个开源项目&#xff0c;已合入 Kernel&#xff0c;在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。 USB Client&#xff1a;使用USB的终端&#xff0c;将server共享的usb设备挂载到本地。 USB Server&#xff1a;分享本地的usb设备至远程。 架构原理…

蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)

本题链接&#xff1a;蓝桥杯2024年第十五届省赛真题-R 格式 - C语言网 题目&#xff1a;​​​​​​​ 样例&#xff1a; 输入 2 3.14 输出 13 思路&#xff1a; 根据题意&#xff0c;结合数据范围&#xff0c;这是一道模板的高精度乘以低精度问题。 题意是double 类型 d 与…

vue3从精通到入门4:diff算法的实现

Vue 3 的 diff 算法相较于 Vue 2 有了一些改进和优化&#xff0c;主要是为了应对更复杂的组件结构和更高的性能需求。 以下是 Vue 3 diff 算法在处理列表更新时的大致步骤&#xff1a; 头头比较&#xff1a;首先&#xff0c;比较新旧列表的头节点&#xff08;即第一个节点&…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言&#xff1a;2024年4月13日上午&#xff0c;我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店&#xff0c;参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会&#xff08;MAS’2024&#xff09;。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

如何高效部署和扩展AI模型:开源平台与无服务器架构的综合应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

java的深入探究JVM之类加载与双亲委派机制

前言 前面学习了虚拟机的内存结构、对象的分配和创建&#xff0c;但对象所对应的类是怎么加载到虚拟机中来的呢&#xff1f;加载过程中需要做些什么&#xff1f;什么是双亲委派机制以及为什么要打破双亲委派机制&#xff1f; 类的生命周期 类的生命周期包含了如上的7个阶段&a…

【Linux C | 多线程编程】线程同步 | 总结条件变量几个问题

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

visual studio连接ubuntu不成功原因(SSH问题)及解决办法

原因1&#xff1a; 网络没有互通&#xff08;一般VMware&#xff09; 使用ping来看网络是不是可以互通&#xff0c;例如&#xff1a; //这里的ip是ubuntu的ip&#xff0c;也可以从ubuntu的客户端ping一下当前主机 ping 192.168.1.101原因2&#xff1a; SSH没有密钥&#xf…

如何构建云原生安全?云安全的最佳实践

理解云原生安全 在数字时代&#xff0c;云计算已经成为企业的标配&#xff0c;大多数企业都已经将自己的应用程序和数据迁移到了云上。然而&#xff0c;随着企业规模不断扩大&#xff0c;云安全问题也逐渐浮出水面。云安全最新的趋势是云原生安全&#xff0c;这是指在云环境中构…

深入理解数据结构第六弹——排序(3)——归并排序

排序1&#xff1a;深入了解数据结构第四弹——排序&#xff08;1&#xff09;——插入排序和希尔排序-CSDN博客 排序2&#xff1a;深入理解数据结构第五弹——排序&#xff08;2&#xff09;——快速排序-CSDN博客 前言&#xff1a; 在前面&#xff0c;我们已经学习了插入排序…

基于Springboot+Vue的Java项目-在线视频教育平台系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

解析OceanBase v4.2 Oracle 语法兼容之 LOCK TABLE

背景 在OceanBase V4.1及之前的版本中&#xff0c;尽管已经为Oracle租户兼容了LOCK TABLE相关的语法&#xff0c;包括单表锁定操作&#xff0c;和WAIT N&#xff0c; NOWAIT 关键字。但使用时还存在一些限制。例如&#xff1a;LOCK TABLE只能针对单表进行锁定&#xff0c;并不…

【数据结构|C语言版】顺序表

前言1. 初步认识数据结构2. 线性表3. 顺序表3.1 顺序表的概念3.1 顺序表的分类3.2 动态顺序表的实现 结语 前言 各位小伙伴大家好&#xff01;小编来给大家讲解一下数据结构中顺序表的相关知识。 1. 初步认识数据结构 【概念】数据结构是计算机存储、组织数据的⽅式。 数据…

linux 云计算平台基本环境(知识准备篇)

为了更多的了解云计算平台&#xff0c;结合云计算和linux的知识写了一篇云计算的介绍和汇总。 文章目录 前言1. centos的软件管理1.1 yum软件包管理1.1.1 yum命令语法&#xff1a;1.1.2 安装软件包的步骤1.1.3 yum源 2. 主机名管理与域名解析3. centos的防火墙管理4. openstack…

EI级 | Matlab实现TCN-LSTM-MATT、TCN-LSTM、TCN、LSTM多变量时间序列预测对比

EI级 | Matlab实现TCN-LSTM-MATT、TCN-LSTM、TCN、LSTM多变量时间序列预测对比 目录 EI级 | Matlab实现TCN-LSTM-MATT、TCN-LSTM、TCN、LSTM多变量时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【EI级】Matlab实现TCN-LSTM-MATT、TCN-LSTM、TCN、LSTM…

HCIP【ospf综合实验】

目录 实验要求&#xff1a; 实验拓扑图&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 一、划分网段 二、配置IP地址 三、搞通私网和公网 &#xff08;1&#xff09;先搞通私网&#xff08;基于OSPF协议&#xff0c;在各个路由器上进行网段的宣告&#xff0c…