项目:《图书管理系统》

该博客介绍了一个基于Java实现的图书管理系统,涵盖了类与类之间的关系、抽象类、接口、封装、继承、多态等核心概念。系统包括简单登录、管理员和普通用户功能,如查找、新增、删除图书等。通过创建Book、BookList、User、IOperation等相关类,实现了系统的整合与操作。
摘要由CSDN通过智能技术生成

图书管理系统

项目目标

  • 熟悉类与类之间的关系
  • 掌握抽象类,接口,继承,封装,多态,向上转型,顺序表等知识点的应用

一:简介

该项目主要是,利用前面所学的知识点:类,抽象类,接口,封装,继承,多态,向上转型,顺序表等进行的一个简单的代码练习。

二:核心需求

1.简单的登录

2.管理员端

  • 查找图书
  • 新增图书
  • 删除图书
  • 显示所有图书
  • 退出系统

3.普通用户端

  • 查找图书
  • 借阅图书
  • 归还图书
  • 退出系统

三:类的设计

1.创建图书相关的类

先创建package book
创建Book类,表示一本书

package book;
public class Book {//创建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=" + isBorrowed +
                '}';
    }
}

创建BookList类,用来保存N本书

package book;
public class BookList {//创建BookList类用来保存N本书
    private Book[] books = new Book[100];//假设最大存放100本书
    private int usedSize = 0;
    public BookList(){//在构造方法中弄几个初始值方便后续测试
        books[0] = new Book("三国演义","罗贯中",100,"小说");
        books[1] = new Book("水浒传","施耐庵",100,"小说");
        books[2] = new Book("西游记","吴承恩",100,"小说");
        this.usedSize = 3;
    }
    //我们可以把所有的操作都写到这个类当中,因为每一个操作都是操作books
    public void setBooks(int pos,Book book){
        this.books[pos] = book;
    }
    public Book getBook(int pos){
        return this.books[pos];
    }
    public int getUsedSize() {
        return usedSize;
    }

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

2.创建操作相关的类

先创建package operation
再创建一个IOperation接口

package operation;
import book.BookList;
public interface IOperation {
    void work(BookList bookList);
}

接下来创建一组操作类,每个类对应一个用户的动作
在这里插入图片描述
先把空类创建好,不要着急实现细节
抽象出Operation的好处:让操作和操作之间低耦合,让操作和用户之间低耦合

3.创建用户相关的类

先创建package user
创建User类,这是一个抽象类

package user;

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

创建普通用户类,是User的子类

package user;

import operation.*;

import java.util.Scanner;
public class NormalUser extends User{
    public NormalUser(String name){
        super(name);
        this.operations = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }

    @Override
    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("0.退出系统");
        System.out.println("===============");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }

}

创建管理员用户类,这也是User的子类

package user;

import operation.*;

import java.util.Scanner;
public class Admin extends User {
    public Admin(String name){
        super(name);
        this.operations = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation()
        };
    }

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

}

4.进行整合

创建TestMain类搭建整体逻辑

import book.BookList;
import user.Admin;
import user.NormalUser;
import user.User;

import java.util.Scanner;
public class TestMain {
    public static User login(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名: ");
        String name = scanner.nextLine();
        System.out.println("请输入你的身份:1--》管理员,2--》普通用户");
        int choice = scanner.nextInt();
        if (choice == 1){
            return new Admin(name);
        } else {
            return new NormalUser(name);
        }
    }
    public static void main(String[] args) {
        //1.准备书籍
        BookList bookList = new BookList();
        //2.登录
        User user = login();
        while (true) {
            int choice = user.menu();//这里就用到了多态,引用谁的对象就调用谁的menu
            //选择是几,就可以对应哪个方法了
            user.doOperation(bookList, choice);
        }

    }
}

