图书管理系统的实现

一、系统的介绍

  1. 进入图书管理系统的用户分为:管理员用户和普通用户。
  2. 管理员用户所执行的操作有:查找图书、新增图书、删除图书、显示图书、退出系统。
  3. 普通用户所执行的操作有:查找图书、借阅图书、归还图书、退出系统。

二、各模块代码的实现 

1、创建接口 

各操作类都要实现该接口,以便后期组织各操作类的对象: 

package operation;import Book.BookList;public interface IOperation {void work(BookList bookList);
}

2、创建Book包

Book包里面存放book类及BookList类,相关代码如下:  

2.1 book类代码

package 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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +( (isBorrowed == true)?", 已被借出":", 未被借出")//", isBorrowed=" + isBorrowed++'}';}
}

2.2 BookList类 

BookList类是用来实现存放图书的功能的,相当于书架。在这里我设置的书架上最多能存放10本书( int DEFAULT_CAPACITY = 10;),并且书架上已存有三国演义、西游记、红楼梦三本书。

package Book;public class BookList {private book[] books;private int usedSize;  //记录当前书架上实际存放的书的数量private static final int DEFAULT_CAPACITY = 10;public BookList() {this.books = new book[DEFAULT_CAPACITY];this.books[0] = new book("三国演义","罗贯中",10,"小说");this.books[1] = new book("西游记","吴承恩",9,"小说");this.books[2] = new book("红楼梦","曹雪芹",19,"小说");this.usedSize = 3;}public book getBook(int pos) {return books[pos];}public void setBooks(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;}
}

3、 创建operation包

 operation包里面存放实现对图书进行操作的类,相关代码如下:

3.1 AddOperation类

该类实现新增图书的功能 

package operation;
import Book.BookList;
import Book.book;
import java.util.Scanner;public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("新增图书");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);//检查数组中有没有 这本书int currentSize = bookList.getUsedSize();for(int i = 0;i<currentSize;i++) {book book1 = bookList.getBook(i);if(book1.getName().equals(name)) {System.out.println("已有这本书,不再进行存放了!");return;}}if(currentSize==bookList.getBooks().length) {System.out.println("书架满了!");}else {bookList.setBooks(currentSize,book);bookList.setUsedSize(currentSize+1);}}
}

3.2 DelOperation类

 该类实现删除图书的功能 

package operation;
import Book.BookList;
import Book.book;
import java.util.Scanner;public class DelOperation 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();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;}//删除图书int j = pos;for (;j<currentSize-1;j++) {bookList.setBooks(j,bookList.getBook(j+1));}bookList.setBooks(j,null);bookList.setUsedSize(currentSize-1);}
}

3.3 ShowOperation类 

  该类实现显示图书的功能 

package operation;
import Book.BookList;
import Book.book;
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);}}
}

 3.4 BorrowOperation类

该类实现普通用户借阅图书的功能 

package operation;
import Book.BookList;
import Book.book;
import java.util.Scanner;public class BorrowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要借阅的图书:");String name = scanner.nextLine();int currenSize = bookList.getUsedSize();int i=0;for (;i<currenSize;i++) {book book = bookList.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(true);System.out.println("借阅成功!");System.out.println(book);return;}}if (i == currenSize) {System.out.println("没有你要借阅的图书!");}}
}

3.5 ReturnOperation类 

该类实现普通用户归还图书的功能 

package operation;
import Book.BookList;
import Book.book;import java.util.Scanner;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 currenSize = bookList.getUsedSize();int i=0;for (;i<currenSize;i++) {book book = bookList.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(false);System.out.println("归还成功!");System.out.println(book);return;}}System.out.println("你归还的图书不存在!");}
}

3.6 FindOperation类 

该类实现查找图书的功能 

package operation;
import Book.BookList;
import Book.book;
import java.util.Scanner;public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("查找图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的图书:");String name = scanner.nextLine();int currenSize = bookList.getUsedSize();int i = 0;for (;i<currenSize;i++) {book book = bookList.getBook(i);if(book.getName().equals(name)) {System.out.println("找到了,信息如下:");System.out.println(book);return;}}if (i >= currenSize) {System.out.println("你要找的书不存在!");}}
}

3.7 ExitOperation类

该类实现退出程序的功能 

