图书管理系统-Java

news2024/10/6 1:39:22

目录

一、图书管理系统样式

二、图书管理系统具体实现

   2.1 book包

  2.2 user包

  2.3 Main类

  2.4 operation包


一、图书管理系统样式

管理系统效果图:

         通过效果图我们可以看到,首先要实现登录,得到用户姓名和身份,依据用户的身份不同,其菜单栏和用户可以执行的操作不同

 二、图书管理系统具体实现

        主要设置以下包和类:

                                        

        其中book包存放有关书的信息,operation包存放有关用户执行的各种操作 ,user存放有关用户的信息,Main是测试类。

   2.1 book包

                        

        Book类用来存放有关一本书的详细信息和操作方法,BookList是书架类,记录存放的书。

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;
    }
    //打印书的信息
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +"图书状态:"+
                ((isborrowed==true)? "已被借出":"未被借出")+
                '}';
    }
    //获取书名
    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 isIsborrowed() {
        return isborrowed;
    }
    //设置书的状态
    public void setIsborrowed(boolean isborrowed) {
        this.isborrowed = isborrowed;
    }
}
public class BookList {
    //书架存放的书(许多本)
    private Book[] books;
    //当前书架上书的数量
    int NowSize;
    //初始化书架
    public BookList() {
         this.books=new Book[20];
         //最初存放三本书
         books[0]=new Book("三国演义","罗贯中",13,"小说");
         books[1]=new Book("西游记","吴承恩",15,"小说");
         books[2]=new Book("红楼梦","曹雪芹",12,"小说");
         NowSize=3;
    }
    //知书的位置(数组下标)从书架获取一本书
    public Book getBook(int pos){
        return books[pos];
    }
    //在书架相应位置放置一本书
    public void SetBook(int pos,Book book){
        books[pos]=book;
    }
    //获取当前书架上书的数量
    public int getNowSize() {
        return NowSize;
    }
    //设置当前书架上书的数量
    public void setNowSize(int nowSize) {
        NowSize = nowSize;
    }
}

    2.2 user包

                        

         User类是所有类型用户的父类,AdminUser是管理员类型的用户,NormalUser是普通用户类型的用户。

//抽象类
public abstract class User {
    //用户名字
    protected String name;
    //用户的多种操作
    protected Ioperation[] ioperations;


    //用户初始化
    public User(String name) {
        this.name = name;
    }
    //用户的菜单
    public  abstract int menu();
    //用户要执行的操作
    public void doperation(int choice, BookList bookList){
        ioperations[choice].work(bookList);
    }
}
//管理员用户
public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        //用户的具体操作
        this.ioperations=new Ioperation[]{
                new ExitOperation(),    //退出系统
                new SearchOperation(),  //查找图书
                new AddOperation(),     //增加图书
                new DeleteOperation(),  //删除图书
                new ShowOperation(),    //查看所有图书
        };
    }
    //管理员用户菜单
    @Override
    public int menu() {
        System.out.println("********************");
        System.out.println("hello "+name+" "+"欢迎来到管理员菜单");
        System.out.println("1. 查找图书");
        System.out.println("2. 增加图书");
        System.out.println("3. 删除图书");
        System.out.println("4. 显示图书");
        System.out.println("0. 退出系统");
        System.out.println("********************");
        System.out.println("请输入你的选择:");
        Scanner scanner=new Scanner(System.in);
        //用户输入操作选项
        int choice=scanner.nextInt();
        return choice;
    }
}
//普通用户
public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
        //普通用户具体操作
        this.ioperations=new Ioperation[]{
                new ExitOperation(),    //退出系统
                new SearchOperation(),  //查找图书
                new BorrowOperation(),  //借用图书
                new ReturnOperation(),  //归还图书
        };
    }
    //普通用户菜单
    @Override
    public int menu() {
        System.out.println("********************");
        System.out.println("hello "+name+" 欢迎来到普通用户菜单");
        System.out.println("1. 查找图书");
        System.out.println("2. 借阅图书");
        System.out.println("3. 归还图书");
        System.out.println("0. 退出系统");
        System.out.println("********************");
        System.out.println("请输入你的选择:");
        Scanner scanner=new Scanner(System.in);
        //用户操作选项
        int choice=scanner.nextInt();
        return choice;
    }
}

 2.3 Main类

//测试类
public class Main {
    //用户登录
    public static User logn(){
        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=logn();
        while (true){
            int choice=user.menu();
            System.out.println("choice :"+choice);
            //根据choice确定执行哪个对象的特定操作
            user.doperation(choice,bookList);
        }
    }
}

 2.4 operation包

                

         AddOperation增加图书操作,BorrowOperation借出图书操作,DeleteOperation删除图书操作,ExitOperation退出系统操作,ReturnOperation归还操作,SearchOperation查找操作,ShowOperation查看所有图书操作,所有的操作针对书架进行,因此建Ioperation一个接口,声明操作书架的方法,每个类实现这个接口。

