glavni.cpp
#include <iostream>
using namespace std;
#include "Datum.h"
int main()
{
// datuma dveh praznikov
Datum presernov_dan(8, 2, 2007);
Datum velika_noc(8, 4, 2007);
// danasnji datum vnese uporabnik
int dan, mesec, leto;
cout << "Vnesi danasnji datum (dan mesec leto):";
cin >> dan >> mesec >> leto;
Datum danes(dan, mesec, leto);
// izpis danasnjega datuma
cout << "Danes je: ";
danes.izpisi();
cout << "." << endl;
// pretekel cas od prejsnjega praznika
cout << "Presernov dan je bil pred " << danes.odstej(presernov_dan) << " dnevi." << endl;
// cas do naslednjega praznika
cout << "Velika noč bo čez " << velika_noc - danes << " dni." << endl;
return 0;
}
Datum.h in Datum.cpp
#ifndef DATUM_H_
#define DATUM_H_
class Datum
{
int dan, mesec, leto;
// pomožna funkcija, ki pretvori datum v število dni po 1.1. 1900
int stevilo_dni_od_1900() const;
public:
/**
* konstruktor ustvari datum iz treh celih števil
* prvi argument je dan v mesecu
* drug argument je mesec v letu
* tretji argument je številka leta
*/
Datum(int, int, int);
/*
* metoda izpise datom po ISO standardu yyyy-mm-dd
*/
void izpisi();
/*
* funkcija vrne število dni med dvema datuma
*/
int odstej(const Datum&);
/*
* prekriti operator za računanje razlike v datumih
*/
int operator-(const Datum&);
};
#endif /*DATUM_H_*/
|
#include <iostream>
using namespace std;
#include "Datum.h"
Datum::Datum(int d, int m, int l)
{
dan = d;
mesec = m;
leto = l;
}
// metoda izpise datom po ISO standardu yyyy-mm-dd
void Datum::izpisi()
{
cout << leto << '-';
if (mesec < 10) // stevilo se mora izpisati dvomestno
{
cout << '0';
}
cout << mesec << '-';
if (dan < 10) // stevilo se mora izpisati dvomestno
{
cout << '0';
}
cout << dan;
}
// metoda za izračun števila dni med dvema datuma
int Datum::odstej(const Datum & d2) {
return stevilo_dni_od_1900() - d2.stevilo_dni_od_1900();
}
// prekriti operator za izračun dni med dvema datuma
int Datum::operator-(const Datum & d2)
{
// uporabimo ze napisano metodo
return odstej(d2);
}
// pomožna metoda, ki pretvori datum v število dni po 1. 1. 1900
int Datum::stevilo_dni_od_1900() const
{
int st_dni = 0;
int st_let = leto - 1900;
st_dni = st_dni + st_let * 365;
st_dni += st_let / 4; // prištejemo še dneve v prestopnih letih
/*
* izračun števila dni v tekočem letu
* najprej prištejem število dni v preteklih mesecih
* nazadnje pa še število dni v tekočem mesecu
*/
switch (mesec)
{
case 12:
st_dni += 30;
case 11:
st_dni += 31;
case 10:
st_dni += 30;
case 9:
st_dni += 31;
case 8:
st_dni += 31;
case 7:
st_dni += 30;
case 6:
st_dni += 31;
case 5:
st_dni += 30;
case 4:
st_dni += 31;
case 3:
if (leto % 4 == 0) // je prestopno leto?
st_dni += 29;
else
st_dni +=28;
case 2:
st_dni += 31;
default:
st_dni += dan; // število dni v tekočem mesecu
}
return st_dni;
}
|