Treceți la conținutul principal

clasa data cpp

// clasa DATA.cpp 
//operatii privind data calendaristica



#include "stdafx.h"
#include <stdio.h>
#include <iostream.h>
#include <time.h>




class data
{
 int zi;
 int luna;
 int an;
 static int nrzile[12];
 static char *denluna[12];
 static char *zisapt[7];

public:
 
 data (int,int,int); //constructor pornind de la trei intregi
 data()
  //constructor pornind de la data furnizata de sistem
 {
 time_t ltime;
 time( &ltime );
 zi=localtime(&ltime)->tm_mday;
 luna=localtime(&ltime)->tm_mon+1;
 an=localtime(&ltime)->tm_year+1900;
 }
 void zile_data(long);
 int isAnBisect()
  //functie test daca un an este sau nu bisect
 {
  if (an%400==0||an%100!=0 &&an%4==0)  
   return 1;
  return 0;
 };
 long data_zile();
 int retzi();
 int retluna();
 int retan();
 char* ziua_din_sapt();
 int zi_din_an();
 int isSfarsitLuna ()
  //functie test daca o zi este sau nu ultima din luna
 {
  if(zi==(nrzile[luna-1]+(luna==2&&isAnBisect())))
   return 1;
  else return 0;
 }
 int isInceputLuna ()
  //functie test daca o zi este sau nu prima din luna
 {
  if(zi==1)
   return 1;
  else
   return 0;
 }
 int isSarbatoare ()
  //functie test de sarbatoare legala (sambata, duminica,
  //1 mai, 1, 25, 26 decembrie)
 {
  int z=zi_din_an();
  if( z==121||z==335||z==359||z==360||(ziua_din_sapt()==zisapt[0])
   ||(ziua_din_sapt()==zisapt[6]))
   return 1;
  else
   return 0;
 }
 void afisare ();
 int validare(int,int,int);
 void afisare (char);
 data & operator + (int );
 data & operator - (int );
 data & operator ++ ();
 data & operator ++ (int);
 data & operator -- ();
 data & operator -- (int);
 long  operator - (data);
 friend ostream & operator << (ostream &,data );
 friend istream & operator >> (istream &,data&);
 
};

int data::nrzile[12]={31,28,31,30,31,30, 31,31,30,31,30,31};
  //vector ce contine numarul zilelor lunilor din an

char *data::denluna[12]={ "ianuarie","februarie","martie",
       "aprilie","mai","iunie","iulie",
       "august","septembrie","octombrie",
       "noiembrie","decembrie" };
  //vector ce contine denumirile lunilor din an

char *data::zisapt[7]={  "duminica","luni","marti",
       "miercuri","joi","vineri",
       "sambata" };
  //vector ce contine denumirile zolelor din saptamana


data::data (int z, int l, int a)
//constructor pornind de la 3 intregi,validand incadrarea
//in intervale posibile (1-28/29/30/31 pentru zi,
//1-12 pentru luna, 1900-2100 pentru an)
{
 if(validare(z,l,a))
 {
  zi=z;
  luna=l;
  an=a;
 }
 else 
 { 
  zi=1;
  luna=1;
  an=1900;
 }
};

int data ::validare(int z,int l,int a)
//functie ce valideaza incadrarea in intervale posibile
{
int b=data::isAnBisect(); 
if (a<1900 || a>2100) 
  return 0;
if (l<1 || l>12)
   return 0;
if (z<1 || z>nrzile[l-1]+(l==2&&b))
  return 0;
 return 1;
}


long data::data_zile ()

//functie ce transforma data curenta in numar de zile
// fata de 1 ianuarie 1900

{
 int b=data::isAnBisect();
 long totzile=0;
 totzile=(an-1900)*365 + (int)((an-1900-1)/4) + 1;
 for (int l=1;l<luna;l++)
  totzile+=data::nrzile[l-1]+(((l==2)&&b)?1:0);
 totzile+=zi-1;
 return totzile; 
}



void data::zile_data(long z)
//functie ce transforma un numar de zile in data valida

