更新时间:2022-09-26 10:15:42 来源:极悦 浏览916次
使用您喜欢的任何名称创建一个新的 Java 项目。
在您的 src 文件夹下创建以下包,
收藏品.shoppingcart
为简单起见,所有代码都将驻留在此包中。
产品.java
Products.java
购物车.java
UI.java
主.java
对于这个示例项目,确保所有上述类都位于同一个包下,即collections.shoppingcart。
将class一一解释它的意义。
通过下面的代码,
package collections.shoppingcart;
import java.util.Objects;
/**
*
* @author Varun Shrivastava (vslala)
*/
class Product {
private Integer pid;
private String name;
private Double price;
private Integer stock;
public Product () {
}
public Product (Integer pid, String name, Double price, Integer stock) {
this.pid = pid;
this.name = name;
this.price = price;
this.stock = stock;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the price
*/
public Double getPrice() {
return price;
}
/**
* @param price the price to set
*/
public void setPrice(Double price) {
this.price = price;
}
/**
* @return the stock
*/
public Integer getStock() {
return stock;
}
/**
* @param stock the stock to set
*/
public void setStock(Integer stock) {
this.stock = stock;
}
/**
* @return the pid
*/
public Integer getPid() {
return pid;
}
@Override
public int hashCode() {
int hash = 7;
hash = 29 * hash + Objects.hashCode(this.pid);
hash = 29 * hash + Objects.hashCode(this.name);
hash = 29 * hash + Objects.hashCode(this.price);
hash = 29 * hash + Objects.hashCode(this.stock);
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Product other = (Product) obj;
if (!Objects.equals(this.name, other.name)) {
return false;
}
if (!Objects.equals(this.pid, other.pid)) {
return false;
}
if (!Objects.equals(this.price, other.price)) {
return false;
}
if (!Objects.equals(this.stock, other.stock)) {
return false;
}
return true;
}
/**
* @param pid the pid to set
*/
public void setPid(Integer pid) {
this.pid = pid;
}
}
这是一个包含Product属性并为其提供 setter 和 getter 的具体类。还覆盖了 Hash 和 Equals 方法。
equals()方法用于根据属性比较两个对象。
hashCode()是在创建对象时附加到每个对象的唯一哈希/数字。
因此,每当比较两个对象时。比较它们的哈希码和属性。如果两者(哈希码和属性值)相同,则认为对象相等,否则不相等。
因此,重写对象的 hascode() 和 equals() 方法非常重要。
通过下面的代码,
package collections.shoppingcart;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Varun Shrivastava (vslala)
*/
public class Products {
private final List<Product> products = new ArrayList<Product>();
public Products () {
this.initStoreItems();
}
public List<Product> getProducts() {
return products;
}
public void initStoreItems() {
String [] productNames = {"Lux Soap", "Fair n Lovely", "MTR"};
Double [] productPrice = {40.00d, 60.00d, 30.00d};
Integer [] stock = {10, 6, 10};
for (int i=0; i < productNames.length; i++) {
this.products.add(new Product(i+1, productNames[i], productPrice[i], stock[i]));
}
}
}
此类在您的购物车应用程序中的作用是为您提供商店产品。
换句话说,这个类用于在应用程序启动后立即初始化您的商店。在实际应用中,项目将从用户会话或数据库中检索。为简单起见,使用 Products 类来初始化对象。
如您所见,该initStoreItems()方法用于将产品添加到Product类型的新ArrayList 中 。
你已经成功了一半。
package collections.shoppingcart;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Varun Shrivastava
*/
class Cart {
List<Product> cartItems = new ArrayList<Product>();
public void addProductToCartByPID(int pid) {
Product product = getProductByProductID(pid);
addToCart(product);
}
private Product getProductByProductID(int pid) {
Product product = null;
List<Product> products = new Products().getProducts();
for (Product prod: products) {
if (prod.getPid() == pid) {
product = prod;
break;
}
}
return product;
}
private void addToCart(Product product) {
cartItems.add(product);
}
public void removeProductByPID(int pid) {
Product prod = getProductByProductID(pid);
cartItems.remove(prod);
}
void printCartItems() {
for (Product prod: cartItems) {
System.out.println(prod.getName());
}
}
}
这是一个具体的类,它充当虚拟购物车来临时存储物品。
它提供了购物车应具有的所有必需操作,例如:
添加到购物车()
removeFromCart()
getProduct(), 等等……
它还维护一个具有 Product 类型的cartItems 列表,类似于 products 类中的产品列表。
list的唯一目的cartItems是将购买的商品存储在购物车中或从购物车中删除商品。它只是维护用户添加到购物车的项目列表。
在 Web 应用程序中,您将拥有一个漂亮的 HTML 页面,并支持 Javascript。因此,用户只需查找产品并单击“添加到购物车” 按钮即可。
在控制台应用程序中(比如这个),UI 部分变得有点棘手。但是,有一个很酷的方法可以让它变得简单。
看:
在控制台中,用户一次只能输入一个输入。这是关键概念,可用于简化 UI。
人们经常为不同的输入取不同的输入变量。如果要处理大量输入,这可能会令人头疼。
这就是为什么最简单的方法是使用单个输入变量并在填充后立即处理它。
在这个应用程序中,使用了一个类变量来获取用户输入。并根据输入值执行相应的过程。
浏览下面的代码并理解这个概念。
package collections.shoppingcart;
import java.util.List;
import java.util.Scanner;
/**
*
* @author Varun Shrivastava (vslala)
*/
public class UI {
Cart cart = new Cart();
private int ch = 0;
public UI () {
menu();
}
public void startScreen () {
System.out.println("1. Display Store Products");
System.out.println("2. Display Cart");
System.out.println("0. Exit");
}
public void storeProductsMenu() {
System.out.println("1. Add to Cart");
System.out.println("2. Remove From Cart");
System.out.println("0. Exit");
}
public void menu () {
do {
startScreen();
getUserInput();
switch (ch) {
case 1:
displayStoreProducts();
storeProductsMenu();
getUserInput();
innerChoice1();
break;
case 2:
showCart();
break;
case 0:
System.exit(0);
break;
default:
break;
}
} while (ch != 0);
}
private void innerChoice1() {
switch (ch) {
case 1:
addProductToCart();
showCart();
break;
case 2:
removeProductFromCart();
break;
default:
break;
}
}
private int getUserInput() throws NumberFormatException {
Scanner in = new Scanner (System.in);
ch = Integer.parseInt(in.nextLine());
return ch;
}
private void displayStoreProducts() {
List<Product> products = new Products().getProducts();
for (Product prod: products) {
System.out.println(
prod.getPid() + "- " +
prod.getName() + " " +
prod.getPrice() + " " +
prod.getStock()
);
}
}
private void addProductToCart() {
int pid = getUserInput();
cart.addProductToCartByPID(pid);
}
private void showCart() {
cart.printCartItems();
}
private void removeProductFromCart() {
int pid = getUserInput();
cart.removeProductByPID(pid);
}
}
这是用户和应用程序之间发生主要交互的类。
它是应用程序的控制点。
您在控制台中看到的所有内容都是此页面的结果。
它接受用户输入并从您之前创建的类中调用相应的方法来执行所需的任务。
/*
* Create a fully functional program to store and delete objects from the cart
*/
package collections.shoppingcart;
/**
*
* @author Varun Shrivastava
*/
public class Main {
public static void main (String [] args) {
new UI();
}
}
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习