Java实现图书管理系统的示例代码

目录
  • 一、功能介绍
  • 二、Main包
  • 三、User包
    • 1. User
    • 2. AdminUser
    • 3. NormalUser
  • 四、book包
    • 1. Book
    • 2. BookList
  • 五、operations包
    • 1. IOperation接口
    • 2. AddOperation
    • 3. BorrowOperation
    • 4. DelOperation
    • 5. DisplayOperation
    • 6. ExitOperation
    • 7. FindOperation
    • 8. ReturnOperation

一、功能介绍

此图书管理系统借助IDEA开发工具实现

图书馆系统一共有两种身份的访问:

1.管理员身份:

2.普通用户身份:

我们一共有三个包分别是book,operations,user实现.

二、Main包

main函数主要进行大致流程的进行,图书库的初始化,图书管理系统的登录,以及具体操作的选择,即实施.

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //1.先初始化图书库,以及初始化:
        BookList bookList = new BookList();

        //2.登录
        User user = login();//向上转型,User接受管理员或者用户对象

        //3.打印菜单,进行具体操作
        while(true) {
            int choice = user.menu();
            user.doOperation(choice,bookList);
        }
    }
}

登录功能:

 public static User login() {
        System.out.println("请输入你的姓名: ");
        Scanner scanner = new Scanner(System.in);
        String userName = scanner.nextLine();
        System.out.println("请输入你的身份: 1-> 管理员 2-> 用户");
        int choice = scanner.nextInt();
        if(choice == 1) {
            return new AdminUser(userName);
        }else {
            return new NormalUser(userName);
        }
    }

三、User包

因为有两套系统,管理员和普通用户,所以我们将共同属性提取出来一个User抽象类,以达到代码复用

1. User

package user;

import book.BookList;
import operations.IOperation;

public abstract class User {
    protected String name;

    IOperation[] iOperations;
    public User(String name) {
        this.name = name;
    }

    public abstract int menu();

    public void doOperation(int choice, BookList bookList) {
        iOperations[choice].work(bookList);
    }
}

2. AdminUser

package user;

import operations.*;

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("欢迎: "+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("**********************************");
        System.out.println("请输入你的操作: ");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

3. NormalUser

package user;

import operations.*;

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("欢迎: "+name+"来到图书馆");
        System.out.println("**********************************");
        System.out.println("1. 查找图书");
        System.out.println("2. 借阅图书");
        System.out.println("3. 归还图书");
        System.out.println("0. 退出图书");
        System.out.println("**********************************");
        System.out.println("请输入你的操作: ");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

四、book包

我们对book的属性进行书写,以及在BookList种对图书库的书进行初始化.

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;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ","+ ((isBorrowed == true) ? "该书已借出" : "该书未借出" )+
                '}';
    }
}

2. BookList

package book;
public class BookList {
    public Book[] books = new Book[100];
    public int usedSize;//用来存当前共有多少本书

    /**
     * 事先通过代码块
     *
     * 事先存进去三本书
     */
    {
        books[0] = new Book("java","高斯林",95,"IT");
        books[1] = new Book("C++","姚琳",93,"IT");
        books[2] = new Book("python","马瑟斯",80,"IT");
        this.usedSize = 3;
    }

    public Book getPos(int pos) {
        //获取某一位置的书
        return books[pos];
    }

    public void setBooks(Book book,int pos) {
        //存储一本书 到指定位置
        books[pos] = book;

    }
    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
}

五、operations包

我们的图书管理系统有很多具体的操作,为了后面方便多态,以及检验错误,所以我们实现一个具体的IOperation接口,每一个具体的操作去实现这个接口.

1. IOperation接口

package operations;

import book.BookList;

public interface IOperation {
    void work(BookList bookList);
}

2. AddOperation

增加图书:

package operations;

import book.Book;
import book.BookList;

import java.util.Scanner;
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书! ");
        System.out.println("请输入要新增的图书的名字: ");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入要新增的图书的作者: ");
        String author = scanner.nextLine();
        System.out.println("请输入要新增的图书的价格: ");
        int price = scanner.nextInt();
        System.out.println("请输入要新增的图书的类型: ");
        String type = scanner.nextLine();

        Book book = new Book(name,author,price,type);

        //1.获取当前书存放的位置
        int curSize = bookList.getUsedSize();
        //2.把书放在指定位置
        bookList.setBooks(book,curSize);
        //3.更新书的个数
        bookList.setUsedSize(curSize+1);

    }
}

3. BorrowOperation

借阅图书:

