Library Management System
Library Management System
#include <string>
#include <stdexcept>
class Book {
public:
int id;
string title;
string author;
bool isIssued;
string issuedTo;
class Node {
public:
Book *book;
Node *next;
class BookList {
private:
Node *head;
public:
BookList() : head(nullptr) {}
if (current == nullptr) {
throw runtime_error("Book with ID " + to_string(id) + " not
found.");
}
if (previous == nullptr) {
head = current->next;
} else {
previous->next = current->next;
}
delete current->book;
delete current;
cout << "Book with ID " << id << " deleted." << endl;
}
void listAllBooks() {
Node *current = head;
if (!current) {
cout << "No books in the library." << endl;
return;
}
while (current != nullptr) {
cout << "ID: " << current->book->id << ", Title: " << current-
>book->title << ", Author: " << current->book->author << ", Status: " <<
(current->book->isIssued ? "Issued to " + current->book->issuedTo :
"Available") << endl;
current = current->next;
}
}
void sortBooksById() {
if (head == nullptr || head->next == nullptr) {
return;
}
head = sorted;
}
};
class IssuedBooksStack {
private:
Book **stack;
int top;
int capacity;
public:
IssuedBooksStack(int capacity) : capacity(capacity), top(-1) {
stack = new Book*[capacity];
}
~IssuedBooksStack() {
delete[] stack;
}
Book* pop() {
if (top == -1) {
throw runtime_error("Stack underflow. No issued books to
return.");
}
return stack[top--];
}
bool isEmpty() {
return top == -1;
}
};
class Library {
private:
BookList bookList;
IssuedBooksStack issuedBooksStack;
public:
Library(int stackCapacity) : issuedBooksStack(stackCapacity) {}
void returnBook() {
try {
Book *book = issuedBooksStack.pop();
book->isIssued = false;
book->issuedTo = "";
cout << "Book with ID " << book->id << " returned." << endl;
} catch (const exception &e) {
cerr << e.what() << endl;
}
}
void listAllBooks() {
bookList.listAllBooks();
}
void sortBooksById() {
bookList.sortBooksById();
cout << "Books sorted by ID." << endl;
}
};
void displayMenu() {
cout << "\nLibrary Management System\n";
cout << "1. Add New Book\n";
cout << "2. Search Book by Title\n";
cout << "3. Search Book by ID\n";
cout << "4. Issue Book\n";
cout << "5. Return Book\n";
cout << "6. List All Books\n";
cout << "7. Delete Book\n";
cout << "8. Update Book\n";
cout << "9. Search Book by Author\n";
cout << "10. Sort Books by ID\n";
cout << "0. Exit\n";
cout << "Enter your choice: ";
}
int main() {
Library library(100);
int choice, id;
string title, author, studentName, newTitle, newAuthor;
do {
displayMenu();
cin >> choice;
switch (choice) {
case 1:
cout << "Enter Book ID: ";
cin >> id;
cout << "Enter Book Title: ";
cin.ignore();
getline(cin, title);
cout << "Enter Book Author: ";
getline(cin, author);
library.addNewBook(id, title, author);
break;
case 2:
cout << "Enter Book Title: ";
cin.ignore();
getline(cin, title);
library.searchBook(title);
break;
case 3:
cout << "Enter Book ID: ";
cin >> id;
library.searchBook(id);
break;
case 4:
cout << "Enter Book ID: ";
cin >> id;
cout << "Enter Student Name: ";
cin.ignore();
getline(cin, studentName);
library.issueBook(id, studentName);
break;
case 5:
library.returnBook();
break;
case 6:
library.listAllBooks();
break;
case 7:
cout << "Enter Book ID to delete: ";
cin >> id;
library.deleteBook(id);
break;
case 8:
cout << "Enter Book ID to update: ";
cin >> id;
cout << "Enter New Title: ";
cin.ignore();
getline(cin, newTitle);
cout << "Enter New Author: ";
getline(cin, newAuthor);
library.updateBook(id, newTitle, newAuthor);
break;
case 9:
cout << "Enter Book Author: ";
cin.ignore();
getline(cin, author);
library.searchBookByAuthor(author);
break;
case 10:
library.sortBooksById();
break;
case 0:
cout << "Exiting the system. Goodbye!" << endl;
break;
default:
cout << "Invalid choice. Please try again." << endl;
}
} while (choice != 0);
return 0;
}
Outputs
1. Add new Book
2. Search Book by Title
3. Search Book by Id
4. Issue Book
5. Return Book
6. List All Books
7. Delete Book
8. Update Book