clsUtil

#pragma once
#include <iostream>
#include <string>
#include "clsDate.h"
 
using namespace std;
 
class clsUtil
{
 
public:
    enum enCharType {
        SamallLetter = 1, CapitalLetter = 2,
        Digit = 3, MixChars = 4, SpecialCharacter = 5
    };
 
    static void  Srand()
    {
        //Seeds the random number generator in C++, called only once
        srand((unsigned)time(NULL));
    }
 
    static  int RandomNumber(int From, int To)
    {
        //Function to generate a random number
        int randNum = rand() % (To - From + 1) + From;
        return randNum;
    }
 
    static char GetRandomCharacter(enCharType CharType)
    {
 
        //updated this method to accept mixchars
        if (CharType == MixChars)
        {
            //Capital/Samll/Digits only
            CharType = (enCharType)RandomNumber(1, 3);
 
        }
 
        switch (CharType)
        {
 
        case enCharType::SamallLetter:
        {
            return char(RandomNumber(97, 122));
            break;
        }
        case enCharType::CapitalLetter:
        {
            return char(RandomNumber(65, 90));
            break;
        }
        case enCharType::SpecialCharacter:
        {
            return char(RandomNumber(33, 47));
            break;
        }
        case enCharType::Digit:
        {
            return char(RandomNumber(48, 57));
            break;
        }
    defualt:
        {
            return char(RandomNumber(65, 90));
            break;
        }
        }
    }
 
    static  string GenerateWord(enCharType CharType, short Length)
 
    {
        string Word;
 
        for (int i = 1; i <= Length; i++)
 
        {
 
            Word = Word + GetRandomCharacter(CharType);
 
        }
        return Word;
    }
 
    static string  GenerateKey(enCharType CharType = CapitalLetter)
    {
 
        string Key = "";
 
 
        Key = GenerateWord(CharType, 4) + "-";
        Key = Key + GenerateWord(CharType, 4) + "-";
        Key = Key + GenerateWord(CharType, 4) + "-";
        Key = Key + GenerateWord(CharType, 4);
 
 
        return Key;
    }
 
    static void GenerateKeys(short NumberOfKeys, enCharType CharType)
    {
 
        for (int i = 1; i <= NumberOfKeys; i++)
 
        {
            cout << "Key [" << i << "] : ";
            cout << GenerateKey(CharType) << endl;
        }
 
    }
 
    static void FillArrayWithRandomNumbers(int arr[100], int arrLength, int From, int To)
    {
        for (int i = 0; i < arrLength; i++)
            arr[i] = RandomNumber(From, To);
    }
 
    static void FillArrayWithRandomWords(string arr[100], int arrLength, enCharType CharType, short Wordlength)
    {
        for (int i = 0; i < arrLength; i++)
            arr[i] = GenerateWord(CharType, Wordlength);
 
    }
 
    static void FillArrayWithRandomKeys(string arr[100], int arrLength, enCharType CharType)
    {
        for (int i = 0; i < arrLength; i++)
            arr[i] = GenerateKey(CharType);
    }
 
    static  void Swap(int& A, int& B)
    {
        int Temp;
 
        Temp = A;
        A = B;
        B = Temp;
    }
 
    static  void Swap(double& A, double& B)
    {
        double Temp;
 
        Temp = A;
        A = B;
        B = Temp;
    }
 
    static  void Swap(bool& A, bool& B)
    {
        bool Temp;
 
        Temp = A;
        A = B;
        B = Temp;
    }
 
    static  void Swap(char& A, char& B)
    {
        char Temp;
 
        Temp = A;
        A = B;
        B = Temp;
    }
 
    static  void Swap(string& A, string& B)
    {
        string Temp;
 
        Temp = A;
        A = B;
        B = Temp;
    }
 
    static  void Swap(clsDate& A, clsDate& B)
    {
        clsDate::SwapDates(A, B);
 
    }
 
    static  void ShuffleArray(int arr[100], int arrLength)
    {
 
        for (int i = 0; i < arrLength; i++)
        {
            Swap(arr[RandomNumber(1, arrLength) - 1], arr[RandomNumber(1, arrLength) - 1]);
        }
 
    }
 
    static  void ShuffleArray(string arr[100], int arrLength)
    {
 
        for (int i = 0; i < arrLength; i++)
        {
            Swap(arr[RandomNumber(1, arrLength) - 1], arr[RandomNumber(1, arrLength) - 1]);
        }
 
    }
 
    static string  Tabs(short NumberOfTabs)
    {
        string t = "";
 
        for (int i = 1; i < NumberOfTabs; i++)
        {
            t = t + "\t";
            cout << t;
        }
        return t;
 
    }
 
    static string NumberToText(int Number)
    {
 
        if (Number == 0)
        {
            return "";
        }
 
        if (Number >= 1 && Number <= 19)
        {
            string arr[] = { "", "One","Two","Three","Four","Five","Six","Seven",
        "Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen",
          "Fifteen","Sixteen","Seventeen","Eighteen","Nineteen" };
 
            return  arr[Number] + " ";
 
        }
 
        if (Number >= 20 && Number <= 99)
        {
            string arr[] = { "","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety" };
            return  arr[Number / 10] + " " + NumberToText(Number % 10);
        }
 
        if (Number >= 100 && Number <= 199)
        {
            return  "One Hundred " + NumberToText(Number % 100);
        }
 
        if (Number >= 200 && Number <= 999)
        {
            return   NumberToText(Number / 100) + "Hundreds " + NumberToText(Number % 100);
        }
 
        if (Number >= 1000 && Number <= 1999)
        {
            return  "One Thousand " + NumberToText(Number % 1000);
        }
 
        if (Number >= 2000 && Number <= 999999)
        {
            return   NumberToText(Number / 1000) + "Thousands " + NumberToText(Number % 1000);
        }
 
        if (Number >= 1000000 && Number <= 1999999)
        {
            return  "One Million " + NumberToText(Number % 1000000);
        }
 
        if (Number >= 2000000 && Number <= 999999999)
        {
            return   NumberToText(Number / 1000000) + "Millions " + NumberToText(Number % 1000000);
        }
 
        if (Number >= 1000000000 && Number <= 1999999999)
        {
            return  "One Billion " + NumberToText(Number % 1000000000);
        }
        else
        {
            return   NumberToText(Number / 1000000000) + "Billions " + NumberToText(Number % 1000000000);
        }
 
 
    }
 
 
    static string  EncryptText(string Text, short EncryptionKey = 2)
    {
 
        for (int i = 0; i <= Text.length(); i++)
        {
 
            Text[i] = char((int)Text[i] + EncryptionKey);
 
        }
 
        return Text;
 
    }
 
    static string  DecryptText(string Text, short EncryptionKey = 2)
    {
 
        for (int i = 0; i <= Text.length(); i++)
        {
 
            Text[i] = char((int)Text[i] - EncryptionKey);
 
        }
        return Text;
 
    }
 
 
};