图书管理

  • 项目意义
  • 项目的核心需求
  • 类的设计
    • 创建图书相关的类
      • 创建 Book 类
      • 创建 BookList 类
    • 创建操作相关的类
      • AddOperation
      • BorrowOperation
      • DelOperation
      • DisplayOperation
      • ExitOperation
      • FindOperation
      • IOperation
      • ReturnOperation
  • 创建用户相关的类
    • User 类
    • AdminUser 类
    • NormalUser 类
  • Main 函数入口
  • 实际演示
    • 普通用户
    • 管理员

项目意义

利用前面所学的知识点:类,抽象类,封装,继承,多态,接口等综合起来的应用。

项目的核心需求

1、简单的登录
2、管理端

  • 整理书籍(该功能为可扩展功能)
  • 查阅书籍
  • 增加书籍
  • 删除书籍
  • 打印书籍列表
  • 退出

3、用户端

  • 查询书籍
  • 借阅书籍
  • 归还书籍
  • 退出

类的设计

这里用包(package)来写,然后再创建相关的类

创建图书相关的类

创建 Book 类

创建 book 包,然后创建 Book 类。包括:名字、作者、价格、种类、是否被借出。在类里面写好构造方法,重写 String 方法:

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)?" 已借出 ":" 未借出 ") +'}';}
}

创建 BookList 类

要保存书的话,我们可以使用:顺序表、链表来创建。先创建几个初始值,方便后续测试。这里使用顺序表:

