目录

图书管理系统

思维导图

图书部分

每本具体书籍——Book

书架类——BookList

用户部分

User——用户类

NormalUser(普通用户)

AdminUser(管理员)

权限

操作书籍的接口——IOperation

显示当前书籍列表——ListAllBooksOperation

添加书籍——AddOperation

下架书籍——RemoveOperation

更新书籍——UpdateOperation

查找书籍——FindOperation

借阅书籍——BorrowOperation

归还书籍——ReturnOperation

主方法——程序的入口


图书管理系统

思维导图

图书部分

每本具体书籍——Book

package book_management.book;/*** 每本书的对象*/
public class Book {// 书名private String name;// 作者名private String author;// 书籍价格private Double price;// 书籍的类别private String type;// 书籍是否被借出,默认为falseprivate boolean isBorrowed;public Book(String name, String author, Double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}public String getName() {return name;}public String getAuthor() {return author;}public Double getPrice() {return price;}public String getType() {return type;}public boolean isBorrowed() {return isBorrowed;}public void setPrice(Double price) {this.price = price;}public void setType(String type) {this.type = type;}public void setBorrowed(boolean borrowed) {isBorrowed = borrowed;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isBorrowed=" + isBorrowed +'}';}
}

书架类——BookList

package book_management.book;import java.util.ArrayList;
import java.util.List;/*** 书架*/
public class BookList {// 书架就是保存书籍的,书本的个数不确定,要么用动态数组,要么使用链表private List<Book> books = new ArrayList<>();// 保存当前书架上所有书籍的名称,以后的操作就是根据书籍的名称来查找具体的Book对象// 一一对应的映射关系private List<String> booksName = new ArrayList<>();private int usedSize;public BookList() {// 产生一个书架对象时,默认上架的四本书籍books.add(new Book("三国演义", "罗贯中", 76.6, "小说"));books.add(new Book("水浒传", "施耐庵", 55.6, "小说"));books.add(new Book("西游记", "吴承恩", 44.6, "小说"));books.add(new Book("红楼梦", "曹雪芹&未知", 88.6, "小说"));//将当前这四本书的书名也添加到booksName的列表中booksName.add("三国演义");booksName.add("水浒传");booksName.add("西游记");booksName.add("红楼梦");this.usedSize = 4;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getBook(int i) {return this.books.get(i);}public void setBook(int i, Book book) {this.books.set(i, book);}public boolean contains(String booksName) {// 遍历booksName这个列表for (String str : this.booksName) {if (str.equals(booksName)) {return true;}}return false;}/*** 添加书籍*/public void addNewBook(String booksName, String author, double price, String type) {Book book = new Book(booksName, author, price, type);this.books.add(book);this.booksName.add(booksName);this.usedSize++;}/*** 下架书籍*/public void removeBook(String booksName, BookList bookList) {int n = bookList.getUsedSize();int i = 0;int index = 0;for (; i < n; i++) {Book book = bookList.getBook(i);if (book.getName().equals(booksName)) {index = i;break;}}if (i == n) {System.out.println("对不起,没有找到您需要删除的书!");return;}//使用for循环让后一个位置的书前移一位for (int j = index; j < n - 1; j++) {Book book = bookList.getBook(j + 1);//得到j+1位置的书bookList.setBook(j, book);//将其设置为j位置}bookList.setUsedSize(n - 1);System.out.println("下架成功!");}/*** 更新书籍*/public void updateBook(String booksName, String type, Boolean isBorrowed, double price, BookList bookList) {for (int i = 0; i < usedSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(booksName)) {book.setPrice(price);book.setType(type);book.setBorrowed(isBorrowed);}}}/*** 查找书籍*/public void findBook(String booksName, BookList bookList) {int size = bookList.getUsedSize();for (int i = 0; i < size; i++) {Book book = bookList.getBook(i);if (book.getName().equals(booksName)) {System.out.println("找到这本书的信息如下:");System.out.println(book);return;}}System.out.println("没有这本书!");}/*** 归还书籍*/public void returnBook(String booksName, BookList bookList) {int size = bookList.getUsedSize();for (int i = 0; i < size; i++) {Book bookCur = bookList.getBook(i);if (bookCur.getName().equals(booksName)) {bookCur.setBorrowed(false);System.out.println("归还成功!");return;}}System.out.println("没有此书!归还失败");}/*** 借阅书籍*/public void isBorrowed(String booksName, BookList bookList) {int size = bookList.getUsedSize();for (int i = 0; i < size; i++) {Book book = bookList.getBook(i);if (book.getName().equals(booksName)) {book.setBorrowed(true);System.out.println("借阅成功!");return;}}System.out.println("没有此书!借阅失败");}
}