//接口
public interface Ioperation {
    void work(BookList bookList);
}
//增加图书
public class AddOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("增加图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入name:");
        String name=scanner.nextLine();
        System.out.println("请输入author:");
        String author=scanner.nextLine();
        System.out.println("请输入price:");
        int price=scanner.nextInt();
        scanner.nextLine();
        System.out.println("请输入type:");
        String type=scanner.nextLine();
        Book book=new Book(name,author,price,type);
        //判断书架是否已满
        if(bookList.getNowSize()==Max_book_count){
            System.out.println("书架满了");
            return;
        }else {
            for (int i = 0; i <bookList.getNowSize(); i++) {
                //判断书架是否已有此书
                if((bookList.getBook(i).getName()).equals(name)){
                    System.out.println("书架里已有此书,不需再添加");
                    return;
                }
            }
            //放置书
            bookList.SetBook(bookList.getNowSize(), book);
            //书的数量加1
            int count= bookList.getNowSize();
            bookList.setNowSize(++count);
            System.out.println("添加图书成功");
        }
    }
}
//借出图书
public class BorrowOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借出图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入name:");
        String name=scanner.nextLine();
        for (int i = 0; i < bookList.getNowSize(); i++) {
            //判断存在此书
            if ((bookList.getBook(i).getName()).equals(name)){
                bookList.getBook(i).setIsborrowed(true);
                System.out.println("借阅图书成功");
                return;
            }
        }
        System.out.println("借阅的书不存在");
    }
}
//删除图书
public class DeleteOperation 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.getNowSize(); i++) {
            //存在此书
            if ((bookList.getBook(i).getName()).equals(name)){
                for (int j = i; j < bookList.getNowSize()-1; j++) {
                    bookList.SetBook(j,bookList.getBook(j+1));
                }
                //最后一本书置空
                bookList.SetBook(bookList.getNowSize(),null);
                //书的数量减1
                int count=bookList.getNowSize();
                bookList.setNowSize(--count);
                System.out.println("删除图书成功");
                return;
            }
        }
        System.out.println("此书不存在");
    }
}
//归还图书
public class ReturnOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入name:");
        String name=scanner.nextLine();
        for (int i = 0; i < bookList.getNowSize(); i++) {
            //存在图书
            if ((bookList.getBook(i).getName()).equals(name)){
                bookList.getBook(i).setIsborrowed(false);
                System.out.println("归还图书成功");
                return;
            }
        }
        System.out.println("归还的图书不存在");
    }
}
//查找图书
public class SearchOperation 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.getNowSize();i++) {
            //图书存在
            if ((bookList.getBook(i).getName()).equals(name)){
                System.out.println(bookList.getBook(i));
                return;
            }
        }
        System.out.println("书库里没有此书");
    }
}
//查找所有图书
public class ShowOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("打印图书");
        for (int i = 0; i < bookList.getNowSize(); i++) {
            Book book=bookList.getBook(i);
            System.out.println(book);
        }
    }
}
//退出系统
public class ExitOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统");
        System.exit(0);
    }
}

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

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

相关文章

Java代理模式——静态代理与动态代理

代理模式 代理模式允许你为其他对象提供一个代理&#xff0c;以控制对这个对象的访问。代理模式在不改变实际对象的情况下&#xff0c;可以在访问对象时添加额外的功能。 可以理解为代理模式为被代理对象创造了一个替身&#xff0c;调用者可以通过这个替身去实现这个被代理对…

网络基础——网络的由来与发展史

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、网络的由来 二、计算机网络的发展史 1、第一阶段 2、第二阶段 3、第三阶段 前言 每天都是使用网络&#xff0c;那么你知道网络…

【C++起飞之路】初级—— auto、范围for循环、宏函数和内联函数

auto、范围for、内联函数、宏函数和nullptr 一、auto — 类型推导的魔法&#xff08;C 11)1、auto 是什么&#xff1f;2、工作原理3、优势4、限制和注意事项 二、范围for (C11)1、基本语法2、优势3、工作原理4、注意事项5、C11&#xff1a; 范围 for 循环的扩展&#xff1a; 三…

阿里云免费服务器领取入口_限制条件_申请指南

阿里云免费服务器领取&#xff0c;个人和企业用户均可以申请&#xff0c;个人免费服务器1核2GB 每月750小时&#xff0c;企业u1服务器2核8GB免费使用3个月&#xff0c;阿里云百科分享阿里云免费服务器申请入口、个人和企业免费配置、申请资格条件及云服务器免费使用时长&#x…

使用 HTML、CSS 和 JavaScript 创建多步骤表单

使用 HTML、CSS 和 JavaScript 创建多步骤表单 为了处理又长又复杂的表单&#xff0c;我们需要将它们分成多个步骤。通过一次只在屏幕上显示一些输入&#xff0c;表单会感觉更容易理解&#xff0c;并防止用户感到被大量的表单字段淹没。 在本文中&#xff0c;我将逐步指导如何…

HTML详解连载(5)

