Menu
Coddy logo textTech

Продажа товара

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 52 из 66.

challenge icon

Задание

Легко

Вы получите пять входных данных. Первый ввод — это название товара для продажи. Второй ввод — это количество для продажи. Третий ввод — это список названий товаров в инвентаре, разделенных запятыми. Четвертый ввод — это список цен, соответствующих каждому товару, разделенных запятыми. Пятый ввод — это список количеств, соответствующих каждому товару, разделенных запятыми. Создайте HashMap для хранения данных инвентаря, где ключом является название товара, а значением — кортеж, содержащий цену и количество (f64, i32). Затем попытайтесь продать запрошенное количество товара.

Требования:

  • Импортируйте HashMap из std::collections
  • Прочитайте первый ввод (название товара для продажи) и удалите лишние пробелы
  • Прочитайте второй ввод (количество для продажи) и удалите лишние пробелы
  • Преобразуйте количество для продажи в тип i32
  • Прочитайте третий ввод (названия товаров через запятую) и удалите лишние пробелы
  • Прочитайте четвертый ввод (цены через запятую) и удалите лишние пробелы
  • Прочитайте пятый ввод (количества через запятую) и удалите лишние пробелы
  • Создайте изменяемый HashMap<String, (f64, i32)> для инвентаря
  • Разделите названия товаров по запятым
  • Разделите цены по запятым и преобразуйте каждую в f64
  • Разделите количества по запятым и преобразуйте каждое в i32
  • Вставьте каждый товар в инвентарь с соответствующей ценой и количеством в виде кортежа
  • Используйте .get(), чтобы проверить, существует ли запрошенный товар в инвентаре
  • Используйте выражение match для обработки Option, возвращаемого методом .get()
  • В ветке Some:
    • Извлеките цену и текущее количество из кортежа
    • Проверьте, больше ли текущее количество или равно количеству для продажи
    • Если да:
      • Рассчитайте новое количество, вычтя количество для продажи из текущего количества
      • Рассчитайте общую стоимость, умножив цену товара на количество для продажи
      • Используйте .insert(), чтобы обновить инвентарь с новым количеством
      • Выведите: Sold [quantity_to_sell] [item_name]
      • Выведите: Total: $[total_price]
      • Выведите: Remaining stock: [new_quantity]
    • Если нет (недостаточно товара на складе):
      • Выведите: Insufficient stock for [item_name]
      • Выведите: Available: [current_quantity]
  • В ветке None выведите: [item_name] is not in stock

Ввод:

  • Первая строка: Название товара для продажи (например, Mouse)
  • Вторая строка: Количество для продажи (например, 10)
  • Третья строка: Названия товаров через запятую (например, Laptop,Mouse,Keyboard)
  • Четвертая строка: Цены через запятую (например, 999.99,25.50,75.00)
  • Пятая строка: Количества через запятую (например, 15,50,30)

Вывод:

  • Если товар существует и его достаточно на складе:
    • Первая строка: Sold [quantity_to_sell] [item_name]
    • Вторая строка: Total: $[total_price]
    • Третья строка: Remaining stock: [new_quantity]
  • Если товар существует, но его недостаточно на складе:
    • Первая строка: Insufficient stock for [item_name]
    • Вторая строка: Available: [current_quantity]
  • Если товара не существует: [item_name] is not in stock

Попробуйте сами

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

fn main() {
    // Чтение входных данных
    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: Напишите ваш код ниже
    // Создайте HashMap для хранения инвентаря
    // Обработайте входные данные и создайте инвентарь
    // Проверьте, существует ли товар, и обработайте продажу
    
}

Все уроки раздела Logic & Flow