Website Summary Files Commits Branches @commit @diff @stats
path: root / Week07 / Exercise01 / OnlineLibrary.h
diff options
context:
space:
mode:
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 */