Java:图书管理系统

目录

一.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;}@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic void work(BookList bookList) {System.out.println("显示图书");int currentSize = bookList.getUsedSize();//3for (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.mzph.cn/web/15036.shtml

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

相关文章

Linux环境基础开发工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 软件包管理器-yum 什么是软件包及安装方式 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理…

数据结构——栈(详细分析)

目录 &#x1f349;引言 &#x1f349;栈的本质和特点 &#x1f348;栈的基本操作 &#x1f348;栈的特点 &#x1f34d;后进先出 &#x1f34d;操作受限 &#x1f34d;动态调整 &#x1f348;栈的优缺点 &#x1f34d;优点 &#x1f34d;缺点 &#x1f349;栈的应用…

SQOOP详细讲解

SQOOP安装及使用 SQOOP安装及使用SQOOP安装1、上传并解压2、修改文件夹名字3、修改配置文件4、修改环境变量5、添加MySQL连接驱动6、测试准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库impo…

数据结构------二叉树经典习题2

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1.非递归的前序遍历 1.用栈来实现 2,前序遍历是根左右, 先是根节点入栈,,然后不为空时向左遍历,当为空时就返回向右遍历,右为空时直接出栈,依次循环即可. public void preOrderNot(TreeNode root){Stack<TreeNo…

科技赋能,打破视障人士的沟通壁垒

在探索如何增强盲人群体的社会参与度与幸福感的旅程中&#xff0c;盲人社交能力提升策略成为了不容忽视的一环。随着科技的不断进步&#xff0c;像“蝙蝠避障”这样的辅助软件&#xff0c;不仅在日常出行中为盲人提供了实时避障和拍照识别的便利&#xff0c;也在无形中为他们拓…

华为数通 HCIP-Datacom(H12-821)题库

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 BGP路由的Update消息中可不包含以下哪些属性&#xff1f; A、Local Preference B、AS Path C、MED D、Origin 答案&#xff1a;AC 解析&#xff1a;as-path和ori…

Java17 --- SpringCloud之Sentinel

目录 一、Sentinel下载并运行 二、创建8401微服务整合Sentinel 三、流控规则 3.1、直接模式 3.2、关联模式 3.3、链路模式 3.3.1、修改8401代码 3.3.2、创建流控模式 3.4、Warm UP&#xff08;预热&#xff09; ​编辑 3.5、排队等待 四、熔断规则 4.1、慢调用比…

【C++】09.vector

一、vector介绍和使用 1.1 vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改…

操作系统实验四 (综合实验)设计简单的Shell程序

前言 因为是一年前的实验&#xff0c;很多细节还有知识点我都已经遗忘了&#xff0c;但我还是尽可能地把各个细节讲清楚&#xff0c;请见谅。 1.实验目的 综合利用进程控制的相关知识&#xff0c;结合对shell功能的和进程间通信手段的认知&#xff0c;编写简易shell程序&…

Excel透视表:快速计算数据分析指标的利器

文章目录 概述1.数据透视表基本操作1.1准备数据&#xff1a;1.2创建透视表&#xff1a;1.3设置透视表字段&#xff1a;1.4多级分类汇总和交叉汇总的差别1.5计算汇总数据&#xff1a;1.6透视表美化&#xff1a;1.7筛选和排序&#xff1a;1.8更新透视表&#xff1a; 2.数据透视-数…

【B站 heima】小兔鲜Vue3 项目学习笔记Day02

文章目录 Pinia1.使用2. pinia-计数器案例3. getters实现4. 异步action5. storeToRefsx 数据解构保持响应式6. pinia 调试 项目起步1.项目初始化和git管理2. 使用ElementPlus3. ElementPlus 主题色定制4. axios 基础配置5. 路由设计6. 静态资源初始化和 Error lens安装7.scss自…

Github 2024-05-24 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2TypeScript项目2JavaScript项目1Kotlin项目1C#项目1C++项目1Shell项目1Microsoft PowerToys: 最大化Windows系统生产…

软件设计师备考笔记(十):网络与信息安全基础知识

文章目录 一、网络概述二、网络互连硬件&#xff08;一&#xff09;网络的设备&#xff08;二&#xff09;网络的传输介质&#xff08;三&#xff09;组建网络 三、网络协议与标准&#xff08;一&#xff09;网络的标准与协议&#xff08;二&#xff09;TCP/IP协议簇 四、Inter…

某神,云手机启动?

某神自从上线之后&#xff0c;热度不减&#xff0c;以其丰富的内容和独特的魅力吸引着众多玩家&#xff1b; 但是随着剧情无法跳过&#xff0c;长草期过长等原因&#xff0c;近年脱坑的玩家多之又多&#xff0c;之前米家推出了一款云某神的app&#xff0c;目标是为了减少用户手…

RedisTemplateAPI:String

文章目录 ⛄1 String 介绍⛄2 命令⛄3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 ⛄1 String 介绍 Str…

ue引擎游戏开发笔记(47)——设置状态机解决跳跃问题

1.问题分析&#xff1a; 目前当角色起跳时&#xff0c;只是简单的上下移动&#xff0c;空中仍然保持行走动作&#xff0c;并没有设置跳跃动作&#xff0c;因此&#xff0c;给角色设置新的跳跃动作&#xff0c;并优化新的动作动画。 2.操作实现&#xff1a; 1.实现跳跃不复杂&…

Java中的继承和多态

继承 在现实世界中&#xff0c;狗和猫都是动物&#xff0c;这是因为他们都有动物的一些共有的特征。 在Java中&#xff0c;可以通过继承的方式来让对象拥有相同的属性&#xff0c;并且可以简化很多代码 例如&#xff1a;动物都有的特征&#xff0c;有名字&#xff0c;有年龄…

Mybatis源码剖析---第一讲

Mybatis源码剖析 基础环境搭建 JDK8 Maven3.6.3&#xff08;别的版本也可以…&#xff09; MySQL 8.0.28 --> MySQL 8 Mybatis 3.4.6 准备jar&#xff0c;准备数据库数据 把依赖导入pom.xml中 <properties><project.build.sourceEncoding>UTF-8</p…

Linux学习笔记:线程

Linux中的线程 什么是线程线程的使用原生线程库创建线程线程的id线程退出等待线程join分离线程取消一个线程线程的局部存储在c程序中使用线程使用c自己封装一个简易的线程库 线程互斥(多线程)导致共享数据出错的原因互斥锁关键函数pthread_mutex_t :创建一个锁pthread_mutex_in…

雷电预警监控系统:守护安全的重要防线

TH-LD1在自然界中&#xff0c;雷电是一种常见而强大的自然现象。它既有震撼人心的壮观景象&#xff0c;又潜藏着巨大的安全风险。为了有效应对雷电带来的威胁&#xff0c;雷电预警监控系统应运而生&#xff0c;成为现代社会中不可或缺的安全防护工具。 雷电预警监控系统的基本…