Kanjut SHELL
Server IP : 172.16.15.8  /  Your IP : 18.224.30.113
Web Server : Apache
System : Linux zeus.vwu.edu 4.18.0-553.27.1.el8_10.x86_64 #1 SMP Wed Nov 6 14:29:02 UTC 2024 x86_64
User : apache ( 48)
PHP Version : 7.2.24
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0705) :  /home/bmmassie/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/bmmassie/monthex.cpp
//-------------------------------------------------------------
// Assignment #5
// 
// Written by: B M Massie
//
// Purpose: To produce a calendar.
//-------------------------------------------------------------

#include <iostream>
#include <iomanip>
using namespace std;
//------------------------------------------------------------
// LeapYear determines if the year is a leap year or not
// -----------------------------------------------------------
// Accepts: years 1700-2099
// Returns: true if year is a leap year and returns fasle
//          if the year is not a leap year
//------------------------------------------------------------


bool LeapYear (int year)
{
  if (year % 4 != 0)
     return false;
  else if (year % 100 == 0 && year % 400 != 0)
         return false;
       else
         return true;     
}

//-------------------------------------------------------------
// DaysInMonth determines the number of days of the month
// Note:  ignores leap year
//-------------------------------------------------------------
// Accepts:  number (1 - 12) representing month
// Returns:  number of days in that month
//-------------------------------------------------------------

int DaysInMonth (int monthnum , int year)
{
    int numdays;  // temp variable for days in month

    switch (monthnum)
    {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:   numdays = 31;  break;
        case 2: if (LeapYear (year)== true)
                  numdays = 29; 
                else
                  numdays = 28; 
                break;
        case 4:
        case 6:
        case 9:
        case 11:   numdays = 30;  break;
    }

    return numdays;
}

//-------------------------------------------------------------
// DisplayMonthName displays the month name to standard output
//-------------------------------------------------------------
// Accepts:  number (1 - 12) representing month
// Returns:  nothing
//-------------------------------------------------------------

void DisplayMonthName (int monthnum)
{
    switch (monthnum)
    {
        case 1:  cout << "January";  break;
        case 2:  cout << "February";  break;
        case 3:  cout << "March";  break;
        case 4:  cout << "April";  break;
        case 5:  cout << "May";  break;
        case 6:  cout << "June";  break;
        case 7:  cout << "July";  break;
        case 8:  cout << "August";  break;
        case 9:  cout << "September";  break;
        case 10:  cout << "October";  break;
        case 11:  cout << "November";  break;
        case 12:  cout << "December";  break;
    }
}

//-------------------------------------------------------------
// DisplayFirstWeek determines the first day of the first week
//-------------------------------------------------------------
// Accepts: numbers (0-6) representing days of week
// Returns: nothing
//-------------------------------------------------------------

void DisplayFirstWeek (int startdayofweek)
{
  int i;
  
  cout << endl;

  for (i = 0; i < startdayofweek; i++)
     cout << "    ";
  for (i = 1; i <= (7 - startdayofweek); i++)
     cout << setw(4) << i;
}

//--------------------------------------------------------------
// DisplayFullWeek determines the start date for the full weeks
// to follow and the correct dates
//--------------------------------------------------------------
// Accepts: numbers (0-6) representing days of week 
// Returns: nothing
//--------------------------------------------------------------

void DisplayFullWeek (int startdateofweek)
{
  int i;

  cout << endl;

  for (i = startdateofweek; i <= (startdateofweek + 6); i++)
     cout << setw(4) << i;  
}

//------------------------------------------------------------
// DisplayLastWeek determines what day the last week ends
//------------------------------------------------------------
// Accepts: numbers (0-6) representing days of week and the
//          number days in the month
// Returns: nothing
//------------------------------------------------------------

void DisplayLastWeek (int startdateofweek, int numdaysinmonth)
{
  int i;

  cout << endl;

  for ( i = startdateofweek; i <= numdaysinmonth; i++)
     cout << setw(4) << i;
}

