Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчёт_5

.docx
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
251.29 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение

высшего образования

«Национальный исследовательский Томский политехнический университет»

Инженерная школа информационных технологий и робототехники

Отделение автоматизации и робототехники

Направление: 15.03.04 – Автоматизация технологических процессов и производств

Отчёт по лабораторной работе № 3

по дисциплине «Основы программирования и алгоритмизации»

«Структуры в C++»

вариант № 10

Выполнил:

Студент группы 8Т41 Кирильцева К. М.

Проверил:

Ассистент ________________ Кургинов Я. О.

Томск 2025

Цель работы:

Изучить и освоить основы работы с структурами в языке

программирования C++, научиться объявлять и инициализировать

структуры, а также научиться решать практические задачи, связанные с

использованием структур.

Задание:

KFC. So good

Реализовать электронную очередь заказов с учетом готовности позиций.

Требования:

  • Заказ содержит несколько позиций (например, "бургер", "картофель").

  • Кухня периодически пополняет запас готовых позиций.

Реализовать:

1. Добавление заказа в очередь.

2. Проверку готовности позиций.

3. Сборку и выдачи заказа, если все готово.

4. Пропуск заказа, если что-то не готово.

5. Вывод текущего состояния очереди и кухни.

Блок схемы:

Блок схема основного кода представлена на рисунке 1.

Рисунок 1- Блок схема основного кода.

Блок схема функции addOrder(Order& order, std::string itemName, int quantity) представлена на рисунке 2.

Рисунок 2 - Блок схема функции.

Блок схема функции addReadyItem(Kitchen& kitchen, std::string itemName, int quantity) представлена на рисунке 3.

Рисунок 3 - Блок схема функции.

Блок схема функции checkOrderStatus(const Order& order, const Kitchen& kitchen) представлена на рисунке 4.

Рисунок 4 - Блок схема функции.

Блок схема функции completeOrder(Order& order, const Kitchen& kitchen) представлена на рисунке 5.

Рисунок 5 - Блок схема функции.

Результат заказа показан на рисунке 6:

Рисунок 6 – Пример заказа.

Вывод:

В ходе лабораторной работы:

  • Изучены и реализованы структуры с вложенными данными.

  • Получены навыки работы с std::queue, std::map.

  • Разработана модель электронной очереди, приближенная к реальному применению в fast-food.

  • Отлажена логика взаимодействия заказов и текущих ресурсов (готовых позиций на кухне).

Приложение A.

(Обязательный)

Листинги программ

Листинг 1 – Код всех функций, использующихся в задании

  1. #include "Header.h"

  2. // Добавление позиции в заказ

  3. void addOrder(Order& order, std::string itemName, int quantity) {

  4. if (order.itemCount < 5) {

  5. order.items[order.itemCount].name = itemName;

  6. order.items[order.itemCount].quantity = quantity;

  7. order.items[order.itemCount].isReady = false;

  8. order.itemCount++;

  9. }

  10. else {

  11. std::cout << "Ошибка: Максимальное количество позиций в заказе - 5" << std::endl;

  12. }

  13. }

  14. // Добавление готовой позиции на кухню

  15. void addReadyItem(Kitchen& kitchen, std::string itemName, int quantity) {

  16. if (kitchen.readyItemCount < 5) {

  17. kitchen.readyItems[kitchen.readyItemCount].name = itemName;

  18. kitchen.readyItems[kitchen.readyItemCount].quantity = quantity;

  19. kitchen.readyItems[kitchen.readyItemCount].isReady = true;

  20. kitchen.readyItemCount++;

  21. }

  22. else {

  23. std::cout << "Ошибка: Максимальное количество готовых позиций - 5" << std::endl;

  24. }

  25. }

Продолжение Листинга 1

  1. // Проверка статуса заказа

  2. bool checkOrderStatus(const Order& order, const Kitchen& kitchen) {

  3. for (int i = 0; i < order.itemCount; i++) {

  4. bool found = false;

  5. for (int j = 0; j < kitchen.readyItemCount; j++) {

  6. if (order.items[i].name == kitchen.readyItems[j].name &&

  7. kitchen.readyItems[j].quantity >= order.items[i].quantity) {

  8. found = true;

  9. break;

  10. }

  11. }

  12. if (!found) {

  13. return false;

  14. }

  15. }

  16. return true;

  17. }

  18. // Завершение заказа

  19. void completeOrder(Order& order, const Kitchen& kitchen) {

  20. if (checkOrderStatus(order, kitchen)) {

  21. order.isComplete = true;

  22. std::cout << "Заказ №" << order.orderId << " готов к выдаче!" << std::endl;

  23. }

  24. else {

  25. std::cout << "Заказ №" << order.orderId << " не может быть завершен: не все позиции готовы" << std::endl;

  26. }

  27. }

