Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5.  
  6. #define KOLICHESTVO 2
  7.  
  8.  
  9. /*
  10. Разработать программу для управления библиотекой книг (имя, автор, жанр, год) со
  11. следующими возможностями:
  12. • Добавление книг
  13. • Вывод списка книг
  14. • Сортировка по заданному критерию (имя, автор, жанр, год) с указанием
  15. направления сортировки
  16. */
  17.  
  18. struct Book
  19. {
  20.     char name[50];
  21.     char author[50];
  22.     char genre[50];
  23.     int year;
  24. };
  25.  
  26. enum Menu
  27. {
  28.     Dobavlenie = 1,
  29.     Vivod,
  30.     Sortirovka,
  31.     Vihod
  32.  
  33. };
  34.  
  35. enum Sortirovka
  36. {
  37.     Name = 1,
  38.     Author,
  39.     Genre,
  40.     Year
  41. };
  42.  
  43.  
  44. void zapolnenieStructure(struct Book* books, int* kolichestvo);
  45. void menu(struct Book* books, int* kolichestvo);
  46. void printStructure(struct Book* books, int* kolichestvo);
  47. void sort(struct Book* books, int* kolichestvo, enum Sortirovka sortBy);
  48. void copyBook(struct Book const* from, struct Book* to);
  49.  
  50.  
  51. int main()
  52. {
  53.     setlocale(LC_ALL, "rus");
  54.  
  55.     struct Book books[KOLICHESTVO];
  56.     int kolichestvo = 0;
  57.     menu(books, &kolichestvo);
  58.  
  59.     return 0;
  60. }
  61.  
  62. void menu(struct Book* books, int* kolichestvo)
  63. {
  64.     enum Sortirovka sortirovka;
  65.     enum Menu menu;
  66.     while (true)
  67.     {
  68.         printf("Выберите действие:\n");
  69.         printf("1 - Добавление книги\n2 - Вывод списка книг\n3 - Отсортировать книги\n4 - Выход\n");
  70.         scanf("%i", &menu);
  71.         char ch;
  72.         do {
  73.             ch = getchar();
  74.         } while (ch != '\n' && ch != EOF);
  75.  
  76.         switch (menu)
  77.         {
  78.         case Dobavlenie:
  79.             zapolnenieStructure(books, kolichestvo);
  80.             break;
  81.         case Vivod:
  82.             printStructure(books, kolichestvo);
  83.             break;
  84.         case Sortirovka:
  85.             printf("Выберите как требуется отсортировать\n");
  86.             printf("1 - по имени\n2 - по автору\n3 - по жанру\n4 - по году\n");
  87.             scanf("%i", &sortirovka);
  88.             sort(books, kolichestvo, sortirovka);
  89.             break;
  90.         case Vihod:
  91.             return;
  92.         default:
  93.             printf("Введите правильное значение\n");
  94.             break;
  95.         }
  96.     }
  97. }
  98.  
  99.  
  100.  
  101.  
  102.  
  103. void zapolnenieStructure(struct Book* books, int* kolichestvo)
  104. {
  105.     printf("Введите название книги\n");
  106.     fgets(books[*kolichestvo].name, 50, stdin);
  107.  
  108.     printf("Введите автора книги\n");
  109.     fgets(books[*kolichestvo].author, 50, stdin);
  110.  
  111.     printf("Введите жанр книги\n");
  112.     fgets(books[*kolichestvo].genre, 50, stdin);
  113.  
  114.     printf("Введите год книги\n");
  115.     scanf("%i", &(books[*kolichestvo].year));
  116.  
  117.     (*kolichestvo)++;
  118.  
  119.     char ch;
  120.     do {
  121.         ch = getchar();
  122.     } while (ch != '\n' && ch != EOF);
  123. }
  124.  
  125.  
  126.  
  127.  
  128. void printStructure(struct Book* books, int* kolichestvo)
  129. {
  130.  
  131.     for (int i = 0; i < *kolichestvo; i++)
  132.     {
  133.  
  134.         printf("Название %i книги:\t%s\n", i + 1, books[i].name);
  135.         printf("Автор %i книги:\t\t%s\n", i + 1, books[i].author);
  136.         printf("Жанр %i книги:\t\t%s\n", i + 1, books[i].genre);
  137.         printf("Год %i книги\t\t%i\n", i + 1, books[i].year);
  138.         printf("\n\n\n");
  139.     }
  140.  
  141. }
  142.  
  143. void copyBook(struct Book const* from, struct Book* to)
  144. {
  145.     strcpy(to->name, from->name);
  146.     strcpy(to->author, from->author);
  147.     strcpy(to->genre, from->genre);
  148.     to->year = from->year;
  149. }
  150.  
  151. void sort(struct Book* books, int* kolichestvo,
  152.     enum Sortirovka sortBy)
  153. {
  154.     struct Book temp;
  155.  
  156.     for (int i = 0; i < *kolichestvo - 1; i++)
  157.     {
  158.         for (int j = 0; j < *kolichestvo - 1 - i; j++)
  159.         {
  160.             if (sortBy == Name && (books[j].name, books[j + 1].name) > 0 ||
  161.                 sortBy == Author && (books[j].author, books[j + 1].author) > 0 ||
  162.                 sortBy == Genre && (books[j].genre, books[j + 1].genre) > 0 ||
  163.                 sortBy == Year && (books[j].year, books[j + 1].year) > 0)
  164.             {
  165.                 copyBook(&books[j], &temp);
  166.                 copyBook(&books[j + 1], &books[j]);
  167.                 copyBook(&temp, &books[j + 1]);
  168.             }
  169.         }
  170.     }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement