【Java SE】图书管理系统

 

目录

一.Book包

①Book 类的成员变量

②BookList 类

二.User 包

①User 抽象类(用来继承的)

②AdminUser 类 

③NomalUser类

三.Main类

四.ioperation包

①Ioperation 接口(用来继承)

②AddOperation类 

③BorrowOperation类

④DelOperation类

⑤ExitOperation类

⑥ FindOperation类

⑦ReturnOperation类

⑧ShowOperation类

五.

项目的优点

项目的不足


这个项目是一个简单的图书管理系统,主要功能包括图书的查找、新增、删除、显示、借阅和归还,同时支持管理员和普通用户两种角色。以下是项目的主要组成部分和功能

  1. 数据模型

    • Book:书籍实体
    • BookList:书籍集合管理
  2. 操作模块

    • IOPeration 接口及实现类:定义具体操作行为
  3. 用户模块

    • User 抽象类及子类:管理不同用户角色的权限
  4. 入口模块

    • Main:程序启动和流程控制

 

一.Book包

①Book 类的成员变量

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;

    //这里的 构造方法 不加 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) {
        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)? "已借出":"未借出" )+
                '}';
    }
}
  • 功能描述: 表示系统中的书籍实体,存储书籍基本信息和借阅状态
  •  为Book类  创建字段  并生成  构造方法  以及  getter和setter方法  还有  toString方法(包含借阅状态)

这里的  构造方法  没有为  isBorrowed  生成构造方法  原因是  isBorrowed  在此次项目中默认值是  false

 

②BookList 类

public class BookList {
    private Book[] books = new Book[10];
    private int usedSize;

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

    public int getUsedSize() {
        return usedSize;
    }

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

    public BookList(){
        books[0] = new Book("三国演义","罗贯中",29,"小说");
        books[1] = new Book("西游记","吴承恩",23,"小说");
        books[2] = new Book("红楼梦","曹雪芹",25,"小说");

        usedSize = 3;
    }
}
  •  功能描述:表示书架,管理书籍集合,维护当前书籍数量
  • 创建了  Book类型  的  books数组  大小为10
  • 创建了  usedSize  作用是  使用空间大小
  • getBooks()  用来获取  整个数组
  • getBook(int pos)  用来获取  指定下标的数组
  • setBook(int pos,Book book)  用来改变  指定下标数组的值
  • usedSize  的  getter和setter方法
  • BookList()  重写的构造方法

 


二.User 包

①User 抽象类(用来继承的)

import Book.BookList;
import ioperation.IOPeration;

public abstract class User {
    private String name;
    IOPeration[] ioPerations;

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

    public abstract int menu();

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

}
  • 功能描述:用户的基类,定义用户通用的属性和行为
  • name用户名
  • ioPerations  操作数组 
  • 构造方法  User(String name)  
  • 抽象方法  menu(),显示菜单  并且  返回用户的选择(由子类实现)
  • 其他方法   DoIoperation(int choice,BookList bookList)  根据用户选择执行对应操作

 

②AdminUser 类 

import ioperation.*;

import java.util.Scanner;

public class AdminUser extends User{


    public AdminUser(String name) {
        super(name);
         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("****************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}
  • 功能描述:管理员用户,继承于User类,拥有高级操作权限
  • 构造方法  AdminUser(String name),初始化管理员用户名,并设置操作数组(包含查找,新增,删除,显示,退出)
  • 重写方法  menu(),显示管理员菜单,返回用户选择的操作编号

 

③NomalUser类

import ioperation.*;

import java.util.Scanner;

public class NomalUser extends User {


    public NomalUser(String name) {
        super(name);
        ioPerations = new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }

    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("****************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}
  • 功能描述:普通用户,继承于User,拥有基础操作权限
  • 构造方法   NomalUser(String name),初始化普通用户名,并设置操作数组(包含查找,借阅,归还,退出)
  • 重写方法  menu(),显示普通用户菜单,并返回用户选择的操作编号

 


三.Main类

import Book.BookList;
import User.User;

import java.util.Scanner;
import User.AdminUser;
import User.NomalUser;
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 NomalUser(name);//需要导入包
            }
    }


    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while(true) {
            int choice = user.menu();
            user.DoIoperation(choice, bookList);
        }
    }
}
  •  功能描述:程序入口,发原则用户登录和主循环
  • login()方法,获取用户名和用户类型(管理员 / 普通用户)
  • main()方法,初始化书架,调用login()进行登录,进入无限循环,根据用户选择执行操作


四.ioperation包

①Ioperation 接口(用来继承)

import Book.BookList;

public interface IOPeration {
    public void work(BookList bookList);

}
  •  功能描述:定义对书架操作的统一接口,所有操作类  需要实现此接口
  • work(BookList bookList)方法,执行具体操作

 

②AddOperation类 

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.getBooks().length){
            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("请输入要新增图书的价格");
        int price = scanner.nextInt();
        scanner.nextLine();//读取换行符号
        System.out.println("请输入要新增的图书的类型");
        String type = scanner.nextLine();


        Book newbook = new Book(name,author,price,type);
        //判断是否有这本书
        for (int i = 0;i < currentSize; i++){
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println(name+"已经被添加了");//✳✳✳✳
                return;
            }
        }
        bookList.setBook(currentSize,newbook);

        System.out.println("添加成功");

        bookList.setUsedSize(currentSize+1);

    }
}

