实现图书管理系统

news2024/11/5 5:28:38

1. 图书管理系统菜单

如上图给用户选项

1. 管理员

2. 普通用户

2. 实现基本框架

 右键点src,选择new,选择Package命名三个包  book  operation  user

1.先选择book包,new两个类 book  bookList 

在book类中定义书的基本属性,并重写toString方法,构造方法 ,以及实现成员变量的Getter and Setter方法

在bookList类中定义一个一个数组储存图书Book[],以及一个usedSize记录图书的数量,重写构造方法,并实现成员变量的Getter and Setter方法

 

 

 2. 选择operation包,创建一个接口并创建work方法(抽象方法),规范包中的类

package operation;

import book.BookList;

public interface IOperation {
    void work();
}

 

命名以上的类,并重写work方法

3. 选择user包,创建User类,AdminUser类,NormalUser类,让前者作为父类

在User类中定义name接受用户名,并创建抽象方法menu模拟进入程序

public abstract class User {
    protected String name;
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
}

程序的入口 

package book;
import user.*;
import java.util.Scanner;

public class Main {
    public static User login(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的名字: ");
        String name = scanner.nextLine();
        System.out.println("请输入你的身份: ");
        System.out.println("1. 管理员        0. 普通用户");
        int choice = scanner.nextInt();
        if(choice == 1){
            AdminUser adminUser = new AdminUser(name);
            return adminUser;
        }else{
            NormalUser normalUser = new NormalUser(name);
            return normalUser;
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while (true){
            int choice = user.menu();
            user.doOperation(choice,bookList);
        }
    }
}

3. 实现业务 

3.1 借阅图书

package operation;

import book.*;

import java.util.Scanner;

public class BorrowedOperation 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 book1 = booklist.getBook(i);
            if(book1.getName().equals(name)) {
               if(!book1.isBorrowed()){
                   book1.setBorrowed(true);
                   System.out.println("借阅成功");
               }else{
                   System.out.println("这本图书已经被借走了:");
               }
               return;
            }
        }
        System.out.println("书架上内有你要借阅的图书:");
    }
}

3.2 查找图书

package operation;

import book.*;

import java.util.Scanner;

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 < booklist.getUsedSize(); i++) {
            Book book = booklist.getBook(i);
            if(book.getName().equals(name)){
                System.out.println("找到了你要找的书: ");
                System.out.println(book);
                return;
            }
        }
        System.out.println("书架上没有这本书!");
    }
}

3.3 归还图书

package operation;

import book.*;

import java.util.Scanner;

public class ReturnOperation 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 book1 = booklist.getBook(i);
            if(book1.getName().equals(name)){
                if(!book1.isBorrowed()){
                   System.out.println("这本图书没有被借走");
                }else{
                   book1.setBorrowed(false);
                    System.out.println("归还成功");
                }
                return;
            }
        }
        System.out.println("没有你要归还的图书");
    }
}

3.4 新增图书

package operation;

import book.*;

import java.util.Scanner;

public class AddOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("增加图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入书名;");
        String name = scanner.nextLine();
        System.out.println("请输入作者名;");
        String author = scanner.nextLine();
        System.out.println("请输入价格;");
        int price = scanner.nextInt();
        scanner.nextLine();
        System.out.println("请输入类型;");
        String style = scanner.nextLine();
        Book book = new Book(name,author,price,style);
        int currentSize = booklist.getUsedSize();
        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);
    }
}

3.5 删除图书

package operation;

import book.*;

import java.util.Scanner;

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();
        if(currentSize == 0){
            System.out.println("书架为空:");
            return;
        }
        int index = -1;
        for (int i = 0; i < currentSize; i++) {
            Book book1 = booklist.getBook(i);
            if(book1.getName().equals(name)) {
                index = i;
                break;
            }
        }
        if(index == -1){
            System.out.println("书架上没有这本书:");
            return;
        }
        for (int i = index; i < currentSize; i++) {
            Book book1 = booklist.getBook(i+1);
            booklist.setBook(i,book1);
        }
        booklist.setUsedSize(currentSize-1);
    }
}

3.6 显示图书

package operation;

import book.*;

