图书馆管理系统源码(Java)

news2024/12/22 23:25:34


Book包->内含Book类与BookList类

Book类    用于初始化图书并对其进行操作

BookList类    用于存放多本图书

Book类

package Book;

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrow;
    //写一个构造方法 初始化图书内容
    public Book(String name,String author,int price,String type) {
        this.author = author;
        this.name = name;
        this.type = type;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ",isBorrow='"+isBorrow()
                + '}';
    }

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

    public void setBorrow(boolean borrow) {
        isBorrow = borrow;
    }
}

BookList类

package Book;

public class BookList {
    private Book[] books;
    private int usedSize;
    //假设书架的容量大小为十本书  usedSize是此时书架上有几本书
    //初始化几本书(可以自定义)
    public BookList() {
        this.books = new Book[10];
        books[0] = new Book("西游记","施耐庵",10,"小说");
        books[1] = new Book("红楼梦","曹雪芹",14,"小说");
        books[2] = new Book("三国演义","罗贯中",15,"小说");
        this.usedSize = 3;
    }

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

    public void setBooks(Book book, int pos) {
        books[pos] = book;
    }

    public int getUsedSize() {
        return usedSize;
    }

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

operatio包

Operation接口

package operation;

import Book.BookList;

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

AddOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class AddOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书->");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入书名->");
        String name = scan.next();
        System.out.println("请输入作者->");
        String author = scan.next();
        System.out.println("请输入价格->");
        int price = scan.nextInt();
        System.out.println("请输入类型->");
        String type = scan.next();
        Book book = new Book(name,author,price,type);
        bookList.setBooks(book,bookList.getUsedSize());
        System.out.println("添加图书成功!");
        bookList.setUsedSize(bookList.getUsedSize()+1);
    }
}

BorrowOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class BorrowOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        Scanner scan = new Scanner(System.in);
        System.out.println("借阅图书->");
        System.out.println("请输入要借阅的书名->");
        String name = scan.next();
        int tmp =bookList.getUsedSize();
        for (int i = 0; i < tmp; i++) {
            Book book = bookList.getBooks(i);
            if(name.equals(book.getName())) {
                bookList.getBooks(i).setBorrow(false);
                System.out.println("借阅成功!");
                System.out.println(bookList.getBooks(i).toString());
                return;
            }
        }
        System.out.println("找不到这本书");
    }
}

ExitOperation 类

package operation;

import Book.BookList;

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

FindOperation 类

package operation;

import Book.BookList;
import Book.Book;
import java.util.Scanner;

public class FindOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书->");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入要查找的书名->");
        String name = scan.next();
        int tmp =bookList.getUsedSize();
        for (int i = 0; i < tmp; i++) {
            Book book = bookList.getBooks(i);
            if(name.equals(book.getName())) {
                System.out.println("找到这本书了,它的信息是->");
                System.out.println(book.toString());
                return;
            }
        }
        System.out.println("找不到这本书");
    }
}

RemoveOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class RemoveOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书->");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入要删除的书名->");
        String name = scan.next();
        int tmp = bookList.getUsedSize();
        int flag = -1;
        for (int i = 0; i < tmp; i++) {
            Book book = bookList.getBooks(i);
            if(name.equals(book.getName())) {
                flag = i;
            }
        }
        if(flag == -1) {
            System.out.println("没有这本书,删除失败!");
            return;
        }

        for (int i = flag; i < tmp-1; i++) {
            bookList.setBooks(bookList.getBooks(i+1),i);
        }
        bookList.setBooks(null, tmp-1);
        bookList.setUsedSize(tmp-1);
        System.out.println("删除成功!");
    }
}

ReturnOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class ReturnOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        Scanner scan = new Scanner(System.in);
        System.out.println("归还图书->");
        System.out.println("请输入要归还的书名->");
        String name = scan.next();
        int tmp =bookList.getUsedSize();
        for (int i = 0; i < tmp; i++) {
            Book book = bookList.getBooks(i);
            if(name.equals(book.getName())) {
                bookList.getBooks(i).setBorrow(true);
                System.out.println("归还成功!");
                System.out.println(bookList.getBooks(i).toString());
                return;
            }
        }
        System.out.println("找不到这本书");
    }
}

ShowOperation 类

package operation;

import Book.BookList;

public class ShowOperation implements Operation {
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书->");
        int tmp = bookList.getUsedSize();
        for (int i = 0; i < tmp; i++) {
            System.out.println(bookList.getBooks(i).toString());
        }
    }
}

User包 实现用户操作

User父类

package User;
import Book.BookList;
import operation.*;

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

AdminUser子类 实现管理员操作

package User;
import Book.BookList;
import operation.*;

import java.util.Scanner;

public class AdminUser extends User {
    public AdminUser(String name) {
        super(name);
        this.operations = new Operation[] {
               new ExitOperation(),
               new FindOperation(),
               new AddOperation(),
               new RemoveOperation(),
               new ShowOperation(),
       };

    }
    @Override
    public void doOperation(int choice, BookList bookList) {
        this.operations[choice].work(bookList);
    }
    @Override
    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("**************************");
        System.out.println("请输入您要进行的操作->");
        Scanner scan = new Scanner(System.in);
        int choice = scan.nextInt();
        return choice;
    }

}

NormalUser子类 实现普通用户操作

package User;

import Book.BookList;
import operation.*;

import java.util.Scanner;

public class NormalUser extends User {

    public NormalUser(String name) {
        super(name);
        this.operations = new Operation[] {
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }

    @Override
    public void doOperation(int choice, BookList bookList) {
        this.operations[choice].work(bookList);
    }

    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("***********************");
        System.out.println("请输入您要进行的操作->");
        Scanner scan = new Scanner(System.in);
        int choice = scan.nextInt();
        return choice;
    }
}

Main示例

{
    public static User login() {
        Scanner scan = new Scanner(System.in);
        System.out.println("您的姓名是->");
        String name = scan.next();
        System.out.println("请选择你要登录的系统->");
        System.out.println("1、管理员系统");
        System.out.println("2、读者系统");
        System.out.println("————————————————————");
        int choice = scan.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);
        }
    }
}

以上就是 图书馆管理系统源码(Java) 的全部内容了,希望能对你有所帮助!

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

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

相关文章

10.打印楼梯图案和笑脸【2023.11.25】

1.问题描述 打印楼梯图案和笑脸 2.解决思路 3.代码实现 #include<stdio.h> int main(){printf("11\n");for(int i0;i<10;i){for(int j0;j<i;j){printf("FF"); }printf("\n");} return 0; }4.运行结果

Java研学-异常

一 异常 异于正常状态的显示,即控制台显示结果与预期的不一致 // 抛出异常java.lang.ArrayIndexOutOfBoundsException int[] nums new int[2]; System.out.print(nums[2]);二 异常分类 1 检测性异常:有称为非运行时异常,一般是在编写代码的过程中编程软件直接报错 2 非检测…

用Python写的自动答题脚本,正确率99%,刷课必备

咱们上学的时候&#xff0c;有些课程&#xff0c;不是很重要所以没去看&#xff0c;但是又要刷题&#xff0c;这时候&#xff0c;自动答题脚本就很关键&#xff0c;全程全自动&#xff0c;正确率还嘎嘎高&#xff01; 所以咱们今天来用Python写一个自动答题脚本&#xff0c;正…

图的建立基本操作

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 添加头文件#define MAX_VERTEX_NUM 100 //图中最大顶点数//struct ArcNode* nextarc; //ArcNode* firstarc; //这两个是很有必要的&#xff0c;如果你没有这两个指针&#xff0c;你就无法判…

2.前端--HTML标签1【2023.11.25】

