Java:图书管理系统

news2024/11/18 17:25:58

目录

一.book

1.在book包中的Book 类用来定义和引用书的名字,作者,价格,类型等。

2.在book包中的第二个类是BookList是用来构建书架,和书架上的初始书本,

二、ioperations

1.AddOperation (增加图书)

2.BorrowOperation (借阅图书)

3.DelOperation (删除图书)

4.ExitOperation (显示图书)

5.FindOperation (查找图书)

6.IOPeration(接口)

7.ReturnOperation(归还图书)

8.ShowOperation(显示图书)

 三、User

 1.AdminUser(管理员)

2.NormalUser(普通用户)

3.User

 四、Main类 


 图书管理系统的作用:显而易见,图书管理系统的出现就是为了缓和图书管理员的管理任务。当然,这其中也蕴含了一定的抽象意义,就是实现了从计算机上的虚拟化在现实生活中的实际运用;实现了图书馆由传统走向信息化道路的愿望。可以说,这样的管理系统是极大地减轻了管理员的负担。这样的程序在将图书信息进行简明化处理后,就实现了图书信息的集中化管理,使得管理的成本也大幅度降低。在进行查找操作时,系统可以快速地进行综合查询,得到最准确的结果。 

 图书管理系统构建简单的流程图

选择身份进入后选择你要做的内容,通过这个架构来编写代码。

首先我们先创建三个包

 

一.book

 

1.在book包中的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) ? " 已借出" : " 未借出") +
                '}';
    }
}

2.在book包中的第二个类是BookList是用来构建书架,和书架上的初始书本,

public class BookList {

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

    public BookList() {
        this.books[0] = new Book("狂人日记","鲁迅",10,"小说");
        this.books[1] = new Book("淘气包马小跳","杨红樱",10,"小说");
        this.books[2] = new Book("笑猫日记","杨红樱",16,"小说");
        this.books[3] = new Book("阿Q正传","鲁迅",16,"小说");
        this.books[4] = new Book("红楼梦","曹雪芹",30,"小说");
        this.usedSize = 5;  //初始书本个数
    }

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

    public void setBook(int pos,Book book) {
        this.books[pos] = book;
    }
    public Book[] getBooks() {
        return books;
    }
}

二、ioperations

1.AddOperation (增加图书)

package ioperations;
import book.Book;
import book.BookList;
public class AddOperation  implements IOPeration {
    public void work(BookList bookList) {
        System.out.println("新添加的图书");

        int currentSize = bookList.getUsedSize();
        if(currentSize == bookList.getBooks().length) {
            System.out.println("书架已经存满");
            return;
        }

        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 newBook = new Book(name,author,price,type);
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                System.out.println("这本书已经存在");
                return;
            }
        }
        bookList.setBook(currentSize,newBook);

        bookList.setUsedSize(currentSize+1);

        System.out.println("添加成功");

    }
}

2.BorrowOperation (借阅图书)

package ioperations;
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.printf("请输入你借阅的书名:");
        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)) {
                if(book.isBorrowed()) {
                    System.out.println("已被借出");
                    return;
                }
                book.setBorrowed(true);
                System.out.println("借阅成功");
                return;
            }
        }
        System.out.println("不存在");
    }
}

3.DelOperation (删除图书)

package ioperations;
import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOPeration {
    public void work(BookList bookList) {
        System.out.println("删除图书");

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你删除的书名:");
        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 ;
        }

        for (int j = pos; j < currentSize-1; j++) {
            Book book = bookList.getBook(j+1);

            bookList.setBook(j,book);
        }

        bookList.setBook(currentSize-1,null);

        bookList.setUsedSize(currentSize-1);
        System.out.println("已经删除");
    }
}

4.ExitOperation (显示图书)

package ioperations;
import book.BookList;

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

5.FindOperation (查找图书)

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

public class FindOperation implements IOPeration {
    public void work(BookList bookList) {
        System.out.println("查找图书");
        Scanner scanner = new Scanner(System.in);
        System.out.printf("请输入你的书名:");
        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.IOPeration(接口)

定义一个标准(接口)

package ioperations;
import book.BookList;


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

7.ReturnOperation(归还图书)

package ioperations;
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.printf("请输入你归还的书名:");
        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)) {
                if(book.isBorrowed()) {
                    book.setBorrowed(false);
                    System.out.println("归还成功");
                    return;
                }
            }
        }
        System.out.println("不存在");
    }
}

