Java : 图书管理系统

图书管理系统的作用:

高效的图书管理 图书管理系统通过自动化管理,实现了图书的采编、编目、流通管理等操作的自动化处理,大大提高了图书管理的效率和准确性。 工作人员可以通过系统快速查找图书信息,实时掌握图书的借还情况,避免了繁琐的手工操作和人为错误。

主要功能:

  1. 图书管理:添加、删除、修改图书信息。
  2. 用户管理:用户注册、登录功能。
  3. 借阅与归还:用户可以借阅和归还书籍。
  4. 查询功能:可以根据书名或作者查询书籍信息。

通过不同包的串通和引用,来实现一个简单的图书管理系统

 

代码实现: 

//定义一个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;}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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isBorrowed=" + isBorrowed +'}';}
}
public class BookList {private Book[] books=new Book[100];private int usedSize;public BookList(){books[0]=new Book("三国演义","罗贯中",10,"小说");books[1]=new Book("西游记","吴承恩",18,"小说");books[2]=new Book("红楼梦","曹雪芹",14,"小说");this.usedSize=3;}public Book getBook(int pos) {return books[pos];}public void setBook(int pos, Book book) {this.books[pos] = book;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book[] getBooks() {return books;}public void setBooks(Book[] books) {this.books = books;}
}//再定义一个user包,包括管理员的类和普通用户的类public abstract class User {public String name;public IOperation[] iOperations;public User(String name){this.name=name;}public abstract int menu();public void doIOperation(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 FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation()};}@Overridepublic int menu() {System.out.println("****管理员菜单****");System.out.println("****************");System.out.println("0.退出系统");System.out.println("1.查找图书");System.out.println("2.新增图书");System.out.println("3.删除图书");System.out.println("4.显示图书");System.out.println("****************");Scanner scanner=new Scanner(System.in);System.out.println("请输入你的操作");int choice=scanner.nextInt();return choice;}
}public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations=new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation(),};}@Overridepublic int menu() {System.out.println("****普通用户菜单****");System.out.println("******************");System.out.println("0.退出系统");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("******************");Scanner scanner=new Scanner(System.in);System.out.println("请输入你的操作");int choice=scanner.nextInt();return choice;}}在定义一个operation包,包括一个接口和各种操作的类public interface IOperation {void work(BookList bookList);
}public class AddOperation implements IOperation{@Overridepublic 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 book=new Book(name,author,price,type);for (int i = 0; i < currentSize; i++) {Book book1=bookList.getBook(i);if(book1.getName().equals(name)){System.out.println("有这本书不能插入");return;}}bookList.setBook(currentSize,book);bookList.setUsedSize(currentSize+1);}
}public class BorrowOperation implements IOperation{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)){if (book.isBorrowed()){System.out.println("该书已被借出");return;}book.setBorrowed(true);System.out.println("借阅成功");return;}}System.out.println("没有你要借阅的书本");}
}public class DelOperation implements IOperation{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();int pos=-1;int i = 0;for (; i <currentSize; i++) {Book book=bookList.getBook(i);if (book.getName().equals(name)){pos=i;break;}}if (pos==currentSize){System.out.println("没有你要删除的书籍");return;}for (int j = 0; j < currentSize; j++) {Book book=bookList.getBook(j+1);bookList.setBook(j,book);}bookList.setUsedSize(currentSize-1);System.out.println("删除成功");}
}public class ExitOperation implements IOperation{public void work(BookList bookList) {System.out.println("退出系统");System.exit(0);}
}public class FindOperation implements IOperation{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)){System.out.println("找到了");System.out.println(book);return;}}System.out.println("没有找到这本书");}
}public class ReturnOperation implements IOperation{@Overridepublic 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("归还成功");return;}}System.out.println("没有你要归还的书本");}
}public class ShowOperation implements IOperation{@Overridepublic 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);}}
}最后一个类来串通整个操作过程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();User user=login();while (true) {int choice = user.menu();user.doIOperation(choice, bookList);}}
}

希望能对大家有所帮助!!!!!

 

 

 

 

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

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

相关文章

【Java】Java中接口与内部类详解

目录 引言 一、接口&#xff08;Interface&#xff09; 1.1 接口的定义 1.1.1 接口的特点 1.2 接口的实现 1.3 接口的继承 1.4 接口的注意事项 1.5 代码示例 二、内部类&#xff08;Inner Class&#xff09; 2.1 内部类特点 2.2 成员内部类 2.2.1 对象的创建 2.…

红外热成像应用场景!

1. 电力行业 设备故障检测&#xff1a;红外热成像仪能够检测电气设备&#xff08;如变压器、电线接头&#xff09;的过热现象&#xff0c;及时发现并定位故障点&#xff0c;预防火灾等安全事故的发生。 水电站查漏&#xff1a;在水电站中&#xff0c;红外热成像仪可用于快速查…

【LLM学习之路】9月22日 第九天 自然语言处理

【LLM学习之路】9月22日 第九天 直接看Transformer 第一章 自然语言处理 自然语言处理发展史 只要看的足够多&#xff0c;未必需要理解语言 统计语言模型发展史 统计语言模型&#xff1a; 判断一个句子是否合理&#xff0c;就计算这个句子会出现的概率 缺点是句子越长越…

掌握Python办公自动化,轻松成为职场高效达人

大家好&#xff0c;今天我们来聊聊为什么要学习和了解Python办公自动化&#xff1f; "自动化应用于高效运营将提高效率" ——比尔盖茨 在日常的工作中&#xff0c;存在很多重复性、规律性的工作。虽然现在有很多办公软件能够在一些方面提高工作效率&#xff0c;但无法…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及&#xff0c;获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析&#xff0c;以提取有用的信息&#xff0c;进行进一步的应用。遥感图像切片技术应运而生&#xff0c;该技术可以将大型遥感图像分割成…