{
 int b;
 for (an=1900;z>365+b;an++)
 {
  b=data::isAnBisect();
  z-=(365+b);
 }
 b=data::isAnBisect();
 for (luna=1;z>data::nrzile[luna-1]+(((luna==2)&&b)?1:0);luna++)
  z-=(data::nrzile[luna-1]+(((luna==2)&&b)?1:0));
 zi=z;
}


int data::zi_din_an()
//functie ce determina a cata zi din an este data curenta
{
 int b=data::isAnBisect();
 int z=zi;
 int l=luna;
 int zile=0;
 for (l=1;l<luna;l++)
  zile+=data::nrzile[l-1]+(((l==2)&&b)?1:0);
 zile+=zi;
 return zile;
}

char* data ::ziua_din_sapt()
//functie ce returneaza ce zi din saptamana este
{
 return zisapt[data_zile()%7];
}

inline int data::retzi()

{
 return zi;
}

inline int data::retluna()
{
 return luna;
}

inline int data::retan()
{
 return an;
}

void data::afisare(char separator)
//functie de afisare a datei prin intermediul separatorilor
//ex.12/01/99,05-12-2000 
{

 cout<<"\nData este:";
 if (zi<10) 
  cout<<'0';
 cout<<zi<<separator;
 if (luna<10) 
  cout<<'0';
 cout<<luna<<separator; 
 if (an<2000)
 {
  if (an<1910) cout<<'0';
  cout<<(an%100)<<endl;
 }
 else
  cout<<an<<endl; 
}


void data::afisare()
//functie de afisare a datei sub forma: luni 4 februarie 2002
{
 cout<<"\nData este:"<<zisapt[data_zile()%7]<<" "<<zi<<" "<<denluna[luna-1]<<" "<<an<<endl;

}



//supraincarcari pentru operatori:

ostream& operator<<(ostream &ies,data d)
//supraincarcarea operatorului <<
{
 d.afisare();
 return ies;
}

istream& operator>>(istream &intr,data &d)
{
 cout<<"Ziua:";
 intr>>d.zi;
 cout<<"Luna:";
 intr>>d.luna;
 cout<<"Anul:";
 intr>>d.an;
 while (!d.validare(d.zi,d.luna,d.an))
 {
  cout<<"Eroare!!!"<<endl;
  cout<<"Ziua:";
  intr>>d.zi;
  cout<<"Luna:";
  intr>>d.luna;
  cout<<"Anul:";
  intr>>d.an;
 }
 return intr;
}

data &data:: operator + (int t)
 {
 long z;
 data d1(zi,luna,an);
 z=d1.data_zile();
 z+=t;
 d1.zile_data(z);
 return d1;
 
 }


data& data :: operator - (int t)
 {
 long z;
 data d1(zi,luna,an);
 z=d1.data_zile();
 z-=t;
 d1.zile_data(z);
 return d1;
 
 }



data & data :: operator ++ ()
//++d, pentru preincrementare
//operatia de preincrementare determina marirea datei
//cu o zi
 {
 long z;
 z=data_zile();
    z++;
 zile_data(z);
 return *this;
 }

data & data :: operator ++ (int a)
//d++ pentru postincrementare
//primeste un parametru intreg ce nu va fi utilizat 
//in functie
//operatia de postincrementare determina marirea datei 
//cu o saptamana
 {
 
 long z=data_zile();
    z+=7;
 zile_data(z);
 return *this;
 }

data & data :: operator -- ()
//--d, pentru predecrementare
 {
 long z;
 z=data_zile();
    z--;
 zile_data(z);
 return *this;
 }

data & data :: operator -- (int a)
//d--, pentru postdecrementare
 { 
 long z=data_zile();
    z-=7;
 zile_data(z);
 return *this;
 }

long data ::operator -(data d)
//d1-d2 , pentru determinarea numarului de zile cuprinse 
//intre doua date
{
 return (data_zile()-d.data_zile()>0)?data_zile()-d.data_zile():0;
}


///end clasa data



//functii externe pentru testarea clasei:


data & concediu(data &d,int zile_conc)
//functie pentru aflarea datei de intoarcere din concediu
//( dat in zile lucratoare)
{ 
 data d1(d.retzi(),d.retluna(),d.retan());
 data d2(d.retzi(),d.retluna(),d.retan());
 int zile=0;
 while (zile_conc>0)
 {
  d2=(d1+zile);
  if (d2.isSarbatoare()==0) { zile_conc--;}
  zile++;
 }
 d2=d1+zile;
 return d2;
}