8.ShowOperation(显示图书)

package ioperations;
import book.Book;
import book.BookList;

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

 三、User

 1.AdminUser(管理员)

管理员可以管理书架,编辑图书的增加与删除。

管理员对图书的数量,图书号,图书类型,图书名称等进行修改、删除管理,如果普通用户在线借书,图书总数会相应减少。

package user;
import ioperations.*;
import java.util.Scanner;
import ioperations.IOPeration;

public class AdminUser extends User{

    public AdminUser(String name) {
        super(name);
        this.operations = new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation()
        };
    }

    public int menu() {
        System.out.println("欢迎"+this.name+"来到图书系统");
        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;
    }

}

2.NormalUser(普通用户)

普通用户可以借阅书籍,在使用后进行归还书籍。

package user;
import ioperations.*;

import java.util.Scanner;

public class NormalUser extends User{

    public NormalUser(String name) {
        super(name);
        this.operations = 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;
    }
}

3.User

package user;
import book.BookList;
import ioperations.IOPeration;


public abstract class User {
    protected String name;
    public IOPeration[] operations;

    public User(String name) {
        this.name = name;
    }

    public abstract int menu();

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

    public void doIoperation(int choice, BookList bookList) {
    }
}

 四、Main类

用于将整个项目串联到一起,然后整合起来运行。

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {

    public static User login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        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();
        System.out.println("你好");
        User user = login();
        while (true){
            int choice =user.menu();
            user.doIoperation(choice,bookList);
        }
    }

}
希望对大家关于图书管理系统构建有所帮助
谢谢观看!!!

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

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

相关文章

若依 Ruoyi-Vue PageHelper 分页失效 total为记录数

分页插件PageHelper返回记录总数total竟然出错了 执行控制台的SQL&#xff0c;查询出来的total数量是对的&#xff0c;很奇怪分页的total设置为查询到的记录数。 怀疑对list.stream操作&#xff0c;影响了分页&#xff0c;代码发现确实是这样&#xff0c;debug&#xff0c;居然…

amtlib.dll打不开怎么办?一键修复丢失amtlib.dll方法

电脑丢失amtlib.dll文件是什么情况&#xff1f;出现amtlib.dll打不开怎么办&#xff1f;这样的情况有什么解决方法呢&#xff1f;今天就和大家聊聊amtlib.dll文件同时教大家一键修复丢失amtlib.dll方法&#xff1f;一起来看看amtlib.dll文件丢失会有哪些方法修复&#xff1f; a…

Unity3D雨雪粒子特效(Particle System)

系列文章目录 unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、下雨的特效1-1.首先就是创建一个自带的粒子系统,整几张贴图,设置一下就能实现想要的效果了1-2 接着往下看视频效果 &#x1f449;二、下雪的特效&#x1f449;三、下雪有积雪的效果3-1 先把控…

IDEA项目通过 tomcat运行报错: 404 请求的资源不可用

SpringBootVue项目 IDEA运行 Tomcat&#xff0c;自动打开网页报错 HTTP状态 404 - 未找到 类型 状态报告 消息 请求的资源[/WarehouseManagerApi_war/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/9.0.89 但是运行访问 …

【Linux】Centos7.6忘记root密码重置

一、重启linux按e进入到编辑模式 二、在“ro”这行末尾加上init/bin/sh 三、按Ctrlx进入到单用户模式 #系统启动后&#xff0c;根文件系统会处于只读模式。要将其重新挂载为读写模式 mount -o remount,rw / #修改root密码 passwd root #确保 SELinux 在下一次启动时重新标记文…

自用网站合集

总览 线上工具-图片压缩 TinyPNG线上工具-url参数解析 线上工具-MOV转GIF UI-Vant微信小程序版本其他-敏捷开发工具 Leangoo领歌 工具 线上工具-图片压缩 TinyPNG 不能超过5m&#xff0c;别的没啥缺点 线上工具-url参数解析 我基本上只用url参数解析一些常用的操作在线…

Flask-SQLAlchemy的使用【二】

