From 40f7cc8f54d0c221a391457fd38a44d0633aa088 Mon Sep 17 00:00:00 2001 From: angeld55 Date: Mon, 16 May 2022 14:05:08 +0300 Subject: fixed typo in folder name --- Utills/Kindle/readme.md | 66 ------------------------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 Utills/Kindle/readme.md (limited to 'Utills/Kindle/readme.md') diff --git a/Utills/Kindle/readme.md b/Utills/Kindle/readme.md deleted file mode 100644 index d31119a..0000000 --- a/Utills/Kindle/readme.md +++ /dev/null @@ -1,66 +0,0 @@ -# Kindle - -## Помощни средства които използвахме -За решението на тази задача използваме клас string, клас vector и клас pair. String е взет директно от семинарите на първа група, с добавена функция getLine(), която използваме подобно на std::getline(); -Вектора е взет от семинарите на втора група. -Класът Pair е единствено с цел улеснение. Той представлява наредена двойка от два темплейтни типа. -Всяко едно нещо което сме направили с тези помощни средства може да се направи и без тях - просто кодът става по - дълъг. - -## Използване на командите -### Команди, които поддържаме преди да се логне потребител: -* login - влизаме в системата -* signup - регистрираме се в системата -* view - преглеждаме какви книги имаме -* save - запазваме текущия Kindle във файл -* load - зареждаме Kindle от файл -* exit - излизаме от системата -### Команди, които има потребител: -* read - прочита книга -* write - пише книга -* rate - оценява книга -* comment - коментира под книга -* rates - проверява рейтинга на книгата -* comments - проверява коментарите под книгата -* view - преглежда какви книги има -* exit - излиза от профила си -### Команди които имаме докато четем книга: -* n - следваща страница -* p - предишна страница -* @ + [number] - отива на страница, която е подадена -* h - показва/скрива help меню -* q - излиза от режим на четене - -Въвеждаме команда и натискаме Enter. След това програмата ни пита ако има нужда от допълнителна информация. Пример -``` -> login -> Enter user name: [Name] -> Enter user password: [Password] -> Success! -> -``` - -## Накратко за запазването във файлове -Имаме да запазваме сложна структура във файл. Това което можем да направим е да я разбием на по - прости. В Kindle имаме два вектора, които представляват книгите и потребителите. Ако измислим метод да запазим книга и потребител другото е лесно. Можете да видите, че в класовете представляващи книга и потребител имаме отделни функции, които се грижат за работата със запазването. -Логиката за тях е аналогична - разбиваме структурата на по - малки структурки, които стават все по - лесни и по - лесни за запазване. - -## Допълнителни бележки -В решението сме използвали friend класове. Това не винаги е лоша идея, но внимавайте с тях - възможно е да доведат до логически грешки, тоест на един клас да се дадат твърде много права над друг. - -При запазването на класа ще видите следния код -```cpp -outFile.write("#Ty", 4); -``` -При четенето на класа ще видите следния код -```cpp -char typeChecker[4]; -inFile.read(typeChecker, 4); -if (strcmp(typeChecker, "#Ty") != 0) { - std::cout << "Invalid file type" << std::endl; - return; -} -``` -Реално, няма как да гарантираме, че подадения файл ни е коректен. Потребителя винаги може да подаде некоректен файл, което може да счупи нашата система. За това правим следното: в началото на файла, който запазваме, записваме някаква последователност от n символа. Когато четем, прочитаме първите n (в случая 4) байта от файла и казваме - ако това е "тайният" низ, то значи този файл е писан от системата, тоест се очаква да е коректен. В противен случай приключваме изпълнението и не четем излишни данни, които могат да счупят системата ни. - -Също така, функционалността за промяна на книга оставяме на Вас. Чувствайте се свободни да експериментирате и pull-request вате. - -При каквито и да е въпроси екипът по ООП е на линия. \ No newline at end of file -- cgit v1.3.1-26-gb76a