I wrote this code to create a deck of cards, print the deck, shuffles the deck and prints the shuffled deck. What do I need to do to give it support to add the jokers to the card deck if needed? What changes do  you recomend?
```
// Card.h
// Defines the Card class

#ifndef CARD_H
#define CARD_H
#include <string>

using namespace std;

// Card class definition
class Card {
public:
    // Enumerations for face and suit
    enum Face { ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING };
    enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES };

    // Constructor
    Card(Face f = ACE, Suit s = HEARTS);

    // Return string representation of the card
    string toString();

private:
    Face face;
    Suit suit;

    // Static arrays for faces and suits
    static const string faces[13];
    static const string suits[4];
};

#endif

// Card.cpp
// Implements the Card class

#include "Card.h"

// Define the face names
const string Card::faces[13] = {
    "Ace", "Two", "Three", "Four", "Five", "Six", "Seven",
    "Eight", "Nine", "Ten", "Jack", "Queen", "King"
};

// Define the suit names
const string Card::suits[4] = {
    "Hearts", "Diamonds", "Clubs", "Spades"
};

// Constructor to initialize face and suit
Card::Card(Face f, Suit s) {
    face = f;
    suit = s;
}

// Returns card as a string like "Ace of Hearts"
string Card::toString() {
    return faces[face] + " of " + suits[suit];
}

// DeckOfCards.h
// Defines the DeckOfCards class

#ifndef DECKOFCARDS_H
#define DECKOFCARDS_H

#include "Card.h"

// DeckOfCards class definition
class DeckOfCards {
public:
    DeckOfCards();              // Constructor to initialize the deck
    void shuffle();             // Shuffle the deck
    Card dealCard();            // Deal one card
    bool moreCards();           // Check if there are more cards

private:
    Card deck[52];              // Array to hold 52 cards
    int currentCard;            // Index of the next card to deal
};

#endif

// DeckOfCards.cpp
// Implements the DeckOfCards class

#include <iostream>
#include <cstdlib>  // For rand() and srand()
#include <ctime>    // For time()
#include "DeckOfCards.h"

// Constructor: creates all 52 cards
DeckOfCards::DeckOfCards() {
    currentCard = 0; // Start from the first card

    // Fill deck with 52 cards
    for (int s = 0; s < 4; s++) {
        for (int f = 0; f < 13; f++) {
            deck[s * 13 + f] = Card((Card::Face)f, (Card::Suit)s);
        }
    }
}

// Shuffle: swap each card with a random card
void DeckOfCards::shuffle() {
    srand(time(0)); // Seed random number generator

    for (int i = 0; i < 52; i++) {
        int j = rand() % 52; // Random position
        Card temp = deck[i];
        deck[i] = deck[j];
        deck[j] = temp;
    }
}

// Deal a card from the deck
Card DeckOfCards::dealCard() {
    return deck[currentCard++];
}

// Check if there are more cards to deal
bool DeckOfCards::moreCards() {
    return currentCard < 52;
}

/*
Exercise #9.23
This program shuffles and deals a deck of cards. The program should consist of class Card, class DeckOfCards and a driver program main(). 
Arsene Bwasisi
3/30/2025
*/

#include <iostream>
#include <iomanip>      
#include "DeckOfCards.h"

using namespace std;

int main() {
    // Create a deck of cards
    DeckOfCards deck;

    // Shuffle the deck
    deck.shuffle();

    // Deal all 52 cards, 4 per line
    for (int i = 0; i < 52; i++) {
        Card c = deck.dealCard();
        cout << left << setw(25) << c.toString(); // Set field width to 25, align left
        if ((i + 1) % 4 == 0) {
            cout << endl;
        }
    }

    return 0;
}
```