package operations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书! ");
        System.out.println("请输入要借阅的图书的名字: ");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
                if(book.isBorrowed()) {
                    System.out.println("该书已经被借出! ");
                }else {
                    book.setBorrowed(true);
                    System.out.println("借阅图书成功! ");
                    return;
                }
            }
        }
        System.out.println("没有你要借阅的书! ");
    }
}

4. DelOperation

删除图书:

package operations;

import book.Book;
import book.BookList;

import java.util.Scanner;
public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书! ");
        System.out.println("请输入要删除的图书: ");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        //查找图书是否有此图书,记录下标
        int index = -1;
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
               index = i;
               break;
            }
        }
        if(index == -1) {
            System.out.println("没有 "+name+"这本书!");
            return;
        }
        for (int i = index; i < bookList.getUsedSize()-1; i++) {
            Book book = bookList.getPos(i+1);
            bookList.setBooks(book,i);
        }

        //删除的书,要置空
        bookList.setBooks(null, bookList.getUsedSize()-1);
        bookList.setUsedSize(bookList.getUsedSize()-1);
    }
}

5. DisplayOperation

显示图书:

package operations;

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

6. ExitOperation

退出图书:

package operations;

import book.BookList;
public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {

        System.out.println("退出系统! ");
        System.exit(0);
    }
}

7. FindOperation

查找图书:

package operations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {

        //查找图书
        System.out.println("查找图书! ");
        System.out.println("请输入要查找的图书: ");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
                System.out.println("找到了! ");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有这本书! ");
    }
}

8. ReturnOperation

归还图书:

package operations;

import book.Book;
import book.BookList;

import java.util.Scanner;
public class ReturnOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书! ");
        System.out.println("请输入要归还的图书的名字: ");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
                book.setBorrowed(false);
                System.out.println("归还图书成功! ");
                return;
            }
        }
        System.out.println("没有你要归还的书! ");
    }
}