package operation;
import Book.BookList;
public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出程序");System.exit(0);}
}

4、创建user包 

user包里面装入User类、NomalUser类和AdminUser类, NomalUser类(普通用户)和AdminUser类(管理员用户)分别继承User类。

4.1 User类

package user;import Book.BookList;
import operation.IOperation;public abstract class User {protected String name;protected IOperation[] iOperation;public User(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice, BookList bookList) {iOperation[choice].work(bookList);}
}

4.2 NomalUser类

package user;
import operation.IOperation;
import operation.*;
import java.util.Scanner;
public class NomalUser extends User{public NomalUser(String name) {super(name);this.iOperation = 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;}
}

4.3 AdminUser类 

package user;
import operation.IOperation;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User{public AdminUser(String name) {super(name);this.iOperation = new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation(),};}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("**********************");Scanner scanner = new Scanner(System.in);System.out.println("请输入你的操作:");int choice = scanner.nextInt();return choice;}
}

三、 主方法的实现

import Book.BookList;
import user.AdminUser;
import user.NomalUser;
import user.User;import java.util.Scanner;
public class Main {public static User login() {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 NomalUser(name);}}public static void main(String[] args) {BookList bookList = new BookList();User user = login();while (true) {int choice = user.menu();// System.out.println("choice:"+choice);user.doOperation(choice,bookList);}}
}

这个图书管理系统的缺点:

