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


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;}@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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(),};}@Overridepublic void doOperation(int choice, BookList bookList) {this.operations[choice].work(bookList);}@Overridepublic 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()};}@Overridepublic 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.mzph.cn/news/169838.shtml

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

相关文章

音频——S/PDIF

文章目录 BMC 编码字帧(sub-frame)格式帧(frame)格式参考S/PDIF 是 SONY 和 Philips 公司共同规定的数字信号传输规范,其实就是在 AES/EBU 上进行改动的家用版本。IEC60958 的标准规范囊括了以上两个规范。spdif 采用了双相符号编码(BMC),是将时钟信号和数据信号混合在一起…

强化学习,快速入门与基于python实现一个简单例子(可直接运行)

文章目录 一、什么是“强化学习”二、强化学习包括的组成部分二、Q-Learning算法三、迷宫-强化学习-Q-Learning算法的实现全部代码&#xff08;复制可用&#xff09;可用状态空间检查是否超出边界epsilon 的含义更新方程 总结 一、什么是“强化学习” 本文要记录的大概内容&am…

力扣:180. 连续出现的数字(Python3)

题目&#xff1a; 表&#xff1a;Logs ---------------------- | Column Name | Type | ---------------------- | id | int | | num | varchar | ---------------------- 在 SQL 中&#xff0c;id 是该表的主键。 id 是一个自增列。 找出所有至少连续…

Java 网络编程

文章目录 UDP Socket APIDatagramSocketDatagramPacket例子&#xff1a;UDP版本的回显服务器-客户端 TCP Socket APIServerSocketSocket例子&#xff1a;TCP版本的回显服务器-客户端 UDP Socket API DatagramSocket 这是一个 socket 类&#xff0c;本质上相当于一个文件&…

C3 多媒体查询

文章目录 前言CSS3 多媒体查询CSS2 多媒体类型CSS3 多媒体查询浏览器支持多媒体查询语法CSS3 多媒体类型多媒体查询简单实例 媒体类型媒体功能更多实例后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;CSS &#x1f431;‍&#x1f453;博…

SpringBoot 2 系列停止维护,Java8 党何去何从?

SpringBoot 2.x 版本正式停止更新维护&#xff0c;官方将不再提供对 JDK8 版本的支持 SpringBoot Logo 版本的新特性 3.2 版本正式发布&#xff0c;亮点包括&#xff1a; 支持 JDK17、JDK21 版本 对虚拟线程的完整支持 JVM Checkpoint Restore&#xff08;Project CRaC&…

Django之Auth模块

Auth模块引入 我们在创建一个Django项目之后&#xff0c;直接执行数据库迁移命令会自动生成很多表 django_sessionauth_userDjango在启动之后就可以直接访问admin路由&#xff0c;需要输入用户名和密码&#xff0c;数据参考的就是auth_user表,并且必须是管理员用户才能进入 【…

quickapp_快应用_某些css样式不兼容问题

样式问题 引入css样式文件[1] 单位px [2]选择器[3]盒模型[4]样式布局-默认弹性布局且不可取消[5-1]样式切换-类名的动态切换-语法[5-2]样式切换 - 类名的动态切换-目标元素[5-3] 样式切换 - 行内样式动态切换[6]background[7]overflow[8]border-radius[9]盒子阴影[10] 定位erro…

【调度算法】开放车间调度问题遗传算法(failed)

省流&#xff1a;这是一个错误的代码备份&#xff0c;如果你需要可以直接运行的完整代码&#xff0c;请移步GitHub。 本以为手搓了一个单机调度和并行机调度的遗传算法&#xff0c;就可以尝试写开放车间的遗传算法了&#xff0c;结果手搓了两天&#xff0c;开始作业时间和结束…

1、Mysql架构与历史

Mysql逻辑架构 最上层是服务并不是Mysql所独有的&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构&#xff0c;比如连接处理&#xff0c;授权认证&#xff0c;安全等。 第二层是Mysql比较有意思的部分。大多数Mysql的核心服务都在这一层&#xff0c;…

torch.view()和.reshape()

view只能作用在连续的张量上&#xff08;张量中元素的内存地址是连续的&#xff09;。而reshape连续or非连续都可以。 调用x.reshape的时候&#xff0c;如果x在内存中是连续的&#xff0c;那么x.reshape会返回一个view&#xff08;原地修改&#xff0c;此时内存地址不变…

用户与组管理:如何在服务器系统中管理用户和权限

你是否想过&#xff0c;当你登录到一个服务器系统时&#xff0c;你是如何被识别和授权的&#xff1f;你是否知道&#xff0c;你可以通过创建和管理用户和组来简化和优化你的系统管理工作&#xff1f;你是否想了解一些常用的用户和组管理命令和技巧&#xff1f;如果你的答案是肯…

c语言实现简单的string

文章目录 前言一、注意事项二、代码valgrind扫描总结 前言 在c语言中利用面向对象的编程方式&#xff0c;实现类似c中的string类。 一、注意事项 所有与string结构体相关的函数全都没有返回值。 在c中&#xff0c;当产生临时对象时编译器会自动的加入析构函数&#xff0c;销毁…

Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践

模板是 Walrus 的核心功能之一&#xff0c;模板创建完成后用户可以重复使用&#xff0c;并在使用过程中逐渐沉淀研发和运维团队的最佳实践&#xff0c;进一步简化服务及资源的部署。用户可以使用 HCL 语言自定义创建模板&#xff0c;也可以一键复用 Terraform 社区中上万个成熟…

云原生安全工具汇总(docker、k8s、Kubernetes、Git仓库)

目录 Metarget:云原生靶机环境 CDK:容器环境定制的渗透测试工具 container-escape-check:容器逃逸检测

synchronized在代码中的用法

synchronized可以对两种对象加锁&#xff1a;实例对象和类对象。下边先说对类对象加锁的代码&#xff1a; 第1是修饰static方法&#xff0c;第2种是直接锁类的class对象&#xff1b; /*** title: SynchronizedStaticDemo1* description: synchronized 对类加锁1* author: * d…

【Python百宝箱】Python数据探险:Excel与数据科学的完美结合

前言 在当今信息爆炸的时代&#xff0c;数据处理和分析已经成为各行各业不可或缺的一部分。在众多数据处理工具中&#xff0c;Python以其简洁而强大的语法成为数据科学家和分析师的首选之一。本文将深入探讨与电子表格处理相关的Python库&#xff0c;介绍它们的功能、应用场景…

批量按顺序1、2、3...重命名所有文件夹里的文件

最新&#xff1a; 最快方法&#xff1a;先用这个教程http://文件重命名1,2......nhttps://jingyan.baidu.com/article/495ba841281b7079b20ede2c.html再用这个教程去空格&#xff1a;利用批处理去掉文件名中的空格-百度经验 (baidu.com) 以下为原回答 注意文件名有空格会失败…

LeetCode Hot100 105.从前序与中序遍历序列构造二叉树

题目&#xff1a;给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 代码&#xff1a; class Solution {private Map<Integer, Integer> indexM…

ESP32网络开发实例-远程Web串口监视器

远程Web串口监视器 文章目录 远程Web串口监视器1、应用介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将构建一个 ESP32 网络服务器,用作远程串行监视器。 基于 Web 的串行监视器的工作方式与通常用于调试目的的 Arduino IDE 串行监视器的工作方式相同。 1、应用介绍 …