Java小项目【图书馆系统】

news2024/11/25 12:50:45

一、设计图书馆系统

Java是一个面向对象的语言,在编写代码的之前,我们要先确定有哪些对象

图书馆,首先有很多书,还有书架来放置这些书。然后是对书进行操作的人,比如普通用户和管理员。最后是对关于书的各种操作,例如:对于普通用户,借书、还书等等。对于管理员,添加书籍、查找书籍等等。

大致结构如图

 二、代码实现

1.book包

1)book

package book;

/**
 * 书籍
 */
public class Book {
    private String name;//书名
    private String auther;//作者
    private int Price;//价格
    private String type;//书籍类型
    private boolean isBorrowed;//是否被借出


    public Book(String name, String auther, int price, String type) {
        this.name = name;
        this.auther = auther;
        Price = price;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuther() {
        return auther;
    }

    public void setAuther(String auther) {
        this.auther = auther;
    }

    public int getPrice() {
        return Price;
    }

    public void setPrice(int price) {
        Price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", auther='" + auther + '\'' +
                ", Price=" + Price +
                ", type='" + type + '\'' +
                ((isBorrowed == true)?", 已经借出":", 未被借出")  +
               // ", num=" + num +
                '}';
    }
}

2)booklist

package book;

/**
 * 书架
 */
public class BookList {
    private Book[] books; //书架
    private int usedSize;//记录当前书架上 实际存放的数量,默认为0
    public BookList() {
        this.books = new Book[10];//初始化书架的大小
        //书架上原本有的书籍
       books[0] = new Book("三国演义","罗贯中",10,"小说");
       books[1] = new Book("西游记","吴承恩",10,"小说");
       books[2] = new Book("水浒传","曹雪芹",10,"小说");
       this.usedSize = 3;//现有书籍数量为3

    }

    public int getUsedSize() {
        return usedSize;
    }

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

    //传入下标,返回该下标的书籍信息
    public Book getBook(int pos){
        return this.books[pos];
    }

    //设置该下标为某本书
    public void setBooks(int pos,Book book){
        this.books[pos]=book;
    }

    public int getBooksNum(){
        return books.length; //获取书架容量
    }
}

2.operation包

1)AddOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书!");

        //判断容量是否满了
        int currentSize = bookList.getUsedSize();
        if (currentSize == bookList.getBooksNum()){
            System.out.println("书架容量已满,无法继续添加书籍!!");
            return;
        }
        //没满就继续添加书籍信息
        Scanner scanner = new Scanner(System.in);

        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);//实例化书籍对象

        //遍历数组,是否有这本书,提示有或无,并且增加数量
        for (int i = 0; i < currentSize; i++) {
            if (name.equals(bookList.getBook(i).getName())){
                System.out.println("已有这本书,不进行存放了!");
                return;
            }
        }
        bookList.setBooks(currentSize,book);
        bookList.setUsedSize(currentSize+1);
    }
}

2)BorrowOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOperation {
    @Override
    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 book = bookList.getBook(i);
            if(name.equals(book.getName())){
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("该书不存在!!");

    }
}

3)  DelOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOperation{

    @Override
    public void work(BookList bookList) {
        //System.out.println("删除图书!");
        //判断容量是否为0了,能不能继续删下去

        //输入书名,看看有没有这本书,有才能删
        System.out.println("请输入要删除的书名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        //找这本书,记录下标pos
        int pos = -1;
        int currentSize = bookList.getUsedSize();
        int i = 0;
        for ( ; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if (name.equals(book.getName())){
               pos = i;
               break;
            }
        }
        if(currentSize == i){
            System.out.println("没有你要删除的书!!");
            return;
        }

       //开始删除
        int j = pos;
        for (; j < currentSize-1; j++) {
            Book book = bookList.getBook(j+1);
            bookList.setBooks(j,book);
        }
        bookList.setBooks(j,null);
        bookList.setUsedSize(currentSize-1);
    }
}

4)  ExitOperation

package operation;

import book.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.exit(0);
        System.out.println("退出图书系统!");

    }
}

5)  FindOperation

