Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <algorithm>
- #include <limits>
- using namespace std;
- // Константи
- const int MAX_ORDERS = 100;
- const int MAX_LIST_SIZE = 10;
- // Структура за сервизна поръчка
- struct Order {
- int orderID;
- int day;
- string clientName;
- string deviceType;
- string serialNumber;
- string problem;
- string technicianName = "Неприложимо";
- string repair = "Неприложимо";
- float price = 0.0f;
- int stayDays = 0;
- string status = "приета";
- };
- // Глобални данни
- Order orders[MAX_ORDERS];
- int orderCount = 0;
- string predefinedRepairs[MAX_LIST_SIZE] = {
- "Смяна на батерия", "Ремонт на екран", "Смяна на SSD",
- "Подмяна на заряден порт", "Настройка на драйвери", "Почистване на охлаждане",
- "друг вид ремонт"
- };
- // Помощни функции
- int validateIntegerInput(const string &prompt, int min, int max) {
- int value;
- while (true) {
- cout << prompt;
- cin >> value;
- if (cin.fail() || value < min || value > max) {
- cout << "Невалидна стойност! Опитайте отново.\n";
- cin.clear();
- cin.ignore(numeric_limits<streamsize>::max(), '\n');
- } else {
- return value;
- }
- }
- }
- string validateStringInput(const string &prompt, size_t maxLength) {
- string value;
- while (true) {
- cout << prompt;
- cin.ignore();
- getline(cin, value);
- if (value.length() > maxLength) {
- cout << "Текстът е прекалено дълъг! Моля, въведете до " << maxLength << " символа.\n";
- } else {
- return value;
- }
- }
- }
- bool isOrderIDUnique(int id) {
- for (int i = 0; i < orderCount; i++) {
- if (orders[i].orderID == id) {
- return false; // Номерът вече съществува
- }
- }
- return true; // Номерът е уникален
- }
- string toLowerCase(const string &str) {
- string lowerStr = str;
- transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);
- return lowerStr;
- }
- // Функция за добавяне на поръчка
- void addOrder() {
- if (orderCount >= MAX_ORDERS) {
- cout << "Максималният брой поръчки е достигнат!" << endl;
- return;
- }
- Order newOrder;
- // Уникален номер на поръчка
- while (true) {
- newOrder.orderID = validateIntegerInput("Въведете номер на поръчка: ", 1, 9999);
- if (isOrderIDUnique(newOrder.orderID)) {
- break;
- } else {
- cout << "Номерът на поръчката вече съществува! Моля, въведете друг номер.\n";
- }
- }
- newOrder.day = validateIntegerInput("Въведете ден от месеца (1-31): ", 1, 31);
- newOrder.clientName = validateStringInput("Въведете име на клиента: ", 50);
- // Избор на тип устройство
- int deviceChoice;
- cout << "Изберете тип устройство:\n";
- cout << "1. телефон\n";
- cout << "2. лаптоп\n";
- cout << "3. телевизор\n";
- cout << "4. друго\n";
- deviceChoice = validateIntegerInput("Ваш избор: ", 1, 4);
- switch (deviceChoice) {
- case 1:
- newOrder.deviceType = "телефон";
- break;
- case 2:
- newOrder.deviceType = "лаптоп";
- break;
- case 3:
- newOrder.deviceType = "телевизор";
- break;
- case 4:
- newOrder.deviceType = "друго";
- break;
- }
- newOrder.serialNumber = validateStringInput("Въведете сериен номер: ", 50);
- newOrder.problem = validateStringInput("Въведете проблем според клиента (до 50 символа): ", 50);
- orders[orderCount++] = newOrder;
- cout << "Поръчката е успешно добавена със статус 'приета'!\n";
- }
- // Функция за актуализация на поръчка
- void updateOrder() {
- if (orderCount == 0) {
- cout << "Няма поръчки за актуализация." << endl;
- return;
- }
- int orderID;
- cout << "Въведете номер на поръчката за актуализация: ";
- cin >> orderID;
- // Търсим поръчката по номер
- for (int i = 0; i < orderCount; i++) {
- if (orders[i].orderID == orderID) {
- cout << "\n--- Актуализация на поръчка ---\n";
- cout << "Поръчка номер: " << orders[i].orderID << endl;
- cout << "Име на клиента: " << orders[i].clientName << endl;
- cout << "Тип устройство: " << orders[i].deviceType << endl;
- cin.ignore(); // Изчистване на входния буфер
- // Актуализация на име на техник
- orders[i].technicianName = validateStringInput("Въведете име на сервизния техник: ", 50);
- // Актуализация на извършен ремонт
- cout << "Изберете ремонт (въведете номер):\n";
- for (int j = 0; j < MAX_LIST_SIZE && !predefinedRepairs[j].empty(); ++j) {
- cout << j + 1 << ". " << predefinedRepairs[j] << endl;
- }
- int repairChoice;
- repairChoice = validateIntegerInput("Ваш избор: ", 1, MAX_LIST_SIZE);
- // Валидираме избора и задаваме ремонта
- orders[i].repair = predefinedRepairs[repairChoice - 1];
- // Актуализация на цена
- orders[i].price = validateIntegerInput("Въведете цена: ", 0, 100000);
- // Актуализация на дни престой
- orders[i].stayDays = validateIntegerInput("Въведете дни престой в сервиза: ", 0, 365);
- // Актуализация на статус
- int statusChoice;
- cout << "Изберете нов статус:\n";
- cout << "1. приета\n";
- cout << "2. отказана\n";
- cout << "3. завършена\n";
- statusChoice = validateIntegerInput("Ваш избор: ", 1, 3);
- switch (statusChoice) {
- case 1:
- orders[i].status = "приета";
- break;
- case 2:
- orders[i].status = "отказана";
- break;
- case 3:
- orders[i].status = "завършена";
- break;
- }
- cout << "Поръчката е успешно актуализирана!" << endl;
- return;
- }
- }
- cout << "Поръчка с номер " << orderID << " не е намерена." << endl;
- }
- // Функция за търсене по тип устройство
- void searchByDeviceType() {
- if (orderCount == 0) {
- cout << "Няма добавени поръчки." << endl;
- return;
- }
- string searchType;
- cout << "Въведете типа устройство за търсене: ";
- cin.ignore();
- getline(cin, searchType);
- searchType = toLowerCase(searchType);
- cout << "\n--- Резултати от търсенето по устройство ---\n";
- cout << "Номер | Ден | Клиент | Устройство | Сериен номер | Проблем | Статус\n";
- cout << "--------------------------------------------------------------------\n";
- bool found = false;
- for (int i = 0; i < orderCount; i++) {
- if (toLowerCase(orders[i].deviceType) == searchType) {
- cout << orders[i].orderID << " | "
- << orders[i].day << " | "
- << orders[i].clientName << " | "
- << orders[i].deviceType << " | "
- << orders[i].serialNumber << " | "
- << orders[i].problem << " | "
- << orders[i].status << "\n";
- found = true;
- }
- }
- if (!found) {
- cout << "Няма намерени поръчки за типа устройство: " << searchType << endl;
- }
- cout << "--------------------------------------------------------------------\n";
- }
- // Функция за търсене по статус
- void searchByStatus() {
- if (orderCount == 0) {
- cout << "Няма добавени поръчки." << endl;
- return;
- }
- string searchStatus;
- cout << "Въведете статуса за търсене (приета, отказана, завършена): ";
- cin.ignore();
- getline(cin, searchStatus);
- searchStatus = toLowerCase(searchStatus);
- cout << "\n--- Резултати от търсенето по статус ---\n";
- cout << "Номер | Ден | Клиент | Устройство | Сериен номер | Проблем | Статус\n";
- cout << "--------------------------------------------------------------------\n";
- bool found = false;
- for (int i = 0; i < orderCount; i++) {
- if (toLowerCase(orders[i].status) == searchStatus) {
- cout << orders[i].orderID << " | "
- << orders[i].day << " | "
- << orders[i].clientName << " | "
- << orders[i].deviceType << " | "
- << orders[i].serialNumber << " | "
- << orders[i].problem << " | "
- << orders[i].status << "\n";
- found = true;
- }
- }
- if (!found) {
- cout << "Няма намерени поръчки със статус: " << searchStatus << endl;
- }
- cout << "--------------------------------------------------------------------\n";
- }
- // Функция за показване на всички поръчки
- void displayOrders() {
- if (orderCount == 0) {
- cout << "Няма добавени поръчки." << endl;
- return;
- }
- cout << "\n--- Списък с поръчки ---\n";
- cout << "Номер | Ден | Клиент | Устройство | Сериен номер | Проблем | Статус\n";
- cout << "--------------------------------------------------------------------\n";
- for (int i = 0; i < orderCount; i++) {
- cout << orders[i].orderID << " | "
- << orders[i].day << " | "
- << orders[i].clientName << " | "
- << orders[i].deviceType << " | "
- << orders[i].serialNumber << " | "
- << orders[i].problem << " | "
- << orders[i].status << "\n";
- }
- cout << "--------------------------------------------------------------------\n";
- }
- // Функция за сортиране по дата
- void sortOrdersByDate() {
- if (orderCount <= 1) {
- cout << "Няма достатъчно поръчки за сортиране." << endl;
- return;
- }
- sort(orders, orders + orderCount, [](const Order &a, const Order &b) {
- return a.day < b.day; // Сравнява дните за сортиране
- });
- cout << "Поръчките са сортирани по дата на приемане." << endl;
- }
- // Меню за потребителя
- void showMenu() {
- cout << "\n--- Меню ---\n";
- cout << "1. Добавяне на нова поръчка\n";
- cout << "2. Извеждане на всички поръчки\n";
- cout << "3. Актуализация на поръчка\n";
- cout << "4. Търсене по вид устройство\n";
- cout << "5. Търсене по статус\n";
- cout << "6. Сортиране по дата на приемане\n";
- cout << "7. Изход\n";
- cout << "Изберете опция: ";
- }
- // Основна програма
- int main() {
- int choice;
- do {
- showMenu();
- cin >> choice;
- switch (choice) {
- case 1:
- addOrder();
- break;
- case 2:
- displayOrders();
- break;
- case 3:
- updateOrder();
- break;
- case 4:
- searchByDeviceType();
- break;
- case 5:
- searchByStatus();
- break;
- case 6:
- sortOrdersByDate();
- displayOrders();
- break;
- case 7:
- cout << "Изход...\n";
- break;
- default:
- cout << "Невалиден избор! Опитайте отново.\n";
- }
- } while (choice != 7);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement