Advertisement
VladimirKostovsky

Lab_C_psevdoSQL

Dec 15th, 2023
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.38 KB | None | 0 0
  1. // Определение макроса для отключения предупреждений о безопасности для функций, таких как scanf и fopen
  2. #define _CRT_SECURE_NO_WARNINGS
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <locale.h>
  8.  
  9. // Максимальное количество записей в базе данных
  10. #define MAX_RECORDS 300
  11.  
  12. // Структура для представления записи в базе данных
  13. struct Record {
  14.     char surname[50];
  15.     int yearOfBirth;
  16.     double salary;
  17. };
  18.  
  19. // Функция для добавления записи в базу данных
  20. void addRecord(struct Record database[], int* numRecords) {
  21.     if (*numRecords < MAX_RECORDS) {
  22.         printf("Введите данные для записи:\n");
  23.         printf("Фамилия: ");
  24.         scanf("%s", database[*numRecords].surname);
  25.         printf("Год рождения: ");
  26.         scanf("%d", &database[*numRecords].yearOfBirth);
  27.         printf("Зарплата: ");
  28.         scanf("%lf", &database[*numRecords].salary);
  29.         (*numRecords)++;
  30.         printf("Запись успешно добавлена.\n");
  31.     }
  32.     else {
  33.         printf("Достигнуто максимальное количество записей.\n");
  34.     }
  35. }
  36.  
  37. // Функция для просмотра конкретной записи в базе данных
  38. void viewRecord(struct Record database[], int numRecords, int recordNumber) {
  39.     if (recordNumber >= 1 && recordNumber <= numRecords) {
  40.         printf("Данные для записи %d:\n", recordNumber);
  41.         printf("Фамилия: %s\n", database[recordNumber - 1].surname);
  42.         printf("Год рождения: %d\n", database[recordNumber - 1].yearOfBirth);
  43.         printf("Зарплата: %.2lf\n", database[recordNumber - 1].salary);
  44.     }
  45.     else {
  46.         printf("Неверный номер записи.\n");
  47.     }
  48. }
  49.  
  50. // Функция для сортировки записей в базе данных по фамилии в порядке возрастания
  51. void sortRecords(struct Record database[], int numRecords) {
  52.     for (int i = 0; i < numRecords - 1; i++) {
  53.         for (int j = 0; j < numRecords - i - 1; j++) {
  54.             if (database[j].yearOfBirth > database[j + 1].yearOfBirth) {
  55.                 // Обмен записями, если они находятся в неправильном порядке
  56.                 struct Record temp = database[j];
  57.                 database[j] = database[j + 1];
  58.                 database[j + 1] = temp;
  59.             }
  60.         }
  61.     }
  62. }
  63.  
  64. // Функция для вывода всех записей в базе данных
  65. void printAllRecords(struct Record database[], int numRecords) {
  66.     printf("Все записи:\n");
  67.     for (int i = 0; i < numRecords; i++) {
  68.         printf("%d. %s, %d, %.2lf\n", i + 1, database[i].surname, database[i].yearOfBirth, database[i].salary);
  69.     }
  70. }
  71.  
  72. // Функция для сохранения всех записей в файл
  73. void saveToFile(struct Record database[], int numRecords, const char* filename) {
  74.     FILE* file = fopen(filename, "w");
  75.     if (file != NULL) {
  76.         for (int i = 0; i < numRecords; i++) {
  77.             fprintf(file, "%s %d %.2lf\n", database[i].surname, database[i].yearOfBirth, database[i].salary);
  78.         }
  79.         fclose(file);
  80.     }
  81.     else {
  82.         printf("Ошибка открытия файла для записи.\n");
  83.     }
  84. }
  85.  
  86. // Функция для чтения записей из файла
  87. void readFromFile(struct Record database[], int* numRecords, const char* filename) {
  88.     FILE* file = fopen(filename, "r");
  89.     if (file != NULL) {
  90.         while (fscanf(file, "%s %d %lf", database[*numRecords].surname, &database[*numRecords].yearOfBirth, &database[*numRecords].salary) == 3) {
  91.             (*numRecords)++;
  92.             if (*numRecords >= MAX_RECORDS) {
  93.                 break;
  94.             }
  95.         }
  96.         fclose(file);
  97.     }
  98.     else {
  99.         printf("Ошибка открытия файла для чтения.\n");
  100.     }
  101. }
  102.  
  103.  
  104. int main() {
  105.     setlocale(LC_ALL, "Russian");
  106.     // Инициализация массива записей базы данных и переменных
  107.     struct Record database[MAX_RECORDS];
  108.     int numRecords = 0;
  109.     int choice;
  110.  
  111.     // Главный цикл программы
  112.     do {
  113.         // Вывод меню на экран
  114.         printf("\nМеню:\n");
  115.         printf("1. Добавить запись\n");
  116.         printf("2. Просмотр записи\n");
  117.         printf("3. Сортировка записей\n");
  118.         printf("4. Просмотр всех записей\n");
  119.         printf("5. Сохранить записи в файл\n");
  120.         printf("6. Загрузить записи из файла\n");
  121.         printf("7. Выход\n");
  122.  
  123.         // Ввод выбора пользователя
  124.         printf("Введите ваш выбор: ");
  125.         scanf("%d", &choice);
  126.  
  127.         // Обработка выбора пользователя
  128.         switch (choice) {
  129.         case 1:
  130.             addRecord(database, &numRecords);
  131.             break;
  132.         case 2:
  133.             if (numRecords > 0) {
  134.                 int recordNumber;
  135.                 printf("Введите номер записи: ");
  136.                 scanf("%d", &recordNumber);
  137.                 viewRecord(database, numRecords, recordNumber);
  138.             }
  139.             else {
  140.                 printf("Нет доступных записей.\n");
  141.             }
  142.             break;
  143.         case 3:
  144.             if (numRecords > 0) {
  145.                 sortRecords(database, numRecords);
  146.                 printf("Записи успешно отсортированы.\n");
  147.             }
  148.             else {
  149.                 printf("Нет доступных записей.\n");
  150.             }
  151.             break;
  152.         case 4:
  153.             if (numRecords > 0) {
  154.                 printAllRecords(database, numRecords);
  155.             }
  156.             else {
  157.                 printf("Нет доступных записей.\n");
  158.             }
  159.             break;
  160.         case 5:
  161.             if (numRecords > 0) {
  162.                 char filename[50];
  163.                 printf("Введите имя файла для сохранения: ");
  164.                 scanf("%s", filename);
  165.                 saveToFile(database, numRecords, filename);
  166.                 printf("Записи успешно сохранены в файл.\n");
  167.             }
  168.             else {
  169.                 printf("Нет доступных записей.\n");
  170.             }
  171.             break;
  172.         case 6:
  173.         {
  174.             char filename[50];
  175.             printf("Введите имя файла для чтения: ");
  176.             scanf("%s", filename);
  177.             readFromFile(database, &numRecords, filename);
  178.             printf("Записи успешно загружены из файла.\n");
  179.         }
  180.         break;
  181.         case 7:
  182.             printf("Выход из программы.\n");
  183.             break;
  184.         default:
  185.             printf("Неверный выбор. Пожалуйста, введите правильный вариант.\n");
  186.         }
  187.     } while (choice != 7);
  188.  
  189.     return 0;
  190. }
  191.  
  192.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement