Website Summary Files Commits Branches @commit @diff @stats
path: root / Week07 / Exercise01 / OnlineLibrary.h
diff options
context:
space:
mode:
Commit945f7e67d6ca8047c961457786fac5e2d9a13d82 (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-04-03 18:17:51 +0300
Committer
 Syndamia <kamen@syndamia.com>
2026-04-03 18:17:51 +0300
Files5c6b23aaee4eb653f9c461d7303edcd31d697f10 /Week07/Exercise01/OnlineLibrary.h
oop-2025-solutions-945f7e67d6ca8047c961457786fac5e2d9a13d82.tar
oop-2025-solutions-945f7e67d6ca8047c961457786fac5e2d9a13d82.tar.gz
oop-2025-solutions-945f7e67d6ca8047c961457786fac5e2d9a13d82.zip
Parent8f162cde46a34d04e3a8a655067ee5174258e249 (diff)
feat(Week07): Add solutions
1 files changed, 65 insertions, 0 deletions
-rw-r--r--Week07/Exercise01/OnlineLibrary.h65
diff --git a/Week07/Exercise01/OnlineLibrary.h b/Week07/Exercise01/OnlineLibrary.h
new file mode 100644
index 0000000..4121af0
--- /dev/null
+++ b/Week07/Exercise01/OnlineLibrary.h
@@ -0,0 +1,65 @@
+#ifndef _ONLINE_LIBRARY
+#define _ONLINE_LIBRARY
+
+#include "Book.h"
+#include "LibraryBanking.h"
+#include "Transaction.h"
+#include "User.h"
+#include "Librarian.h"
+
+class OnlineLibrary {
+ Book* books;
+ unsigned booksCount;
+ unsigned booksAlloc;
+
+ User* users;
+ unsigned usersCount;
+ unsigned usersAlloc;
+
+ Librarian* librarians;
+ unsigned librariansCount;
+ unsigned librariansAlloc;
+
+ // В методи на OnlineLibrary, тази структура се казва "TransactionConnection"
+ // Извън методи на OnlineLibrary, тази структура се казва "OnlineLibrary::TransactionConnection"
+ struct TransactionConnection {
+ const User* user;
+ const Book* book;
+ const Transaction* transaction;
+ };
+ TransactionConnection* connections;
+ unsigned connectionsCount;
+ unsigned connectionsAlloc;
+
+ void free();
+ void copyFrom(const OnlineLibrary& other);
+
+ void resizeBooks();
+ void resizeUsers();
+ void resizeLibrarians();
+ void resizeConnections();
+
+public:
+ OnlineLibrary();
+ ~OnlineLibrary();
+ OnlineLibrary(const OnlineLibrary& other);
+ OnlineLibrary& operator=(const OnlineLibrary& other);
+ OnlineLibrary(OnlineLibrary&& other);
+ OnlineLibrary& operator=(OnlineLibrary&& other);
+
+ void RegisterUser(const User& user);
+ User* LoginUser(const String& email, const String& password);
+
+ void RegisterLibrarian(const Librarian& librarian);
+ Librarian* LoginLibrarian(unsigned librarianNumber, const String& password);
+
+ void ListBooks() const;
+ Book* GetBook(unsigned index);
+ void AddBook(const Book& book);
+ void PurchaseBook(const Book& book, const User& user, LibraryBanking& banking);
+
+ void ListTransactions(const User& user) const;
+ void ExportTransactions(const User& user, const String& fileName) const;
+};
+
+#endif /* _ONLINE_LIBRARY */