Category : C++ Source Code
Archive   : CPPTUT.ZIP
Filename : DATE.CPP

 
Output of file : DATE.CPP contained in archive : CPPTUT.ZIP
// Chapter 5 - Program 11

// This file contains the implementation for the date class.

#include // Prototype for sprintf
#include // Prototypes for the current date
#include "date.h"

char date::format; // This defines the static data member
char date::out_string[25]; // This defines the static string

// Constructor - Set date to current date, and
// set format to the default of 1
date::date(void)
{
time_t time_date;
struct tm *current_date;

time_date = time(NULL); // DOS system call
current_date = localtime(&time_date); // DOS system call
month = current_date->tm_mon + 1;
day = current_date->tm_mday;
year = current_date->tm_year + 1900;
format = 1;
}


// Set the date to these input parameters
// if return = 0 ---> All data is valid
// if return = 1 ---> Something out of range
int date::set_date(int in_month, int in_day, int in_year)
{
int temp = 0;
int max_days;
// The limits on the year are purely arbitrary
if (in_year < 1500) { // Check that the year is between
year = 1500; // 1500 and 2200
temp = 1;
} else {
if (in_year > 2200) {
year = 2200;
temp = 1;
} else
year = in_year;
}

if(in_month < 1) { // Check that the month is between
month = temp = 1; // 1 and 12
} else {
if (in_month > 12) {
month = 12;
temp = 1;
} else
month = in_month;
}

max_days = days_this_month();
if (in_day < 1) { // Check that the day is between
day = temp = 1; // 1 and max_days
} else {
if (in_day > max_days) {
day = max_days;
temp = 1;
} else
day = in_day;
}

return temp;
}



static char *month_string[13] = {" ", "Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"};

// Return Jan Feb Mar Apr etc.
char *date::get_month_string(void)
{
return month_string[month];
}



// Return an ASCII-Z string depending on the stored format
// format = 1 Aug 29, 1991
// format = 2 8/29/91
// format = 3 8/29/1991
// format = 4 29 Aug 1991 Military time
// format = ? Anything else defaults to format 1
char *date::get_date_string(void)
{
switch (format) {
// This printout assumes that the year will be
// between 1900 and 1999
case 2 : sprintf(out_string, "%02d/%02d/%02d",
month, day, year - 1900);
break;

case 3 : sprintf(out_string, "%02d/%02d/%04d",
month, day, year);
break;

case 4 : sprintf(out_string, "%d %s %04d",
day, month_string[month], year);
break;

case 1 : // Fall through to the default case
default : sprintf(out_string, "%s %d, %04d",
month_string[month], day, year);
break;
}
return out_string;
}



int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// Since this is declared in the private part of the class
// header is is only available for use within the class.
// It is hidden from use outside of the class.
int date::days_this_month(void)
{
if (month != 2)
return days[month];

if (year % 4) // Not leap year
return 28;
if (year % 100) // It is leap year
return 29;
if (year % 400) // Not leap year
return 28;
return 29; // It is leap year
}


  3 Responses to “Category : C++ Source Code
Archive   : CPPTUT.ZIP
Filename : DATE.CPP

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/