fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <list>
  5. using namespace std;
  6.  
  7. class Book;
  8.  
  9. //************************************************ BorrowerRecord ************************************************
  10. class BorrowerRecord
  11. {
  12. private:
  13. string name;
  14. list <Book*> BorrowedBook;
  15. public:
  16. //Getters & Setters
  17. string getName();
  18. void setName(string aName);
  19.  
  20. //Constructor
  21. BorrowerRecord(string aName);
  22.  
  23. //Display
  24. void display();
  25.  
  26. //Attach Book
  27. void attachBook(Book *aBook);
  28.  
  29. //Detach Book
  30. void detachBook(Book *aBook);
  31.  
  32. };
  33.  
  34. //Getters & Setters
  35. //Get Name
  36. string BorrowerRecord::getName()
  37. {
  38. return this->name;
  39. }
  40.  
  41. //Set Name
  42. void BorrowerRecord::setName(string aName)
  43. {
  44. this->name = aName;
  45. }
  46.  
  47. //Constructors
  48. BorrowerRecord::BorrowerRecord(string aName)
  49. {
  50. this->name = aName;
  51. }
  52.  
  53. //Display
  54. void BorrowerRecord::display()
  55. {
  56. cout << "Borrower Name: " << this->getName() << endl;
  57. }
  58.  
  59. //Attach Book
  60. void BorrowerRecord::attachBook(Book *aBook)
  61. {
  62. this->BorrowedBook.push_back(aBook);
  63. }
  64.  
  65. //Detach Book
  66. void BorrowerRecord::detachBook(Book* aBook)
  67. {
  68. this->BorrowedBook.remove(aBook);
  69. }
  70.  
  71. //************************************************ Book ************************************************
  72. class Book
  73. {
  74. private:
  75. string number;
  76. string author;
  77. string title;
  78. BorrowerRecord * borrower;
  79. public:
  80. //Getters & Setters
  81. string getNumber();
  82. void setNumber(string aNumber);
  83.  
  84. string getAuthor();
  85. void setAuthor(string anAuthor);
  86.  
  87. string getTitle();
  88. void setTitle(string aTitle);
  89.  
  90. BorrowerRecord *getBorrower();
  91.  
  92. //Constructors
  93. Book(string aNumber, string aTitle, string anAuthor);
  94.  
  95. //Display
  96. void display();
  97.  
  98. //Attach Borrower
  99. void attachBorrower(BorrowerRecord *aBorrower);
  100.  
  101. //Detach Borrower
  102. void detachBorrower();
  103. };
  104.  
  105. //Getters & Setters
  106. //Get Number
  107. string Book::getNumber()
  108. {
  109. return this->number;
  110. }
  111.  
  112. //Set Number
  113. void Book::setNumber(string aNumber)
  114. {
  115. this->number = aNumber;
  116. }
  117.  
  118. //Get Title
  119. string Book::getTitle()
  120. {
  121. return this->title;
  122. }
  123.  
  124. //Set Title
  125. void Book::setTitle(string aTitle)
  126. {
  127. this->title = aTitle;
  128. }
  129.  
  130. //Get Author
  131. string Book::getAuthor()
  132. {
  133. return this->author;
  134. }
  135.  
  136. //Set Author
  137. void Book::setAuthor(string anAuthor)
  138. {
  139. this->author = anAuthor;
  140. }
  141.  
  142. //Get Borrower
  143. BorrowerRecord* Book::getBorrower()
  144. {
  145. return this->borrower;
  146. }
  147.  
  148. //Constructors
  149. Book::Book(string aNumber, string aTitle, string anAuthor)
  150. {
  151. this->setNumber(aNumber);
  152. this->setTitle(aTitle);
  153. this->setAuthor(anAuthor);
  154. this->borrower = NULL;
  155. }
  156.  
  157. //Attach Borrower
  158. void Book::attachBorrower(BorrowerRecord *aBorrower)
  159. {
  160. this->borrower = aBorrower;
  161. }
  162.  
  163. //Detach Borrower
  164. void Book::detachBorrower()
  165. {
  166. if (this->borrower != NULL)
  167. {
  168. //(this->borrower)->detachBook(this);
  169. this->borrower = NULL;
  170. }
  171. }
  172.  
  173. //Display
  174. void Book::display()
  175. {
  176. cout << "Number: " << this->getNumber() << endl;
  177. cout << "Title: " << this->getTitle() << endl;
  178. cout << "Author: " << this->getAuthor() << endl;
  179. if (this->getBorrower() != NULL)
  180. {
  181. cout << "Borrower Name: " << this->getBorrower()->getName() << endl;
  182. }
  183. }
  184.  
  185.  
  186.  
  187. //************************************************ Library ************************************************
  188. class Library
  189. {
  190. private:
  191. string name;
  192. vector <Book *> stock;
  193. vector <BorrowerRecord *> borrowers;
  194. public:
  195. //Getters & Setters
  196. string getName();
  197. void setName(string aName);
  198.  
  199. //Constructors
  200. Library(string aName);
  201.  
  202. //Destructor
  203. ~Library();
  204.  
  205. //Display
  206. void display();
  207.  
  208. //Register One Borrower
  209. void registerOneBorrower(string aName);
  210.  
  211. //Add One Book
  212. void addOneBook(Book *aBook);
  213.  
  214. //Lend One Book
  215. void lendOneBook(string aNumber, string aName);
  216.  
  217. //Display Books Available For Loan
  218. void displayBooksAvailableForLoan();
  219.  
  220. //Display Books On Loan
  221. void displayBooksOnLoan();
  222.  
  223. //Return One Book
  224. void returnOneBook(string aNumber);
  225. };
  226.  
  227. //Getters & Setters
  228. //Get Name
  229. string Library::getName()
  230. {
  231. return this->name;
  232. }
  233.  
  234. //Set Name
  235. void Library::setName(string aName)
  236. {
  237. this->name = aName;
  238. }
  239.  
  240. //Constructors
  241. Library::Library(string aName)
  242. {
  243. this->setName(aName);
  244. }
  245.  
  246. //Destructors
  247. Library::~Library()
  248. {
  249. for (auto borrower : this->borrowers)
  250. {
  251. delete borrower;
  252. }
  253. this->borrowers.clear();
  254. }
  255.  
  256. //Display
  257. void Library::display()
  258. {
  259. cout << "Library: " << this->getName() << endl;
  260. cout << endl;
  261. cout << "Stocks: " << endl;
  262. for (auto book : this->stock)
  263. {
  264. book->display();
  265. }
  266.  
  267. cout << "Borrower: " << endl;
  268.  
  269. for (auto br : this->borrowers)
  270. br->display();
  271.  
  272. }
  273.  
  274. //Register One Borrower
  275. void Library::registerOneBorrower(string aName)
  276. {
  277. this->borrowers.push_back(new BorrowerRecord(aName));
  278. }
  279.  
  280. //Add One Book
  281. void Library::addOneBook(Book* aBook)
  282. {
  283. this->stock.push_back(aBook);
  284. }
  285.  
  286. //Lend One Book
  287. void Library::lendOneBook(string aNumber, string aName)
  288. {
  289. BorrowerRecord * borrower = NULL;
  290. for (auto br : this->borrowers)
  291. {
  292. if (br->getName() == aName)
  293. {
  294. borrower = br;
  295. break;
  296. }
  297. }
  298.  
  299. if (borrower == NULL)
  300. {
  301. cout << "Cannot find the Borrower Name: " << aName << endl;
  302. return;
  303. }
  304.  
  305. Book *book = NULL;
  306. for (auto b : this->stock)
  307. {
  308. if (b->getNumber() == aNumber)
  309. {
  310. book = b;
  311. break;
  312. }
  313. }
  314.  
  315. if (book == NULL)
  316. {
  317. cout << "Cannot find the Book Number: " << aNumber << endl;
  318. return;
  319. }
  320.  
  321. book->attachBorrower(borrower);
  322. borrower->attachBook(book);
  323. }
  324.  
  325. //Display Books Available For Loan
  326. void Library::displayBooksAvailableForLoan()
  327. {
  328. cout << "Books Available For Loan:" << endl;
  329. for (auto book : this->stock)
  330. {
  331. if (book->getBorrower() == NULL)
  332. {
  333. book->display();
  334. }
  335. }
  336. }
  337.  
  338. //Display Books On Loan
  339. void Library::displayBooksOnLoan()
  340. {
  341. cout << "Books On Loan:" << endl;
  342. for (auto book : this->stock)
  343. {
  344. if (book->getBorrower() != NULL)
  345. {
  346. book->display();
  347. }
  348. }
  349. }
  350.  
  351. //Return One Book
  352. void Library::returnOneBook(string aNumber)
  353. {
  354. Book* b = NULL;
  355. for (auto book : this->stock)
  356. {
  357. if (book->getNumber() == aNumber)
  358. {
  359. b = book;
  360. break;
  361. }
  362. }
  363.  
  364. if (b == NULL)
  365. {
  366. cout << "Cannot find the Book Number: " << aNumber << endl;
  367. return;
  368. }
  369.  
  370. if (b->getBorrower() == NULL)
  371. {
  372. cout << "The book " << aNumber << " is not on loan" << endl;
  373. return;
  374. }
  375.  
  376. BorrowerRecord *borrower = b->getBorrower();
  377.  
  378. b->detachBorrower();
  379. borrower->detachBook(b);
  380. b->display();
  381. cout << "The book has been returned" << endl;
  382. }
  383.  
  384.  
  385. //******************************************************************************************************
  386.  
  387. int main()
  388. {
  389. //Create a new book
  390. Book a("001", "Ly thuyet do do va xac suat", "Dang Duc Trong");
  391. Book b("002", "Toan roi rac nang cao", "Tran Ngoc Danh");
  392. Book c("003", "Ly thuyet thong ke", "Dang Duc Trong");
  393.  
  394. //Create a Library
  395. Library lib("HCMUS Library");
  396. //lib.display();
  397.  
  398. //Add Book
  399. lib.addOneBook(&a);
  400. lib.addOneBook(&b);
  401. lib.addOneBook(&c);
  402. lib.registerOneBorrower("Tran Duy An");
  403. lib.registerOneBorrower("Tran Quoc Danh");
  404.  
  405. //Lend Book
  406. lib.lendOneBook("001", "Tran Duy An");
  407. lib.lendOneBook("002", "Tran Quoc Danh");
  408. //lib.returnOneBook("003");
  409. cout << endl;
  410. lib.displayBooksAvailableForLoan();
  411. cout << endl;
  412. lib.displayBooksOnLoan();
  413. cout << endl;
  414.  
  415. //Return Book
  416. lib.returnOneBook("001");
  417. lib.returnOneBook("003");
  418. cout << endl;
  419. lib.displayBooksAvailableForLoan();
  420. cout << endl;
  421. lib.displayBooksOnLoan();
  422. cout << endl;
  423. //lib.display();
  424. return 0;
  425. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
Books Available For Loan:
Number: 003
Title: Ly thuyet thong ke
Author: Dang Duc Trong

Books On Loan:
Number: 001
Title: Ly thuyet do do va xac suat
Author: Dang Duc Trong
Borrower Name: Tran Duy An
Number: 002
Title: Toan roi rac nang cao
Author: Tran Ngoc Danh
Borrower Name: Tran Quoc Danh

Number: 001
Title: Ly thuyet do do va xac suat
Author: Dang Duc Trong
The book has been returned
The book 003 is not on loan

Books Available For Loan:
Number: 001
Title: Ly thuyet do do va xac suat
Author: Dang Duc Trong
Number: 003
Title: Ly thuyet thong ke
Author: Dang Duc Trong

Books On Loan:
Number: 002
Title: Toan roi rac nang cao
Author: Tran Ngoc Danh
Borrower Name: Tran Quoc Danh