package operation;

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 bookname = scanner.nextLine();
        //遍历数组
        int currentSize = bookList.getUsedSize();//当前已有书籍数量
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);//获取每一本书
            if (bookname.equals(book.getName())){
                System.out.println("找到了这本书,信息如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到这本书!!");
    }
}

6)  IOperation

package operation;

import book.BookList;

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

7)  ReturnOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOperation{
    @Override
    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 book = bookList.getBook(i);
            if(name.equals(book.getName())){
                book.setBorrowed(false);
                System.out.println("归还成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("该书不存在!!");
    }
}

8)  ShowOperation

package operation;

import book.BookList;

public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        //System.out.println("打印图书!");
        int currentSize = bookList.getUsedSize();//当前已有书籍的数量
        for (int i = 0; i < currentSize; i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

3.user包

1)  AdminUser

package user;

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 ShowOperation()
        };
    }

    public int menu(){
        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("******************************");

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入操作");
        int choice = scanner.nextInt();
        return choice;
    }
}

2)  NormalUser

package user;

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(),
                new ShowOperation()
        };
    }

    public int menu(){
        System.out.println("************普通用户**********");
        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);
        System.out.println("请输入操作");
        int choice = scanner.nextInt();
        return choice;
    }
}

3)  User

package 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 doOperation(int choice, BookList bookList){
        iOperations[choice].work(bookList);
    }
}

4.主函数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.管理员 2.普通用户");
        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){
            //choice 指向的对象 菜单返回的(操作数字)
            int choice = user.menu();
            System.out.println("操作数:"+choice);
            //根据choice 的选择 来调用对应的方法

            user.doOperation(choice,bookList);
        }

    }
}

1)管理员操作效果 

2)普通用户操作效果

 

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

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

相关文章

如何检测勒索软件攻击

什么是勒索软件 勒索软件又称勒索病毒&#xff0c;是一种特殊的恶意软件&#xff0c;又被归类为“阻断访问式攻击”&#xff08;denial-of-access attack&#xff09;&#xff0c;与其他病毒最大的不同在于攻击方法以及中毒方式。 攻击方法&#xff1a;攻击它采用技术手段限制…

软件系统第三方检测费标准

收费标准 软件系统第三方检测收费标准&#xff1a; 行业内对于第三方软件测试报告并没有一个明确的收费标准&#xff0c;不同地域之间的收费不同&#xff0c;各个检测单位的报价也略有差异。第三方检测报告的收费标准需要根据具体的测试需求而定&#xff0c;一般是按照项目大…

“算力+运力”扇动双翼,制造算力时代的蝴蝶效应

8月18日-20日&#xff0c;第二届中国算力大会在宁夏银川成功举办。 今年以来&#xff0c;随着大模型、AIGC等新技术的火爆&#xff0c;站在舞台中央的算力承载了无尽的期待&#xff0c;发展数字经济需要以算力基础设施为前提&#xff0c;社会各界已经形成了共识。 与此同时&…

一文速学-让神经网络不再神秘,一天速学神经网络基础(五)-最优化

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…

Kafka系列三基础概念

文章首发于个人博客&#xff0c;欢迎访问关注&#xff1a;https://www.lin2j.tech Kafka 是一款分布式消息发布和订阅系统&#xff0c;其高性能、高吞吐量的特点决定了其适用于大数据传输场景。 基础概念 Broker Broker 其实就是一个运行 Kafka 服务的服务器。Kafka 集群包…

chatGPT训练过程

强化学习基础 强化学习是指智能体在不确定环境中最大化其获得的奖励从而达到自主决策的目的。其执行过程为&#xff1a;智能体依据策略决策从而执行动作&#xff0c;然后感知环境获取环境的状态&#xff0c;进而得到奖励(以便下次再到相同状态时能采取更优的动作)&#xff0c;…

(java)进程和线程的联系和区别 。Java如何进行多线程编程?Thread 类及常见方法。

目录 进程 1.进程具有独立性 ———— 虚拟地址空间 线程 为什么要引入多个线程&#xff1f; 多线程注意点 ⁜⁜总结&#xff1a;线程和进程的区别和联系⁜⁜ &#xff08;经典面试题&#xff09; Java如何进行多线程编程&#xff1f; 创建线程 ——方法1 继承 Thre…

webrtc 的Bundle group 和RTCP-MUX

