Thêm mặt hàng vào 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 34 trên 65.
Thử thách
DễTạo một chương trình có chức năng thêm mặt hàng vào giỏ hàng. Chương trình của bạn nên dùng một Map danh mục sản phẩm được khai báo sẵn và một List giỏ hàng trống, sau đó xử lý dữ liệu đầu vào về các mặt hàng từ người dùng.
Khai báo trực tiếp danh mục sản phẩm sau trong code của bạn:
Map<String, double> productCatalog = {
'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
};Chương trình của bạn cần:
- Dùng Map danh mục sản phẩm đã định nghĩa ở trên và một List giỏ hàng trống
- Đọc nhiều đầu vào chuỗi, đại diện cho các mặt hàng khách hàng 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
containsKey() - Nếu mặt hàng có trong danh mục, dùng phương thức
add()để thêm mặt hàng đó vào List giỏ hàng - Nếu mặt hàng không có trong danh mục, bỏ qua mặt hàng đó và tiếp tục xử lý
- Theo dõi số lần thêm thành công và số lần thử không thành công
- Hiển thị báo cáo quản lý giỏ hàng theo đúng định dạng bên dưới
Ví dụ, nếu khách hàng muốn thêm "Apple", "Bread", "Banana", "Apple", "Juice", chương trình của bạn sẽ in ra:
Shopping Cart Operations:
Adding 'Apple': Item added to cart successfully
Adding 'Bread': Item not available in store
Adding 'Banana': Item added to cart successfully
Adding 'Apple': Item added to cart successfully
Adding 'Juice': Item not available in store
Cart Contents: [Apple, Banana, Apple]
Cart Summary:
Total items in cart: 3
Unique products in cart: 2
Items successfully added: 3
Items not found: 2
Cart Status: Ready for checkoutNếu khách hàng muốn thêm "Mouse", "Monitor", "Keyboard", "Mouse", chương trình của bạn sẽ in ra:
Shopping Cart Operations:
Adding 'Mouse': Item added to cart successfully
Adding 'Monitor': Item not available in store
Adding 'Keyboard': Item added to cart successfully
Adding 'Mouse': Item added to cart successfully
Cart Contents: [Mouse, Keyboard, Mouse]
Cart Summary:
Total items in cart: 3
Unique products in cart: 2
Items successfully added: 3
Items not found: 1
Cart Status: Ready for checkoutNếu khách hàng muốn thêm "Novel", "Dictionary", "Magazine", "Novel", "Comic", "Textbook", chương trình của bạn sẽ in ra:
Shopping Cart Operations:
Adding 'Novel': Item added to cart successfully
Adding 'Dictionary': Item not available in store
Adding 'Magazine': Item added to cart successfully
Adding 'Novel': Item added to cart successfully
Adding 'Comic': Item not available in store
Adding 'Textbook': Item added to cart successfully
Cart Contents: [Novel, Magazine, Novel, Textbook]
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 2
Cart Status: Ready for checkoutChương trình của bạn phải dùng containsKey() để xác minh mỗi mặt hàng có trong danh mục sản phẩm trước khi thêm vào giỏ hàng. Dùng phương thức add() để thêm các mặt hàng hợp lệ vào List giỏ hàng. Đếm tổng số mặt hàng trong giỏ bằng thuộc tính length, và xác định các sản phẩm duy nhất bằng cách chuyển giỏ hàng thành một Set rồi kiểm tra thuộc tính length của Set đó. Theo dõi cả số lần thêm thành công lẫn số mặt hàng không có trong danh mục. Định dạng đầu vào sẽ là: 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".
Tự làm thử
import 'dart:io';
void main() {
// Read store name
String? storeName = stdin.readLineSync();
// Initialize data structures
Map<String, double> products = {};
List<String> shoppingCart = [];
// Read products until "products_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "products_done") {
break;
}
String productName = input!;
String? priceInput = stdin.readLineSync();
double price = double.parse(priceInput!);
// Add product to map
products[productName] = price;
}
// Calculate statistics
double totalPrice = 0;
double maxPrice = 0;
double minPrice = double.infinity;
String mostExpensiveItem = '';
String cheapestItem = '';
for (String productName in products.keys) {
double price = products[productName]!;
totalPrice += price;
if (price > maxPrice) {
maxPrice = price;
mostExpensiveItem = productName;
}
if (price < minPrice) {
minPrice = price;
cheapestItem = productName;
}
}
double averagePrice = totalPrice / products.length;
// Print the store setup report
print('Store: $storeName');
print('Product Catalog Setup:');
print('Available Products: $products');
print('Shopping Cart Initialized: $shoppingCart');
print('System Status:');
print('Total products available: ${products.length}');
print('Cart status: Empty');
print('Most expensive item: $mostExpensiveItem (\$${maxPrice.toStringAsFixed(2)})');
print('Cheapest item: $cheapestItem (\$${minPrice.toStringAsFixed(2)})');
print('Average product price: \$${averagePrice.toStringAsFixed(2)}');
print('Setup Status: Shopping cart system ready for customers');
}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