入门必写项目之图书管理系统(分析详解+完美运行+代码可拿)

news2024/11/22 21:43:57

文章目录

  • 一、需求分析
  • 二、思路分析
  • 三、包分类
  • 四、模块代码展示
    • 1.1书籍类(Book)实现
    • 1.2书架类(BookList类)实现
    • 2.1功能接口(IOperation)实现
    • 2.2增加图书(Addoperation)实现
    • 2.3删除图书(DelOperation)实现
    • 2.4查找图书(FindOperation)实现
    • 2.5阅览书架(ShowOperation)实现
    • 2.6借阅图书(BrrowOperation)实现
    • 2.7归还图书(ReturnOperation)实现
    • 2.8退出系统(Exit)实现
    • 3.1抽象类(User)实现
    • 3.2管理员类(AdminUser)实现
    • 3.3用户类(NormalUser )实现
    • 4、主方法类(Main)实现
  • 五、效果展示

一、需求分析

本次就将使用java语言中的多态,继承,封装,接口,数组,动态绑定等知识点,来综合性的设计与实现出一个简易的图书管理系统.

二、思路分析

    1. 我们需要将书的属性进行封装,同时设立一个书架类,即存放的是书的数组。
    1. 我们需要实现管理员能够添加书籍,查找书籍,删除书籍以及显示书籍;
    1. 读者能够实现查找书籍,借阅书籍以及归还书籍
    1. 以上功能都是对书架进行操作的,所以我们可以设置一个接口实现
    1. 我们需要区分出管理员与普通用户,不同的用户所展示的界面不同,利用继承和多态可以实现这一思路;
    1. 我们根据功能分配包便于清楚分析问题

三、包分类

在这里插入图片描述

四、模块代码展示

1.1书籍类(Book)实现

package Book;

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed = false;//默认未被借出

    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) {
        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 +
                '}';
    }
}

1.2书架类(BookList类)实现

package Book;

public class BookList {
    private int BooksNum;//图书种类数
    private static final int BOOKSNUM = 10;
    private Book[] book = new Book[BOOKSNUM];

    public BookList()
    {
        book[0]=new Book("三国演义","罗贯中",89,"名著");
        book[1]=new Book("斗破苍穹","天蚕土豆",10,"玄幻小说");
        book[2]=new Book("高等数学上","同济大学",45,"教科书");
        this.BooksNum=3;
    }

    public int getBooksNum() {
        return BooksNum;
    }

    public void setBooksNum(int booksNum) {
        BooksNum = booksNum;
    }

    public Book getBook(int x) {
        return book[x];
    }

    public void setBook(Book book,int pos) {
        this.book[pos] = book;
    }

}

2.1功能接口(IOperation)实现

package Method;
import Book.BookList;

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

2.2增加图书(Addoperation)实现

package Method;
import Book.Book;
import Book.BookList;

import java.util.Scanner;

//增加图书
public class Addoperation implements IOperation  {
    @Override
    public void work(BookList bookList){
        System.out.println("增加图书:");
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入书名:");
        String name =sc.nextLine();
        System.out.println("请输入作者:");
        String author =sc.nextLine();
        System.out.println("请输入类型:");
        String type =sc.nextLine();
        System.out.println("请输入价格:");
        int price =sc.nextInt();

        Book newbook = new Book(name,author,price,type);
        int tmp=bookList.getBooksNum();
        for (int i = 0; i < tmp; i++) {
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println("该书已经存在,不可重复添加!");
                return ;
            }
        }

        bookList.setBook(newbook,tmp);
        bookList.setBooksNum(tmp+1);
    }
}

2.3删除图书(DelOperation)实现

package Method;

import Book.Book;
import Book.BookList;
import java.util.Scanner;

public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList){
        System.out.println("请输入删除图书名称:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();

        for(int i=0;i<bookList.getBooksNum();i++){
            if(bookList.getBook(i).getName().equals(name)){
                int j=0;
                for (j = i; j < bookList.getBooksNum()-1; j++) {
                    bookList.setBook(bookList.getBook(j+1),j);
                }
                bookList.setBooksNum(bookList.getBooksNum()-1);
                bookList.setBook(null,j);
                System.out.println("删除成功!");
                return ;
            }
        }
        System.out.println("删除失败,未找到该图书!");
    }
}

2.4查找图书(FindOperation)实现

package Method;

import Book.BookList;
import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入你要查找的图书:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int tmp= bookList.getBooksNum();
        for (int i = 0; i < tmp; i++) {
            if (bookList.getBook(i).getName().equals(name) ) {
                System.out.println(bookList.getBook(i));
                return;
            }
        }
        System.out.println("查找失败!");
    }
}

2.5阅览书架(ShowOperation)实现

package Method;

import Book.BookList;

