正文

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

  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/工号)。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