Untitled

 avatar
unknown
plain_text
5 months ago
2.9 kB
2
Indexable
#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;

class Book {
private:
    string isbn;
    string title;
    string author;
    int numCopies;
    bool isIssued;

    bool isValidISBN(const string& isbn) const {
        int hyphenCount = 0;
        for (char c : isbn) {
            if (c == '-') {
                hyphenCount++;
            }
        }
        return hyphenCount == 3 && isbn.length() >= 5;
    }

public:
    Book(const string& isbn, const string& title, const string& author, int numCopies)
        : title(title), author(author), numCopies(numCopies), isIssued(false) {
        if (isValidISBN(isbn)) {
            this->isbn = isbn;
        } else {
            throw invalid_argument("Invalid ISBN format");
        }
    }

    void displayBookDetails() const {
        cout << "ISBN: " << isbn << "\nTitle: " << title << "\nAuthor: " << author
             << "\nNumber of Copies: " << numCopies << "\n";
        cout << "Status: " << (isIssued ? "Issued" : "Available") << "\n";
    }

    bool issueBook() {
        if (numCopies > 0 && !isIssued) {
            isIssued = true;
            numCopies--;
            return true;
        }
        return false;
    }

    ~Book() {
        cout << "Book object destroyed for Title: " << title << endl;
    }
};

class Student {
private:
    string name;
    string studentId;
    string libraryCardNumber;

public:
    Student(const string& name, const string& studentId, const string& libraryCardNumber)
        : name(name), studentId(studentId), libraryCardNumber(libraryCardNumber) {}

    void displayStudentDetails() const {
        cout << "Name: " << name << "\nStudent ID: " << studentId
             << "\nLibrary Card Number: " << libraryCardNumber << "\n";
    }

    ~Student() {
        cout << "Student object destroyed for Student Name: " << name << endl;
    }
};

int main() {
    try {
        string isbn;
        while (true) {
            cout << "Enter ISBN: ";
            getline(cin, isbn); // Changed to getline for safety

            try {
                Book book(isbn, "C ++", "Prateek", 7);
                book.displayBookDetails(); // Display immediately after creation
                if (book.issueBook()) {
                    cout << "Book issued successfully.\n";
                } else {
                    cout << "Book cannot be issued.\n";
                }
                break; // Exit the loop after a successful book creation
            } catch (const invalid_argument& e) {
                cerr << "Error: " << e.what() << ". Please enter a valid ISBN.\n";
            }
        }

        Student student("Harthik", "34987", "L 234");
        cout << "\nStudent Details:\n";
        student.displayStudentDetails();

    } catch (const exception& e) {
        cerr << "An exception occurred: " << e.what() << endl;
    }

    return 0;
}
Editor is loading...
Leave a Comment