void Index_file::Reindex_Book(const char* file_name, const char* index_name){ lista = new vector<Keynode>; ifstream data_file(file_name,ios::in|ios::binary); if(data_file.good()){ data_file.seekg(sizeof(HeaderBook)); while(!data_file.eof()){ Book book; data_file.read(reinterpret_cast<char*>(&book),sizeof(Book)); if(!book.isMarked()){ Keynode keynode(const_cast<char *>(book.getIsbn().c_str()),data_file.tellg()); lista->push_back(keynode); } } sort(); } data_file.close(); ofstream index_file(index_name,ios::out|ios::binary); for (int i = 0; i < lista->size(); ++i) { Keynode to_add = lista->at(i); index_file.write((char*)&to_add,sizeof(Keynode)); } index_file.flush(); index_file.close(); }
void Utils::displayBookInformation(Book book) { cout << "\tISBN \t" << book.getIsbn() << endl; cout << "\tTitle \t" << book.getTitle() << endl; cout << "\tAuthor \t" << book.getAuthor() << endl; cout << "\tPublisher \t" << book.getPublisher() << endl; cout << "\tDate Added \t" << toString(book.getDateAdded()) << endl; cout << "\tQuantity-On-Hand\t" << book.getQuantityOnHand() << endl; cout << "\tWholesale Cost \t" << setprecision(2) << book.getWholesaleCost() << endl; cout << "\tRetail Price \t" << setprecision(2) << book.getRetailPrice() << endl << endl; }
/* Converts a Book object to string representation Example: 1 ISBN: 0399257748 Title: The Martian Author: Andy Weir Publisher: Scribner Date Added: 2015-1-16 23:56:11 Quantity: 1 */ string Utils::toString(int itemNumber, int quantity, Book book) { string bookString = ""; bookString += to_string(itemNumber) + "\n"; bookString += "\t ISBN: " + book.getIsbn() + "\n"; bookString += "\t Title: " + book.getTitle() + "\n"; bookString += "\t Author: " + book.getAuthor() + "\n"; bookString += "\t Publisher: " + book.getPublisher() + "\n"; bookString += "\t Date Added: " + toString(book.getDateAdded()) + "\n"; bookString += "\t Quantity: " + to_string(quantity) + "\n"; ostringstream stream; stream << fixed << setprecision(2) << book.getRetailPrice(); bookString += "\t Retail Price: " + stream.str() + "\n"; return bookString; }
/** * @brief Add book \a b to the collection. * * @param b Book to be added. * * @exception DataBaseException Forwarding possible database error. * * @warning Make sure you DON'T SET the books id before calling this method. * * Adds \a b to the DataBase and sets its id. Nothing is done with the referenced * authors, publishers and themes. */ void BookCollection::insertBook(Book &b) throw(DataBaseException) { PreparedStatement prepStmt("INSERT INTO books (isbn, title, edition, " "critique, description, rating, cover, ebook, publishingyear, " "udc, translator) VALUES ('%1', '%2', '%3', '%4', '%5', '%6', " "'%7', '%8', '%9', '%10', '%11')", db->getType()); prepStmt.arg(b.getIsbn()); prepStmt.arg(b.getTitle().toStdString()); prepStmt.arg(b.getEdition()); prepStmt.arg(b.getCritique().toStdString()); prepStmt.arg(b.getDescription().toStdString()); prepStmt.arg(b.getRating()); prepStmt.arg(b.getCover().toStdString()); prepStmt.arg(b.getEbook().toStdString()); prepStmt.arg(b.getPubDate().toString("yyyy-MM-dd").toStdString()); prepStmt.arg(b.getUDC().toStdString()); prepStmt.arg(b.getTranslator().getId()); b.setId(db->insert(prepStmt)); }
/** * @brief Updates book. * * @param b Book to be updated. * * This method updates every field of the book, except the id and the referenced * authors, publishers and themes. */ void BookCollection::updateBook(Book b) throw(DataBaseException) { PreparedStatement updBook("UPDATE books SET isbn = '%1', title = '%2'," " edition = '%3', description = '%4', critique = '%5', rating =" " '%6', cover = '%7', ebook = '%8', publishingyear = '%9', udc =" " '%10', translator = '%11' WHERE id = '%12'", db->getType()); updBook.arg(b.getIsbn()); updBook.arg(b.getTitle().toStdString()); updBook.arg(b.getEdition()); updBook.arg(b.getDescription().toStdString()); updBook.arg(b.getCritique().toStdString()); updBook.arg(b.getRating()); updBook.arg(b.getCover().toStdString()); updBook.arg(b.getEbook().toStdString()); updBook.arg(b.getPubDate().toString("yyyy-MM-dd").toStdString()); updBook.arg(b.getUDC().toStdString()); updBook.arg(b.getTranslator().getId()); updBook.arg(b.getId()); db->exec(updBook); }
/* Check whether the given book is in the cart or not, if yes return the position, otherwise return -1 @param book : the given book @return position : if the book is in the cart, return the position, otherwise return -1 */ int InventoryModule::getBookPositionInCart(Book book) { for (int i = 0; i < CashierModule::numberItems; i++) if (CashierModule::booksInCart[i].getIsbn() == book.getIsbn()) return i; return -1; }
/* Display available options after a desired book's information is presented and corresponding transitions when user choose one option. */ void InventoryModule::displayOptionsAfterLookUp(int thingToShow, Book bookObtained) { cout << "\t\t 1. Look Up Another Book" << endl; cout << "\t\t 2. Back To Look Up Menu" << endl; cout << "\t\t 3. Add This Book To Cart"<< endl << endl; switch (Utils::showChoices(1, 3)) { case 1: switch (thingToShow) { case SHOW_ISBN: showBooksByISBN(); break; case SHOW_TITLE: showBooksByTitle(); break; case SHOW_AUTHOR: showBooksByAuthor(); break; case SHOW_PUBLISHER: showBooksByPublisher(); break; case SHOW_DATE: showBooksByDate(); break; case SHOW_QUANTITY: showBooksByQuantity(); break; case SHOW_WHOLESALE: showBooksByWholesale(); break; case SHOW_RETAIL_PRICE: showBooksByRetailPrice(); break; } break; case 2: displayLookUpMenu(); break; case 3: int howMany = 0; do { howMany = Utils::readInt("How Many Books Do You Want?\t"); if (howMany < 0) cout << "Number Of Books Has To Be An Integer Greater Than 0. Please Enter Again" << endl << endl; if (howMany > bookObtained.getQuantityOnHand()) cout << "We Only Have " << bookObtained.getQuantityOnHand() << " In Stock. Please Enter Again" << endl << endl; } while (howMany < 0 || howMany > bookObtained.getQuantityOnHand()); int position = getBookPositionInCart(bookObtained); if (position == -1) { CashierModule::quantities[CashierModule::numberItems] += howMany; CashierModule::booksInCart[CashierModule::numberItems++] = bookObtained; } else CashierModule::quantities[position] += howMany; BookDAO::getInstance()->update( bookObtained.getIsbn(), bookObtained.getTitle(), bookObtained.getAuthor(), bookObtained.getPublisher(), bookObtained.getQuantityOnHand() - howMany, bookObtained.getWholesaleCost(), bookObtained.getRetailPrice()); } }
void SELMainLibraryWidget::updateItemInfo(EntertainmentItem & item, unsigned long long type) { Book * bookItem = 0; Movie * movieItem = 0; MusicAlbum * musicItem = 0; Videogame * videogameItem = 0; int currentIndex = 4; unsigned size; /// Update title replaceLabelText(item.getTitle().c_str(), 0); /// Update genre replaceLabelText(item.getGenre().c_str(), 1); /// Update publisher replaceLabelText(item.getPublisher().c_str(), 2); /// Update year replaceLabelText(QString::number(item.getYear()), 3); /// Check type to write extra data. switch (type) { case 1: bookItem = dynamic_cast<Book *>(&item); if (bookItem != 0) { /// Write book data replaceLabelText("ISBN:", currentIndex++); replaceLabelText(bookItem->getIsbn().c_str(), currentIndex++); replaceLabelText("Authors:", currentIndex++); size = bookItem->getAuthors().size(); for (unsigned i = 0; i < size; i++) { replaceLabelText(bookItem->getAuthors()[i].c_str(), currentIndex++); } replaceLabelText("Num pages", currentIndex++); replaceLabelText(QString::number(bookItem->getNPages()), currentIndex++); } break; case 2: movieItem = dynamic_cast<Movie *>(&item); if (movieItem != 0) { /// Write movie data replaceLabelText("Director:", currentIndex++); replaceLabelText(movieItem->getDirector().c_str(), currentIndex++); replaceLabelText("Actors:", currentIndex++); size = movieItem->getMainActors().size(); for (unsigned i = 0; i < size; i++) { replaceLabelText(movieItem->getMainActors()[i].c_str(), currentIndex++); } replaceLabelText("Rating:", currentIndex++); replaceLabelText(Movie::getRatingString(movieItem->getRating()).c_str(), currentIndex++); } break; case 3: musicItem = dynamic_cast<MusicAlbum *>(&item); if (musicItem != 0) { /// Write music data replaceLabelText("Artist:", currentIndex++); replaceLabelText(musicItem->getArtist().c_str(), currentIndex++); replaceLabelText("Num tracks:", currentIndex++); replaceLabelText(QString::number(musicItem->getNTracks()), currentIndex++); replaceLabelText("Total duration:", currentIndex++); replaceLabelText(musicItem->getDuration().toString("hh:mm:ss"), currentIndex++); } break; case 4: videogameItem = dynamic_cast<Videogame *>(&item); if (videogameItem != 0) { replaceLabelText("Rating:", currentIndex++); replaceLabelText(Videogame::getRatingString(videogameItem->getEsrbRating()).c_str(), currentIndex++); replaceLabelText("Platform:", currentIndex++); replaceLabelText(Videogame::getPlatformString(videogameItem->getPlatform()).c_str(), currentIndex++); } break; default: Error::raiseError(Error::ERROR_UNKNOWN_ITEM_TYPE); break; } size = itemInfo.size(); while (currentIndex < (int)size) { itemInfo[currentIndex++]->setText(""); } }