Advertisement
GeorgiLukanov87

Информационна система Сервиз за техника

Jan 3rd, 2025
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <limits>
  5.  
  6. using namespace std;
  7.  
  8. // Константи
  9. const int MAX_ORDERS = 100;
  10. const int MAX_LIST_SIZE = 10;
  11.  
  12. // Структура за сервизна поръчка
  13. struct Order {
  14.     int orderID;
  15.     int day;
  16.     string clientName;
  17.     string deviceType;
  18.     string serialNumber;
  19.     string problem;
  20.     string technicianName = "Неприложимо";
  21.     string repair = "Неприложимо";
  22.     float price = 0.0f;
  23.     int stayDays = 0;
  24.     string status = "приета";
  25. };
  26.  
  27. // Глобални данни
  28. Order orders[MAX_ORDERS];
  29. int orderCount = 0;
  30.  
  31. string predefinedRepairs[MAX_LIST_SIZE] = {
  32.     "Смяна на батерия", "Ремонт на екран", "Смяна на SSD",
  33.     "Подмяна на заряден порт", "Настройка на драйвери", "Почистване на охлаждане",
  34.     "друг вид ремонт"
  35. };
  36.  
  37. // Помощни функции
  38. int validateIntegerInput(const string &prompt, int min, int max) {
  39.     int value;
  40.     while (true) {
  41.         cout << prompt;
  42.         cin >> value;
  43.         if (cin.fail() || value < min || value > max) {
  44.             cout << "Невалидна стойност! Опитайте отново.\n";
  45.             cin.clear();
  46.             cin.ignore(numeric_limits<streamsize>::max(), '\n');
  47.         } else {
  48.             return value;
  49.         }
  50.     }
  51. }
  52.  
  53. string validateStringInput(const string &prompt, size_t maxLength) {
  54.     string value;
  55.     while (true) {
  56.         cout << prompt;
  57.         cin.ignore();
  58.         getline(cin, value);
  59.         if (value.length() > maxLength) {
  60.             cout << "Текстът е прекалено дълъг! Моля, въведете до " << maxLength << " символа.\n";
  61.         } else {
  62.             return value;
  63.         }
  64.     }
  65. }
  66.  
  67. bool isOrderIDUnique(int id) {
  68.     for (int i = 0; i < orderCount; i++) {
  69.         if (orders[i].orderID == id) {
  70.             return false; // Номерът вече съществува
  71.         }
  72.     }
  73.     return true; // Номерът е уникален
  74. }
  75.  
  76. string toLowerCase(const string &str) {
  77.     string lowerStr = str;
  78.     transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);
  79.     return lowerStr;
  80. }
  81.  
  82. // Функция за добавяне на поръчка
  83. void addOrder() {
  84.     if (orderCount >= MAX_ORDERS) {
  85.         cout << "Максималният брой поръчки е достигнат!" << endl;
  86.         return;
  87.     }
  88.  
  89.     Order newOrder;
  90.  
  91.     // Уникален номер на поръчка
  92.     while (true) {
  93.         newOrder.orderID = validateIntegerInput("Въведете номер на поръчка: ", 1, 9999);
  94.         if (isOrderIDUnique(newOrder.orderID)) {
  95.             break;
  96.         } else {
  97.             cout << "Номерът на поръчката вече съществува! Моля, въведете друг номер.\n";
  98.         }
  99.     }
  100.  
  101.     newOrder.day = validateIntegerInput("Въведете ден от месеца (1-31): ", 1, 31);
  102.     newOrder.clientName = validateStringInput("Въведете име на клиента: ", 50);
  103.  
  104.     // Избор на тип устройство
  105.     int deviceChoice;
  106.     cout << "Изберете тип устройство:\n";
  107.     cout << "1. телефон\n";
  108.     cout << "2. лаптоп\n";
  109.     cout << "3. телевизор\n";
  110.     cout << "4. друго\n";
  111.     deviceChoice = validateIntegerInput("Ваш избор: ", 1, 4);
  112.  
  113.     switch (deviceChoice) {
  114.         case 1:
  115.             newOrder.deviceType = "телефон";
  116.             break;
  117.         case 2:
  118.             newOrder.deviceType = "лаптоп";
  119.             break;
  120.         case 3:
  121.             newOrder.deviceType = "телевизор";
  122.             break;
  123.         case 4:
  124.             newOrder.deviceType = "друго";
  125.             break;
  126.     }
  127.  
  128.     newOrder.serialNumber = validateStringInput("Въведете сериен номер: ", 50);
  129.     newOrder.problem = validateStringInput("Въведете проблем според клиента (до 50 символа): ", 50);
  130.  
  131.     orders[orderCount++] = newOrder;
  132.  
  133.     cout << "Поръчката е успешно добавена със статус 'приета'!\n";
  134. }
  135.  
  136. // Функция за актуализация на поръчка
  137. void updateOrder() {
  138.     if (orderCount == 0) {
  139.         cout << "Няма поръчки за актуализация." << endl;
  140.         return;
  141.     }
  142.  
  143.     int orderID;
  144.     cout << "Въведете номер на поръчката за актуализация: ";
  145.     cin >> orderID;
  146.  
  147.     // Търсим поръчката по номер
  148.     for (int i = 0; i < orderCount; i++) {
  149.         if (orders[i].orderID == orderID) {
  150.             cout << "\n--- Актуализация на поръчка ---\n";
  151.             cout << "Поръчка номер: " << orders[i].orderID << endl;
  152.             cout << "Име на клиента: " << orders[i].clientName << endl;
  153.             cout << "Тип устройство: " << orders[i].deviceType << endl;
  154.  
  155.             cin.ignore(); // Изчистване на входния буфер
  156.             // Актуализация на име на техник
  157.             orders[i].technicianName = validateStringInput("Въведете име на сервизния техник: ", 50);
  158.  
  159.             // Актуализация на извършен ремонт
  160.             cout << "Изберете ремонт (въведете номер):\n";
  161.             for (int j = 0; j < MAX_LIST_SIZE && !predefinedRepairs[j].empty(); ++j) {
  162.                 cout << j + 1 << ". " << predefinedRepairs[j] << endl;
  163.             }
  164.             int repairChoice;
  165.             repairChoice = validateIntegerInput("Ваш избор: ", 1, MAX_LIST_SIZE);
  166.  
  167.             // Валидираме избора и задаваме ремонта
  168.             orders[i].repair = predefinedRepairs[repairChoice - 1];
  169.  
  170.             // Актуализация на цена
  171.             orders[i].price = validateIntegerInput("Въведете цена: ", 0, 100000);
  172.  
  173.             // Актуализация на дни престой
  174.             orders[i].stayDays = validateIntegerInput("Въведете дни престой в сервиза: ", 0, 365);
  175.  
  176.             // Актуализация на статус
  177.             int statusChoice;
  178.             cout << "Изберете нов статус:\n";
  179.             cout << "1. приета\n";
  180.             cout << "2. отказана\n";
  181.             cout << "3. завършена\n";
  182.             statusChoice = validateIntegerInput("Ваш избор: ", 1, 3);
  183.  
  184.             switch (statusChoice) {
  185.                 case 1:
  186.                     orders[i].status = "приета";
  187.                     break;
  188.                 case 2:
  189.                     orders[i].status = "отказана";
  190.                     break;
  191.                 case 3:
  192.                     orders[i].status = "завършена";
  193.                     break;
  194.             }
  195.  
  196.             cout << "Поръчката е успешно актуализирана!" << endl;
  197.             return;
  198.         }
  199.     }
  200.  
  201.     cout << "Поръчка с номер " << orderID << " не е намерена." << endl;
  202. }
  203.  
  204. // Функция за търсене по тип устройство
  205. void searchByDeviceType() {
  206.     if (orderCount == 0) {
  207.         cout << "Няма добавени поръчки." << endl;
  208.         return;
  209.     }
  210.  
  211.     string searchType;
  212.     cout << "Въведете типа устройство за търсене: ";
  213.     cin.ignore();
  214.     getline(cin, searchType);
  215.     searchType = toLowerCase(searchType);
  216.  
  217.     cout << "\n--- Резултати от търсенето по устройство ---\n";
  218.     cout << "Номер | Ден | Клиент       | Устройство | Сериен номер | Проблем | Статус\n";
  219.     cout << "--------------------------------------------------------------------\n";
  220.  
  221.     bool found = false;
  222.     for (int i = 0; i < orderCount; i++) {
  223.         if (toLowerCase(orders[i].deviceType) == searchType) {
  224.             cout << orders[i].orderID << "     | "
  225.                  << orders[i].day << "   | "
  226.                  << orders[i].clientName << " | "
  227.                  << orders[i].deviceType << " | "
  228.                  << orders[i].serialNumber << " | "
  229.                  << orders[i].problem << " | "
  230.                  << orders[i].status << "\n";
  231.             found = true;
  232.         }
  233.     }
  234.  
  235.     if (!found) {
  236.         cout << "Няма намерени поръчки за типа устройство: " << searchType << endl;
  237.     }
  238.     cout << "--------------------------------------------------------------------\n";
  239. }
  240.  
  241. // Функция за търсене по статус
  242. void searchByStatus() {
  243.     if (orderCount == 0) {
  244.         cout << "Няма добавени поръчки." << endl;
  245.         return;
  246.     }
  247.  
  248.     string searchStatus;
  249.     cout << "Въведете статуса за търсене (приета, отказана, завършена): ";
  250.     cin.ignore();
  251.     getline(cin, searchStatus);
  252.     searchStatus = toLowerCase(searchStatus);
  253.  
  254.     cout << "\n--- Резултати от търсенето по статус ---\n";
  255.     cout << "Номер | Ден | Клиент       | Устройство | Сериен номер | Проблем | Статус\n";
  256.     cout << "--------------------------------------------------------------------\n";
  257.  
  258.     bool found = false;
  259.     for (int i = 0; i < orderCount; i++) {
  260.         if (toLowerCase(orders[i].status) == searchStatus) {
  261.             cout << orders[i].orderID << "     | "
  262.                  << orders[i].day << "   | "
  263.                  << orders[i].clientName << " | "
  264.                  << orders[i].deviceType << " | "
  265.                  << orders[i].serialNumber << " | "
  266.                  << orders[i].problem << " | "
  267.                  << orders[i].status << "\n";
  268.             found = true;
  269.         }
  270.     }
  271.  
  272.     if (!found) {
  273.         cout << "Няма намерени поръчки със статус: " << searchStatus << endl;
  274.     }
  275.     cout << "--------------------------------------------------------------------\n";
  276. }
  277.  
  278. // Функция за показване на всички поръчки
  279. void displayOrders() {
  280.     if (orderCount == 0) {
  281.         cout << "Няма добавени поръчки." << endl;
  282.         return;
  283.     }
  284.  
  285.     cout << "\n--- Списък с поръчки ---\n";
  286.     cout << "Номер | Ден | Клиент       | Устройство | Сериен номер | Проблем | Статус\n";
  287.     cout << "--------------------------------------------------------------------\n";
  288.  
  289.     for (int i = 0; i < orderCount; i++) {
  290.         cout << orders[i].orderID << "     | "
  291.              << orders[i].day << "   | "
  292.              << orders[i].clientName << " | "
  293.              << orders[i].deviceType << " | "
  294.              << orders[i].serialNumber << " | "
  295.              << orders[i].problem << " | "
  296.              << orders[i].status << "\n";
  297.     }
  298.     cout << "--------------------------------------------------------------------\n";
  299. }
  300.  
  301. // Функция за сортиране по дата
  302. void sortOrdersByDate() {
  303.     if (orderCount <= 1) {
  304.         cout << "Няма достатъчно поръчки за сортиране." << endl;
  305.         return;
  306.     }
  307.  
  308.     sort(orders, orders + orderCount, [](const Order &a, const Order &b) {
  309.         return a.day < b.day; // Сравнява дните за сортиране
  310.     });
  311.  
  312.     cout << "Поръчките са сортирани по дата на приемане." << endl;
  313. }
  314.  
  315. // Меню за потребителя
  316. void showMenu() {
  317.     cout << "\n--- Меню ---\n";
  318.     cout << "1. Добавяне на нова поръчка\n";
  319.     cout << "2. Извеждане на всички поръчки\n";
  320.     cout << "3. Актуализация на поръчка\n";
  321.     cout << "4. Търсене по вид устройство\n";
  322.     cout << "5. Търсене по статус\n";
  323.     cout << "6. Сортиране по дата на приемане\n";
  324.     cout << "7. Изход\n";
  325.     cout << "Изберете опция: ";
  326. }
  327.  
  328. // Основна програма
  329. int main() {
  330.     int choice;
  331.     do {
  332.         showMenu();
  333.         cin >> choice;
  334.  
  335.         switch (choice) {
  336.             case 1:
  337.                 addOrder();
  338.                 break;
  339.             case 2:
  340.                 displayOrders();
  341.                 break;
  342.             case 3:
  343.                 updateOrder();
  344.                 break;
  345.             case 4:
  346.                 searchByDeviceType();
  347.                 break;
  348.             case 5:
  349.                 searchByStatus();
  350.                 break;
  351.             case 6:
  352.                 sortOrdersByDate();
  353.                 displayOrders();
  354.                 break;
  355.             case 7:
  356.                 cout << "Изход...\n";
  357.                 break;
  358.             default:
  359.                 cout << "Невалиден избор! Опитайте отново.\n";
  360.         }
  361.     } while (choice != 7);
  362.  
  363.     return 0;
  364. }
  365.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement