Menu
Coddy logo textTech

Sprzedaż produktu

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

challenge icon

Wyzwanie

Łatwy

Otrzymasz pięć danych wejściowych. Pierwsza to nazwa sprzedawanego produktu. Druga to liczba sztuk do sprzedania. Trzecia to oddzielona przecinkami lista nazw produktów w magazynie. Czwarta to oddzielona przecinkami lista cen odpowiadających poszczególnym produktom. Piąta to oddzielona przecinkami lista ilości odpowiadających poszczególnym produktom. Utwórz HashMap, aby przechowywać dane o stanie magazynu, gdzie kluczem jest nazwa produktu, a wartością krotka zawierająca cenę i ilość (f64, i32). Następnie spróbuj sprzedać żądaną liczbę sztuk produktu.

Wymagania:

  • Zaimportuj HashMap z std::collections
  • Odczytaj pierwszą daną wejściową (nazwę sprzedawanego produktu) i usuń białe znaki
  • Odczytaj drugą daną wejściową (liczbę sztuk do sprzedania) i usuń białe znaki
  • Przekształć liczbę sztuk do sprzedania na typ i32
  • Odczytaj trzecią daną wejściową (nazwy produktów oddzielone przecinkami) i usuń białe znaki
  • Odczytaj czwartą daną wejściową (ceny oddzielone przecinkami) i usuń białe znaki
  • Odczytaj piątą daną wejściową (ilości oddzielone przecinkami) i usuń białe znaki
  • Utwórz mutowalny obiekt HashMap<String, (f64, i32)> do przechowywania stanu magazynu
  • Podziel nazwy produktów według przecinków
  • Podziel ceny według przecinków i przekształć każdą na typ f64
  • Podziel ilości według przecinków i przekształć każdą na typ i32
  • Wstaw każdy produkt do stanu magazynu wraz z odpowiadającą mu ceną i ilością w postaci krotki
  • Użyj .get(), aby sprawdzić, czy żądany produkt znajduje się w magazynie
  • Użyj wyrażenia match, aby obsłużyć wartość Option zwróconą przez .get()
  • W ramieniu Some:
    • Wyodrębnij cenę i aktualną ilość z krotki
    • Sprawdź, czy aktualna ilość jest większa lub równa liczbie sztuk do sprzedania
    • Jeśli tak:
      • Oblicz nową ilość, odejmując liczbę sztuk do sprzedania od aktualnej ilości
      • Oblicz łączną cenę, mnożąc cenę produktu przez liczbę sztuk do sprzedania
      • Użyj .insert(), aby zaktualizować stan magazynu nową ilością
      • Wyświetl: Sold [quantity_to_sell] [item_name]
      • Wyświetl: Total: $[total_price]
      • Wyświetl: Remaining stock: [new_quantity]
    • Jeśli nie (brak wystarczającej ilości w magazynie):
      • Wyświetl: Insufficient stock for [item_name]
      • Wyświetl: Available: [current_quantity]
  • W ramieniu None wyświetl: [item_name] is not in stock

Dane wejściowe:

  • Pierwszy wiersz: nazwa sprzedawanego produktu (np. Mouse)
  • Drugi wiersz: liczba sztuk do sprzedania (np. 10)
  • Trzeci wiersz: nazwy produktów oddzielone przecinkami (np. Laptop,Mouse,Keyboard)
  • Czwarty wiersz: ceny oddzielone przecinkami (np. 999.99,25.50,75.00)
  • Piąty wiersz: ilości oddzielone przecinkami (np. 15,50,30)

Dane wyjściowe:

  • Jeśli produkt istnieje i jest go wystarczająco dużo w magazynie:
    • Pierwszy wiersz: Sold [quantity_to_sell] [item_name]
    • Drugi wiersz: Total: $[total_price]
    • Trzeci wiersz: Remaining stock: [new_quantity]
  • Jeśli produkt istnieje, ale nie ma go wystarczająco dużo w magazynie:
    • Pierwszy wiersz: Insufficient stock for [item_name]
    • Drugi wiersz: Available: [current_quantity]
  • Jeśli produkt nie istnieje: [item_name] is not in stock

Spróbuj swoich sił

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

fn main() {
    // Odczytaj dane wejściowe
    let mut item_to_sell = String::new();
    io::stdin().read_line(&mut item_to_sell).expect("Failed to read line");
    let item_to_sell = item_to_sell.trim();
    
    let mut quantity_to_sell_input = String::new();
    io::stdin().read_line(&mut quantity_to_sell_input).expect("Failed to read line");
    let quantity_to_sell: i32 = quantity_to_sell_input.trim().parse().expect("Invalid number");
    
    let mut item_names_input = String::new();
    io::stdin().read_line(&mut item_names_input).expect("Failed to read line");
    let item_names_input = item_names_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();
    
    // TODO: Napisz swój kod poniżej
    // Utwórz HashMap do przechowywania stanu magazynowego
    // Przetwórz dane wejściowe i utwórz stan magazynowy
    // Sprawdź, czy produkt istnieje, i obsłuż sprzedaż
    
}

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online