public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("藏书展示!");
        for(int i=0;i< bookList.getBooksNum();i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

2.6借阅图书(BrrowOperation)实现

package Method;

import Book.Book;
import Book.BookList;
import java.util.Scanner;

public class BrrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        Scanner sc = new Scanner(System.in);
        System.out.println("借阅图书:");
        System.out.println("请输入你要借阅的图书:");
        String name = sc.nextLine();

        for(int i=0;i< bookList.getBooksNum();i++){
            if(bookList.getBook(i).getName().equals(name)&&(!bookList.getBook(i).isBorrowed())){
                bookList.getBook(i).setBorrowed(true);
                System.out.println("借阅成功!");
                return ;
            }
        }

        System.out.println("借阅失败,未找到该图书,可能是已经被借出导致!");
    }
}

2.7归还图书(ReturnOperation)实现

package Method;

import Book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入你要归还的图书:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        for (int i = 0; i < bookList.getBooksNum(); i++) {
            if (bookList.getBook(i).getName().equals(name) && (bookList.getBook(i).isBorrowed())) {
                bookList.getBook(i).setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
        System.out.println("归还失败!");
    }
}

2.8退出系统(Exit)实现

package Method;

import Book.BookList;

public class Exit implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统");
        System.exit(-1);
    }
}

3.1抽象类(User)实现

package User;

import Book.BookList;
import Method.IOperation;

public abstract class User {
    protected String name ;
    protected IOperation[] iOperations;

    public abstract int menu();

    public User(String name) {
        this.name = name;
    }

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

3.2管理员类(AdminUser)实现

package User;
import Method.*;
import Method.IOperation;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        this.iOperations = new IOperation[]{
                new Exit(),
                new FindOperation(),
                new Addoperation(),
                new DelOperation(),
                new ShowOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("****************************");
        System.out.println("hello "+name+" 欢迎来到图书小练习");
        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.3用户类(NormalUser )实现

package User;

import Method.*;
import Method.IOperation;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);
        this.iOperations = new IOperation[]{
                new Exit(),
                new FindOperation(),
                new BrrowOperation(),
                new ReturnOperation(),
                new DelOperation()
        };
    }

    public int menu() {
        System.out.println("****************************");
        System.out.println("hello "+name+" 欢迎来到图书小练习");
        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;
    }
}

4、主方法类(Main)实现

package Main;

import Book.BookList;
import User.AdminUser;
import User.NormalUser;
import User.User;

import java.util.Scanner;