public class BookList {private Book[] books = new Book[10];private int usedSize;public BookList() {books[0] = new Book("三国演义","罗贯中",17,"小说");books[1] = new Book("红楼梦","曹雪芹",23,"小说");this.usedSize = 2;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getPos(int pos) {return this.books[pos];}/*** 设置 pos 下标为一本书(添加一本书)* @param pos* @param book*/public void setBook(int pos, Book book) {this.books[pos] = book;}
}

创建操作相关的类

先创建包 operation 然后在包里面创建操作相关的操作类:

AddOperation
DelOperation
FindOperation
DelOperation
DisplayOperation
BorrowOperation
ReturnOperation
ExitOperation


然后分别实现类的内容:

AddOperation

在这里要实现对图书的增加,先输入书的信息,然后 new 为一本书:

import book.Book;
import book.BookList;import java.util.Scanner;public class AddOperation implements IOperation{public void work(BookList bookList) {System.out.println("新增图书");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 size = bookList.getUsedSize();bookList.setBook(size,book);bookList.setUsedSize(size + 1);System.out.println("新增图书成功");}
}

BorrowOperation

在这里完成对图书的借出:

import book.Book;
import book.BookList;
public class BorrowOperation implements IOperation{public void work(BookList bookList) {System.out.println("借阅图书");System.out.println("请输入借阅的图书的名字");String name = scanner.nextLine();int size = bookList.getUsedSize();for (int i = 0; i < size; i++){Book book = bookList.getPos(i);if(name.equals(book.getName())){book.setBorrowed(true);System.out.println("借阅成功");System.out.println(book);return;}}System.out.println("没有这本书,无法借阅");}
}

DelOperation

在这里完成对图书的删除:

import book.Book;
import book.BookList;
public class DelOperation implements IOperation{public void work (BookList bookList) {System.out.println("删除图书");System.out.println("请输入要删除的书的名字");String name = scanner.nextLine();int size = bookList.getUsedSize();int pos = 0;for (pos = 0; pos < size; pos++){Book book = bookList.getPos(pos);if(name.equals(book.getName())){break;}}if(pos == size){System.out.println("没有找到这本书,无法删除");} else {for (int i = pos; i < size - 1; i++){Book book = bookList.getPos(i + 1);bookList.setBook(i,book);}bookList.setBook(size,null);bookList.setUsedSize(size - 1);System.out.println("删除成功");}}
}

DisplayOperation

在这里完成对图书的显示:

import book.Book;
import book.BookList;
public class DisplayOperation implements IOperation{public void work(BookList bookList) {System.out.println("打印图书");int size = bookList.getUsedSize();for (int i = 0; i < size; i++){Book book = bookList.getPos(i);System.out.println(book);}}
}

ExitOperation

在这里完成对借阅系统的退出:

import book.BookList;
public class ExitOperation implements IOperation{public void work(BookList bookList) {System.out.println("退出系统");System.exit(0);}
}

FindOperation

进行对书籍的查找:

import book.Book;
import book.BookList;
public class FindOperation implements IOperation{public void work(BookList bookList) {System.out.println("查找图书");System.out.println("请输入书名查找");String name = scanner.nextLine();int size = bookList.getUsedSize();for (int i = 0; i < size; i++){Book book = bookList.getPos(i);if(name.equals(book.getName())){System.out.println("找到了这本书,信息如下:");System.out.println(book);return;}}System.out.println("没有找到这本书");return;}
}

IOperation

在这里写一个接口,写成工作接口。这样的话,之后调用就可以重写这个抽象类:

import book.BookList;
import java.util.Scanner;
public interface IOperation {void work(BookList bookList);Scanner scanner = new Scanner(System.in);
}

ReturnOperation

这里写归还功能:

import book.Book;
import book.BookList;
public class ReturnOperation implements IOperation{public void work(BookList bookList) {System.out.println("归还图书");System.out.println("请输入归还书的名字");String name = scanner.nextLine();int size = bookList.getUsedSize();for (int i = 0; i < size; i++){Book book = bookList.getPos(i);if(name.equals(book.getName())){book.setBorrowed(false);System.out.println("还书成功");System.out.println(book);return;}}System.out.println("没有借过这本书,无需归还");}
}

创建用户相关的类

这里先创建一个 User 抽象类,然后再用管理员类和普通用户类去继承。

User 类

这里写抽象类为了方便继承:

import book.BookList;
import operation.IOperation;
public abstract class User {protected String name;protected IOperation[] iOperations;public User(String name) {this.name = name;}public abstract int menu();public void doWord(int choice, BookList bookList){iOperations[choice].work(bookList);}
}

AdminUser 类

这里实现管理员菜单:

import operation.*;
import java.util.Scanner;
public class AdminUser extends User{public AdminUser(String name) {super(name);this.iOperations = new IOperation[] {new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation()};}public int menu() {System.out.println("===========管理员菜单============");System.out.println("hello "+this.name+" 欢迎来到这里");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);int choice = scanner.nextInt();return choice;}
}

NormalUser 类

在这里实现普通用户菜单:

import operation.*;
import java.util.Scanner;
public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations = new IOperation[] {new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}public int menu() {System.out.println("===========p普通用户菜单============");System.out.println("hello "+this.name+" 欢迎来到这里");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);int choice = scanner.nextInt();return choice;}
}

Main 函数入口

在这里实现整个项目的入口:

import book.BookList;
import user.AdminUser;
import user.NormalUser;
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 管理员  0 普通用户");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 user = login();while (true) {int choice = user.menu();//根据 choice 调用合适的操作。user.doWord(choice, bookList);}}
}

这里要注意的是,一直循环操作,直到用户退出。通过 login 方法来判定用户的操作,然后调用相应的方法。

实际演示

普通用户

管理员

