Menu
CoddyTech

Menyatukan Semuanya

Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 53 dari 66.

challenge icon

Tantangan

Mudah

Kamu 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 HashMap dari std::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 match pada 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 dan 0 sebagai jumlah awal
    • Cetak: Added [item_name] to inventory
    • Cetak: Price: $[price]
    • Cetak: Quantity: 0
  • Untuk perintah check:
    • Gunakan .get() untuk memeriksa apakah item ada
    • Gunakan ekspresi match untuk menangani Option
    • Jika Some, cetak:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Jika None, cetak: [item_name] is not in stock
  • Untuk perintah sell:
    • Parse input ketiga menjadi i32 sebagai jumlah yang akan dijual
    • Gunakan .get() untuk memeriksa apakah item ada
    • Gunakan ekspresi match untuk menangani Option
    • 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
  • Untuk perintah lainnya, cetak: Invalid command

Input:

  • Baris pertama: Perintah (add, check, atau sell)
  • Baris kedua: Nama item (misalnya, Tablet)
  • Baris ketiga: Angka (harga untuk add, jumlah untuk sell, diabaikan untuk check)
  • 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 inventory
    • Price: $[price]
    • Quantity: 0
  • Untuk perintah check (item ada):
    • [item_name] is in stock
    • Price: $[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

Latihan sendiri: Compiler Rust online