Sprzedaż produktu
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 52 z 66.
Wyzwanie
ŁatwyOtrzymasz 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
HashMapzstd::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śćOptionzwró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]
- Wyświetl:
- W ramieniu
Nonewyś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]
- Pierwszy wiersz:
- 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]
- Pierwszy wiersz:
- 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
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online