int prima_zi(int l,int a)
//functie pentru aflarea datei bonificarii lunare
//a unei dobanzi - prima zi lucratoare dupa trecerea lunii 
{ 
 data d1(1,l,a);
 int i=0;
 int sw=0;
 while (!sw)
 {
  if (d1.isSarbatoare()==0) { sw=1; } 
  else ++d1;
 }
 return (d1.retzi());
}


int main(int argc, char* argv[])
{
 /*data d(14,1,2002);
 cout<<d<<endl;*/
//Citire data de la tastatura
 data d;
 cin>>d;
 cout<<d;

 d.afisare('/');
 ++d; //preincrementare cu o zi
 cout<<"Preincrementare cu o zi "<<d<<endl;
 d--; //postdecrementare cu o saptamana
 cout<<"Postdecrementare cu o saptamana"<<d<<endl;
 d=d-2;
 cout<<"Scadere doua zile"<<d<<endl;
 d=d+5;
 cout <<"Adunare cinci zile"<<d<<endl;
 d++;
 cout<<"Postincrementare cu o saptamana:"<<d<<endl;

 
//Determinare nr zile intre doua date
 //data d1(27,12,2001),d2(1,1,2000);
 //cout<<d1<<endl;
 //cout<<d2<<endl;
    //cout<<"Diferenta dintre date "<<d1-d2<<endl;

//Data intoarcerii din concediu
  cout<<"Data intoarcerii din concediu"<<concediu(d,23)<<endl;

//Data bonificarii lunare a dobanzii
 // cout<<"Data bonificarii lunare"<<prima_zi(6,2002)<<endl;
 return 0;
}

Comentarii

Postări populare de pe acest blog

program principal cpp

#include "clasa.h" #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define DELAY 9000000 void delay() { for(long i=0;i<DELAY;i++); } //constructor cu initializare de la tastatura BigInt::BigInt() {char x; signed char t[400]; int i; printf("\nNumarul cu semn "); do s=getche(); while((s!='+')&&(s!='-')); n=0; do {x=getche(); t[n]=x-'0'; n++; } while((x>='0')&&(x<='9')); n--; for(i=0;i<n;i++) nr[i]=t[n-i-1]; } //constructor cu initializare prin parametri BigInt::BigInt(char semn,signed char numar[],int dim) {int i; s=semn; n=dim; for(i=0;i<n;i++) nr[i]=numar[n-i-1]; } //transform un int negativ in pozitiv int BigInt::Pozitiv(int x) {int a,vb; a=0; vb=0; while(vb==0) if((x+a)==0) vb=1; else a=a+1; x=a; return x; } //constructor dintr-un nr int obisnuit BigInt::BigInt(int x) {int i; if(x>=0) s='+'…

NUMERE PRIME ALGORITM C++

// NUMERE PRIME ALGORITM C++//  reediting from scratch //on this page is just the study for a next algoritm for generating the parime nr series like Fibonnaci or ....if possibile

74111121313417374414124343447 if u know the red part you can generate the orange part
1 0 1 111112222 1 1 23

o aplicatie php localitati romania

//APLICATIA SE REFERA LA BAZA DE DATE SIRUTA

//dragtable.js


/* dragtable v1.0 June 26, 2008 Dan Vanderkam, http://danvk.org/dragtable/ http://code.google.com/p/dragtable/ \Bsortabledraggable\B Instructions: - Download this file - Add <script src="dragtable.js"></script> to your HTML. - Add class="draggable" to any table you might like to reorder. - Drag the headers around to reorder them. This is code was based on: - Stuart Langridge's SortTable (kryogenix.org/code/browser/sorttable) - Mike Hall's draggable class (http://www.brainjar.com/dhtml/drag/) - A discussion of permuting table columns on comp.lang.javascript Licensed under the MIT license. */ // Here's the notice from Mike Hall's draggable script: //***************************************************************************** // Do not remove this notice. // // Copyright 2001 by Mike Hall. // See http…