Advertisement
Kofa_Joh

HW_by_Pasha

Mar 24th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3. #include <string.h>
  4.  
  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