轻项目练习——图书管理代码相关推荐

  1. JavaSE小项目练习——图书管理小练习(超详细)

    目录 一.界面显示 1.管理员菜单操作 2.用户菜单操作 二. 核心思想 三. 具体的实现方法 1.Book包下面的书类和书架类 2.user包下面的用户类 3.Main方法,程序的入口 4.Oper ...

  2. Java项目:SSM图书馆图书管理借阅书籍管理系统

    作者主页:夜未央5788 简介:Java领域优质创作者.Java项目.学习资料.技术互助 文末获取源码 项目介绍 本项目包含管理员与用户两种角色: 管理员角色包含以下功能: 管理员登录,修改个人资料, ...

  3. Java小项目--小型图书管理系统(含完整代码及工具)

    写在前面 对于一个java项目来说,我理解的整个流程是这样的: (1)进行需求分析 (2)设计数据库(重要) (3)编写java代码 注:数据库设计非常重要,特别是数据类型的定义,表与表之间的关系,如 ...

  4. 从零开始搭建一个web图书管理项目(增删改查功能)

    参考资料:https://blog.csdn.net/qq_23994787/article/details/73612870 http://how2j.cn/ 实习第一周,写下一些在建立web项目中 ...

  5. python中型项目---Django框架---图书管理网站的制作-01

    图书管理网站的制作详解(个人学习django框架的笔记) 第01号笔记最终成果图: 当前笔记所完成的网站的功能简介: 1 网页从数据库获得图书名称 2 点击新增按钮后增加一本书,当前名为"流 ...

  6. (2022)Springboot+vue3项目开发前后端分离书法图书管理Coun

    项目地址:https://github.com/KKJava1/Coun Coun是基于Springboot+vue3 项目采用了前后端分离技术:后端采用 springBoot 基本框架,数据库连接池 ...

  7. 图书管理器项目(参考答案)

    项目的架构和jar 你可能还想了解的: 序号 内容 地址 1 图书管理器项目 https://blog.csdn.net/qq_44739706/article/details/109468694 2 ...

  8. 项目学习 —— 图书商城后台管理

    查询.修改.删除数据库中数据. 一. 创建数据库和表 在数据库studyproject下创建一个book表 CREATE TABLE `studyproject`.`book` (`id` INT N ...

  9. Java项目之利用集合设计图书管理器系统

    设计⼀个图书管理器,实现对图书进⾏的存储管理操作 /*程序设计:图书管理器,设计⼀个图书管理器,实现对图书进⾏的存储管理操作, 实现功能 1. 添加⼀本图书(书名.作者(姓名,年龄,性别).售价) 2 ...

最新文章

  1. 【Sql Server】Database-sql语言的流程控制语句
  2. 前端小项目:使用canvas绘画哆啦A梦
  3. 认识DOM的三大节点:元素节点,文本节点,属性节点以及nodeName,nodeType,nodeValue的区别
  4. u-boot支持LCD显示(基于TQ2440)
  5. MySQL 5.6版本GTID复制异常处理一例
  6. Netflix 工程师的生活 —— 40毫秒的案例
  7. ubuntu-18.04 修改用户名密码
  8. 《Python程序设计》在亚马逊京东当当互动出版网淘宝全面上架
  9. Python有趣小程序代码
  10. java基础知识总结
  11. 解决windows7系统netmeeting无法(安装)使用问题
  12. java开源论坛系统Mango BBS源代码下载
  13. 【油猴插件】用Tampermonkey来实现百度云满速下载和批量离线
  14. html生成一维码,JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】...
  15. CCCC选拔赛赛后总结
  16. shader里的uv是什么
  17. ip rule 命令
  18. JAVA+appium+夜神模拟器实现APP爬虫
  19. 几何原本译林pdf下载_《几何原本》欧几里得_文字版_pdf电子书下载
  20. android relativelayout 比例,百分比布局支持库:RelativeLayout 和 FrameLayout 的尺寸用 % 来表示...

热门文章

  1. 开源LLM「RWKV」想要打造AI领域的Linux和Android|ChatAI
  2. Win10删除Ubuntu启动项
  3. 删除多余的启动项(Ubuntu)
  4. 个人博客的sitemap记录v1.0
  5. 使用sed命令对文件中匹配到的行进行删除
  6. Barsetto百胜图自助售卖咖啡机——这台咖啡机有点酷
  7. CentOS 8 安装 jupyter 小记
  8. 卫** 打包上传360 问题
  9. 音视频开发基础知识(一)像素格式
  10. Java类中方法的加载顺序