功能描述:实现书籍添加操作

work(BookList bookList):

  • 检查书架是否已满
  • 获取用户输入的书籍信息(书名、作者、价格、类型)
  • 检查书籍是否已存在
  • 添加新书到书架并更新 usedSize

③BorrowOperation类

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(name.equals(book.getName())){
                if(book.isBorrowed()){
                    System.out.println(name+"已经被借走");
                    return;
                }
                System.out.println("借阅成功 "+name);
                book.setBorrowed(true);//****
                return;
            }
        }
        System.out.println("没有"+name+"这本书");
    }
}

 功能描述:实现书籍借阅操作

 work(BookList bookList):

  • 提示用户输入要借阅的书名
  • 遍历书架  查找书籍
  • 检查书籍是否课借阅(未被借出)
  • 更新借阅状态  并  输出结果 

 

④DelOperation类

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 pos = -1;
        int currentSize = bookList.getUsedSize();
        for(int i = 0;i<currentSize;i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                pos = i;
                break;
            }
            if(currentSize == i){
                System.out.println("书架上没有这本书");
                return;
            }

        }
        //覆盖式删除
        for(int i = pos;i<currentSize;i++){
            Book book = bookList.getBook(i+1);
            bookList.setBook(i,book);
        }
        bookList.setBook(currentSize-1,null);//去掉重复的成员
        bookList.setUsedSize(currentSize-1);
        System.out.println("删除成功");
    }
}

 功能描述:实现书籍的删除操作

 work(BookList bookList):

  • 提示用户输入要删除的书名
  • 查找书籍的位置
  • 覆盖式删除(将后续书籍前移)
  • 更新  usedSize  并将末尾置为  null

⑤ExitOperation类

import Book.BookList;

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

功能描述:实现系统退出操作

 work(BookList bookList):

  •  调用  System.exit(0);  终止程序

 

⑥ FindOperation类

import Book.BookList;

import java.util.Scanner;

public class FindOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书");
        int i = 0;
        System.out.println("请输入书名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (i = 0;i < bookList.getUsedSize(); i++){
            if(bookList.getBook(i).getName().equals(name)){
                System.out.println("找到了"+name);//✳✳✳✳
                return;
            }
        }
        System.out.println("没找到");
    }
}

功能描述:实现书籍查找操作

 work(BookList bookList):

  • 提示用户输入书名
  • 遍历书架查找图书
  • 输出查找结果

⑦ReturnOperation类

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)){
                if(book.isBorrowed() == false){
                    System.out.println(name+"已经归还成功");
                    return;
                }
                book.setBorrowed(false);
                System.out.println(name+"归还成功");
                return;
            }
        }
        System.out.println("未找到"+name+"这本书");
    }
}

功能描述:实现书籍归还功能

 work(BookList bookList):

  • 提示用户输入要归还的书名
  • 查找书籍  并且  检查借阅状态
  • 更新借阅状态为  “未借出”  并  输出结果

⑧ShowOperation类

import Book.BookList;

public class ShowOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书");
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

 

功能描述:实现书架上所有书籍信息

 work(BookList bookList):

  • 遍历书架  并  打印每本书的信息(调用  Book.toString())


五.

项目的优点
  • 模块化设计:将不同的功能封装在不同的类中,提高了代码的可维护性和可扩展性。
  • 面向对象编程:使用了面向对象的思想,通过继承和接口实现了代码的复用和多态。
  • 用户交互友好:通过菜单的方式让用户选择操作,提高了用户体验。
项目的不足
  • 数据持久化问题:程序运行结束后,所有数据都会丢失,没有实现数据的持久化存储。
  • 异常处理不完善:在用户输入和文件操作等方面,没有进行充分的异常处理。
  • 功能单一:目前的功能比较简单,可以进一步扩展,如添加用户管理、借阅期限管理等功能。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值