5.实现具体的每个Operation

  • 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("新增图书");
        //默认以尾插法的形式放进去
        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();
        System.out.println("请输入图书的类型: ");
        String type = scanner.next();//nextInt和nextLine不能在一起用,所以要将这里的nextLine改为next
        Book book = new Book(name,author,price,type);
        int curSize = bookList.getUsedSize();
        bookList.setBooks(curSize,book);
        bookList.setUsedSize(curSize+1);
        System.out.println("新增成功!");
    }

}

  • 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();
        for (int i = 0; i < bookList.getUsedSize();i++){
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){//判断输入的书名和库里的书名是否相等,目的是判断库里有没有要找的书
                //可以借阅
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
        System.out.println("没有你要借阅的那本书");
    }

}

  • 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("删除图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入删除图书的名字:");
        String name = scanner.nextLine();
        int i = 0;
        for (; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){
                break;
            }
        }
        if (i == bookList.getUsedSize()){
            System.out.println("没有这本书!");
            return;
        }
        //删除的逻辑和顺序表一样
        int pos = i;
        for (; pos < bookList.getUsedSize()-1; pos++) {
           Book book = bookList.getBook(pos+1);
           bookList.setBooks(pos,book);
        }
        bookList.setUsedSize(bookList.getUsedSize()-1);
        System.out.println("删除成功");
    }

}

  • DisOperation
package operation;

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.getBook(i);
            System.out.println(book);
        }
    }

}

  • ExitOperation
package operation;

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

  • 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("查找图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要查找图书的名字: ");
        String name = scanner.nextLine();
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){
                System.out.println(book);
                System.out.println("查找成功!");
                return;
            }
        }
        System.out.println("没有你要查找的那本书啊!");
    }
}

  • 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();
        for (int i = 0; i < bookList.getUsedSize() ; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)){
                book.setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
        System.out.println("没有你要归还的图书!");
    }
}

代码目录:
在这里插入图片描述

四:演示效果

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
主要功能有: 管理员功能模块: 用户管理:可以查看所有用户的用户信息,可以修改和删除用户的所有信息(包括自己的) ,另外还可以添加新的用户进来,让他们也成为本网站的会员 书籍管理:管理员可以在本网站任意添加书籍数据,里面有包括书籍的条形码,书名,作者,卖出价格,出版的年份,库存的数量。还可以对已添加的书籍进行删除和查询操作。 书籍管理:可以重新添加书籍,和修改删除已经添加了的书籍,主要是当库存不足的时候可以添加库存 订单管理:这个里面记录了会用用户下单后的一些总要信息:会员帐号,条形码,书名,作者,单格,出版的年份,购买的数量,总价,收货人的姓名,电话,联系人详细地址 收到反馈:这个里面主要是记录的会员人对书籍的一些反馈,比如书籍买完了,没有库存了,或者还需要购买哪些书籍,但是在这里没有看见,然后反馈给管理员,管理员看见后就会有相应的处理,比如加库存,进货新的书籍等等 普通用户模块: 用户信息:可以查看自己的信息,用户名和密码,也可以对密码进行修改。当密码找不到了,可以找管理员帮忙找回密码。 收货地址:会员用户可以添加自己的一些常用收货地址,里面包括了收件人的姓名,电话,和详细地址。可以新添加地址和对已添加的地址进行修改,如果地址非常地多,还可以根据电话和姓名或者详细地址的关键字来收索数据。 书籍订购:这个就是会员的主要功能了,当会员在我们的网站上面注册了会员之后,需要订购书籍的时候就是在这段操作的,点击进去就是所有管理员的发布的相关出售的书籍,写的非常详细,有条形码,书名,作者,单价,出版年份,库存,用户可以根据以上信息订购书籍,当书籍过多的时候,看的眼花缭乱的时候,用户可以根据你喜爱的书名或者作者来查找相关的书籍,或者你朋友购买了那本书,想推荐给你,书名给你后重复的书籍太多了,就直接把书籍的条形码给你了,你就可以根据这个条形码来查找对应唯一的书籍了。里面的单价也写地方非常清楚,可以根据自己的条件来购买相应价位的书籍。当你确定了需要某个书籍的时候,你只要将他加入自己的购物篮里面就可以了。 购物篮书籍:这个里面就是你的购物车了,里面都是你呀准备购买的书籍,数量都已经选好了的,你只需要选择对应的收货地址就可以提交订单了。 已付款书籍:这个里面就是你提交的一些历史订单数据,书籍名称,收件人详细地址都写的非常清楚。 给商家反馈:当用户想够买某个书的时候,但是库存已经不够了,就可以通过反馈给管理员传递信息,管理员就会做出相应的操作。或者用户想购买一些新书,但是本网站上面没有也可以反馈给管理员。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值