更新時間:2022-09-26 10:15:42 來源:動力節點 瀏覽1298次
使用您喜歡的任何名稱創建一個新的 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天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習