Java : 图书管理系统

server/2024/9/24 6:39:45/

图书管理系统的作用:

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

主要功能:

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

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

 

代码实现: 

java">//定义一个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.ppmy.cn/server/121215.html

相关文章

使用Docker一键部署Blossom笔记软件

Blossom 是一个需要私有部署的笔记软件,虽然本身定位是一个云端软件,但你仍然可以在本地部署,数据和图片都将保存在你的设备,不依赖任何的图床或者对象存储。 客户端:支持 Windows 端和 ARM 架构的 Mac 端,以及作为网页端部署。移动端:响应式网页移动端,主要为移动端设…

Redis基础

Redis基础 一、概述 Redis是开源高性能&#xff0c;基于内存允许的键值对NoSQL数据库 支持数据的持久化&#xff0c;可以将数据保存在磁盘中&#xff0c;重启之后加载到内存中支持多种数据类型支持master-slave模式的数据备份 二、应用场景 1. 缓存 用途&#xff1a;用于…

常见排序详解

1、常见的排序算法 插入排序&#xff1a;直接插入排序、希尔排序&#xff1b; 选择排序&#xff1a;选择排序、堆排序&#xff1b; 交换排序&#xff1a;冒泡排序、快速排序&#xff1b; 归并排序&#xff1a;归并排序&#xff1b; 2、常见排序算法的实现 2.1 插入排序 2…

python:编写一个函数查找字符串中的最长公共前缀

最近在csdn网站上刷到一个题目&#xff0c;题目要求编写一个函数查找字符串中的最长公共前缀&#xff0c;题目如下&#xff1a; 给出的答案如下&#xff1a; from typing import List def longestCommonPrefix(strs:List[str]) -> str:if len(strs) 0:return i 0 #代…

0-1开发自己的obsidian plugin DAY 1

官网教程有点mismatch&#xff0c;而且从0-100跨度较大&#xff0c;&#x1f4dd;记录一下自己的踩坑过程 首先&#xff0c;官网给的example里只有main.ts&#xff0c;需要自己编译成main.js 在视频教程&#xff08;https://www.youtube.com/watch?v9lA-jaMNS0k&#xff09;里…

第五章 继承、多态、抽象类与接口 (5)

5.5 方法的重载 构造方法的名称已经由类名决定&#xff0c;所以构造方法只有一个名称&#xff0c;但如果希望以不同的方式来实例化对象&#xff0c;就需要使用多个构造方法来完成。由于这些构造方法都需要根据类名进行命名&#xff0c;为了让方法名相同而形参不同的构造方法同时…

防火墙详解(一) 网络防火墙简介

原文链接&#xff1a;https://blog.csdn.net/qq_46254436/article/details/105519624 文章目录 定义 与路由器和交换机的区别 发展历史 防火墙安全区域 定义 防火墙主要用于保护一个网络区域免受来自另一个网络区域的网络攻击和网络入侵行为 “防火墙”一词起源于建筑领域&…

【论文笔记】Are Large Kernels Better Teacheres than Transformers for ConvNets

Abstract 本文提出蒸馏中小核ConvNet做学生时&#xff0c;与Transformer相比&#xff0c;大核ConvNet因其高效的卷积操作和紧凑的权重共享&#xff0c;使得其做教师效果更好&#xff0c;更适合资源受限的应用。 用蒸馏从Transformers蒸到小核ConvNet的效果并不好&#xff0c;原…