Thread: Need to fix my validation logic.

  1. #16
    Guest
    Guest
    Right, my mistake. I just find it structurally odd to write to the object member first, and then do the validation checks. In the month case it might be the shortest route, but I find…
    Code:
    if (mm < 1 || mm > 12) {
        month = 1;
    } else {
        month = mm;
    }
    …clearer to read.

  2. #17
    Banned
    Join Date
    Aug 2017
    Posts
    861
    correct me if I am wrong, but is it suppose to have a check to see what the day is functionality? is not a class like that

    Code:
    void setData( date)
    {
    int date = date
    }
    int getDate()
    {
    return date;
    }
    it just returns whatever the value is that has been set within the class, period. Then other functions would use that information to figure out the date in number or spelled out as in feb etc... and leap year or not.

  3. #18
    Banned
    Join Date
    Aug 2017
    Posts
    861
    keep in mind I have no idea what i am doing with C++; But maybe this will help if you look past any formatting ,syntax error,s and just the methodology of it all.


    Code:
    #ifndef DATE_H
    #define DATE_H
    
    
    const char* day_of_week[] = {
        "Monday", "Tuesday", "Wensday", "Thursday", "Firday", "Saturday", "Sunday"
    };
    
    const char* Month[] = {
        "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    
    class Date 
    {
    private:
        int year;
        int month;
        int day;
       
    public:
        Date(int mm = 1, int dd = 1, int yy = 2000)
        {
            setMonth(mm);
            setDay(dd);
            setYear(yy);
        }
        void setDay(int dd);
        int getDay();
        void setMonth(int mm);
        int getMonth();
        void setYear(int yy);
        int getYear();
        char get_Day_of_week(int day);
        char get_is_leap_year(int year);
        char get_what_month(int month);
    
    
    };
    
    #endif

    Code:
    #include <iostream>
    #include "date.h"
    
    using namespace std;
    
    void setDay(int dd)
    {
        if ( dd < 0 || dd > 31)
        {
            cout << "invalid day" << '\n';
            EXIT_FAILURE;
        }
        day = dd;
    }
    int getDay()
    {
        return day;
    }
    void setMonth(int mm)
    {
        if ( mm < 0 || mm > 10)
        {
            cout << "invalid Month" << '\n';
        }
        month = mm;
    }
    int getMonth()
    {
        return month;
    }
    void setYear(int yy)
    { 
       if ( yy < 2015 )
       {
         cout << "invalid year" << '\n';
         exit;
       }
        year = yy;
    }
    int getYear()
    {
        return year;
    }
    char get_Day_of_week(int day)
    {
        std::cout << day_of_week[day] << std::endl;
    }
    char get_is_leap_year(int year)
    {
        if (year % 4 == 0)
        {
            if (year % 100 == 0)
            {
                if (year % 400 == 0)
                    cout << year << " is a leap year.";
                else
                    cout << year << " is not a leap year.";
            }
            else
                cout << year << " is a leap year.";
        }
        else
            cout << year << " is not a leap year.";
    }
    char get_what_month(int month)
    {
        cout << Month[month] << endl;
    }
    in main to get a day printed out, after using setDay()
    Code:
    int main()
    {
    
     get_Day_of_week(getDay());
    return 0;
    }
    it's just an idea.

  4. #19
    Banned
    Join Date
    Aug 2017
    Posts
    861
    my very first class I ever written, and it actually works. I think it is what you're suppose to be doing.

    header:
    Code:
    #ifndef DATE_H
    #define DATE_H
    
    
    
    
    class TheDate 
    {
    private:
        int year;
        int month;
        int day;
       
    public:
        TheDate(int mm = 1, int dd = 1, int yy = 2000)
        {
            setMonth(mm);
            setDay(dd);
            setYear(yy);
        }
        void setDay(int dd);
        int getDay();
        void setMonth(int mm);
        int getMonth();
        void setYear(int yy);
        int getYear();
        void get_Day_of_week(int day);
        void get_is_leap_year(int year);
        void get_what_month(int month);
    
    
    };
    
    #endif
    date.cpp
    Code:
    #include <iostream>
    #include "date.h"
    
     
    
     const char* day_of_week[] = {
        "Monday", "Tuesday", "Wensday", "Thursday", "Firday", "Saturday", "Sunday"
    };
    
    const char* The_Month[] = {
        "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    
    
    void TheDate::setDay(int dd)
    {
        using std::cout;
        using std::endl;
        // needs to check for 28, 29, 30, and 31 depending on month and leap year.
        if ( dd <= 0 || dd > 31)
        {
            std::cout << "invalid day" << '\n';
            
        }
       else
       {
          day = dd;
       }
    }
    int TheDate::getDay()
    {
        return day;
    }
    void TheDate::setMonth(int mm)
    {
        using std::cout;
        using std::endl;
        
        if ( mm <= 0 || mm > 12)
        {
            std::cout << "invalid Month" << '\n';
        }
       else
       {
           month = mm;
       }
    }
    int TheDate::getMonth()
    {
        return TheDate::month;
    }
    void TheDate::setYear(int yy)
    { // year needs limits between lower and up to high end.
        TheDate::year = yy;
    }
    int TheDate::getYear()
    {
        return TheDate::year;
    }
    void TheDate::get_Day_of_week(int day)
    {
        using std::cout;
        using std::endl;
        
        std::cout  << day_of_week[day - 1] << std::endl;
    }
    void TheDate::get_is_leap_year(int year)
    {
        using std::cout;
        using std::endl;
    
        if (year % 4 == 0)
        {
            if (year % 100 == 0)
            {
                if (year % 400 == 0)
                    std::cout << year << " is a leap year." << '\n';
                else
                    std::cout << year << " is not a leap year." << '\n';
            }
            else
                std::cout << year << " is a leap year." << '\n';
        }
        else
            std::cout << year << " is not a leap year." << '\n';
    }
    void TheDate::get_what_month(int month)
    {
        using std::cout;
        using std::endl;
        
        std::cout << The_Month[month - 1] << endl;
    }
    main.cpp
    Code:
    #include <iostream>
    #include "date.h"
    
    
    
    int main()
    {
        using namespace std;
    
        int d,m,y;
    
        std::cout << "enter day, month, year in number form" << std::endl;
        std::cin >> d >> m >> y ;
        TheDate trying;
        trying.setDay(d);
        trying.setMonth(m);
        trying.setYear(y);
        trying.get_Day_of_week(trying.getDay());
        trying.get_what_month(trying.getMonth());
        trying.get_is_leap_year(trying.getYear());
        
        return 0;
    }
    Output
    Code:
    userx@/media/data/C-Projects/VSC/C++/class-date <> g++ -Wall date.cpp main.cpp
    userx@/media/data/C-Projects/VSC/C++/class-date <> ./a.out
    
    enter day, month, year in number form
    5 10 2020
    Firday
    October
    2020 is a leap year.
    the methods are there, you just need to make the error checking valid to your assignment.

    variations are just doing that, showing the variations one can write it and still work.
    Last edited by userxbw; 09-27-2017 at 07:41 PM.

  5. #20
    Banned
    Join Date
    Aug 2017
    Posts
    861

    Unfortunity I cannot edit my last post without filling out loads of paper work

    So I am posting this again, with added feature that should solved this situation.

    Is this a solution to your problem? it may need more testing by you.

    The assignment:
    check to be sure that day, month, and year are valid, at all times else set default values if not.

    the Problem:
    you need to have everything available at the same time, day,month,year, so you can check for the leap year, if true then check if month is feb then check that for the day. If not leap year act on it accordingly as well.

    you cannot by any means check to see if feb days limits are being valid or not without knowing the year first. so on and so forth. So you have to develop a means to get all of that data at once to use it to check everything in a logical order then set the data afterwords.

    the header "declaring/defining" a Class that is using a private function to do this.
    Code:
    #ifndef DATE_H
    #define DATE_H
    
    class TheDate 
    {
    private:
        int year;
        int month;
        int day;
    
        void validate_dates(int dd, int mm, int yy);
       
    public:
        TheDate(int dd = 0, int mm = 0, int yy = 0000)
        {
           validate_dates(dd,mm,yy);
        }
        void setDay(int dd);
        int getDay();
        void setMonth(int mm);
        int getMonth();
        void setYear(int yy);
        int getYear();
        void get_Day_of_week(int day);
        int get_is_leap_year(int year);
        void get_what_month(int month);
    };
    
    #endif
    The code to it.
    Code:
    #include <iostream>
    #include "date.h"
    
    
    
    const char* day_of_week[] = {
        "Monday", "Tuesday", "Wensday", "Thursday", "Firday", "Saturday", "Sunday"
    };
    
    const char* The_Month[] = {
        "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    
    
    void TheDate::setDay(int dd)
    {
        using std::cout;
        using std::endl;
        
        if ( dd <= 0 || dd > 31)
        {
            std::cout << "invalid day" << '\n';
            
        }
        else
        {
            day = dd;
        }
    }
    int TheDate::getDay()
    {
        return day;
    }
    void TheDate::setMonth(int mm)
    {
        using std::cout;
        using std::endl;
        
        if ( mm <= 0 || mm > 12)
        {
            std::cout << "invalid Month" << '\n';
        }
        else
        {
            month = mm;
        }
    }
    int TheDate::getMonth()
    {
        return TheDate::month;
    }
    void TheDate::setYear(int yy)
    {
        TheDate::year = yy;
    }
    int TheDate::getYear()
    {
        return TheDate::year;
    }
    void TheDate::get_Day_of_week(int day)
    {
        using std::cout;
        using std::endl;
        
        std::cout  << day_of_week[day - 1] << std::endl;
    }
    int TheDate::get_is_leap_year(int year)
    {
        using std::cout;
        using std::endl;
        //set return values for bool.
        if (year % 4 == 0)
        {
            if (year % 100 == 0)
            {
                if (year % 400 == 0)
                {
                    std::cout << year << " is a leap year." << '\n';
                    return 1;
                }
                else
                {
                    std::cout << year << " is not a leap year." << '\n';
                    return 0;
                }
            }
            else
            {
                std::cout << year << " is a leap year." << '\n';
                return 1;
            }
        }
        else
        {
            std::cout << year << " is not a leap year." << '\n';
            return 0;
        }
        // because it has to return something.
        return year;
    }
    void TheDate::get_what_month(int month)
    {
        using std::cout;
        using std::endl;
        
        std::cout << The_Month[month - 1] << endl;
    }
    void TheDate::validate_dates(int dd, int mm, int yy)
    {
      int leap;
      using std::cout;
      using std::endl;
    
      std::cout << "in validate dates" << '\n';
     // first find out if year is leap year or not.
     leap = get_is_leap_year(yy);
    
     std::cout << leap << " is leap " << '\n';
     std::cout << dd << " "<< mm << " " << yy << std::endl;
     //if true check for month is feb.
     // if it is a leap year and feb check day
     if (leap == 1 && mm == 2)
     { std::cout << "in checking for feb" << '\n';
         if (dd <= 0 || dd > 29)
         {
             dd = 1;
         }
         else
         {
             dd = dd;
         }
         setDay(dd);
     }
     else 
     { std::cout << " in switch" << '\n';
        //check for which months have same ending days
        switch(mm)
        {  
            case 2: // feb
                if (dd <= 0 || dd > 28)
                {
                    dd = 1;
                }
                else
                {
                    dd = dd;
                }
                setDay(dd);
                break;
            //31 days
            case 1: //jan
            case 3: //march
            case 5: //may
            case 7: //july
            case 8: //augsut
            case 10: //Oct
            case 12: //dec
            if ( dd <= 0 || dd > 31)
            {
                dd = 1;
            }
            else
            {
                dd = dd;
            }
            std::cout << "switch for setDay" << dd << '\n';
            setDay(dd);
            break;
            //look for 30 days
            case 4: // april 
            case 6: //june
            case 9: //sept
            if ( dd <= 0 || dd > 30)
            {
                dd = 1;
            }
            else
            {
                dd = dd;
            }
            setDay(dd);
            break;
            default:
             break;
        } // end switch
     } // end else if
     if (yy <= 2000)
     {
         yy = 2001;
         setYear(yy);
     }
     else
     {
         setYear(yy);
     }
     if (mm <= 0 || mm > 12)
     {
         mm = 1;
         setMonth(mm);
     }
     else
     {
         setMonth(mm);
     }
     
    }
    correct me if I am wrong (someone that knows more about switches then I )
    the switch works off an int, the value within it, if the case matches it number it gets "sucked" into the case, if no break it then drops through until it finds something to do, when it does then do it, break out of the switch, done.

    the order of the number values is not as important as the value themselves. therefore one can mix of the order of the numbers.

    main implementation.
    Code:
    #include <iostream>
    #include "date.h"
    
    
    
    int main()
    {
        using namespace std;
        int d,m,y;
    
        std::cout << "enter day, month, year in number form" << std::endl;
        std::cin >> d >> m >> y ;
    
        TheDate trying(d,m,y);
        
        /*
        trying.setDay(d);
        trying.setMonth(m);
        trying.setYear(y);
        */
    
        trying.get_Day_of_week(trying.getDay());
        trying.get_what_month(trying.getMonth());
        trying.get_is_leap_year(trying.getYear());
        std::cout << '\n' << "day" << trying.getDay() << " month " << trying.getMonth() << " year " << trying.getYear() << "\n";
        
        return 0;
    }
    the results that I am sure need be tested more, but I am not a want a be tester, hehe
    Code:
    userx@/media/data/C-Projects/VSC/C++/class-date <> g++ -Wall date.cpp main.cpp
    userx@/media/data/C-Projects/VSC/C++/class-date <> ./a.out
    
    enter day, month, year in number form
    31 2 1994
    in validate dates
    1994 is not a leap year.
    0 is leap
    31 2 1994
     in switch
    
    (here are results from main)
    
    Monday
    February
    2001 is not a leap year.
    
    day1 month 2 year 2001

    You should already know why this works having gotten to Classes in your class on C++. The teacher should have already covered why the private function gets called on creation of the Class.

  6. #21
    Banned
    Join Date
    Aug 2017
    Posts
    861
    this is what I'd do.

    You need to test and understand how arrays work, and how Switch uses the value within an int var. Understand private functions. ( which I do not fully understand yet), I just knew that no one needs to know or use this function other then the class itself, so it is private, then use it when creating the Class and filling the values first. simple logic.

    the logic next is that you need all of the data to use it against each other to check if leap year, then it yes is it feb then if yes what is the day . fix if necessary.

    move on, this all needs to be done before setting anything, day, month, year.

    I hope this helps.



    class
    Code:
    #ifndef DATE_H
    #define DATE_H
    
    class TheDate 
    {
    private:
        int year;
        int month;
        int day;
    
        void validate_dates(int dd, int mm, int yy);
       
    public:
        TheDate(int dd = 0, int mm = 0, int yy = 0000)
        {
           validate_dates(dd,mm,yy);
        }
        void setDay(int dd);
        int getDay();
        void setMonth(int mm);
        int getMonth();
        void setYear(int yy);
        int getYear();
        void get_Day_of_week(int day);
        int get_is_leap_year(int year);
        void get_what_month(int month);
    
    
    };
    
    #endif

    cpp
    Code:
    #include <iostream>
    #include "date.h"
    
    
    
    const char* day_of_week[] = {
        "Monday", "Tuesday", "Wensday", "Thursday", "Firday", "Saturday", "Sunday"
    };
    
    const char* The_Month[] = {
        "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    
    
    void TheDate::setDay(int dd)
    {
        day = dd;
    }
    int TheDate::getDay()
    {
        return day;
    }
    void TheDate::setMonth(int mm)
    {
       month = mm;
    }
    int TheDate::getMonth()
    {
        return TheDate::month;
    }
    void TheDate::setYear(int yy)
    {
        TheDate::year = yy;
    }
    int TheDate::getYear()
    {
        return TheDate::year;
    }
    void TheDate::get_Day_of_week(int day)
    {
        using std::cout;
        using std::endl;
        
        std::cout  << day_of_week[day - 1] << std::endl;
    }
    int TheDate::get_is_leap_year(int year)
    {
        using std::cout;
        using std::endl;
        //set return values for bool.
        if (year % 4 == 0)
        {
            if (year % 100 == 0)
            {
                if (year % 400 == 0)
                {
                    std::cout << year << " is a leap year." << '\n';
                    return 1;
                }
                else
                {
                    std::cout << year << " is not a leap year." << '\n';
                    return 0;
                }
            }
            else
            {
                std::cout << year << " is a leap year." << '\n';
                return 1;
            }
        }
        else
        {
            std::cout << year << " is not a leap year." << '\n';
            return 0;
        }
        // because it has to return something.
        // well it should not even reach this actually. 
        return year;
    }
    void TheDate::get_what_month(int month)
    {
        using std::cout;
        using std::endl;
        
        std::cout << The_Month[month - 1] << endl;
    }
    void TheDate::validate_dates(int dd, int mm, int yy)
    {
      int leap;
      using std::cout;
      using std::endl;
    
      std::cout << "in validate dates" << '\n';
      // make sure proper year other wise it all off anyways, or just cuz. ;) 
      if (yy <= 2000)
      {
        setYear(2001);
      }
      else
      {
        setYear(yy);
      }
     // Now find out if year is leap year or not.
     // ensures proper year is being checked.
     // by passing in getYear.
     leap = get_is_leap_year(getYear());
     
     //if true check for month is feb.
     // if it is a leap year and feb check day
     if (leap == 1 && mm == 2)
     {
         if (dd <= 0 || dd > 29)
         {
            setYear(2001);
         }
         else
         {
            setDay(dd);
         }
         
     }
     else 
     { 
         std::cout << " month is " << mm << std::endl;
        //check for which months have same amount of ending days grouping case.
        switch(mm)
        {  
            case 2: // feb
                if (dd <= 0 || dd > 28)
                {
                    setDay(1); 
                    setMonth(mm);
                }
                else
                {
                    setDay(dd); 
                    setMonth(mm);
                }
                break;
            //31 days
            case 1: //jan
            case 3: //march
            case 5: //may
            case 7: //july
            case 8: //augsut
            case 10: //Oct
            case 12: //dec
            if ( dd <= 0 || dd > 31)
            {
                setDay(1);
                setMonth(mm);
                std::cout << " in 31 days months " << getDay() <<std::endl;
            }
            else
            {
              setDay(dd);
              setMonth(mm);
                std::cout << " dd = dd in 31 days months " << getDay() <<std::endl;
            }
            break;
            //look for 30 days
            case 4: // april 
            case 6: //june
            case 9: //sept
            if ( dd <= 0 || dd > 30)
            {
                setDay(1);
                setMonth(mm);
            }
            else
            {
                setDay(dd);
                setMonth(mm);
            }
           
            break;
            default:
                // if it gets here then the month has to then fall out of specs
                // then day too is also invalid by default,
                //so just set them both to a default day, month.             
                    setMonth(1);
                    setDay(1);
                break;
        } // end switch
     } // end else if
    
    }// end function
    main
    Code:
    #include <iostream>
    #include "date.h"
    
    
    
    int main()
    {
        using namespace std;
        int d,m,y;
    
        std::cout << "enter day, month, year in number form" << std::endl;
        std::cin >> d >> m >> y ;
    
        TheDate trying(d,m,y);
    
        /*
        trying.setDay(d);
        trying.setMonth(m);
        trying.setYear(y);
        */
        std::cout << '\n' << " in main " << '\n';
        
        trying.get_Day_of_week(trying.getDay());
        trying.get_what_month(trying.getMonth());
        trying.get_is_leap_year(trying.getYear());
      
        std::cout << '\n' << "day " << trying.getDay() << " month " << trying.getMonth() << " year " << trying.getYear() << "\n";
        
        return 0;
    }
    Results:
    Code:
    userx@/media/data/C-Projects/VSC/C++/class-date <> g++ -Wall date.cpp main.cpp
    userx@/media/data/C-Projects/VSC/C++/class-date <> ./a.out
    enter day, month, year in number form
    33 23 1703
    in validate dates
    2001 is not a leap year.
    
     in main
    Monday
    January
    2001 is not a leap year.
    
    day 1 month 1 year 2001
    note: if day is greater then 7 it seg faults because the days array it is not set up to evaluate and change the number day of month to properly give day of week depending on year and month. if ya know what I mean. but I do not think your doing the show what day of week it is, if yes, then just fix the code to make it always not go over 7 on day of week. hehe
    Last edited by userxbw; 09-28-2017 at 09:40 AM.

  7. #22
    Registered User
    Join Date
    Sep 2017
    Posts
    12
    I appreciate all the work you put into that. I have to use this code though

    Code:
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include "date.h"
    using std::cout;
    using std::endl;
    using std::setfill;
    using std::setw;
    using std::string;
     
    //#include "Date.h"
     
    // note - you may need to change the definition of the main function to
    // be consistent with what your C++ compiler expects.
     
    //int _tmain(int argc, _TCHAR* argv[])
     
    int main()
    {
        Date d1;             // default ctor
        Date d2(7, 4, 1976); // July 4'th 1976
        Date d3(0, 15, 1880);// Adjusted by ctor to January 15'th 1900
       
        d1.print();         // prints 01/01/2000
        d1.printLong();     // prints 1 January 2000
        cout << endl;
     
        d2.print();         // prints 07/04/1976
        d2.printLong();     // prints 4 July 1976
        cout << endl;
     
        d3.print();         // prints 01/15/1900
        d3.printLong();     // prints 15 January 1900
        cout << endl;
     
        cout << "object d2's day is " << d2.getDay() << endl; 
        cout << "object d2's month is "  << d2.getMonth() << " which is " << d2.getMonthName() << endl;
        cout << "object d2's year is " << d2.getYear() << endl;
     
        return 0;
    }
    as my main.cpp

    also my constructor needs to be 1/1/2000

  8. #23
    Banned
    Join Date
    Aug 2017
    Posts
    861
    Quote Originally Posted by Thrownawii View Post
    I appreciate all the work you put into that. I have to use this code though

    Code:
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include "date.h"
    using std::cout;
    using std::endl;
    using std::setfill;
    using std::setw;
    using std::string;
     
    //#include "Date.h"
     
    // note - you may need to change the definition of the main function to
    // be consistent with what your C++ compiler expects.
     
    //int _tmain(int argc, _TCHAR* argv[])
     
    int main()
    {
        Date d1;             // default ctor
        Date d2(7, 4, 1976); // July 4'th 1976
        Date d3(0, 15, 1880);// Adjusted by ctor to January 15'th 1900
       
        d1.print();         // prints 01/01/2000
        d1.printLong();     // prints 1 January 2000
        cout << endl;
     
        d2.print();         // prints 07/04/1976
        d2.printLong();     // prints 4 July 1976
        cout << endl;
     
        d3.print();         // prints 01/15/1900
        d3.printLong();     // prints 15 January 1900
        cout << endl;
     
        cout << "object d2's day is " << d2.getDay() << endl; 
        cout << "object d2's month is "  << d2.getMonth() << " which is " << d2.getMonthName() << endl;
        cout << "object d2's year is " << d2.getYear() << endl;
     
        return 0;
    }
    as my main.cpp

    also my constructor needs to be 1/1/2000
    if you look at what I wrote you can do that, I set it up to check for the valid date day before setting it, and the ability to either print out the day week as alpha or number .. but day is only set to print out the mon, tues, etc up to the first week. I actually put a fix in but the mod grabbed it and it never got posted. all you have to do is change the information it needs to check and change whatever function, to print out however you want it to, and var names wanted to put your mark on it.

    in other words all you got a do is mod it a little to meet your needs. and see what you were doing different that was not working. it is just a different way of learning.

    either way it was a learning experience for me, that was my very first class I ever wrote.
    Last edited by userxbw; 09-30-2017 at 07:18 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Validation
    By ulti-killer in forum C Programming
    Replies: 5
    Last Post: 11-15-2012, 01:16 PM
  2. Validation
    By ulti-killer in forum C Programming
    Replies: 8
    Last Post: 11-15-2012, 12:06 AM
  3. validation in c
    By thangarasu1988 in forum C Programming
    Replies: 4
    Last Post: 01-05-2012, 02:42 PM
  4. c++ validation
    By rahulsk1947 in forum C++ Programming
    Replies: 4
    Last Post: 06-08-2009, 01:53 PM
  5. Help with validation
    By boontune in forum C++ Programming
    Replies: 8
    Last Post: 01-10-2003, 09:44 AM

Tags for this Thread