Menu
Coddy logo textTech

Собираем всё воедино

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

challenge icon

Задание

Легко

Вы получите шесть входных данных. Первый ввод — это команда, которая может быть либо add, либо check, либо sell. Второй ввод — это название товара. Третий ввод — это число, представляющее либо количество для продажи (для команды sell), либо начальную цену (для команды add). Четвертый ввод — это список названий товаров в инвентаре, разделенных запятыми. Пятый ввод — это список цен, соответствующих каждому товару, разделенных запятыми. Шестой ввод — это список количеств, соответствующих каждому товару, разделенных запятыми.

Создайте полную систему управления инвентарем, которая обрабатывает все три операции: добавление товаров, проверку запасов и продажу товаров. Используйте HashMap для хранения данных инвентаря, где ключом является название товара, а значением — кортеж, содержащий цену и количество (f64, i32).

Требования:

  • Импортируйте HashMap из std::collections
  • Прочитайте первый ввод (команду) и удалите лишние пробелы
  • Прочитайте второй ввод (название товара) и удалите лишние пробелы
  • Прочитайте третий ввод (значение количества/цены) и удалите лишние пробелы
  • Преобразуйте третий ввод в f64
  • Прочитайте четвертый ввод (названия товаров через запятую) и удалите лишние пробелы
  • Прочитайте пятый ввод (цены через запятую) и удалите лишние пробелы
  • Прочитайте шестой ввод (количества через запятую) и удалите лишние пробелы
  • Создайте изменяемый HashMap<String, (f64, i32)> для инвентаря
  • Разделите названия товаров по запятым
  • Разделите цены по запятым и преобразуйте каждую в f64
  • Разделите количества по запятым и преобразуйте каждое в i32
  • Вставьте каждый товар в инвентарь с соответствующей ценой и количеством в виде кортежа
  • Используйте выражение match для команды, чтобы определить, какую операцию выполнить
  • Для команды add:
    • Используйте .entry() и .or_insert(), чтобы добавить товар, если он не существует, используя третий ввод в качестве цены и 0 в качестве начального количества
    • Выведите: Added [item_name] to inventory
    • Выведите: Price: $[price]
    • Выведите: Quantity: 0
  • Для команды check:
    • Используйте .get(), чтобы проверить, существует ли товар
    • Используйте выражение match для обработки Option
    • Если Some, выведите:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Если None, выведите: [item_name] is not in stock
  • Для команды sell:
    • Преобразуйте третий ввод в i32 как количество для продажи
    • Используйте .get(), чтобы проверить, существует ли товар
    • Используйте выражение match для обработки Option
    • Если Some:
      • Проверьте, достаточно ли текущего количества
      • Если да, обновите инвентарь новым количеством и выведите:
        • 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
  • Для любой другой команды выведите: Invalid command

Ввод:

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

Вывод:

  • Для команды add:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • Для команды check (товар существует):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • Для команды check (товар не существует): [item_name] is not in stock
  • Для команды sell (достаточно запасов):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • Для команды sell (недостаточно запасов):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • Для команды sell (товар не существует): [item_name] is not in stock
  • Для неверной команды: Invalid command

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

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

fn main() {
    // Чтение входных данных
    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();
    
    // Создание HashMap для инвентаря
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: Напишите свой код ниже
    // Разберите входные данные, разделенные запятыми, и заполните инвентарь
    // Используйте выражение match для команды, чтобы обработать операции add, check и sell
    // Не забудьте вывести соответствующие сообщения в зависимости от команды
    
}

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