一、需求:
编程:创建一个商品(Product)类,其中属性:商品名,商品单价,商品的数量,商品产地。 在 ProductBiz 类中添加以下方法: 初始化数据: 苹果 5.20 100 山东 草莓 19.90 0 杭州 橘子 4.50 580 湖北 苹果 6.00 120 陕西 香蕉 3.10 150 海南 西瓜 10.50 100 天津 1、将多个商品对象存储在 Set 集合中,初始化数据。 2、显示所有的商品信息; 3、打印输出商品金额大于1000元的商品信息; 4、打印售空的商品的信息; 5、打印输出商品产地为"天津"的商品信息; 6、输入一个商品名,查询出此类商品的信息,如果不存在,则打印商品"商场无此商品!!!" 7、输入一个价格区间范围,查询出集合中所有在这个价格区间的所有商品信息。
二、编码
1、Product类的封装
package set.sets;
import java.text.DecimalFormat;
import java.util.Objects;
public class Product {
// 商品属性:名称、价格、数量和产地
private String name;
private double price;
private int quantity;
private String origin;
// 构造方法
public Product(String name, double price, int quantity, String origin) {
this.name = name;
this.price = price;
this.quantity = quantity;
this.origin = origin;
}
// Getter和Setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
// 重写equals和hashCode方法,确保Set集合中商品名相同即为重复
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product product = (Product) o;
return Objects.equals(name, product.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
// 重写toString方法,便于显示商品信息
@Override
public String toString() {
// 格式化价格,保留两位小数
DecimalFormat df = new DecimalFormat("#.00");
return name + "\t\t" +df.format(price) + "\t\t" + quantity + "\t\t" + origin ;
}
}
2、业务类封装
package set.sets;
import java.util.HashSet;
import java.util.Set;
public class ProductBiz {
static Set<Product> productSet = new HashSet<>();
//初始化数据
static {
// 创建多个商品对象并添加到Set集合中
productSet.add(new Product("苹果", 5.20, 100, "山东"));
productSet.add(new Product("香蕉", 3.10, 150, "海南"));
productSet.add(new Product("橘子", 4.50, 580, "湖北"));
// 这个商品将不会被添加,因为商品名已存在
productSet.add(new Product("苹果", 6.00, 120, "陕西"));
productSet.add(new Product("草莓",19.90,0,"杭州"));
productSet.add(new Product("西瓜",10.50,100,"天津"));
}
// 显示所有商品信息
public void displayAllProducts() {
System.out.println("商品信息:");
System.out.println("名称\t\t单价(元)\t\t数量(斤)\t\t产地");
for (Product product : productSet) {
System.out.println(product);
}
System.out.println("\n");
}
// 打印输出商品金额 > 1000 的所有商品信息
public void displayProductsPriceGreaterThan(double total) {
System.out.println("商品金额 > " + total + " 的商品信息:");
for (Product product : productSet) {
//判断金额》1000
if (product.getPrice()*product.getQuantity() > total) {
System.out.println(product);
}
}
System.out.println("\n");
}
// 打印售空的商品的信息
public void displaySoldOutProducts() {
System.out.println("售空的商品信息:");
for (Product product : productSet) {
if (product.getQuantity() <= 0) {
System.out.println(product);
}
}
System.out.println("\n");
}
// 打印输出商品产地为"天津"的商品信息
public void displayProductsOriginAsTianjing() {
System.out.println("商品产地为'天津'的商品信息:");
for (Product product : productSet) {
if ("天津".equals(product.getOrigin())) {
System.out.println(product);
}
}
System.out.println("\n");
}
// 输入一个商品名,查询出此类商品的信息,如果不存在,则打印商品"商场无此商品!!!"
public void queryProductByName(String name) {
System.out.println("查询商品名: " + name);
for (Product product : productSet) {
if (name.equals(product.getName())) {
System.out.println(product+"\n");
return;
}
}
System.out.println("商场无此商品!!!");
}
// 输入一个价格段,查询出集合中所有在这个价格区间的所有商品信息
public void queryProductsInPriceRange( double minPrice, double maxPrice) {
System.out.println("价格区间在 " + minPrice + " 到 " + maxPrice + " 之间的商品信息:");
for (Product product : productSet) {
if (product.getPrice() >= minPrice && product.getPrice() <= maxPrice) {
System.out.println(product);
}
}
System.out.println("\n");
}
}
3、测试类
package set.sets;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
//业务对象
ProductBiz productBiz = new ProductBiz();
// 调用各种方法显示和处理商品信息
productBiz.displayAllProducts();
// 创建Scanner对象,用于接收用户输入
Scanner scanner = new Scanner(System.in);
//显示价格大于1000的商品信息
System.out.println("请输入价格大于1000的商品信息:");
double total = scanner.nextDouble();
productBiz.displayProductsPriceGreaterThan(total);
//显示售空商品信息
productBiz.displaySoldOutProducts();
//显示产地为天津的商品信息
productBiz.displayProductsOriginAsTianjing();
//查询商品信息
System.out.println("请输入商品名称:");
String name = scanner.next();
productBiz.queryProductByName(name);
//查询价格区间商品信息
//3.00-5.00
System.out.println("请输入价格范围:");
double minPrice = scanner.nextDouble();
double maxPrice = scanner.nextDouble();
productBiz.queryProductsInPriceRange(minPrice, maxPrice);
}
}
三、运行效果