到此这篇关于Java实现图书管理系统的示例代码的文章就介绍到这了,更多相关Java图书管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java实现简单图书管理系统

    本文实例为大家分享了java实现简单图书管理系统的具体代码,供大家参考,具体内容如下 JAVA练习的作业,题目如下: 设计一个图书管理系统类和用户类,要求具有以下功能: (1). 查询和修改图书信息.(2). 增加和删除图书信息.(3). 个人借阅信息查询.(4). 图书归还功能(5). 用户管理功能和退出程序功能(注:用户信息可以保存在内存即可) 上代码: User.java public class User {     String id;     String name;     int

  • Java实战项目 图书管理系统

    目录 一.项目简述 二.项目运行 修改图书类型信息代码: 登录图书管理系统主页面代码: 一.项目简述 功能包括: 登录注册,办理借阅.借阅记录,预约借阅,借出未还, 借阅逾期,学生管理,图书管理,书库分类查询搜索. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ cs

  • Java图书管理系统课程设计

    本文实例为大家分享了Java图书管理系统的具体代码,供大家参考,具体内容如下 大二上学期做的一个Java课程设计,总分为四个Java文件,AllBook,AllBorrow,AllStudent,Tushu. 本系统是一个面向图书馆的管理系统,具有一定的实用性.它主要完成了图书的基本操作功能,全校学生信息的相关基本操作,以及对图书的借阅归还管理.本系统采用当前流行的面向对象的JAVA语言开发工具eclipse来完成整个系统的设计.系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都

  • Java实战之图书管理系统的实现

    目录 一.项目运行 二.效果图 三.核心代码 登录控制层 图书管理控制层 读者管理控制层 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: HTML +Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等. 二.效果图 三.核心代码 登录控制层

  • JAVA实现图书管理系统项目

    目录 前言 项目需求 设计前提 设计目标 设计结构图 功能解读 项目实现 基本对象的设置 通过IO流的写入写出 总结 前言 相信再每一个学生在学习编程的时候,应该都会写的一个小项目--图书管理系统.为什么这么说呢?因为我认为一个学校的氛围很大一部分可以从图书馆的氛围看出来,而图书管理系统这个不大不小的项目,学生接触的多,也算是比较熟悉,就不会有陌生感,能够练手,有有些难度,所以,今天,我的小小项目也来了. 项目需求 设计前提 掌握java基本语法 熟悉使用流程控制 理解面向对象思想 熟练封装,继

  • Java实现图书管理系统的示例代码

    目录 一.功能介绍 二.Main包 三.User包 1. User 2. AdminUser 3. NormalUser 四.book包 1. Book 2. BookList 五.operations包 1. IOperation接口 2. AddOperation 3. BorrowOperation 4. DelOperation 5. DisplayOperation 6. ExitOperation 7. FindOperation 8. ReturnOperation 一.功能介绍

  • JavaSE实现图书管理系统的示例代码

    目录 前言 1. 项目需求 2. 实现思路 3. 代码实现 包的设计 book包 operations包 user包 4. 实现效果 前言 这篇博客是在学习了一部分Java基础语法之后的练习项目,通过这个小项目的练习,对Java中的类和对象,抽象类和接口,面向对象的继承.多态和封装.组合等进行熟悉理解:抽象出不同的对象,将对象进行合理的设计,完成对象之间的交互,面向对象进行编程. 1. 项目需求 图书管理系统,面向管理员和普通用户使用,对管理员的开放的功能有:添加图书,删除图书,查找图书,显示图

  • java实现图书管理系统

    本文通过实例为大家分享了java实现图书管理系统的具体代码,供大家参考,具体内容如下 一.背景介绍 通过一段时间java编程的学习,需要一个比较综合的实例来进行编程的练习,是一个对前段时间所学内容进行总合提升的一个契机.选择了图书管理系统,会用到的javaSE知识有:变量.包.继承.类.接口.循环结构等.是一个很综合的典例. 二.核心需求 1.用户可以登录到系统上 分为 管理员.普通用户两种角色,这两种不同的角色根据自己的身份可以实现不同的操作. 普通用户 a)查阅某个书籍的信息 b)借阅书籍

  • 3分钟纯 Java 注解搭个管理系统的示例代码

    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页面,有时候觉得自己好像天生不适合干前端,你要是让我研究研究后端的技术,看个中间件源码啊,分析分析什么框架底层原理啊,这都问题不大,偶尔搞一下JS也可以.你要是让我写个css样式,那简直要命了,一点也提不起兴趣,不知道有没有跟我一样的. 今天要介绍的框架直接不用写页面了,话不多说,下边咱们直奔主题 Erupt一个通用后

  • Java+MySQL 图书管理系统

    一,功能 管理员登录 图书借阅信息管理 图书信息管理 管理员更改密码 退出系统 二,工具 Eclipse Version: 2018-09 (4.9.0) MySQL Workbench 8.0 CE mysql-connector-java-8.0.13.jar 三.效果图: 登录界面: 主界面: 借阅书籍管理: 个人书库管理: 更改密码: 四.数据库设计 1)图书表 2)用户表 两个数据表间没有关联: 五.JAVA层次分析 (1)逻辑图 (2)包结构,采用MVC三层架构组织各个模块 六.主要

  • Java连接postgresql数据库的示例代码

    本文介绍了Java连接postgresql数据库的示例代码,分享给大家,具体如下: 1.下载驱动jar 下载地址:https://jdbc.postgresql.org/download.html 2.导入jar包 新建lib文件夹,将下载的jar驱动包拖到文件夹中. 将jar驱动包添加到Libraries 3.程序代码如下:HelloWorld.java package test; import java.sql.Connection; import java.sql.DriverManage

  • java 生成文字图片的示例代码

    本文主要介绍了java 生成文字图片的示例代码,分享给大家,具体如下: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO;

  • Java动态规划之编辑距离问题示例代码

    动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 动态规划实际上是一类题目的总称,并不是指某个固定的算法.动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做法.动态规划的核心思想是巧妙的将问题拆分成多个子问题,通过计算子问题而得到整体问题的解.而子问题又可以拆分成更多的子问题,从而用类似递推迭代的方法解决要求的问题.问题描述: 对于序列S和T,

  • Java的静态类型检查示例代码详解

    关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 在各色各样的编程语言中,总共存在着两个类型检查机制:静态类型检查和动态类型检查. 静态类型检查是指通过对应用程序的源码进行分析,在编译期间就保证程序的类型安全. 动态类型检查是在程序的运行过程中,验证程序的类型安全.在Java中,编译期间使用静态类型

  • Java随机生成身份证完整示例代码

    身份证算法实现 1.号码的结构 公民身份号码是特征组合码, 由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码  三位数字顺序码和一位数字校验码. 2.地址码(前六位数) 表示编码对象常住户口所在县(市.旗.区)的行政区划代码,按GB/T2260的规定执行. 3.出生日期码(第七位至十四位) 表示编码对象出生的年.月.日,按GB/T7408的规定执行,年.月.日代码之间不用分隔符. 4.顺序码(第十五位至十七位) 表示在同一地址码所标识的区域范围内,

随机推荐