Áp dụng giảm giá
Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 36 trên 65.
Thử thách
DễTạo một chương trình tiếp tục dự án tính tiền giỏ hàng bằng cách triển khai hệ thống giảm giá áp dụng mức giảm theo phần trăm cho các đơn hàng đủ điều kiện. Dựa trên phần tính tổng chi phí ở bài học trước, chương trình của bạn cần:
- Sử dụng Map danh mục sản phẩm và chức năng giỏ hàng hiện có từ phần thiết lập trước
- Đọc nhiều đầu vào dạng chuỗi, biểu thị các mặt hàng khách muốn thêm vào giỏ hàng (đầu vào sẽ kết thúc khi bạn nhận được
"cart_done") - Với mỗi mặt hàng, kiểm tra xem mặt hàng đó có trong danh mục sản phẩm hay không bằng cách dùng
containsKey(), rồi thêm các mặt hàng hợp lệ vào giỏ hàng - Tính tổng phụ bằng cách cộng giá của tất cả mặt hàng trong giỏ hàng
- Đọc một đầu vào dạng chuỗi, biểu thị mức tiền tối thiểu để được giảm giá
- Đọc một đầu vào dạng chuỗi, biểu thị phần trăm giảm giá cần áp dụng
- Chỉ áp dụng giảm giá nếu tổng phụ bằng hoặc vượt mức tiền tối thiểu
- Tính số tiền được giảm và tổng tiền cuối cùng sau khi áp dụng giảm giá
- Hiển thị báo cáo tính giảm giá theo đúng định dạng bên dưới
Ví dụ, nếu cửa hàng có các sản phẩm "Apple" giá 1.50, "Banana" giá 0.80, "Orange" giá 2.00, "Milk" giá 3.25, khách muốn thêm "Apple", "Orange", "Milk", "Apple", mức tiền tối thiểu để được giảm giá là 5.00 và phần trăm giảm giá là 10, chương trình của bạn cần in ra:
Shopping Cart Operations:
Adding 'Apple': Item added to cart successfully
Adding 'Orange': Item added to cart successfully
Adding 'Milk': Item added to cart successfully
Adding 'Apple': Item added to cart successfully
Cart Contents: [Apple, Orange, Milk, Apple]
Cost Calculation:
Apple: $1.50
Orange: $2.00
Milk: $3.25
Apple: $1.50
Subtotal: $8.25
Discount Analysis:
Threshold: $5.00
Discount Rate: 10%
Subtotal ($8.25) meets threshold requirement
Discount Applied: $0.83
Final Total: $7.42
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 10% discount applied
Cart Status: Ready for checkoutNếu cửa hàng có các sản phẩm "Laptop" giá 999.99, "Mouse" giá 25.50, "Keyboard" giá 75.00, khách muốn thêm "Mouse", "Keyboard", mức tiền tối thiểu để được giảm giá là 150.00 và phần trăm giảm giá là 15, chương trình của bạn cần in ra:
Shopping Cart Operations:
Adding 'Mouse': Item added to cart successfully
Adding 'Keyboard': Item added to cart successfully
Cart Contents: [Mouse, Keyboard]
Cost Calculation:
Mouse: $25.50
Keyboard: $75.00
Subtotal: $100.50
Discount Analysis:
Threshold: $150.00
Discount Rate: 15%
Subtotal ($100.50) does not meet threshold requirement
Discount Applied: $0.00
Final Total: $100.50
Cart Summary:
Total items in cart: 2
Unique products in cart: 2
Items successfully added: 2
Items not found: 0
Discount Status: No discount applied
Cart Status: Ready for checkoutNếu cửa hàng có các sản phẩm "Novel" giá 12.99, "Magazine" giá 4.50, "Textbook" giá 89.00, khách muốn thêm "Novel", "Textbook", "Magazine", "Novel", mức tiền tối thiểu để được giảm giá là 75.00 và phần trăm giảm giá là 20, chương trình của bạn cần in ra:
Shopping Cart Operations:
Adding 'Novel': Item added to cart successfully
Adding 'Textbook': Item added to cart successfully
Adding 'Magazine': Item added to cart successfully
Adding 'Novel': Item added to cart successfully
Cart Contents: [Novel, Textbook, Magazine, Novel]
Cost Calculation:
Novel: $12.99
Textbook: $89.00
Magazine: $4.50
Novel: $12.99
Subtotal: $119.48
Discount Analysis:
Threshold: $75.00
Discount Rate: 20%
Subtotal ($119.48) meets threshold requirement
Discount Applied: $23.90
Final Total: $95.58
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 20% discount applied
Cart Status: Ready for checkoutChương trình của bạn cần tính tổng phụ trước, sau đó kiểm tra xem tổng phụ có bằng hoặc vượt mức tiền tối thiểu để được giảm giá hay không bằng câu lệnh điều kiện if. Nếu đạt mức tối thiểu, hãy tính số tiền được giảm bằng cách nhân tổng phụ với phần trăm giảm giá chia cho 100. Lấy tổng phụ trừ đi số tiền được giảm để có tổng tiền cuối cùng. Định dạng tất cả giá trị tiền tệ để hiển thị chính xác 2 chữ số thập phân. Định dạng đầu vào như sau: tên các mặt hàng cần thêm vào giỏ hàng, kết thúc bằng "cart_done", tiếp theo là mức tiền tối thiểu để được giảm giá và phần trăm giảm giá (cả hai đều là chuỗi cần được chuyển đổi sang kiểu số thích hợp).
Tự làm thử
import 'dart:io';
void main() {
// Product catalog with prices
Map<String, double> products = {
'Apple': 1.50,
'Banana': 0.80,
'Orange': 2.00,
'Milk': 3.25,
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00,
'Novel': 12.99,
'Magazine': 4.50,
'Textbook': 89.00
};
// Shopping cart list
List<String> cart = [];
// Counters for summary
int itemsAdded = 0;
int itemsNotFound = 0;
print('Shopping Cart Operations:');
// Read items until "cart_done"
String? item;
while ((item = stdin.readLineSync()) != 'cart_done') {
if (item != null) {
if (products.containsKey(item)) {
cart.add(item);
print("Adding '$item': Item added to cart successfully");
itemsAdded++;
} else {
print("Adding '$item': Item not available in store");
itemsNotFound++;
}
}
}
// Display cart contents
print('Cart Contents: $cart');
// Calculate total cost
print('Cost Calculation:');
double totalCost = 0.0;
for (String cartItem in cart) {
double price = products[cartItem]!;
totalCost += price;
print('$cartItem: \$${price.toStringAsFixed(2)}');
}
print('Total Cost: \$${totalCost.toStringAsFixed(2)}');
// Cart summary
Set<String> uniqueProducts = cart.toSet();
print('Cart Summary:');
print('Total items in cart: ${cart.length}');
print('Unique products in cart: ${uniqueProducts.length}');
print('Items successfully added: $itemsAdded');
print('Items not found: $itemsNotFound');
print('Cart Status: Ready for checkout');
}Tất cả bài học trong Logic và luồng điều khiển
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online