Библиотека за работа с дати

Да се създаде библиотека за работа с дати (с файлове dati.h и dati.cpp), който съдържа следните функции:

  1. четене на дата от клавиатурата
  2. извеждане на дата на екрана в различен формат (например 31.10.2013, 10/31/2013)
  3. проверка дали две дати съвпадат
  4. проверка коя е по-късната от две дати
  5. извеждане на сезона за дадена дата
  6. ** прибавяне на определен брой дни към дата

Напишете програма, която демонстрира тази библиотека.

По желание: Добавете и други функции за работа с дати.

Публикувано в 12в с етикети . Постоянна връзка.

2 Responses to Библиотека за работа с дати

  1. kaloyan каза:

    Главната програма:

    #include <iostream>
    #include <stdlib.h>
    #include "dati.h"
    
    using namespace std;
    
    int main(int argc, char** argv) {
    	int d, m, g;
    	
    	//?????? ?? ???? ?? ????????????
    	chetene(d,m,g);
    	
    	//????????? ?? ???? ?? ?????? ? ???????? ?????? (???????? 31.10.2013, 10/31/2013)
    	izvejdane(d,m,g);
    	
    	//???????? ???? ??? ???? ????????
    	cout<<"Dali savpadat: "<<savpadat(12,12,2012, 31,10,1999)<<endl;
    	cout<<"Dali savpadat: "<<savpadat(26,01,2005, 26,01,2005)<<endl;
    	
    	//???????? ??? ? ??-??????? ?? ??? ????
    	cout<<"Po-kasna e data "<<po_kasna(15,10,2014, 31,10,2014)<<endl;
    	cout<<"Po-kasna e data "<<po_kasna(15,10,2016, 15,10,2012)<<endl;
    	cout<<"Po-kasna e data "<<po_kasna(15,10,2012, 15,04,2012)<<endl;
    	
    	//????????? ?? ?????? ?? ?????? ????
    	sezon(d,m);
    	
    	//** ????????? ?? ????????? ???? ??? ??? ????
    	dobavqne(d,m,g);
    	izvejdane(d,m,g);
    	
    	system("pause");
        return 0;
    }

    dati.cpp

    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    //?????? ?? ???? ?? ????????????
    void chetene(int &d, int &m, int &g){
    	cout<<"Vavedi data: ";
    	cin>>d>>m>>g;
    }
    
    //????????? ?? ???? ?? ?????? ? ???????? ?????? (???????? 31.10.2013, 10/31/2013)
    void izvejdane(int d, int m, int g){
    	char ch;
    	cout<<"Vavedi simvol: ";
    	cin>>ch;
    	cout<<d<<ch<<m<<ch<<g<<endl;
    }
    
    //???????? ???? ??? ???? ????????
    bool savpadat(int d1, int m1, int g1, int d2, int m2, int g2){
    	if((d1==d2) && (m1==m2) && (g1==g2)) return true;
    	else return false;
    }
    
    //???????? ??? ? ??-??????? ?? ??? ????
    int po_kasna(int d1, int m1, int g1, int d2, int m2, int g2){
    	if(g1>g2) return 1;
    	else
    	if(m1>m2){
    		if(g1>=g2) return 1;
    	}
    	else
    	if(d1>d2){
    		if(m1>=m2)
    			if(g1>=g2) return 1;
    	}
    	else return 2;
    }
    
    //????????? ?? ?????? ?? ?????? ????
    void sezon(int d, int m){
    	switch(m){
    		case  4:
    		case  5: cout<<"Prolet"; break;
    		case  7:
    		case  8: cout<<"Lqto"; break;
    		case 10:
    		case 11: cout<<"Esen"; break;
    		case  1:
    		case  2: cout<<"Zima"; break;
    		case  3: if(d>=22) cout<<"Prolet"; else cout<<"Zima"; break;
    		case  6: if(d<=21) cout<<"Prolet"; else cout<<"Lqto"; break;
    		case  9: if(d>=22) cout<<"Esen"; else cout<"Lqto"; break;
    		case 12: if(d>=22) cout<<"Zima"; else cout<<"Esen"; break;
    	}
    	cout<<endl;
    }
    
    //** ????????? ?? ????????? ???? ??? ??? ????
    void dobavqne(int &d, int &m, int &g){
    	int max_d;
    	int dni;
    	cout<<"Dobavi dni: ";
    	cin>>dni;
    	switch(m){
    		case  1:
    		case  3:
    		case  5:
    		case  7:
    		case  8:
    		case 10:
    		case 12: max_d=31; break;
    		case  4:
    		case  6:				
    		case  9:
    		case 11: max_d=30; break;
    		case  2: if (((g%4 == 0) || (g%400 == 0)) && g%100 != 0) max_d=29;
            		else max_d=28;
    	}
    	int razlika=d+dni-max_d;
    	for(int i=dni; i>0; i--){
    		if(d<=max_d) d++;
    		else {
    			m++;
    			d=1;
    				if(m>12) {
    					g++;
    					m=1;
    					d=1;
    				}
    		}
    	}
    }

    dati.h

    //четене на дата от клавиатурата
    void chetene(int &d, int &m, int &g);
    
    //извеждане на дата на екрана в различен формат (например 31.10.2013, 10/31/2013)
    void izvejdane(int d, int m, int g);
    
    //проверка дали две дати съвпадат
    bool savpadat(int d1, int m1, int g1, int d2, int m2, int g2);
    
    //проверка коя е по-късната от две дати
    int po_kasna(int d1, int m1, int g1, int d2, int m2, int g2);
    
    //извеждане на сезона за дадена дата
    void sezon(int d, int m);
    
    //** прибавяне на определен брой дни към дата
    void dobavqne(int &d, int &m, int &g);
    • Данаил каза:

      Още една задача, охо! :-)

      Тук обаче имам забележки:
      1) по izvejdane() – функциите трябва да са като черна кутия или като универсален инструмент – всичко необходимо за тях трябва да им идва като параметър (а не чрез въвеждане от клавиатурата) – освен ако не е изрично указано.
      2) po_kasna() може да бъде направена по-оптимално. Имам в предвид условията за годините.
      3) dobavqne() както си го реализирал ще работи само за добавяне на по-малко от 30 дни. Може да се направи да работи за произволен брой дни, помисли как.

      Задачите не са тривиални и изискват обмисляне, радвам се, че си ги решил всичките…

Вашият коментар