Простейшая программа Карточки книг библиотеки на C++ с классами

Программа написана с классами, работает в консольном режиме, предлагая простейшее меню и функции отображения книг в библиотеке, добавления, выдачи и приёма.
Работает без сохранения данных в файлы или бд. Для демонстрации работы содержит 4 книги, добавляемые в класс lib в функции main().

Задание из книги Самоучитель C++, Г. Шилдт, изд. bhv, 1998.
Написать программу с классом для работы с карточками книг в библиотеке. Карточка книги должна содержать автора, название, количество выданных книг. Предусмотреть функции добавления, отображения книг, удаления, выдачи и приёма. Написать в функции main() код, демонстрирующий работу функций класса.

Задание расширено функциями меню для интерактивной работы пользователя в консольном режиме.

В код включена библиотека для использования системных вызовов. Функция cls() очищает экран при запуске в Linux или Windows. Если у вас не будет запускаться программа, удалите вызовы функции cls().

Скринкаст
biblioteka class

 

  1. #include <stdlib.h> //для очистки экрана в функции cls
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. #define SIZE 1000 //размер библиотеки, не более SIZE книг может быть
  6.  
  7. void cls()
  8. {
  9. if (system("clear")) system( "cls" ); //очистка экрана в linux и затем в windows
  10. }
  11.  
  12. class lib
  13. {
  14. int num=0,id[SIZE],hand[SIZE]; //количество книг, массив id книг, массив книг на руках
  15. string author[SIZE], title[SIZE]; //массив авторов, массив названий
  16.  
  17. bool libis(); //возвращает булеву пееменную и отображает сообщение если книг в библиотеке нет совсем
  18.  
  19. public:
  20. bool is(int n); //поиск карточки книги по id
  21. int qnty(); //возвращает значение
  22. void show(int n); //отображение карточки книги
  23. void showall(); //отображение все карточки книги
  24. int store(string auth, string tit, int hd); //добавление карточки книги
  25. void del(int n); //удаление карточки книги
  26. void give(int n); //книга отдана на руки
  27. void bring(int n); //книга возвращена в библиотеку
  28. };
  29.  
  30. bool lib::libis()
  31. {
  32. if (num==0) {
  33. cout << "Книг в библиотеке нет!\n";
  34. return false;
  35. }
  36. return true;
  37. }
  38.  
  39. bool lib::is(int n)
  40. {
  41. int i;
  42. for (i=0;i<num;i++){
  43. if (i==n) return true;
  44. }
  45. return false;
  46. }
  47.  
  48. int lib::qnty()
  49. {
  50. if ((num-1) >= 0 ) return num-1;
  51. else return 0;
  52. }
  53.  
  54. void lib::show(int n)
  55. {
  56. if ( (n>=0) && (n<num) ) {
  57. cout << "id: " << id[n] << " Автор: " << author[n] << endl;
  58. cout << "Название: " << title[n] << endl;
  59. cout << "Выдано: " << hand[n] << endl;
  60. return;
  61.  
  62. } else cout << "Книги с таким id не обнаружено. id: " << n << endl;
  63. }
  64.  
  65. void lib::showall()
  66. {
  67. int i;
  68. libis();
  69. for (i=0;i<num;i++) {
  70. cout << "id: " << id[i] << " Автор: " << author[i] << endl;
  71. cout << "Название: " << title[i] << endl;
  72. }
  73. }
  74.  
  75. int lib::store(string auth, string tit, int hd)
  76. {
  77. if (num == SIZE) {
  78. cout << "Библиотека переполнена! Количество книг: " << num << endl;
  79. cout << "Нельзя добавить больше книг\n";
  80. return -1;
  81. }
  82. id[num] = num;
  83. cout << "id: " << id[num] << endl;
  84. author[num] = auth;
  85. title[num] = tit;
  86. hand[num] = hd;
  87. num = num+1;
  88. return id[num];
  89. }
  90.  
  91. void lib::del(int n)
  92. {
  93. int i,j=0;
  94. libis();
  95. if (!is(n)) {
  96. cout << "Книги с таким id не обнаружено. id: " << n << endl;
  97. return;
  98. }
  99. for (i=0;i<num;i++) {
  100. if (i==n) {
  101. continue;
  102. } else {
  103. id[j] = j;
  104. author[j] = author[i];
  105. title[j] = title[i];
  106. hand[j] = hand[i];
  107. j++;
  108. }
  109. }
  110. num--;
  111. }
  112.  
  113. void lib::give(int n)
  114. {
  115. libis();
  116. is(n);
  117. hand[n]++;
  118. }
  119.  
  120. void lib::bring(int n)
  121. {
  122. libis();
  123. is(n);
  124. if (hand[n] == 0) {
  125. cout << "Не было информации о том, что книга была выдана";
  126. } else hand[n]--;
  127. }
  128.  
  129. void mainscreen()
  130. {
  131. cls();
  132. cout << "Программа библиотека\n";
  133. cout << "1 - Количество книг\n";
  134. cout << "2 - Показать книги\n";
  135. cout << "3 - Добавить книгу\n";
  136. cout << "4 - Удалить книгу\n";
  137. cout << "5 - Выдать книгу\n";
  138. cout << "6 - Принять книгу\n";
  139. cout << "9 - Выход\n";
  140.  
  141. }
  142.  
  143. int main()
  144. {
  145. int i,j,k,hand,command;
  146. string author;
  147. string title;
  148. lib mylib;
  149.  
  150. mylib.store("Толстой","Казаки",1);
  151. mylib.store("Некрасов","Сборник стихов",0);
  152. mylib.store("Маяковский","Стихи",0);
  153. mylib.store("Карамзин","История государства Российского",0);
  154. mylib.store("А.С.Пушкин","Стихи",0);
  155.  
  156.  
  157. while(1) {
  158. mainscreen();
  159. cout << "Номер меню: ";
  160. cin >> command;
  161. switch (command) {
  162.  
  163. case 1:
  164. cout << "Количество книг в библиотеке: " << mylib.qnty() << endl;;
  165. break;
  166.  
  167. case 2:
  168. if (mylib.qnty() <= 0) {
  169. cout << "В библиотеке нет книг.\n";
  170. break;
  171. }
  172. cls();
  173. cout << "Книги библиотеки\n";
  174. cout << "Введите число книг для постраничного отображения на экране\n";
  175. cin >> k;
  176. j=0;
  177. do {
  178. for (i=0;i<k;i++) {
  179. mylib.show(j);
  180. cout << endl;
  181. j++;
  182. if (j>mylib.qnty()) {
  183. cout << "Это все книги, которые есть в библиотеке\n";
  184. break;
  185. }
  186. }
  187. if (j<=mylib.qnty()) {
  188. cout << "Для отображения следующих книг введите любое число, кроме 0, и нажмите Ввод \n";
  189. cout << "Для завершения отображения книг введите 0 и нажмите Ввод ";
  190. cin >> i;
  191. cls();
  192. }
  193. } while ( ( j<=mylib.qnty() ) && (i != 0) );
  194. break;
  195.  
  196. case 3:
  197. cls();
  198. cout << "Добавление книги\n";
  199. cout << "Введите автора (латиницей без пробелов): ";
  200. cin >> author;
  201. cout << "Введите название (латиницей без пробелов): ";
  202. cin >> title;
  203. cout << "Введите колчество выданны на руки экземпляров: ";
  204. cin >> hand;
  205. mylib.store(author, title, hand);
  206. cout << "Книга добавлена:\n";
  207. mylib.show(mylib.qnty());
  208. break;
  209.  
  210. case 4:
  211. cls();
  212. cout << "Удаление книги\n";
  213. cout << "Введите id книги для удаления: ";
  214. cin >> i;
  215. if (mylib.is(i)) {
  216. cout << "Вы собираетесь удалить книгу: ";
  217. mylib.show(i);
  218. cout << "Введите 1 для удаления или любое другое число для отмены: ";
  219. cin >> k;
  220. if (k==1) {
  221. mylib.del(i);
  222. cout << "Книга удалена\n";
  223. }
  224. } else cout << "Книги с таким id не найдено. id: " << i << endl;
  225. break;
  226. case 5:
  227. cls();
  228. cout << "Выдача книги\n";
  229. cout << "Введите id книги для выдачи: ";
  230. cin >> i;
  231. if (mylib.is(i)) {
  232. mylib.give(i);
  233. cout << "Книга выдана\n";
  234. mylib.show(i);
  235. } else cout << "Книги с таким id не найдено. id: " << i << endl;
  236. break;
  237. case 6:
  238. cls();
  239. cout << "Приём книги\n";
  240. cout << "Введите id принятой книги: ";
  241. cin >> i;
  242. if (mylib.is(i)) {
  243. mylib.bring(i);
  244. cout << "Книга принята\n";
  245. mylib.show(i);
  246. } else cout << "Книги с таким id не найдено. id: " << i << endl;
  247. break;
  248. case 9: return 0;
  249. break;
  250. }
  251. cout<<"Для продолжения работы введите любое число и нажмите Ввод ";
  252. cin >> k;
  253. }
  254. return 0;
  255. }