Задачи - ООП, Седмица 7, 01.04.2026
За решаване
Задача 1
Реализирайте система за менажиране на онлайн книги.
В тази система имате:
- потребители, които могат да купуват и четат книги
- библиотекари, които могат да добавят и махат книги, както и да променят цената им
- банкови служители, които одобряват или отказват транзакции
Книгите имат заглавие, автор, година на издаване, (многоредово) текстово съдържание и цена.
Потребителите имат имейл и парола с които влизат, своя библиотека от книги които могат да достъпват и номер на банкова карта. Всеки потребител има възможността да смени своята парола или номер на банкова карта.
Номер "0" на банкова карта обозначава, че няма свързана банкова карта (и потребителя може да купува само безплатни книги). Потребителя може да изреди всички книги в библиотеката си и да чете всяка от тях (цялото съдържание на книгата се изкарва на екрана).
Допълнително, потребител може да изреди всички налични книги и да си закупи някоя. В този случай се създава транзакция, която трябва да бъде одобрена от банков служител (освен когато книгата е безплатна).
Потребителите могат да виждат всички свои транзакции и техния статус: чакащ одобрение, одобрен, отхвърлен. Допълнително, могат да изкарат справка за купени книги, която е текстов файл, съдържащ всяка (одобрена) транзакция, заглавието и цената на закупената книга.
Библиотекарите имат библиотекарски номер и парола с които влизат.
Те могат да добавят нови книги, където на един ред се въвежда заглавието на книгата, на втори се въвежда автора, на трети година на издаване, на четвърти цената и след това се въвежда съдържанието на книгата.
Това съдържание свършва, когато се въведе знака точка . на самостоятелен ред.
За вече съществуващи книги, могат да се редактират заглавието, автора, и цената. Да се има впредвид, че тези всички тези промени, освен върху цената, се разпространяват на потребителите. Тоест, промененото заглавие излиза на всички потребители закупили книгата, но веднъж закупена, потребителя не я губи от библиотеката си.
Допълтенилно, библиотекарите могат да експортират и импортират книги от двоичен текстов файл. Обаче, файла не може да съдържа цената, т.е. след импортиране библиотекаря трябва да я въведе.
Освен това библиотекар може да маркира книга дали е налична или не. Това обозначава дали потребител може да си я купи или не (и дали излиза в списъка с налични книги за купуване; но не променя нищо ако е вече закупена). По подразбиране всяка нова книга е налична и трябва експлитно да бъде "свалена".
Банковите служители влизат със служителски номер, динамична парола и статична парола.
Статичната парола е текстова, докато динамичната парола е положително число, което трябва да изпълнява тъждеството (служителски_номер * динамича_парола) mod 8581 = 0.
Допълнително, нито служителския номер, нито статичната парола, могат да бъдат числата 0, 1 или 8581. Примери за такива двойки числа са: 27 17162, 572 51486, 901 42905.
Един банков служител може да одобри или отхвърли дадена належаща транзакция. Допълнително може да изкара историята на всички одобрени или отхвърлени транзакции в текстов файл, където се записват номер на транзакцията, цена, номер на банкова карта и банков служител, който е одобрил/отхвърли.
За всеки клас имплементирайте голяма петица!