Library Management System

In ICS 211 our group was asked to create a library management system using C++. We used a website called Replit to collaborate work on the code and share our ideas/codes within the group. There was add book, delete book, edit book, search book, view all books, and quit.


class Book {
private:
  std::string isbn;
  std::string title;
  std::string author;
  std::string edition;
  std::string publication;




public:
  virtual void displayBookInfo() const {
      std::cout << "ISBN: " << isbn << "\nTitle: " << title << "\nAuthor: " << author
                << "\nEdition: " << edition << "\nPublication: " << publication << "\n";
  }








  void setIsbn(const std::string& value) { isbn = value; }
  void setTitle(const std::string& value) { title = value; }
  void setAuthor(const std::string& value) { author = value; }
  void setEdition(const std::string& value) { edition = value; }
  void setPublication(const std::string& value) { publication = value; }




  std::string getIsbn() const { return isbn; }
  std::string getTitle() const { return title; }
  std::string getAuthor() const { return author; }
  std::string getEdition() const { return edition; }
  std::string getPublication() const { return publication; }
};




class Fiction : public Book {
private:
  std::string genre;




public:
  void setGenre(const std::string& g) { genre = g; }
  std::string getGenre() const { return genre; }




   void displayBookInfo() const override {
      std::cout << "Fiction Book\n";
      Book::displayBookInfo();
      std::cout << "Genre: " << genre << "\n";
  }
};




class NonFiction : public Book {
private:
  std::string topic;




public:
  void setTopic(const std::string& t) { topic = t; }
  std::string getTopic() const { return topic; }




   void displayBookInfo() const override {
      std::cout << "Non-Fiction Book\n";
      Book::displayBookInfo();
      std::cout << "Topic: " << topic << "\n";
  }
};




class Library {
private:
  static const int MAX_BOOKS = 100;
  Book* books[MAX_BOOKS];         
  int numBooks;                     




public:
  Library() : numBooks(0) {}




   void addBook(Book* book) {
      if (numBooks < MAX_BOOKS) {
          books[numBooks++] = book;
      } else {
          std::cout << "Library is full. Cannot add more books.\n";
      }
  }




  void deleteBook(const std::string& isbn) {
      for (int i = 0; i < numBooks; ++i) {
          if (books[i]->getIsbn() == isbn) {
            
              for (int j = i; j < numBooks - 1; ++j) {
                  books[j] = books[j + 1];
              }
              delete books[--numBooks];
              std::cout << "Book with ISBN " << isbn << " deleted.\n";
              return;
          }
      }
      std::cout << "Book with ISBN " << isbn << " not found.\n";
  }




   void searchBook(const std::string& isbn) const {
      for (int i = 0; i < numBooks; ++i) {
          if (books[i]->getIsbn() == isbn) {
              books[i]->displayBookInfo();
              return;
          }
      }
      std::cout << "Book with ISBN " << isbn << " not found.\n";
  }




  void viewAllBooks() const {
      if (numBooks == 0) {
          std::cout << "No books in the library.\n";
      } else {
          std::cout << "All Books in the Library:\n";
          for (int i = 0; i < numBooks; ++i) {
              books[i]->displayBookInfo();
              std::cout << "------------------------\n";
          }
      }
  }








  void editBook(const std::string& isbn) {
      for (int i = 0; i < numBooks; ++i) {
          if (books[i]->getIsbn() == isbn) {
              std::cout << "Enter new details for the book with ISBN " << isbn << ":\n";
              std::string newTitle;
              std::cout << "Enter new Title: ";
              std::cin.ignore();
              std::getline(std::cin, newTitle);
              books[i]->setTitle(newTitle);
              std::cout << "Book details updated.\n";
              return;
          }
      }
      std::cout << "Book with ISBN " << isbn << " not found.\n";
  }




   ~Library() {
      for (int i = 0; i < numBooks; ++i) {
          delete books[i];
      }
  }
};




int main() {
  Library library;




  int choice;
  std::string isbn;




  do {
      std::cout << "\nLIBRARY MANAGEMENT SYSTEM\n"
                << "[1] ADD FICTION BOOK\n"
                << "[2] ADD NONFICTION BOOK\n"
                << "[3] DELETE BOOK\n"
                << "[4] EDIT BOOK\n"
                << "[5] SEARCH BOOK\n"
                << "[6] VIEW ALL BOOKS\n"
                << "[7] EXIT\n\n"
                << "Enter Choice: ";
      std::cin >> choice;




      switch (choice) {
          case 1: {
              // Add a new fiction book
              Fiction* newFiction = new Fiction();




            
              std::cout << "Enter ISBN: ";
              std::cin >> isbn;
              newFiction->setIsbn(isbn);




              std::cout << "Enter Title: ";
              std::cin.ignore();
              std::getline(std::cin, isbn);
              newFiction->setTitle(isbn);




              std::cout << "Enter Author: ";
              std::getline(std::cin, isbn);
              newFiction->setAuthor(isbn);




              std::cout << "Enter Edition: ";
              std::getline(std::cin, isbn);
              newFiction->setEdition(isbn);




              std::cout << "Enter Publication: ";
              std::getline(std::cin, isbn);
              newFiction->setPublication(isbn);




              std::cout << "Enter Genre: ";
              std::getline(std::cin, isbn);
              newFiction->setGenre(isbn);


              std::cout << "Book Added";
              library.addBook(newFiction);
              break;
          }
          case 2: {
              // Add a new nonfiction book
              NonFiction* newNonFiction = new NonFiction();




              std::cout << "Enter ISBN: ";
              std::cin >> isbn;
              newNonFiction->setIsbn(isbn);




              std::cout << "Enter Title: ";
              std::cin.ignore();
              std::getline(std::cin, isbn);
              newNonFiction->setTitle(isbn);




              std::cout << "Enter Author: ";
              std::getline(std::cin, isbn);
              newNonFiction->setAuthor(isbn);




              std::cout << "Enter Edition: ";
              std::getline(std::cin, isbn);
              newNonFiction->setEdition(isbn);




              std::cout << "Enter Publication: ";
              std::getline(std::cin, isbn);
              newNonFiction->setPublication(isbn);




              std::cout << "Enter Topic: ";
              std::getline(std::cin, isbn);
              newNonFiction->setTopic(isbn);


              std::cout << "Book Added!!!!";
              library.addBook(newNonFiction);
              break;
          }
          case 3: {
              // Delete a book
              std::cout << "Enter ISBN of the book to delete: ";
              std::cin >> isbn;
              library.deleteBook(isbn);
              break;
          }
          case 4: {
              // Edit book details
              std::cout << "Enter ISBN of the book to edit: ";
              std::cin >> isbn;
              library.editBook(isbn);
              break;
          }
          case 5: {
              // Search for a book
              std::cout << "Enter ISBN of the book to search: ";
              std::cin >> isbn;
              library.searchBook(isbn);
              break;
          }
          case 6: {
              // View all books
              library.viewAllBooks();
              break;
          }
          case 7: {
              // Exit the program
              std::cout << "Exiting the program.\n";
              break;
          }
          default: {
              std::cout << "Invalid choice. Please try again.\n";
              break;
          }
      }




  } while (choice != 7);




  return 0;
}


Source: Group-8-Project