public class Main {
    public static User func() {
        System.out.println("请输入你的姓名:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        System.out.println("请选择你的身份:1.管理员;2.用户");
        int choice = sc.nextInt();
        if (choice==1){
            return new AdminUser(name);
        } else {
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        User user = func();
        BookList bookList = new BookList();
        while (true) {
            int choice = user.menu();
            user.DoWork(choice, bookList);
        }
    }
}

五、效果展示

具体功能较多,就不一一演示了,我们给出部分运行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20663.html

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

相关文章

家庭实验室系列文章-电脑如何配置网络唤醒 (WOL)?

前言 其实这个专题很久很久之前就想写了&#xff0c;但是一直因为各种原因拖着没动笔。 因为没有资格&#xff0c;也没有钱在一线城市买房 (&#x1f602;&#x1f602;&#x1f602;); 但是在要结婚之前&#xff0c;婚房又是刚需。 我和太太最终一起在一线城市周边的某二线城…

Pyspark学习笔记小总

pyspark官方文档: https://spark.apache.org/docs/latest/api/python/index.html pyspark案例教程: https://sparkbyexamples.com/pyspark-tutorial/ 1. 写在前面 这篇文章记录下最近学习的有关Pyspark以及用spark sql去处理大规模数据的一些常用语法&#xff0c;之前总觉得p…

中小企业办公自动化系统设计与实现(SSH)

目 录 摘 要 I ABSTRACT II 目 录 IV 第1章 绪论 1 1.1 课题背景 1 1.1.1 办公自动化概述 1 1.1.2 中小企业办公模式的现状 2 1.2 研究意义 3 1.3 设计技术及开发环境 5 1.3.1 设计技术 5 1.3.2 开发环境 7 第2章 可行性分析 9 2.1 组织和管理可行性 9 2.2 经济可行性 9 2.3 技…

动态规划模板总结(1)

动态规划思想(1) 背包问题 ​ 分类&#xff1a; 01 背包问题 ​ 含义&#xff1a;每个物体最多选1次&#xff0c;在不超过总体积的情况下价值最大图解&#xff1a; f(i,j)表示的是集合的某种属性&#xff0c;是个值。 集合是所有选法 i 只从前i个中选 朴素实现 #include&…

ElasticSearch是什么?ElasticSearch在SpringBoot中怎么用?SpringBoot整合ElasticSearch

写在前面&#xff1a; 继续记录自己的SpringBoot学习之旅&#xff0c;这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 3.4.3.4 ElasticSearch(ES) 3.4.3.4.1 介绍 是一个…

MySQL JDBC编程

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;MySQL &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 文章目录前置知识APIJDBC的使用安装数据库代码插入操作查找操作前置知识 API API(Application Program Interface)被定义为应用程…

金属纳米颗粒图像分割和计数

代码下载链接&#xff0c;直接上程序运行的效果&#xff1a; 为了便于大家学习&#xff0c;把原图也都贴上了&#xff1a;

乐趣国学—品读《弟子规》中的“亲仁”之道

文章目录亲仁同是人 类不齐 流俗众 仁者希果仁者 人多畏 言不讳 色不媚能亲仁 无限好 德日进 过日少不亲仁 无限害 小人进 百事坏亲仁 “亲仁”&#xff0c;亲是亲近、学习的意思&#xff0c;亲近那些有道德、有学问、有人生境界、有情操的人&#xff0c;这是讲择师。一个人的学…

【Redis】配置项与发布订阅

一、配置项 redis相关配置项都存放在redis.conf文件中&#xff0c;暂时只列举常见的几个&#xff0c;其余的工作中用到再回来更新 1、网络 bind&#xff1a;指定redis只能接受来自此IP绑定的网卡的请求&#xff0c;注意此默认值默认外网是不可访问的&#xff0c;如果想要开启…

Unity3D制作塔防类游戏

演示 功能简介 制作细节详解 演示 资源包:链接&#xff1a;https://pan.baidu.com/s/15MMtYeKkNk5xChvCx0EckQ?pwdd1ub 提取码&#xff1a;d1ub 对应视频教学:01-开始介绍和创建工程_哔哩哔哩_bilibili 功能简介 分为蓝&#xff0c;紫&#xff0c;粉&#xff0c;红四…

[iOS]UI分析工具Reveal

Reveal是ITTY BITTY发布的UI分析工具&#xff0c;可以很直观的查看App的UI布局。 去官网下载安装Reveal&#xff0c;启动后样式如下。 下面介绍一下如何在非越狱设备和越狱设备上用Reveal工具分析UI 一、非越狱设备用Reveal分析UI 1.安装MonkeyDev 安装流程可查看前文[iOS]…

2. Java线程模型

1. 操作系统线程 无论使用何种编程语言编写多线程程序&#xff0c;最终都是通过调用操作系统的线程来执行任务。线程是CPU调度的最小执行单元。 线程有多种实现方式&#xff0c;常见的有&#xff1a;内核线程、用户线程、混合线程。 不同线程模型的主要区别在于线程的调度方不…

bat脚本启动Java服务

bat脚本启动Java服务1.终端cmd窗口运行jar2. bat脚本启动jar包3.后台启动bat脚本4. 运行bat只启动一次jar服务及停止脚本5.注意事项6.所用资源1.终端cmd窗口运行jar Java项目一般会被打包成jar后启动&#xff0c;在windows系统中可以通过终端窗口cmd启动jar包&#xff0c;即在…

5G无线技术基础自学系列 | 移动通信网络的架构

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 第五代(5thGeneraton&#xff0c; 5G) …

计算机中的第一个伟大发明(IR/IAR)

计算机工具的普及极大的推动了科技领域的发展以及提高人们生活的便捷性&#xff0c;那么在其中有哪些举足轻重的发明呢&#xff1f;本节我们来了解一下计算机中第一个伟大的发明&#xff1a;指令寄存器和指令地址寄存器 回顾在步进器加持下的两数两加 前面提到两个数相加的执行…

PyCharm运行PyQT6 (四) 百篇文章学PyQT

本文章是百篇文章学PyQT的第四篇&#xff0c;本文讲述如何使用PyCharm成功运行PyQT6&#xff0c;PyCharm在配置过程中会遇到很多问题&#xff0c;博主在本篇文章中将遇到和踩过的坑总结出来&#xff0c;可以供大家参考&#xff0c;希望大家安装顺利。包括 安装、遇到问题的解决…

Intel芯片、AMD显卡有多强?M1系列呢?

我们知道英特尔是半导体行业和计算创新领域的全球领先厂商 &#xff0c;创始于1968年。如今&#xff0c;英特尔正转型为一家以数据为中心的公司 。英特尔与合作伙伴一起&#xff0c;推动人工智能、5G、智能边缘等转折性技术的创新和应用突破 &#xff0c;驱动智能互联世界。…

【由浅入深 - Java笔记】玩转List:List过滤和筛选

文章目录List过滤&#xff1a;Comparator、Comparable 和 Stream1. 使用list的Stream进行筛选2. 增强for循环遍历元素&#xff0c;进行筛选3. 使用list.foreach遍历4. 使用iterator遍历5. 视频笔记List过滤&#xff1a;Comparator、Comparable 和 Stream 花时间精力去凿许多浅井…

5G无线技术基础自学系列 | 移动通信网络的演进

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 随着移动用户数量的不断增加&#xff0…

mac系统安装搭载Windows系统虚拟机方法教程

我们都知道macOS系统虽然相对windows系统而言更稳定&#xff0c;但macOS系统中可使用的软件数量较windows系统而言要少很多。对于macOS系统应用少的问题&#xff0c;我们可以使用虚拟机来解决。那么&#xff0c;苹果虚拟机好用吗&#xff1f;整体而言是可以的。苹果虚拟机怎么装…