1.基本语法规范 HTML 标签是由尖括号包围的关键词&#xff0c;例如 <html>。HTML 标签通常是成对出现的&#xff0c;例如 和 &#xff0c;我们称为双标签。有些特殊的标签必须是单个标签&#xff08;极少情况&#xff09;&#xff0c;例如 <br />我们称为单标签。 …

2022年12月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是?( ) A:可能出现6个不同位置的小猫和6个小球 B:可能出现6个不同位…

Python基于jieba+wordcloud实现文本分词、词频统计、条形图绘制及不同主题的词云图绘制

目录 序言&#xff1a;第三方库及所需材料函数模块介绍分词词频统计条形图绘制词云绘制主函数 效果预览全部代码 序言&#xff1a;第三方库及所需材料 编程语言&#xff1a;Python3.9。 编程环境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方库&#xff1a;…

P12 C++静态关键字static

目录 01 前言 02 静态变量static 03 extern关键字 04 静态函数 最后的话 01 前言 static 关键字在 C 中有两个意思&#xff0c;这个取决于上下文。 第一种情况是在类或结构体外部使用 static 关键字&#xff0c;另一种是在类或者结构体内部使用 static。 类外面的 static…

vscode运行c++程序如何支持c++11

参考https://zhuanlan.zhihu.com/p/269244754 更改setting.json文件

[环境配置]vscode免密ssh的设置流程

测试环境&#xff1a; windows 11 ubuntu16.04 vmware 第一步&#xff1a;生成密钥 cmd打开输入&#xff1a;ssh-keygen -t rsa 一路回车后可以在C:\Users\用户名\.ssh路径看到id_rsa.pub&#xff0c;我们打开这个文件&#xff0c;用记事本打开即可&#xff0c;然后复制里…

二十一、数组(6)

本章概要 数组排序Arrays.sort的使用并行排序binarySearch二分查找parallelPrefix并行前缀 数组排序 根据对象的实际类型执行比较排序。一种方法是为不同的类型编写对应的排序方法&#xff0c;但是这样的代码不能复用。 编程设计的一个主要目标是“将易变的元素与稳定的元素…

王者荣耀——Java

代码如下&#xff1a; sxt Background package sxt;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\24465\\Desk…

Hibernate 脏检查和刷新缓存机制

刷新缓存: Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对象和数据库中的相关记录对应,在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对…

【负载均衡】这些内容你需要知道下

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

【刷题宝典NO.4】

目录 公交站间的距离 生命游戏 公交站间的距离 https://leetcode.cn/problems/distance-between-bus-stops/ 环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i 的车站和编号为 …

Kotlin学习——流程控制,when,循环,range工具 kt里的equals if实现类似三元表达式的效果

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

KVM虚拟机的NAT网络模式原理及过程展示

NAT的方式及原理 NAT方式是KVM安装后的默认方式。 它支持主机与虚拟机的互访&#xff0c;同时也支持虚拟机访问互联网&#xff0c;但不支持外界访问虚拟机。 default是宿主机安装虚拟机支持模块的时候自动安装的。 其中 virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接…

Python编程技巧 – Lambda函数

Python编程技巧 – Lambda函数 Python Programming Skills – Lambda Functions By JacksonML 2023-11-25 在前文介绍过Python函数&#xff0c;一个函数用def关键字声明&#xff0c;不带或带有参数&#xff0c;并以冒号结束&#xff1b;函数块根据结果由解释器确定返回值动态…

【Linux】:信号的产生

信号 一.前台进程和后台进程1.前台进程2。后台进程3.总结 二.自定义信号动作接口三.信号的产生1.键盘组合键2.kill信号进程pid3.系统调用1.kill函数2.raise函数3.abort函数 四.异常五.软件条件六.通过终端按键产生信号 一.前台进程和后台进程 1.前台进程 一个简单的代码演示 …

【Spring集成MyBatis】MyBatis注解开发

文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查 使用注…