书店管理系统设计与实现
Java语言 Java 22

设计实现一个简易的书店管理系统

核心功能

  • 实时更新前三名最畅销的书籍及其销量。

  • 使用多个类来实现,体现面向对象的设计思想。

  • 提供简单的控制台交互界面,方便测试功能。

结构设计

  1. Book类 - 基础类,包含书籍的基本属性和方法

  2. BookStore类 - 核心业务逻辑,登记进店书籍,模拟用户销售行为,维持最畅销的前三本书的逻辑

  3. BookStoreUI类 - 模拟用户交互

Book类

public class Book {
    // 书刊号
    private String bookISBN;
    // 书名
    private String bookName;
    // 作者
    private String bookAuthor;
    // 出版社
    private String bookPublisher;
    // 描述
    private String bookDescription;
    // 类别
    private String bookCategory;
    // 价格
    private double bookPrice;
    // 销售数量
    private int salesNums;
    // 库存数量
    private int bookQuantity;

    public Book(String bookISBN, String bookName, String bookAuthor, String bookPublisher,
                String bookDescription, String bookCategory, double bookPrice) {
        this.bookISBN = bookISBN;
        this.bookName = bookName;
        this.bookAuthor = bookAuthor;
        this.bookPublisher = bookPublisher;
        this.bookDescription = bookDescription;
        this.bookCategory = bookCategory;
        this.bookPrice = bookPrice;
        this.salesNums = 0;
        this.bookQuantity = 0;
    }

    public String getBookISBN() {
        return bookISBN;
    }

    public void setBookISBN(String bookISBN) {
        this.bookISBN = bookISBN;
    }

    public void addSales(int quantity) {
        salesNums += quantity;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookAuthor() {
        return bookAuthor;
    }

    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor = bookAuthor;
    }

    public String getBookPublisher() {
        return bookPublisher;
    }

    public void setBookPublisher(String bookPublisher) {
        this.bookPublisher = bookPublisher;
    }

    public String getBookDescription() {
        return bookDescription;
    }

    public void setBookDescription(String bookDescription) {
        this.bookDescription = bookDescription;
    }

    public String getBookCategory() {
        return bookCategory;
    }

    public void setBookCategory(String bookCategory) {
        this.bookCategory = bookCategory;
    }

    public double getBookPrice() {
        return bookPrice;
    }

    public void setBookPrice(double bookPrice) {
        this.bookPrice = bookPrice;
    }

    public int getSalesNums() {
        return salesNums;
    }

    public void setSalesNums(int salesNums) {
        this.salesNums = salesNums;
    }

    public int getBookQuantity() {
        return bookQuantity;
    }

    public void setBookQuantity(int bookQuantity) {
        this.bookQuantity = bookQuantity;
    }
}

BookStore类

import java.util.*;
import java.util.stream.Collectors;

public class BookStore {
    private String bookStoreName; //
    private Map<String, Book> bookList; // 书店的书籍

    public BookStore() {
        this.bookList = new HashMap<>();
    }

    public void addBook(Book book) {
        String bookISBN = book.getBookISBN();
        if(bookList.containsKey(bookISBN)) {
            Book bookExist = bookList.get(bookISBN);
            book.setBookQuantity(bookExist.getBookQuantity() + 1);
            bookList.put(book.getBookISBN(), book);
        } else {
            book.setBookQuantity(1);
            bookList.put(book.getBookISBN(), book);
        }
    }

    public void saleBook(String bookISBN) {
        if (this.bookList.containsKey(bookISBN)) {
            if (this.bookList.get(bookISBN).getBookQuantity() > 0){
                Book book = this.bookList.get(bookISBN);
                int salesNums = book.getSalesNums();
                int bookQuantity = book.getBookQuantity();

                book.setSalesNums(++salesNums);
                book.setBookQuantity(--bookQuantity);
            } else {
                System.out.println(bookISBN + " is sold!");
            }
        } else {
            System.out.println("Book Not Found");
        }
    }

    /**
     * 获取销售的前三的书籍
     * @return
     */
    public List<Book> getTop3Bestsellers() {
        return bookList.values().stream()
                .sorted((b1, b2) -> Integer.compare(b2.getSalesNums(), b1.getSalesNums()))
                .limit(3)
                .collect(Collectors.toList());
    }

