Hepsini Bir Araya Getirme
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 53 / 66.
Görev
KolayAltı adet girdi alacaksınız. İlk girdi add, check veya sell olabilen bir komuttur. İkinci girdi bir ürün adıdır. Üçüncü girdi, ya satılacak miktarı (sell komutu için) ya da başlangıç fiyatını (add komutu için) temsil eden bir sayıdır. Dördüncü girdi, envanterdeki ürün adlarının virgülle ayrılmış bir listesidir. Beşinci girdi, her bir ürüne karşılık gelen fiyatların virgülle ayrılmış bir listesidir. Altıncı girdi, her bir ürüne karşılık gelen miktarların virgülle ayrılmış bir listesidir.
Üç işlemi de (ürün ekleme, stok kontrolü ve ürün satışı) yöneten eksiksiz bir envanter yönetim sistemi oluşturun. Envanter verilerini saklamak için anahtarın ürün adı ve değerin fiyat ile miktarı içeren bir demet (tuple) (f64, i32) olduğu bir HashMap kullanın.
Gereksinimler:
std::collectionsmodülündenHashMapyapısını içe aktarın- İlk girdiyi (komut) okuyun ve boşlukları temizleyin
- İkinci girdiyi (ürün adı) okuyun ve boşlukları temizleyin
- Üçüncü girdiyi (miktar/fiyat değeri) okuyun ve boşlukları temizleyin
- Üçüncü girdiyi
f64türüne dönüştürün - Dördüncü girdiyi (virgülle ayrılmış ürün adları) okuyun ve boşlukları temizleyin
- Beşinci girdiyi (virgülle ayrılmış fiyatlar) okuyun ve boşlukları temizleyin
- Altıncı girdiyi (virgülle ayrılmış miktarlar) okuyun ve boşlukları temizleyin
- Envanter için değiştirilebilir (mutable) bir
HashMap<String, (f64, i32)>oluşturun - Ürün adlarını virgüllere göre ayırın
- Fiyatları virgüllere göre ayırın ve her birini
f64türüne dönüştürün - Miktarları virgüllere göre ayırın ve her birini
i32türüne dönüştürün - Her bir ürünü, karşılık gelen fiyatı ve miktarıyla birlikte bir demet olarak envantere ekleyin
- Hangi işlemin gerçekleştirileceğini belirlemek için komut üzerinde bir
matchifadesi kullanın addkomutu için:- Ürün mevcut değilse eklemek için
.entry()ve.or_insert()kullanın; üçüncü girdiyi fiyat,0değerini ise başlangıç miktarı olarak kullanın - Şunu yazdırın:
Added [item_name] to inventory - Şunu yazdırın:
Price: $[price] - Şunu yazdırın:
Quantity: 0
- Ürün mevcut değilse eklemek için
checkkomutu için:- Ürünün var olup olmadığını kontrol etmek için
.get()kullanın Optionsonucunu işlemek için birmatchifadesi kullanın- Eğer
Someise, şunu yazdırın:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Eğer
Noneise, şunu yazdırın:[item_name] is not in stock
- Ürünün var olup olmadığını kontrol etmek için
sellkomutu için:- Üçüncü girdiyi satılacak miktar olarak
i32türüne dönüştürün - Ürünün var olup olmadığını kontrol etmek için
.get()kullanın Optionsonucunu işlemek için birmatchifadesi kullanın- Eğer
Someise:- Mevcut miktarın yeterli olup olmadığını kontrol edin
- Evet ise, envanteri yeni miktarla güncelleyin ve şunu yazdırın:
Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Hayır ise, şunu yazdırın:
Insufficient stock for [item_name]Available: [current_quantity]
- Eğer
Noneise, şunu yazdırın:[item_name] is not in stock
- Üçüncü girdiyi satılacak miktar olarak
- Diğer tüm komutlar için şunu yazdırın:
Invalid command
Girdi:
- Birinci satır: Komut (
add,checkveyasell) - İkinci satır: Ürün adı (örneğin,
Tablet) - Üçüncü satır: Sayı (
addiçin fiyat,selliçin miktar,checkiçin dikkate alınmaz) - Dördüncü satır: Virgülle ayrılmış ürün adları (örneğin,
Laptop,Mouse,Keyboard) - Beşinci satır: Virgülle ayrılmış fiyatlar (örneğin,
999.99,25.50,75.00) - Altıncı satır: Virgülle ayrılmış miktarlar (örneğin,
15,50,30)
Çıktı:
addkomutu için:Added [item_name] to inventoryPrice: $[price]Quantity: 0
checkkomutu için (ürün mevcutsa):[item_name] is in stockPrice: $[price]Quantity: [quantity]
checkkomutu için (ürün mevcut değilse):[item_name] is not in stocksellkomutu için (yeterli stok varsa):Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
sellkomutu için (yetersiz stok varsa):Insufficient stock for [item_name]Available: [current_quantity]
sellkomutu için (ürün mevcut değilse):[item_name] is not in stock- Geçersiz komut için:
Invalid command
Kendin dene
use std::collections::HashMap;
use std::io;
fn main() {
// Girdileri oku
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();
// Envanter HashMap'ini oluştur
let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
// TODO: Kodunuzu aşağıya yazın
// Virgülle ayrılmış girdileri ayrıştırın ve envanteri doldurun
// Ekleme (add), kontrol etme (check) ve satış (sell) işlemlerini yönetmek için komut üzerinde match ifadesini kullanın
// Komuta göre uygun mesajları çıktı olarak vermeyi unutmayın
}Logic & Flow bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi Bulma