购物系统案例
作者:钟华
项目雏形
基于面向对象–封装实现购物清单及总金额和打折后实际金额的显示。
项目开发
开发步骤
- 会员类Vip.java文件代码如下:
package day03.Object.Product;
public class Vip {
private String vipType;
private float discountRate;
public Vip() {
}
public Vip(String vipType, float discountRate) {
super();
this.vipType = vipType;
this.discountRate = discountRate;
}
public String getVipType() {
return vipType;
}
public void setVipType(String vipType) {
this.vipType = vipType;
}
public float getDiscountRate() {
return discountRate;
}
public void setDiscountRate(float discountRate) {
this.discountRate = discountRate;
}
}
- 用户类User.java代码如下:
package day03.Object.Product;
public class User {
private String name;
private Vip vipCard;
public User() {
}
public User(String name, Vip vipCard) {
super();
this.name = name;
this.vipCard = vipCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Vip getVipCard() {
return vipCard;
}
public void setVipCard(Vip vipCard) {
this.vipCard = vipCard;
}
@Override
public String toString() {
return name ;
}
}
3.商品类Product.java代码如下:
package day03.Object.Product;
public class Product {
private String id;
private String name;
private float price;
public Product() {
}
public Product(String id, String name, float price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
@Override
public String toString() {
return "商品编号:" + id + "\t商品名称:" + name + "\t商品价格:" + price ;
}
}
4.订单类Order.java代码如下:
package day03.Object.Product;
public class Order {
private String orderId;
private static User user;
private static Product[] products;
public static float totalAmount() {
float amount = 0.0f;
for (int i = 0; i < products.length; i++) {
amount += products[i].getPrice();
}
return amount;
}
public static void printArray(Product[] products) {
System.out.println("\t*购物车*");
for (int i = 0; i < products.length; i++) {
System.out.println(products[i]);
}
}
public static float discountAmount(float amount) {//可以通过传参的方式定义变量
float discount = amount;
if(amount > 1000 && amount <= 2000) {
discount = amount * 0.98f;
}else if(amount > 2000 && amount <= 3000) {
discount = amount * 0.95f;
}else if(amount > 3000) {
discount = amount * 0.9f;
}
if(user != null) {
Vip vipCard = user.getVipCard();//获取用户持有的VIP卡
if(vipCard != null) {
if(vipCard.getVipType().equals("黄金vip")) {
discount = discount * 0.95f;
}else if(vipCard.getVipType().equals("钻石vip")) {
discount = discount * 0.9f;
}else if(vipCard.getVipType().equals("至尊vip")) {
discount = discount * 0.85f;
}
}
}
return discount;
}
public Order() {
}
public Order(String orderId, User user, Product[] product2) {
super();
this.orderId = orderId;
this.user = user;
this.products = product2;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Product[] getProduct() {
return products;
}
public void setProduct(Product[] product) {
this.products = product;
}
}
- shopping.java代码如下:
package day03.Object.Product;
public class Shopping {
public static void main(String[] args) {
Vip vip = new Vip("黄金vip", 0.95f);
User user = new User("苏大宝贝", vip);
Product p1 = new Product("001", "苹果", 12.0f);
Product p2 = new Product("002", "梨", 15.0f);
Product p3 = new Product("003", "香蕉", 3.0f);
Product p4 = new Product("004", "橘子", 1.0f);
Product p5 = new Product("005", "西瓜", 2.0f);
Product[] products = { p1, p2, p3, p4, p5 };
Order order = new Order("202005031853", user, products);
System.out.println(user + "先生,您好!");
Order.printArray(products);
float amount = order.totalAmount();
float discountAmount = order.discountAmount(amount);
System.out.println("\t*消费总金额*");
System.out.println("您的消费总额为" + amount + "元。");
System.out.println("您的应付金额为" + discountAmount + "元。");
}
}
项目总结
项目难点
- new对象之后,如果想用对象去调用创建对象的那个类中的方法,必须在本类中将该对象赋值,这样在堆中就不是null了,否则会报空指针异常。
- new多个对象传参之后,可以创建静态数组,将这几个对象放到数组中即为数组赋值
- 想要打印new对象的参数中的内容而非地址值,可在对应类中添加toString方法 可以通过传参的方式定义变量,变量即可在方法中使用