//-----------------------------------------------------------
// DisplayTitleAndHeadings gives you the month name and the 
// day names
//-----------------------------------------------------------
// Accepts: month numbers (1-12)
// Returns: nothing
//-----------------------------------------------------------

void DisplayTitleAndHeadings (int monthnum)
{ 

 cout << "             ";
 DisplayMonthName (monthnum);
 cout << "\n  Sun Mon Tue Wed Thu Fri Sat ";

}

//-------------------------------------------------------------
// CalculationDayofWeek determines the day of the week of the  
// date that is passed through the parameters
//-------------------------------------------------------------
// Accepts: the parameters month, date, year
// Returns: the day of the week the month starts on
//-------------------------------------------------------------

int CalculationDayofWeek (int month, int date, int year)
{
  int dig2,         // last two digits of year
      monthcode,    // code for month
      yearcode,     // code for year
      dayofweek,    // day of the week month starts
      total;        // the yearcode, the monthcode, the date 

  dig2 = year % 100;
  yearcode = dig2 + (dig2 / 4);

  switch (month)
   {
     case 1: monthcode = 6; break;
     case 2: 
     case 3: monthcode = 2; break;
     case 4: monthcode = 5; break;
     case 5: monthcode = 0; break;
     case 6: monthcode = 3; break;
     case 7: monthcode = 5; break;
     case 8: monthcode = 1; break;
     case 9: monthcode = 4; break;
     case 10: monthcode = 6; break;
     case 11: monthcode = 2; break;
     case 12: monthcode = 4; break;
   }

  total = yearcode + monthcode + date;
  
  if (year >= 1700 && year <= 1799)
    total = total + 5;
  else if (year >= 1800 && year <= 1899)
         total = total + 3;
       else if (year >= 1900 && year <= 1999)
              total = total + 1;
            else if (year >= 2100 && year <= 2199)
                   total = total + 5;
                 else if (year >= 2200 && year <= 2299)
                        total = total + 3; 

  if (LeapYear (year)== true)
      if ( month == 1 || month == 2)
        total = total - 1;


  dayofweek = total % 7;

  return dayofweek;
}

//-------------------------------------------------------------
//  Main Function
//-------------------------------------------------------------

int main ( )
{

// --- Variables

    int begdayofmonth,     // begin day of the month
        begdateofnextweek, // begin date of next week
        year,              // year
        monthnum,          // month number (1 - 12) entered by user
        numdays;           // number of days in month

// --- Get month number from user

    cout << "\nEnter a month number (1-12): ";
    cin >> monthnum;
    
    while (monthnum < 1 || monthnum > 12)
    {
       cout << "\n\n!!! Month number must be in range 1 - 12 !!!";
       cout << "\n\nPlease re-enter month number: ";
       cin >> monthnum;
    }

    cout << "\nEnter a year (1700-2299): ";
    cin >> year;

    while (year < 1700 || year >2099)
    { 
       cout << "\n\n!!! Year must be in range 1700 - 2099 !!!";
       cout << "\n\n Please re-enter year: ";
       cin >> year;
    }

// --- Get number of days in month

    begdayofmonth = CalculationDayofWeek (monthnum, 1, year);
 
    numdays = DaysInMonth(monthnum, year);

// --- Display output sentence 
   
    cout << endl;
   
    DisplayTitleAndHeadings (monthnum);

    DisplayFirstWeek(begdayofmonth);
    
    begdateofnextweek = 8 - begdayofmonth; 

    DisplayFullWeek(begdateofnextweek);

    begdateofnextweek+=7;

    DisplayFullWeek(begdateofnextweek);

    begdateofnextweek+=7;

    DisplayFullWeek(begdateofnextweek);

    begdateofnextweek+=7;
    
    if (numdays - begdateofnextweek >= 7)
    {
     DisplayFullWeek(begdateofnextweek);
     begdateofnextweek+=7; 
    }

    DisplayLastWeek(begdateofnextweek,numdays); 

    cout << "\n\n";

    return 0;
}


Stv3n404 - 2023