HTML详解连载&#xff08;5&#xff09; 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高&#xff1a;设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…

全网最细,Python接口自动化测试-Session会话保持(实战详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在接口测试的过程…

ubuntu python虚拟环境venv搭配systemd服务实战(禁用缓存下载--no-cache-dir)

文章目录 参考文章目录结构步骤安装venv查看python版本创建虚拟环境激活虚拟环境运行我们程序看缺少哪些依赖库&#xff0c;依次安装它们接下来我们配置python程序启动脚本&#xff0c;脚本中启动python程序前需先激活虚拟环境配置.service文件然后执行部署脚本&#xff0c;成功…

PyQt5利用QTextEdit控件输入多行文本

1、总代码 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication,QWidget from PyQt5 import QtCore, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(320, 240)s…

KafkaStream:基本使用

简介&#xff1a; kafkaStream&#xff1a;提供了对存储在kafka中的数据进行流式处理和分析的功能 特点&#xff1a; KafkasSream提供了一个非常简单轻量的Library&#xff0c;它可以非常方便的嵌入到java程序中&#xff0c;也可以任何方式打包部署 入门案例&#xff1a; 1、…

在C++中怎么判断一个东西是左值还是右值

2023年8月13日&#xff0c;周日早上 #include <iostream>// 函数模板&#xff0c;根据参数类型判断是左值还是右值 template<typename T> void checkValueType(T&& arg) {if constexpr(std::is_lvalue_reference<T>())std::cout << "Expr…

运营商加速抢占云计算,5G带来更多利润,上半年躺赚近千亿

中国移动已率先公布了上半年的业绩&#xff0c;业绩显示它们正在加速抢占此前由互联网企业占据优势的云计算市场&#xff0c;不过最让它们开心的还是5G继续带动利润的高速增长&#xff0c;预计三大运营商今年上半年可以躺赚近千亿元。 中国移动无疑仍然是运营商行业的领头羊&am…

tampermonky插件安装

换了电脑&#xff0c;今天重新下载了tampermonky&#xff0c;哎&#xff0c;被自己气死的一上午。wwwww&#xff0c;最后发现最大的问题就是没有问题。 Edge能不用下载直接安装&#xff0c;但是何少 下载tampermonky&#xff0c;在谷歌程序扩展-chrome://extensions/ 添加解压…

VirtualBox 导致的系统蓝屏问题

1&#xff0c;操作系统win7,已经启动了结果蓝屏 2&#xff0c;进入操作系统的命令行模式删除virtualbox的相关目录可以启动&#xff0c;但是无法在控制面板卸载&#xff0c;只要点击卸载就会发生蓝屏 3&#xff0c;删除注册表的相关内容 4&#xff0c;导致无线网络链接受限&…

京东面试曝光:零点秒杀如何防止Redis雪崩崩溃?

大家好&#xff0c;我是你们的小米&#xff01;今天要和大家聊一个超有技术含量的话题&#xff0c;那就是如何应对零点秒杀活动下的Redis雪崩问题。在京东的面试题中&#xff0c;这个问题可是相当有挑战性哦&#xff01;废话不多说&#xff0c;咱们直接进入主题吧。 什么是雪崩…

Academic Inquiry|国外文献查找

一个失去了男子气概的人总有很多忧虑&#xff0c;这样就可以分散注意力&#xff0c;而不必为那件特别的羞耻而苦恼不堪。 ——《狂野之夜》〔美〕乔伊斯卡罗尔欧茨著 樊维娜译 许多研究者在进行研究的时候&#xff0c;都会查找对应主体的国内外引用文献&#xff0c;而大多得出的…

2023杭州十大画室排行榜丨哪家画室是你的最佳选择?

美术&#xff0c;是一种表达&#xff0c;是一种情感的释放&#xff0c;也是一种对美的追求。而在杭州的画室&#xff0c;就是这种追求的最好舞台。接下来&#xff0c;我们将一起揭晓杭州十大画室&#xff0c;一起感受艺术的独特魅力&#xff0c;一起感受那种深入骨髓的艺术冲击…

2023/08/13_______JVM(CG)垃圾回收 算法(复制算法,标记清除,标记清除压缩)

JVM GC算法 复制算法 1&#xff0c;每一次GC都会将伊甸&#xff08;Eden&#xff09;活的对象移到幸存区中&#xff1a;一旦Eden区被GC后 就会是空 只要有内容就是from区 谁空谁是to区 内存会从 伊甸->幸存区to->幸存from&#xff08;这个时候to和from交换区域&#xf…

STM32入门学习之定时器输入捕获

1.定时器的输入捕获可以用来测量脉冲宽度或者测量频率。输入捕获的原理图如下&#xff1a; 假设定时器是向上计数。在图中&#xff0c;t1~t2之间的便是我们要测量的高电平的时间(脉冲宽度)。首先&#xff0c;设置定时器为上升沿捕获&#xff0c;如此一来&#xff0c;在t1时刻可…