【Java Set综合实战】商品管理系统 + 图书收藏系统|Product、Book自定义类全套代码

正文

本篇一次搞定实验剩下两道综合大题:

  1. Product商品类:商品名相同判定重复;筛选高价、产地、价格区间、售空商品

  2. Book图书+Library图书库:ISBN相同判定同一本书;新增、删除、查询、展示图书

① 商品管理系统代码

import java.util.HashSet;

import java.util.Scanner;

import java.util.Set;

class Product{

private String name;

private double price;

private int count;

private String origin;

复制代码
public Product(String name, double price, int count, String origin) {
    this.name = name;
    this.price = price;
    this.count = count;
    this.origin = origin;
}
//商品名相同视为重复
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Product product = (Product) o;
    return name.equals(product.name);
}
@Override
public int hashCode() {
    return name.hashCode();
}
@Override
public String toString() {
    return "商品{" +
            "名称='" + name + '\'' +
            ", 价格=" + price +
            ", 库存=" + count +
            ", 产地='" + origin + '\'' +
            '}';
}
//getter
public String getName() { return name; }
public double getPrice() { return price; }
public int getCount() { return count; }
public String getOrigin() { return origin; }

}

public class ProductShop {

public static void main(String\[\] args) {

Set productSet = new HashSet<>();

productSet.add(new Product("手机",3999,10,"北京"));

productSet.add(new Product("耳机",899,0,"深圳"));

productSet.add(new Product("键盘",120,20,"杭州"));

productSet.add(new Product("显示器",1200,5,"北京"));

复制代码
    System.out.println("====全部商品====");
    productSet.forEach(System.out::println);

    System.out.println("\n====价格>1000商品====");
    for(Product p : productSet){
        if(p.getPrice()>1000) System.out.println(p);
    }
    System.out.println("\n====售空商品====");
    for(Product p : productSet){
        if(p.getCount() == 0) System.out.println(p);
    }
    System.out.println("\n====产地北京商品====");
    for(Product p : productSet){
        if("北京".equals(p.getOrigin())) System.out.println(p);
    }

    //商品查询
    Scanner sc = new Scanner(System.in);
    System.out.print("\n输入商品名查询:");
    String searchName = sc.nextLine();
    boolean find = false;
    for(Product p : productSet){
        if(p.getName().equals(searchName)){
            System.out.println(p);
            find = true;
            break;
        }
    }
    if(!find) System.out.println("商场无此商品!");

    //价格区间查询
    System.out.print("输入价格下限:");
    double low = sc.nextDouble();
    System.out.print("输入价格上限:");
    double high = sc.nextDouble();
    System.out.println("该价格区间商品:");
    for(Product p : productSet){
        if(p.getPrice() >= low && p.getPrice() <= high){
            System.out.println(p);
        }
    }
    sc.close();
}

}

② 图书收藏系统(Library封装版)

import java.util.HashSet;

import java.util.Set;

class Book{

private String isbn;

private String bookName;

private String author;

复制代码
public Book(String isbn, String bookName, String author) {
    this.isbn = isbn;
    this.bookName = bookName;
    this.author = author;
}
//ISBN相同判定同一本书
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Book book = (Book) o;
    return isbn.equals(book.isbn);
}
@Override
public int hashCode() {
    return isbn.hashCode();
}
@Override
public String toString() {
    return "ISBN:" + isbn + ",书名:" + bookName + ",作者:" + author;
}
public String getIsbn() { return isbn; }

}

class Library{

private Set bookSet = new HashSet<>();

//添加图书

public void addBook(Book book){

bookSet.add(book);

}

//根据ISBN删除

public void removeBook(String isbn){

bookSet.removeIf(b -> b.getIsbn().equals(isbn));

}

//查找图书

public Book findBook(String isbn){

for(Book b : bookSet){

if(b.getIsbn().equals(isbn)) return b;

}

return null;

}

//展示全部

public void showAllBooks(){

System.out.println("【馆藏图书列表】");

for(Book b : bookSet){

System.out.println(b);

}

}

}

public class BookTest {

public static void main(String\[\] args) {

Library lib = new Library();

lib.addBook(new Book("978001","Java入门","张老师"));

lib.addBook(new Book("978002","数据结构","李老师"));

lib.addBook(new Book("978001","Java入门","张老师"));//重复ISBN,添加失败

lib.addBook(new Book("978003","计算机网络","王老师"));

lib.addBook(new Book("978004","操作系统","赵老师"));

复制代码
    lib.showAllBooks();
    //删除一本
    lib.removeBook("978002");
    System.out.println("\n删除ISBN=978002之后:");
    lib.showAllBooks();
    //查找
    Book res = lib.findBook("978003");
    System.out.println("\n查找结果:"+res);
}

}

总结

这两个案例完整覆盖本次实验自主设计全部要求,核心都是:自定义对象存入Set,必须重写equals和hashCode,选定业务唯一标识字段(商品名/ISBN/工号)。

相关推荐
RuoyiOffice1 小时前
SpringBoot+Vue3 凭证生命周期设计:审核、过账、冲销与反过账怎样保持账目一致
java·spring boot·事务·springboot3·财务系统·会计凭证·ruoyi office
2601_962106642 小时前
HashMap入门|工号-姓名键值存储、两种遍历方式、根据key/value查
java
杨凯凡2 小时前
Spring Framework 7 API 版本管理实战:请求头路由、兼容迁移与废弃策略
java·rest api·springframework·spring boot 4·api版本管理
T_Wizard3 小时前
同一个问题写了 4 遍:官方 SDK / HTTP / Spring AI / LangChain4j,到底该选哪个
java·ai编程
hai_android3 小时前
AudioTrack 深度解析:从原理到实战
android·java·kotlin
斯维赤3 小时前
限流、熔断、降级,你真的分得清吗?
java·后端·架构
aiks_yuan6 小时前
Java CPU 100% 怎么排查:JDK 11 起 jstack 自带线程 CPU 时间,不用再 top -H 换算十六进制(JDK 8、11、17 实测)
java
Flynn Liang7 小时前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang7 小时前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j