python-在PyCharm中使用PyQt5

文章目录 1. 安装 PyQt5 和QtTools2. QtDesigner 和 PyUIC 的环境配置2.1 在 PyCharm 添加 Create Tools2.2 添加 PyUIC 工具 3. 创建ui界面4. 使用python调用ui界面参考文献 1. 安装 PyQt5 和QtTools QT 是最强大的 GUI 库之一&#xff0c;PyQt5 是 Python 绑定 QT5 应用的框…

增强GPT4v的Grounding能力,video-level

开源链接&#xff1a; appletea233/AL-Ref-SAM2: AL-Ref-SAM 2: Unleashing the Temporal-Spatial Reasoning Capacity of GPT for Training-Free Audio and Language Referenced Video Object Segmentation (github.com) In this project, we propose an Audio-Language-Refe…

手写数字识别案例分析(torch,深度学习入门)

在人工智能和机器学习的广阔领域中&#xff0c;手写数字识别是一个经典的入门级问题&#xff0c;它不仅能够帮助我们理解深度学习的基本原理&#xff0c;还能作为实践编程和模型训练的良好起点。本文将带您踏上手写数字识别的深度学习之旅&#xff0c;从数据集介绍、模型构建到…

vue Echart使用

一、在vue中使用Echarts 1.安装Echarts npm install echarts --save2.准备一个呈现图表的盒子 给盒子起名字是建议使用id选择器 这个盒子通常来说就是我们熟悉的 div &#xff0c;这个 div 决定了图表显示在哪里&#xff0c;盒子一定要指定宽和高 <div id"main&quo…

性能测试问题诊断-接口耗时高

问题现象&#xff1a;近期发现每晚跑的定时压测任务&#xff0c;压测结果中&#xff0c;各接口耗时变高&#xff08;原来99耗时<3秒&#xff0c;当前99耗时>20秒)。 问题排查&#xff1a; 查看jmeter 生成的结果图&#xff0c;发现压测2分钟后出现接口耗时变高情况。如下…

【ShuQiHere】 探索数据挖掘的世界:从概念到应用

&#x1f310; 【ShuQiHere】 数据挖掘&#xff08;Data Mining, DM&#xff09; 是一种从大型数据集中提取有用信息的技术&#xff0c;无论是在商业分析、金融预测&#xff0c;还是医学研究中&#xff0c;数据挖掘都扮演着至关重要的角色。本文将带您深入了解数据挖掘的核心概…

如何快速上手一个Github的开源项目

程序研发领域正是有一些热衷开源的小伙伴&#xff0c;技能迭代才能如此的迅速&#xff0c;因此&#xff0c;快速上手一个GitHub上的开源项目&#xff0c;基本上已经变成很个程序员小伙伴必须掌握的技能&#xff0c;因为终究你会应用到其中的一个或多个项目&#xff0c;帮助自己…

【计算机网络篇】电路交换,报文交换,分组交换

本文主要介绍计算机网络中的电路交换&#xff0c;报文交换&#xff0c;分组交换&#xff0c;文中的内容是我认为的重点内容&#xff0c;并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 目录 &#x1f3af;一.划分…

【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】

卸载 MySQL 参考文章&#xff1a; 完美解决Mysql彻底删除并重装_怎么找到mysql并卸载-CSDN博客使用命令卸载mysql_卸载mysql服务命令-CSDN博客 先管理员方式打开 cmd &#xff0c;切换到 MySQL 安装目录的 bin 文件夹下&#xff0c;执行如下命令&#xff0c;删除 MySQL 服务mys…

Blender软件三大渲染器Eevee、Cycles、Workbench对比解析

Blender 是一款强大的开源3D制作平台&#xff0c;提供了从建模、雕刻、动画到渲染、后期制作的一整套工具&#xff0c;广泛应用于电影、游戏、建筑、艺术等领域。 渲染101云渲染云渲6666 相比于其他平台&#xff0c;如 Autodesk Maya、3ds Max 或 Cinema 4D&#xff0c;Blende…

neo4j关系的创建删除 图的删除

关系的创建和删除 关系创建 CREATE (:Person {name:"jack"})-[:LOVE]->(:Person {name:"Rose"})已有这个关系时&#xff0c;merge不起效果 MERGE (:Person {name:"Jack" })-[:LOVE]->(:Person {name:"Rose"})关系兼顾节点和关…

C++ 进阶之路:非类型模板参数、模板特化与分离编译详解

目录 非类型模版参数 类型模板参数 非类型模板参数 非类型模板参数的使用 模板的特化 函数模板的特化 类模板的特化 全特化与偏特化 偏特化的其它情况 模板的分离编译 什么是分离编译 为什么要分离编译 为什么模板不能分离编译 普通的类和函数都是可以分离编译的…

【学习笔记】数据结构(六 ①)

树和二叉树 &#xff08;一&#xff09; 文章目录 树和二叉树 &#xff08;一&#xff09;6.1 树(Tree)的定义和基本术语6.2 二叉树6.2.1 二叉树的定义1、斜树2、满二叉树3、完全二叉树4、二叉排序树5、平衡二叉树&#xff08;AVL树&#xff09;6、红黑树 6.2.2 二叉树的性质6.…

通用大模型 vs 垂直大模型:谁将赢得AI战场?

引言 在人工智能领域&#xff0c;大模型的快速发展引发了广泛的关注和讨论。大模型&#xff0c;尤其是基于深度学习和海量数据训练的模型&#xff0c;已经在多个领域展现出强大的能力。从自然语言处理、图像识别到自动驾驶和医疗诊断&#xff0c;AI大模型正深刻改变着我们的生…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…