1&#xff0c;最近调试程序的时候发现抱一个错误 max-bundle configured but session description has no BUNDLE group 最后发现是一个参数设置错误 config.bundle_policy webrtc::PeerConnectionInterface::BundlePolicy::kBundlePolicyMaxBundle; 2&#xff0c;rtcp-mu…

SpringBoot项目,执行install命名时,控制台显示:Unable to find main class

构建springboot多模块项目&#xff0c;启动时可以正常启动&#xff0c;执行了父工程的maven的clean也没问题&#xff0c;执行install的时候就报错了&#xff1a;Unable to find main class。显而易见 这个错是找不到主类。 记录下解决过程&#xff1a; 首先看自己项目的父工程…

膦酸基官能团高盐环境下去除钙镁离子树脂

项目名称 某新能源公司除钙镁项目 工艺选择 串联运行 工艺原理 膦酸基官能团高盐环境下去除钙镁离子 项目背景 锂及其盐类是国民经济和国防建设中具有重要意义的战略物资&#xff0c;也是与人们生活息息相关的能源材料。而碳酸Li作为锂盐的基础盐&#xff0c;是制取锂化…

Matlab 基本教程

1 清空环境变量及命令 clear all % 清除Workspace 中的所有变量 clc % 清除Command Windows 中的所有命令 2 变量命令规则 &#xff08;1&#xff09;变量名长度不超过63位 &#xff08;2&#xff09;变量名以字母开头&#xff0c; 可以由字母、数字和下划线…

vue3路由跳转以及传参。和vue2路由跳转传参的区别

路由的安装和引入以及注册就不过多赘述&#xff0c;直接说区别和怎么跳转页面 vue2路由跳转以及传递参数 vue2只需要创建好router文件夹和index.js&#xff0c;配置好我们的路由&#xff0c;在main.js引入 import router from "/router"; // vue路由app.use(route…

如何避免重复消费消息

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

【函数栈帧解析:代码的迷人堆积和无限嵌套】

本章重点 一、何为函数栈帧 二、函数栈帧特性 - 同栈 - 后进先出 三、认识内存空间布局图 四、认识相关寄存器 五、认识相关汇编命令 六、测试代码&#xff1a; 七、函数栈帧全过程 要解决的问题​​​​​​​ 局部变量是怎么创建的&#xff1f;为什么局部变量的值是随机值&am…

10项必备的IT国际认证

10项必备国际IT认证对于希望在数字时代提升职业生涯的专业人士来说&#xff0c;已成为一项重要资产。 此类认证不仅肯定了你在特定IT领域的专业知识&#xff0c;还展现了你会在以后的生涯中不断学习和专业成长的决心。为了帮助你查询这些选择&#xff0c;我们编制了一份2023年…

华为OD机试 - 租车骑绿道 - 双指针(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路1、输入2、输出3、说明4、双指针算法 五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 部门组织绿岛骑行团建活动&#xff0c;租用公共双人自行车骑行&#xff0c;…

装箱、拆箱

装箱&#xff1a;将基本类型用它们对应的引用类型包装起来&#xff1b;拆箱&#xff1a;将包装类型转换为基本数据类型&#xff1b; Java 可以自动对基本数据类型和它们的包装类进行装箱和拆箱。 为什么要有包装器类型 因为java的三种集合&#xff0c;List、Set、Map&#xf…

【python零基础入门学习】python基础篇之判断与for循环(二)

本站以分享各种运维经验和运维所需要的技能为主 《python》&#xff1a;python零基础入门学习 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

iTOP-RK3588开发板Android12 设置系统默认不休眠

修改文件&#xff1a; device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults. xml 文件&#xff0c;如下图所示&#xff1a; - <integer name"def_screen_off_timeout">60000</integer> <integer name&q…

电子相册制作新技巧,让你惊叹不已!

​近年来&#xff0c;随着科技的不断进步&#xff0c;电子相册制作已经成为了一种流行的趋势。无论是记录旅行的美好瞬间&#xff0c;还是展示生活中的点滴幸福&#xff0c;电子相册都能够将这些珍贵的回忆永久保存下来。 在我们制作电子相册之前&#xff0c;我们需要选择一款专…