  • 没有做到持久化的存储(比如,管理员增加了一本图书后,在下一次运行的时候,增加的图书就不存在了
  • 只是用到了数组

  

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

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

相关文章

Docker数据卷操作

数据卷 是一个可供一个或多个容器使用的特殊目录&#xff0c;它绕过 UnionFS&#xff0c;可以提供很多有用的特性&#xff1a; 数据卷 可以在容器之间共享和重用 对 数据卷 的修改会立马生效 对 数据卷 的更新&#xff0c;不会影响镜像 数据卷 默认会一直存在&#xff0c;即…

Umi + React + Ant Design Pro + TS 项目搭建

新建项目目录 mkdir 【项目名称】在对应目录 D:\react\demo 中&#xff0c;安装 Umi 脚手架&#xff1a; yarn create umi接下来&#xff0c;安装将要用到的相关依赖 umijs/plugins&#xff1a; npm i umijs/plugins -Dumijs/plugins 是 Umi 的官方插件集&#xff0c;包含了…

Excel 数据透视表

参考&#xff1a; https://blog.csdn.net/weixin_47267618/article/details/118466565

每日一题AC

4.小花和小草正在沙滩上玩挖沙洞的游戏。他们划了一条长度为n米的线作为挖沙洞的参考线路&#xff0c;小花和小草分别从两头开始沿着划好的线开始挖洞&#xff0c;小花每隔a米挖一个洞&#xff0c;小草每隔b米挖一个洞&#xff0c;碰到已经挖过洞的就不需要再挖了。那么&#x…

排序算法——冒泡排序

一、介绍&#xff1a; 冒泡排序原理就是从第一个元素开始&#xff0c;比较其后边的一个元素的大小&#xff0c;按照排序方式进行交换位置&#xff0c;直到将所有元素的顺序排列好为止。演示如下&#xff1a; 视频演示&#xff1a; 冒泡排序演示_网络游戏热门视频 (bilibili.co…

Linux 安全 - DAC机制

文章目录 一、安全简介二、DAC2.1 UNIX 的自主访问控制2.2 Linux 的自主访问控制 三、进程凭证3.1 简介3.2 uid/gid3.3 系统调用 四、客体标记4.1 简介4.2 系统调用 五、UGO规则源码分析参考资料 一、安全简介 计算机系统应对安全挑战的办法大致有四种&#xff1a;隔离、控制、…

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…

GEO生信数据挖掘(七)差异基因分析

上节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。本节延续上个数据&#xff0c;进行了差异分析。 差异分析 计算差异指标step12 加载…

蓝桥杯 题库 简单 每日十题 day13

01 乘积尾零 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将 所填结果输出即可。如下的10行数据&#xff0c;每行有10个整数&#xff0c;请你求出它们的乘积的末尾有多少个零&#xff1f; 5650 4542 3554 473 946 4114 3871 9073 90 …

汽车RNC主动降噪算法DSP C程序实现

汽车RNC主动降噪算法C程序 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,车载

rust 智能指针

智能指针 Box Box 的使用场景 由于 Box 是简单的封装&#xff0c;除了将值存储在堆上外&#xff0c;并没有其它性能上的损耗。而性能和功能往往是鱼和熊掌&#xff0c;因此 Box 相比其它智能指针&#xff0c;功能较为单一&#xff0c;可以在以下场景中使用它&#xff1a; 特…

Flink之DataStream API开发Flink程序过程与Flink常见数据类型

开发Flink程序过程与Flink常见数据类型 DataStream APIFlink三层APIDataStream API概述 开发Flink程序过程添加依赖创建执行环境执行模式创建Data Source应用转换算子创建Data Sink触发程序执行示例 Flink常见数据类型基本数据类型字符串类型时间和日期类型数组类型元组类型列表…

【通信系列 6 -- AT 命令介绍】

文章目录 1. 背景介绍1.2 AT的命令格式1.3 AT指令用法1.3.1 指令执行结果 1.2 CP 常用AT指令1.2.1 CP 模式设置1.2.2 网络相关1.2.3 IP获取1.2.4 Band 设置1.2.5 电话相关1.2.6 SIM卡检测1.2.7 cmwap 和cmnet1.2.8 AT 写 IMEI 1. 背景介绍 AT 命令一般分为三种&#xff1a; C…

1.1 向量与线性组合

一、向量的基础知识 两个独立的数字 v 1 v_1 v1​ 和 v 2 v_2 v2​&#xff0c;将它们配对可以产生一个二维向量 v \boldsymbol{v} v&#xff1a; 列向量 v v [ v 1 v 2 ] v 1 v 的第一个分量 v 2 v 的第二个分量 \textbf{列向量}\,\boldsymbol v\kern 10pt\boldsymbol …

【Java】如何将File转换成MultipartFile

假如你把你的后端项目部署在服务器上的时候&#xff0c;然后你要去读取某个路径下的文件&#xff0c;然后你就要提供文件的路径&#xff0c;然后获取到该文件对象&#xff0c;但是你需要将当前文件对象File转换成MultipartFile再发送http请求传递到其他服务器上&#xff0c;这样…

GPIO子系统(三)

1&#xff0c;简述 GPIO 资源是相对来说较为简单&#xff0c;而且比较通用&#xff08;比如 LED 灯&#xff09;&#xff0c;而 Linux 的 GPIO 驱动属于 Linux Driver 中较为容易上手的部分&#xff0c;但是简单归简单&#xff0c;在 Linux 系统中&#xff0c;要使用 GPIO 资源…

mysql.mongoDb,neo4j数据库对比

Mysql与MongoDb和Neo4j的一些对比 主要区别 MySQL&#xff1a; 1.MySQL是一种关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛用于处理结构化数据。 2.它支持SQL语言&#xff0c;具备成熟的事务处理和数据一致性能力。 3.MySQL适用于大多数传统的基于表格…

UE4和C++ 开发-头文件(.h) 和实现文件(.cpp)区别

.h文件和.cpp文件是C程序中的两种不同类型的文件。 .h文件通常包含类、函数和变量的声明&#xff0c; 而.cpp文件包含这些声明的实现。 .h文件中的声明通常是公共的&#xff0c;可以被其他文件包含和使用。.cpp文件中的实现通常是私有的&#xff0c;只能在该文件中使用。 在…

高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求

今天我将与大家分享一种强大的网络调试技巧&#xff0c;那就是使用Charles Proxy来捕获和修改HTTP/HTTPS请求。如果您是一位开发人员或者网络调试爱好者&#xff0c;那么这个工具肯定对您有着很大的帮助。接下来&#xff0c;让我们一起来学习如何使用Charles Proxy进行高级网络…

区块链加密虚拟货币交易平台安全解决方案

区块链机密货币交易锁遭入侵&#xff0c;安全存在隐患。使用泰雷兹Protect server HSM加密机&#xff0c;多方位保护您的数据&#xff0c;并通过集中化管理&#xff0c;安全的存储密钥。 引文部分&#xff1a; 损失7000万美元!黑客入侵香港区块链加密货币交易所 2023年9月&…