目录 一.查询 1.1查询语句的格式 1.2查询过滤器 1.3查询执行器 1.4具体例子 1.4.1查询有多少个用户 1.4.2查询第一个用户 1.4.3查询id为4的用户 1.4.4查询id为4title为4的记录 1.4.5查询id为4或者title为4的记录 1.4.6查询id为[1,3,5,7,9]的记录 1.4.7查询所有记录&a…

java面试(JVM)

JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收机制 JVM由哪些部分组成&#xff0c;运行流程是什么 什么是程序计数器 程序计数器…

ABB机器人---基础编程

目录 第一章 代码解释 1.1 基础代码 1.1.2 关于 VAR robtarget pos 1.1.3 关于四元数 1.2 机器人初始化程序 1.3 配置通信 (ProfiNet 示例&#xff0c;ABB RAPID) 1.4 设置干涉区 (ABB RAPID) 1.5 示教轨迹和自动过程 (ABB RAPID) 1.6 配置抓手并进行抓取操作 (ABB RA…

Linux: network: TCP: zero window size/window full 示例

最近遇到一个问题,当前机器的CPU使用率非常高,然后导致其中一个程序处理socket的数据过慢,然后出现下面的zero的示例。 下面是在接收buff用光的时候,发出的 TCP zeroWindows的消息 这种问题就是内存,CPU,网速之间的性能取舍。具体解决的话,需要看具体的需要是什么样的?…

他用AI,抄袭了我的AI作品

《大话西游》里面有一句经典台词&#xff1a;每个人都有一个妈&#xff0c;但是“你妈就一定是你妈吗&#xff1f;” 用AI创作的艺术作品&#xff0c;也走进类似的困境&#xff1a;如何证明你用AI生成的作品&#xff0c;就是你的作品&#xff1f; 近日&#xff0c;腾讯科技独…

三星固态硬盘870evo与qvo的区别

三星固态硬盘870evo与qvo的区别 三星固态硬盘870 EVO和QVO的区别主要有以下几点&#xff1a; 1闪存颗粒不同&#xff1a;三星固态QVO采用的是QLLC闪存颗粒&#xff0c;而三星固态870 EVO则是TLC闪存颗粒。 2传输速度不同&#xff1a;三星固态QVO传输速度比较低&#xff0c;而三…

电路仿真软件:点亮教学新篇章,十大便利助力高效学习

在信息化时代的浪潮中&#xff0c;电路仿真软件以其独特的优势&#xff0c;逐渐在教学领域崭露头角。它不仅能够帮助学生更好地理解电路知识&#xff0c;还能提升教师的教学效果。接下来&#xff0c;让我们一起探讨电路仿真软件对教学带来的十大便利。 一、直观展示电路原理 电…

Unity | 框架MVC

目录 一、MVC介绍 二、搭建UI界面 三、代码实现 1.Model层 2.View层 3.Controller层 四、MVC框架测试 五、知识补充 一、MVC介绍 model&#xff1a;数据层。界面展示的数据&#xff08;需要进行初始化、更新、保存、事件通知等操作&#xff09;&#xff0c;单例模式&am…

【全开源】沃德商协会管理系统源码(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0c;有效快速建立…

公司废弃的2014年群晖 DS215J 被我打包回家了,试玩一下

文章目录 简介安装查看存储、cpu、内存等信息DMS 学习video station 简介 群晖DS215J https://www.datastoreworks.com/DS215j.asp 下载&#xff1a;chrome-extension://oemmndcbldboiebfnladdacbdfmadadm/https://global.download.synology.com/download/Document/Hardware/…

ATmega328P加硬件看门狗MAX824L看门狗

void Reversewdt(){ //硬件喂狗&#xff0c;11PIN接MAX824L芯片WDIif (digitalRead(11) HIGH) {digitalWrite(11, LOW); //低电平} else {digitalWrite(11, HIGH); //高电平 }loop增加喂狗调用 void loop() { …… Reversewdt();//喂狗 }

Superset,基于浏览器的开源BI工具

BI工具是数据分析的得力武器&#xff0c;目前市场上有很多BI软件&#xff0c;众所周知的有Tableau、PowerBI、Qlikview、帆软等&#xff0c;其中大部分是收费软件或者部分功能收费。这些工具一通百通&#xff0c;用好一个就够了&#xff0c;重要的是分析思维。 我一直用的Tabl…

vue3中element-plus下拉菜单与图标的使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…