Menyatukan Semuanya
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 53 dari 66.
Tantangan
MudahKamu akan menerima enam input. Input pertama adalah perintah yang dapat berupa add, check, atau sell. Input kedua adalah nama item. Input ketiga adalah angka yang mewakili jumlah yang akan dijual (untuk perintah sell) atau jumlah awal (untuk perintah add). Input keempat adalah list nama item dalam inventory yang dipisahkan dengan koma. Input kelima adalah list harga yang sesuai dengan setiap item, dipisahkan dengan koma. Input keenam adalah list jumlah yang sesuai dengan setiap item, dipisahkan dengan koma.
Buat sistem manajemen inventory lengkap yang menangani ketiga operasi: menambahkan item, memeriksa stok, dan menjual item. Gunakan HashMap untuk menyimpan data inventory, dengan nama item sebagai key dan sebuah tuple berisi harga dan jumlah sebagai value (f64, i32).
Persyaratan:
- Import
HashMapdaristd::collections - Baca input pertama (perintah) dan hapus spasi di awal dan akhir
- Baca input kedua (nama item) dan hapus spasi di awal dan akhir
- Baca input ketiga (nilai jumlah/harga) dan hapus spasi di awal dan akhir
- Parse input ketiga menjadi
f64 - Baca input keempat (nama item yang dipisahkan dengan koma) dan hapus spasi di awal dan akhir
- Baca input kelima (harga yang dipisahkan dengan koma) dan hapus spasi di awal dan akhir
- Baca input keenam (jumlah yang dipisahkan dengan koma) dan hapus spasi di awal dan akhir
- Buat
HashMap<String, (f64, i32)>mutable untuk inventory - Pisahkan nama item berdasarkan koma
- Pisahkan harga berdasarkan koma dan parse masing-masing menjadi
f64 - Pisahkan jumlah berdasarkan koma dan parse masing-masing menjadi
i32 - Masukkan setiap item ke inventory dengan harga dan jumlah yang sesuai sebagai tuple
- Gunakan ekspresi
matchpada perintah untuk menentukan operasi yang akan dilakukan - Untuk perintah
add:- Gunakan
.entry()dan.or_insert()untuk menambahkan item jika belum ada, dengan menggunakan input ketiga sebagai harga dan0sebagai jumlah awal - Cetak:
Added [item_name] to inventory - Cetak:
Price: $[price] - Cetak:
Quantity: 0
- Gunakan
- Untuk perintah
check:- Gunakan
.get()untuk memeriksa apakah item ada - Gunakan ekspresi
matchuntuk menanganiOption - Jika
Some, cetak:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Jika
None, cetak:[item_name] is not in stock
- Gunakan
- Untuk perintah
sell:- Parse input ketiga menjadi
i32sebagai jumlah yang akan dijual - Gunakan
.get()untuk memeriksa apakah item ada - Gunakan ekspresi
matchuntuk menanganiOption - Jika
Some:- Periksa apakah jumlah saat ini mencukupi
- Jika ya, perbarui inventory dengan jumlah baru dan cetak:
Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Jika tidak, cetak:
Insufficient stock for [item_name]Available: [current_quantity]
- Jika
None, cetak:[item_name] is not in stock
- Parse input ketiga menjadi
- Untuk perintah lainnya, cetak:
Invalid command
Input:
- Baris pertama: Perintah (
add,check, atausell) - Baris kedua: Nama item (misalnya,
Tablet) - Baris ketiga: Angka (harga untuk
add, jumlah untuksell, diabaikan untukcheck) - Baris keempat: Nama item yang dipisahkan dengan koma (misalnya,
Laptop,Mouse,Keyboard) - Baris kelima: Harga yang dipisahkan dengan koma (misalnya,
999.99,25.50,75.00) - Baris keenam: Jumlah yang dipisahkan dengan koma (misalnya,
15,50,30)
Output:
- Untuk perintah
add:Added [item_name] to inventoryPrice: $[price]Quantity: 0
- Untuk perintah
check(item ada):[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Untuk perintah
check(item tidak ada):[item_name] is not in stock - Untuk perintah
sell(stok mencukupi):Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Untuk perintah
sell(stok tidak mencukupi):Insufficient stock for [item_name]Available: [current_quantity]
- Untuk perintah
sell(item tidak ada):[item_name] is not in stock - Untuk perintah tidak valid:
Invalid command
Coba sendiri
use std::collections::HashMap;
use std::io;
fn main() {
// Baca input
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();
// Buat HashMap inventory
let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
// TODO: Tulis kodemu di bawah ini
// Uraikan input yang dipisahkan koma, lalu isi inventory
// Gunakan ekspresi match pada command untuk menangani operasi add, check, dan sell
// Ingat untuk menampilkan pesan yang sesuai berdasarkan command
}Semua pelajaran di Logika dan Alur
1Alur Kontrol Lanjutan
Ekspresi 'match'Mencocokkan Beberapa NilaiMencocokkan RentangEkspresi 'if let'Perulangan sebagai EkspresiRangkuman, Parser Perintah Sederhana4Mengelompokkan Data dengan Struct
Apa Itu Struct?Ringkasan StructMengakses Field StructStruct yang Dapat DiubahStruct sebagai Parameter FungsiStruct TupleRangkuman: Buat Struct Buku2Pengantar Vektor
Apa Itu Vektor?Membuat VektorMenambahkan Elemen dengan pushMengakses Elemen VektorMelakukan Iterasi pada VektorIterasi MutableMenghapus ElemenRangkuman: Pelacak Skor Dasar5Pasangan Kunci-Nilai dengan Hash Map
Apa Itu Hash Map?Membuat Hash MapMenyisipkan Pasangan Kunci-NilaiMengakses NilaiMenelusuri Hash MapMemperbarui NilaiMenghapus PasanganRangkuman: Penghitung Kata8Proyek: Inventaris Barang Sederhana
Menyiapkan ProyekMenambahkan BarangMemeriksa StokMenjual BarangMenyatukan Semuanya3Daftar Tugas Baris Perintah
Penyiapan ProyekMenambahkan TugasMelihat Semua TugasMenghapus TugasKode AkhirLatihan sendiri: Compiler Rust online