Menu
Coddy logo textTech

Łączenie wszystkiego w całość

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 53 z 66.

challenge icon

Wyzwanie

Łatwy

Otrzymasz sześć danych wejściowych. Pierwsza dana to polecenie, którym może być add, check lub sell. Druga dana to nazwa elementu. Trzecia dana to liczba reprezentująca ilość do sprzedaży (dla polecenia sell) albo początkową ilość (dla polecenia add). Czwarta dana to rozdzielona przecinkami lista nazw elementów w magazynie. Piąta dana to rozdzielona przecinkami lista cen odpowiadających poszczególnym elementom. Szósta dana to rozdzielona przecinkami lista ilości odpowiadających poszczególnym elementom.

Zbuduj kompletny system zarządzania magazynem, który obsługuje wszystkie trzy operacje: dodawanie elementów, sprawdzanie stanu magazynowego i sprzedaż elementów. Użyj HashMap do przechowywania danych magazynu, gdzie kluczem jest nazwa elementu, a wartością krotka zawierająca cenę i ilość (f64, i32).

Wymagania:

  • Zaimportuj HashMap z std::collections
  • Odczytaj pierwszą daną wejściową (polecenie) i usuń białe znaki z początku i końca
  • Odczytaj drugą daną wejściową (nazwę elementu) i usuń białe znaki z początku i końca
  • Odczytaj trzecią daną wejściową (wartość ilości/ceny) i usuń białe znaki z początku i końca
  • Przekonwertuj trzecią daną wejściową na f64
  • Odczytaj czwartą daną wejściową (rozdzielone przecinkami nazwy elementów) i usuń białe znaki z początku i końca
  • Odczytaj piątą daną wejściową (rozdzielone przecinkami ceny) i usuń białe znaki z początku i końca
  • Odczytaj szóstą daną wejściową (rozdzielone przecinkami ilości) i usuń białe znaki z początku i końca
  • Utwórz mutowalny obiekt HashMap<String, (f64, i32)> na potrzeby magazynu
  • Podziel nazwy elementów po przecinkach
  • Podziel ceny po przecinkach i przekonwertuj każdą na f64
  • Podziel ilości po przecinkach i przekonwertuj każdą na i32
  • Wstaw każdy element do magazynu wraz z odpowiadającą mu ceną i ilością jako krotką
  • Użyj wyrażenia match dla polecenia, aby określić, którą operację wykonać
  • Dla polecenia add:
    • Użyj .entry() i .or_insert(), aby dodać element, jeśli jeszcze nie istnieje, używając trzeciej danej wejściowej jako ceny i 0 jako początkowej ilości
    • Wyświetl: Added [item_name] to inventory
    • Wyświetl: Price: $[price]
    • Wyświetl: Quantity: 0
  • Dla polecenia check:
    • Użyj .get(), aby sprawdzić, czy element istnieje
    • Użyj wyrażenia match, aby obsłużyć Option
    • Jeśli wynikiem jest Some, wyświetl:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Jeśli wynikiem jest None, wyświetl: [item_name] is not in stock
  • Dla polecenia sell:
    • Przekonwertuj trzecią daną wejściową na i32, aby uzyskać ilość do sprzedaży
    • Użyj .get(), aby sprawdzić, czy element istnieje
    • Użyj wyrażenia match, aby obsłużyć Option
    • Jeśli wynikiem jest Some:
      • Sprawdź, czy bieżąca ilość jest wystarczająca
      • Jeśli tak, zaktualizuj magazyn, podając nową ilość, i wyświetl:
        • Sold [quantity_to_sell] [item_name]
        • Total: $[total_price]
        • Remaining stock: [new_quantity]
      • Jeśli nie, wyświetl:
        • Insufficient stock for [item_name]
        • Available: [current_quantity]
    • Jeśli wynikiem jest None, wyświetl: [item_name] is not in stock
  • Dla każdego innego polecenia wyświetl: Invalid command

Dane wejściowe:

  • Pierwszy wiersz: polecenie (add, check lub sell)
  • Drugi wiersz: nazwa elementu (np. Tablet)
  • Trzeci wiersz: liczba (cena dla add, ilość dla sell, ignorowana dla check)
  • Czwarty wiersz: rozdzielone przecinkami nazwy elementów (np. Laptop,Mouse,Keyboard)
  • Piąty wiersz: rozdzielone przecinkami ceny (np. 999.99,25.50,75.00)
  • Szósty wiersz: rozdzielone przecinkami ilości (np. 15,50,30)

Dane wyjściowe:

  • Dla polecenia add:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • Dla polecenia check (element istnieje):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • Dla polecenia check (element nie istnieje): [item_name] is not in stock
  • Dla polecenia sell (wystarczający stan magazynowy):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • Dla polecenia sell (niewystarczający stan magazynowy):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • Dla polecenia sell (element nie istnieje): [item_name] is not in stock
  • Dla nieprawidłowego polecenia: Invalid command

Spróbuj swoich sił

use std::collections::HashMap;
use std::io;

fn main() {
    // Odczytaj dane wejściowe
    let mut command = String::new();
    io::stdin().read_line(&mut command).expect("Failed to read line");
    let command = command.trim();
    
    let mut item_name = String::new();
    io::stdin().read_line(&mut item_name).expect("Failed to read line");
    let item_name = item_name.trim();
    
    let mut value_input = String::new();
    io::stdin().read_line(&mut value_input).expect("Failed to read line");
    let value_input = value_input.trim();
    
    let mut items_input = String::new();
    io::stdin().read_line(&mut items_input).expect("Failed to read line");
    let items_input = items_input.trim();
    
    let mut prices_input = String::new();
    io::stdin().read_line(&mut prices_input).expect("Failed to read line");
    let prices_input = prices_input.trim();
    
    let mut quantities_input = String::new();
    io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
    let quantities_input = quantities_input.trim();
    
    // Utwórz HashMap dla magazynu
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: Napisz swój kod poniżej
    // Przeanalizuj dane wejściowe rozdzielone przecinkami i wypełnij magazyn
    // Użyj wyrażenia match na command, aby obsłużyć operacje add, check i sell
    // Pamiętaj, aby wyświetlać odpowiednie komunikaty zależnie od command
    
}

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online