    public String getInventoryList() {
        return bookList.values().stream()
                .map(b -> String.format("ISBN:%s, 书名:%s, 库存:%d", b.getBookISBN(), b.getBookName(), b.getBookQuantity()))
                .collect(Collectors.joining("\n"));
    }

    public void showBestsellers() {
        List<Book> bestsellers = getTop3Bestsellers();
        System.out.println("\n=== 畅销榜 TOP3 ===");
        for (int i = 0; i < bestsellers.size(); i++) {
            Book book = bestsellers.get(i);
            System.out.printf("%d. %s - 销量:%d 本\n",
                    i + 1, book.getBookName(), book.getSalesNums());
        }
    }

    public void initBookStore(String bookStoreName) {
        this.bookStoreName = bookStoreName;

        System.out.printf("您成功创办了一家书店:%s\n", bookStoreName);
        System.out.printf("目前该书店有%d本书\n", bookList.size());
    }

}

BookStoreUI类

import java.util.Scanner;

public class BookStoreUI {
    private Scanner scanner;
    private BookStore bookStore;

    public BookStoreUI() {
        bookStore = new BookStore();
        scanner = new Scanner(System.in);
    }
    public void start() {
        bookStore.initBookStore("小明书店");
        while (true) {
            System.out.print("\n命令列表:\n0. 批量添加书籍\n1. 添加书籍\n2. 购买书籍\n3. 显示畅销榜\n4. 退出\n请选择操作:");
            Integer answer = scanner.nextInt();
            switch (answer) {
                case 0:
                    batchAddBook();
                    break;
                case 1:
                    addBook();
                    break;
                case 2:
                    saleBook();
                    break;
                case 3:
                    bookStore.showBestsellers();
                    break;
                case 4:
                    System.out.println("系统已退出");
                    scanner.close();
                    return;
                default:
                    System.out.println("test");
            }

        }
    }

    private void saleBook(){
        System.out.print("请输入要购买的书籍ISBN号:");
        String bookISBN = scanner.next();
        bookStore.saleBook(bookISBN);
    }

    private void batchAddBook(){
        System.out.print("请输入书籍的信息:");
        if(scanner.hasNext()){
            String[] books = scanner.next().split(",");
            for (String book : books) {
                addBook(book);
            }

            System.out.println("书籍添加成功!当前库存:\n" + bookStore.getInventoryList());
        }
    }

    private void addBook(String bookDetails){
        String[] bookSplit = bookDetails.split("\\|");

        String bookISBN = bookSplit[0];
        String bookName = bookSplit[1];
        String bookAuthor = bookSplit[2];
        String bookPublisher = bookSplit[3];
        String bookDescription = bookSplit[4];
        String bookCategory = bookSplit[5];
        Double bookPrice = Double.valueOf(bookSplit[6]);
        Book book = new Book(bookISBN, bookName, bookAuthor, bookPublisher, bookDescription, bookCategory, bookPrice);
        bookStore.addBook(book);
    }

    private void addBook(){
        System.out.print("请输入书籍的信息:");
        if(scanner.hasNext()){
            String bookDetails = scanner.next();
            addBook(bookDetails);

            System.out.println("书籍添加成功!当前库存:\n" + bookStore.getInventoryList());
        }
    }

    public static void main(String[] args) {
        BookStoreUI bookStoreUI = new BookStoreUI();
        bookStoreUI.start();
    }

}

实现效果

1.从启动类启动:

2.有批量添加书籍和单个添加书籍的功能

3.批量添加数据

4.展示畅销榜

测试使用的数据

9787111213826|Java编程思想|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213826|Java编程思想|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213826|Java编程思想|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213827|Python数据分析|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213827|Python数据分析|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213827|Python数据分析|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213827|Python数据分析|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213827|Python数据分析|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213828|计算机网络|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213828|计算机网络|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213829|数据结构与算法|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213830|MySQL必知必会|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213831|计算机组成原理|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213831|计算机组成原理|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213831|计算机组成原理|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213831|计算机组成原理|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213831|计算机组成原理|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5,9787111213831|计算机组成原理|埃克尔|机械工业出版社|本书赢得了全球程序员的广泛赞誉|编程技术|99.5

书店管理系统设计与实现
https://www.orioncoder.cn/archives/shu-dian-guan-li-xi-tong-she-ji-yu-shi-xian
作者
Orion
发布于
更新于
许可