public class ShowOperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("展示图书");
        int currentSize = booklist.getUsedSize();
        for (int i = 0; i < booklist.getUsedSize(); i++) {
            Book book = booklist.getBook(i);
            System.out.println(book);
        }
    }
}

3.7 退出系统

package operation;

import book.Book;
import book.BookList;

public class ExitOperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("退出系统");
        for (int i = 0; i < booklist.getUsedSize(); i++) {
            booklist.setBook(i,null);
        }
        booklist.setUsedSize(0);
        System.exit(0);
    }
}

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

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

相关文章

Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记

Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记 这是新国立和新加坡管理大学发表在ECCV2024上的一篇image restoration的文章&#xff0c;提出了一个新的网络结构ECMA&#xff0c;从实验结果上看在超分&#xff0c;去噪&#xff0c;去模糊…

不需要复制粘贴,重复内容如何使用Mac快速完成输入

在Mac的日常使用中&#xff0c;必然有着重复内容需要重复输入的需求&#xff0c;但是Mac的剪切板又不具备历史记录的功能&#xff0c;所以只能一次次的复制粘贴&#xff0c;费时费力&#xff0c;那么该如何才能不这么麻烦 快捷短语就是为了解决这一问题而存在的 提前在设置好…

ubuntu20.04 加固方案-设置限制su命令用户组

一、编辑/etc/pam.d/su配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/pam.d/su文件。 vim /etc/pam.d/su 二、添加配置参数 在打开的配置文件的中&#xff0c;添加以下参数&#xff1a; auth required pam_wheel.so 创建 wheel 组 并添加用户 …

002 配置YUM国内镜像源

打开XShell 工具&#xff0c;连接Linux 选择上次的连接&#xff0c;直接双击。 具体连接步骤&#xff0c;参考前面的内容001 编辑YUM默认配置文件 /etc/yum.repos.d/CentOS-Base.repo 是YUM的默认配置文件。 修改这个文件&#xff0c;将其中的内容替换成国内的镜像源 输入下…

【工具变量】大数据管理机构改革DID(2007-2023年)

数据简介&#xff1a;数字ZF是指以新一代信息技术为支撑&#xff0c;重塑政务信息化管理架构、业务架构、技术架构的现代化治理模式。随着数字政府的建设&#xff0c;特别是借助大数据等新一代数字技术&#xff0c;极大地提升了政府的治理能力&#xff0c;从而起到辅助监管机构…

WPF+MVVM案例实战(二十一)- 制作一个侧边弹窗栏(AB类)

文章目录 1、案例效果1、侧边栏分类2、AB类侧边弹窗实现1.文件创建2、样式代码与功能代码实现3、功能代码实现 3 运行效果4、源代码获取 1、案例效果 1、侧边栏分类 A类 &#xff1a;左侧弹出侧边栏B类 &#xff1a;右侧弹出侧边栏C类 &#xff1a;顶部弹出侧边栏D类 &#xf…

【WebRTC】WebRTC的简单使用

目录 1.下载2.官网上的使用3.本地的使用 参考&#xff1a; 【webRTC】一、windows编译webrtc Windows下WebRTC编译 1.下载 下载时需要注意更新python的版本和网络连接&#xff0c;可以先试试ping google。比较关键的步骤是 cd webrtc-checkout set https_proxy127.0.0.1:123…

从 vue 源码看问题 — 如何理解 vue 响应式?

书接上回 上一篇 我们通过 Vue 源码了解并总结了&#xff0c;Vue 初始化时需要进行哪些处理&#xff0c;其中遇到响应式的相关内容时选择了略读&#xff0c;没有进行深入了解&#xff0c;那么本篇就开始深入解读 Vue 响应式. 深入源码 响应式入口 根据上一篇 vue 初始化都做…

动态规划理论基础和习题【力扣】【算法学习day.22】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

Django3 + Vue.js 前后端分离书籍添加项目Web开发实战

文章目录 Django3后端项目创建切换数据库创建Django实战项目App新建Vue.js前端项目 Django3后端项目创建 创建Django项目&#xff0c;采用Pycharm或者命令行创建皆可。此处&#xff0c;以命令行方式作为演示&#xff0c;项目名为django_vue。 django-admin startproject djang…

