Menu
CoddyTech

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.

challenge icon

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:

  1. Dùng Map danh mục sản phẩm đã định nghĩa ở trên và một List giỏ hàng trống
  2. Đọ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"
  3. 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()
  4. 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
  5. 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ý
  6. Theo dõi số lần thêm thành công và số lần thử không thành công
  7. 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 checkout

Nế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 checkout

Nế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 checkout

Chươ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

Tự luyện tập: Trình biên dịch Dart online