用户部分

User——用户类

package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;
/*** 用户类*/
public abstract class User {//用户名protected String name;// 对于书籍的操作权限,此时不确定用户类型,所以是个空数组,由子类来确定到底具备哪些权限protected IOperation[] operations;public User(String name) {this.name = name;}// 菜单,不同种类的用户菜单是不同的,根据菜单的返回值取得用户选择的操作protected abstract int menu();// 根据用户输入的指令来执行不同的操作public void doOperation(BookList bookList, int choice) {operations[choice - 1].work(bookList);}
}

不同用户操作管理系统的权限是不同的,抽象父类没法确定由定义子类时确定。

不同用户的菜单不同,由子类来确定,使用抽象方法。

NormalUser(普通用户)

package book_management.user;import book_management.operation.IOperation;
import book_management.operation.impl.BorrowOperation;
import book_management.operation.impl.FindOperation;
import book_management.operation.impl.ListAllBooksOperation;
import book_management.operation.impl.ReturnOperation;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);this.operations = new IOperation[] {new ListAllBooksOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}@Overridepublic int menu() {System.out.println("==================================");System.out.println("欢迎" + this.name + "登录图书管理系统");System.out.println("1.显示当前的书籍列表");System.out.println("2.查找书籍");System.out.println("3.借阅书籍");System.out.println("4.归还书籍");System.out.println("-1.退出系统");System.out.println("==================================");System.out.println("请输入您的选择:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

AdminUser(管理员)

package book_management.user;import book_management.operation.IOperation;
import book_management.operation.impl.*;import java.util.Scanner;public class AdminUser extends User {public AdminUser(String name) {super(name);this.operations = new IOperation[]{new ListAllBooksOperation(),new AddOperation(),new RemoveOperation(),new UpdateOperation(),new FindOperation()};}@Overridepublic int menu() {System.out.println("==================================");System.out.println("欢迎" + this.name + "登录图书管理系统");System.out.println("1.显示当前的书籍列表");System.out.println("2.增加书籍");System.out.println("3.下架书籍");System.out.println("4.更新书籍");System.out.println("5.查找书籍");System.out.println("-1.退出系统");System.out.println("==================================");System.out.println("请输入您的选择:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

权限

操作书籍的接口——IOperation

package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;/*** 操作书籍的接口*/
public interface IOperation {Scanner scanner = new Scanner(System.in);//在指定的书架上进行操作处理void work(BookList bookList);
}

显示当前书籍列表——ListAllBooksOperation

package book_management.operation.impl;import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;/*** 展示当前的书籍列表操作*/
public class ListAllBooksOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("此时您进行的是展示书籍列表的操作");//具体书籍在书架类中保存,我们调用的就是书架类提供的方法//套接口的最大目的就是做权限划分int size = bookList.getUsedSize();for (int i = 0; i < size; i++) {System.out.println(bookList.getBook(i));}}
}

添加书籍——AddOperation

package book_management.operation.impl;import book_management.book.BookList;
import book_management.operation.IOperation;import java.util.Scanner;/*** 添加书籍操作*/
public class AddOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("您现在进行的是添加书籍操作");System.out.println("请输入您要添加的书籍名称:");String booksName = scanner.nextLine();//假设书籍已经有这本书了if (bookList.contains(booksName)) {System.err.println("书籍在当前书架上已经存在了,无需添加");}System.out.println("请输入您要添加的书籍作者:");String author = scanner.nextLine();System.out.println("请输入您要添加的书籍类别:");String type = scanner.nextLine();System.out.println("请输入您要添加的书籍价格:");double price = scanner.nextDouble();// 吃掉\nString str = scanner.nextLine();//产生书籍对象保存到书架上bookList.addNewBook(booksName,author,price,type);System.out.println("添加书籍成功!");}
}

下架书籍——RemoveOperation

package book_management.operation.impl;import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;import java.util.Scanner;/*** 下架书籍操作*/
public class RemoveOperation implements IOperation {@Overridepublic void work(BookList bookList) {Scanner scanner = new Scanner(System.in);System.out.println("您现在进行的是下架书籍操作");System.out.println("请输入要下架的图书名称:");String booksName = scanner.next();bookList.removeBook(booksName,bookList);}
}

更新书籍——UpdateOperation

package book_management.operation.impl;import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;/*** 更新书籍操作*/
public class UpdateOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("您现在进行的是更新书籍操作");System.out.println("请输入您要更新的书籍名称:");String booksName = scanner.nextLine();//书籍有这本书if (!bookList.contains(booksName)) {System.err.println("书籍不存在,无法更新");}System.out.println("请输入您要更新的书籍类别:");String type = scanner.nextLine();System.out.println("请输入您要更新的书籍借阅情况:");Boolean isBorrowed = scanner.nextBoolean();System.out.println("请输入您要更新的书籍价格:");double price = scanner.nextDouble();// 吃掉\nString str = scanner.nextLine();//产生书籍对象保存到书架上bookList.updateBook( booksName, type, isBorrowed, price, bookList);System.out.println("更新书籍成功!");}
}

查找书籍——FindOperation

package book_management.operation.impl;import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;/*** 查找书籍操作*/
public class FindOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("您现在进行的是查找书籍操作");System.out.println("请输入您要查找的书籍名称:");String booksName = scanner.nextLine();bookList.findBook(booksName,bookList);}
}

借阅书籍——BorrowOperation

package book_management.operation.impl;import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;import java.util.Scanner;/*** 借阅书籍操作*/
public class BorrowOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("您现在进行的是借阅书籍操作");System.out.println("请输入您要借阅的书籍名称:");Scanner scanner = new Scanner(System.in);String booksName = scanner.nextLine();bookList.isBorrowed(booksName,bookList);}
}

归还书籍——ReturnOperation

package book_management.operation.impl;import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;import java.util.Scanner;/*** 归还书籍操作*/
public class ReturnOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("您现在进行的是归还书籍操作");System.out.println("请输入您要归还的书籍名称:");Scanner scanner = new Scanner(System.in);String booksName = scanner.nextLine();bookList.returnBook(booksName,bookList);}
}

主方法——程序的入口

package book_management;import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;import java.util.NoSuchElementException;
import java.util.Scanner;/*** 程序的入口*/
public class Main {public static void main(String[] args) {// 1.此时图书馆只有一个书架BookList bookList = new BookList();// 2.登录操作User user = login();// 3.开始进行选择while (true) {int choice = user.menu();if (choice == -1) {System.out.println("系统退出");break;} else {user.doOperation(bookList,choice);}}}private static User login() {Scanner scanner = new Scanner(System.in);System.out.println("请输入您的姓名:");String name = scanner.nextLine();System.out.println("请选择您的身份:1表示普通用户,0表示管理员");int choice = scanner.nextInt();if (choice == 1) {return new NormalUser(name);} else if (choice == 0) {return new AdminUser(name);} else {throw new NoSuchElementException("键入有误,没有选项");}}
}

图书管理系统Java代码相关推荐

  1. 图书管理系统java+Oracle

    图书管理系统java+Oracle 一.课程设计实验目的 二.课程设计任务及要求 三.数据库设计 四.程序设计 五.软件使用说明 六.课程设计总结 七.附录 一.课程设计实验目的 课程设计围绕课程的整 ...

  2. java图书管理系统目的_java_图书管理系统java版,本文的目的就是通过图书管理 - phpStudy...

    图书管理系统java版 本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询.插入.删除.修改. 内容:在数据库中创建一张书目信息表,包括书名.作者.出版社.出 ...