论文翻译 | Evaluating the Robustness of Discrete Prompts

摘要 离散提示已被用于调整预训练语言模型&#xff0c;以适应不同的NLP任务。特别是&#xff0c;从一小组训练实例中生成离散提示的自动方法已经报告了优越的性能。然而&#xff0c;仔细观察习得的提示会发现&#xff0c;它们包含嘈杂和反直觉的词汇结构&#xff0c;而这些在手…

自适应对话式团队构建,提升语言模型代理的复杂任务解决能力

人工智能咨询培训老师叶梓 转载标明出处 如何有效利用多个大模型&#xff08;LLM&#xff09;代理解决复杂任务一直是一个研究热点。由美国南加州大学、宾夕法尼亚州立大学、华盛顿大学、早稻田大学和谷歌DeepMind的研究人员联合提出了一种新的解决方案——自适应团队构建&…

linux之网络子系统- TCP连接的开销,主要是内存的开销

一、相关实际问题 内核是如何管理内存的如何查看内核使用的内存信息服务器上一条ESTABLISH状态的空连接需要消耗多少内存机器上出现了3万多个TIME_WAIT&#xff0c;内存开销会不会很大 二、Linux内核如何管理内存 内核针对自己的应用场景&#xff0c;使用了一种叫做SLAB/SLU…

企业AI助理驱动的决策支持:从数据洞察到战略执行

在当今瞬息万变的商业环境中&#xff0c;企业面临着前所未有的竞争压力和不确定性。为了保持竞争力&#xff0c;企业不仅需要迅速响应市场变化&#xff0c;还需要做出基于数据的明智决策。随着人工智能技术的飞速发展&#xff0c;企业AI助理正在成为决策过程中的重要工具&#…

二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

文章目录 零、前言一、应用层协议原理1.1 网络应用的体系结构1.1.1 客户-服务器(C/S)体系结构1.1.2 对等体&#xff08;P2P&#xff09;体系结构1.1.3 C/S 和 P2P体系结构的混合体 1.2 进程通信1.2.1 问题1&#xff1a;对进程进行编址&#xff08;addressing&#xff09;&#…

02-Dubbo特性及工作原理

02-Dubbo特性及工作原理 Dubbo 的特性 这里说一下 Dubbo 最主要的特性&#xff0c;从这些特性中&#xff0c;就可以看出来我们为什么要选用 Dubbo&#xff0c;也可以将 Dubbo 和 Spring Cloud 进行对比&#xff0c;比如我们搭建一套微服务系统&#xff0c;出于什么考虑选用 Dub…

通义灵码AI程序员你在用吗?

大家好&#xff0c;我是袁庭新。之前给大家介绍过AI编码助手——通义灵码&#xff0c;这期给大家分享通义灵码AI程序员的一些功能。 随着大模型的持续进化&#xff0c;在语义理解、代码生成、开发工作流等方面的能力也获得了持续、全面的提升。你说&#xff0c;要是有个编程小…

好难的题啊

序&#xff1a; 1.极坐标本质为变化的圆&#xff1a;动曲线---》格林公式 2.曲线积分常见的化简就是对dx&#xff0c;dy进行操作&#xff0c;这要求寻找到合适函数&#xff0c;而极坐标就是天然的函数&#xff08;参数方程&#xff09; 3.重积分--》累次积分--》单独看其中一…

大学适合学C语言还是Python?

在大学学习编程时&#xff0c;选择C语言还是Python&#xff0c;这主要取决于你的学习目标、专业需求以及个人兴趣。以下是对两种语言的详细比较&#xff0c;帮助你做出更明智的选择&#xff1a; C语言 优点&#xff1a; 底层编程&#xff1a;C语言是一种底层编程语言&#x…

开源模型应用落地-Qwen2.5-7B-Instruct与TGI实现推理加速

一、前言 目前&#xff0c;大语言模型已升级至Qwen2.5版本。无论是语言模型还是多模态模型&#xff0c;均在大规模多语言和多模态数据上进行预训练&#xff0c;并通过高质量数据进行后期微调以贴近人类偏好。在本篇学习中&#xff0c;将集成 Hugging Face的TGI框架实现模型推理…