Продолжение Листинга 1

  1. // Вывод состояния очереди

  2. void printQueue(Order* queue, int queueSize) {

  3. std::cout << "\nТекущая очередь заказов:" << std::endl;

  4. for (int i = 0; i < queueSize; i++) {

  5. if (queue[i].itemCount > 0) {

  6. std::cout << "Заказ №" << queue[i].orderId << ":" << std::endl;

  7. for (int j = 0; j < queue[i].itemCount; j++) {

  8. std::cout << " - " << queue[i].items[j].name << " x" << queue[i].items[j].quantity;

  9. if (queue[i].items[j].isReady) {

  10. std::cout << " (готово)";

  11. }

  12. std::cout << std::endl;

  13. }

  14. if (queue[i].isComplete) {

  15. std::cout << " Статус: Завершен" << std::endl;

  16. }

  17. else {

  18. std::cout << " Статус: В ожидании" << std::endl;

  19. }

  20. }

  21. }

  22. }

  23. // Вывод состояния кухни

  24. void printKitchenStatus(const Kitchen& kitchen) {

  25. std::cout << "\nСостояние кухни:" << std::endl;

  26. for (int i = 0; i < kitchen.readyItemCount; i++) {

  27. std::cout << "- " << kitchen.readyItems[i].name << " x" << kitchen.readyItems[i].quantity << " (готово)" << std::endl;

  28. }

  29. }

Листинг 2 – Код основного файла, для выбора типа сортировки

  1. #include "Header.h"

  2. int main() {

  3. setlocale(LC_ALL, "Russian");

  4. // Создаем массив для хранения заказов (максимум 10 заказов)

  5. Order orders[10];

  6. int currentOrderCount = 0;

  7. Kitchen kitchen;

  8. while (true) {

  9. std::cout << "\nМеню:" << std::endl;

  10. std::cout << "1. Добавить заказ" << std::endl;

  11. std::cout << "2. Добавить готовую позицию" << std::endl;

  12. std::cout << "3. Проверить статус заказов" << std::endl;

  13. std::cout << "4. Завершить заказ" << std::endl;

  14. std::cout << "5. Показать состояние системы" << std::endl;

  15. std::cout << "6. Выход" << std::endl;

  16. int choice;

  17. std::cout << "Выберите действие: ";

  18. std::cin >> choice;

  19. switch (choice) {

  20. case 1: {

  21. if (currentOrderCount < 10) {

  22. orders[currentOrderCount].orderId = currentOrderCount + 1;

  23. orders[currentOrderCount].itemCount = 0;

  24. orders[currentOrderCount].isComplete = false;

  25. orders[currentOrderCount].orderTime = time(0);

  26. std::cout << "Добавление заказа №" << orders[currentOrderCount].orderId << std::endl;

  27. std::string itemName;

  28. int quantity;

  29. while (true) {

  30. std::cout << "Введите название позиции (или 'end' для завершения): ";

  31. std::cin >> itemName;

  32. if (itemName == "end") break;

  33. std::cout << "Введите количество: ";

  34. std::cin >> quantity;

  35. addOrder(orders[currentOrderCount], itemName, quantity);

  36. }

  37. currentOrderCount++;

  38. }

Продолжение Листинга 2

  1. else {

  2. std::cout << "Ошибка: Максимальное количество заказов - 10" << std::endl;

  3. }

  4. break;

  5. }

  6. case 2: {

  7. std::string itemName;

  8. int quantity;

  9. std::cout << "Введите название готовой позиции: ";

  10. std::cin >> itemName;

  11. std::cout << "Введите количество: ";

  12. std::cin >> quantity;

  13. addReadyItem(kitchen, itemName, quantity);

  14. break;

  15. }

  16. case 3: {

  17. for (int i = 0; i < currentOrderCount; i++) {

  18. if (!orders[i].isComplete) {

  19. bool status = checkOrderStatus(orders[i], kitchen);

  20. if (status) {

  21. std::cout << "Заказ №" << orders[i].orderId << " готов к сборке" << std::endl;

  22. }

  23. else {

  24. std::cout << "Заказ №" << orders[i].orderId << " ожидает готовности позиций" << std::endl;

  25. }

  26. }

  27. }

  28. break;

  29. }

  30. case 4: {

  31. int orderId;

  32. std::cout << "Введите номер заказа для завершения: ";

  33. std::cin >> orderId;

  34. if (orderId > 0 && orderId <= currentOrderCount) {

  35. completeOrder(orders[orderId - 1], kitchen);

  36. }

  37. else {

  38. std::cout << "Ошибка: Неверный номер заказа" << std::endl;

  39. }

  40. break;

  41. }

Продолжение Листинга 2

  1. case 5: {

  2. printQueue(orders, currentOrderCount);

  3. printKitchenStatus(kitchen);

  4. break;

  5. }

  6. case 6: {

  7. return 0;

  8. }

  9. default: {

  10. std::cout << "Ошибка: Неверный выбор" << std::endl;

  11. }

  12. }

  13. }

  14. return 0;

  15. }

Соседние файлы в предмете Основы программирования и алгоритмизации