  3. 实训总结(图书管理系统java)

    实训总结(图书管理系统java) 1设计任务 完成用户登录验证,图书品类的增.删.查.改并保存到数据库中,打印购买图书订单,并将购买图书订单信息数据保存到数据库中. 2总体设计 序号 类名 说明 1 ...

  4. 基于java+mysql的Swing+MySQL图书管理系统(java+swing+gui+mysql)

    基于java+mysql的Swing+MySQL图书管理系统(java+swing+gui+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclip ...

  5. 计算机毕业设计-springboot企业考勤管理系统(前后端分离)员工考勤管理系统-公司日常管理系统java代码

    计算机毕业设计-springboot企业考勤管理系统(前后端分离)员工考勤管理系统-公司日常管理系统java代码 注意:该项目只展示部分功能,如需了解,联系咨询即可. 作者:IT跃迁谷 1.开发环境 ...

  6. 计算机课程设计-基于ssm+vue的物资管理系统(前后端分离)-物资出库入库管理系统java代码

    计算机课程设计-基于ssm+vue的物资管理系统(前后端分离)-物资出库入库管理系统java代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:Ja ...

  7. 基于javaweb的图书管理系统(java+jsp+layui+bootstrap+servlet+mysql)

    基于javaweb的图书管理系统(java+jsp+layui+bootstrap+servlet+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse ...

  8. 计算机毕业设计-基于springboot的会员积分管理系统-会员等级管理系统java代码

    计算机毕业设计-基于springboot的会员积分管理系统-会员等级管理系统java代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:Sprin ...

  9. Java窗体图书管理系统Java图书借阅管理系统(图书借阅系统)

    Java窗体图书管理系统Java图书借阅管理系统(图书借阅系统)

  10. Python分分钟实现图书管理系统(含代码)

    Python分分钟实现图书管理系统(含代码) 废话不多说,直接上代码. import sys# 打印书库中的所有书的函数 def book_detail(books):for book_name, b ...

最新文章

  1. 高并发MPP查询引擎Impala初识
  2. python并行编程语言_Python3 系列之 并行编程
  3. jquery 手型 鼠标穿过时_专业电竞鼠标有什么独到之处?看完核技瑞你就知道了
  4. 欣喜若狂--成功的第一步
  5. 无法在Web服务器上启动调试。与Web服务器通信时出现身份验证错误
  6. VsCode crtl + 鼠标右键 python代码无法跳转
  7. Dropbox 的崛起之路,创始人曾拒绝乔布斯天价收购
  8. Vue-动态组件和插槽
  9. puppet详解(八)——puppet自动化
  10. 两个平面的位置关系和判定方程组解_2018年高考数学总复习第九章平面解析几何第2讲两直线的位置关系学案!...
  11. 阿里矢量图标及其引入方式
  12. json几种不同解析方式
  13. 《系统集成项目管理》第三章 信息系统集成专业技术知识
  14. 正则表达式验证生日手机号信息
  15. 看过来,u盘删除的文件还能找回吗?两种方法教给你
  16. 最新交易猫源码+独立后台管理
  17. 计算机打字键盘怎么控制,键盘是怎样分区的,打字时每个手指分别可控制哪些键...
  18. cGAN/cDCGAN,MNIST数据集初体验(内含原理,代码)
  19. 关于深度可分离卷积 Depthwise Pointwise Convolution
  20. 什么是模块化?模块化的好处

热门文章

  1. 微信小程序之摇骰子源代码分享
  2. 微信小程序源代码基本文件类型
  3. OTT网络电视直播APP运营平台-如何保证视频的流畅性
  4. 线性代数 --- 带有置换矩阵P的LU分解
  5. 8音度dsp调音教程_8音度汽车调音软件
  6. jQuery实现留言板
  7. 使用 软件 vscode 对比文件内容的方法
  8. Linux安装jdk详细步骤
  9. 计算机二级java和c哪个难,计算机二级最好考哪个 考试难度怎么样
  10. c语言符合语法规定的常量,以下各项中,符合C语言语法规定的实型常量是() 答案:.5E-3...