Witam. Mam problem, nie wiem w jaki sposób w metodzie void TKalendarz::wyswietl(int typ) ustawić tak aby po wybraniu typ=1 wyswietlił mi się format 1 Stycznia 2016 rok. Chodzi mi o to by za pomocą parametru m_miesiac, ustawić oraz wyświetlić parametr m_miesiace[][]. Ogółem ta metoda na podstawie parametru typ=1 ma nam wyświetlić datę w formacie 1/2/2016, typ=2 w formacie 1 Luty 2016 rok oraz default 1.2.2016.
Jak daje np TKalendarz::m_miesiace[m_miesiac][20] to wywala znak "M".
Napisałem już coś takiego:
#include <iostream>
#include <string>
#include "stdafx.h"
#include "TKalendarz.h"
#include <string>
char TKalendarz::m_miesiace[12][20] = { { "Styczen" },{ "Luty" }, //deklarujemy tablice char o 12 elementach (nie wiem dla czego tablica nie zaczyna sie od 0) oraz maks 20 znakach
{ "Marzec" },{ "Kwiecien" },
{ "Maj" },{ "Czerwiec" },
{ "Lipiec" },{ "Sierpien" },
{ "Wrzesien" },{ "Pazdziernik" },
{ "Listopad" },{ "Grudzien" } };
char TKalendarz::m_dni[7][15] = { {"Poniedzialek"}, {"Wtorek"}, {"Sroda"}, //deklarujemy sobie tablice 7 elementowa o wartosci dzien tygodnia, dlugosci maksymalnie 15 (13+znak /0 czyli 14 ale wrazie czego dalem 15)
{"Czwartek"}, {"Piatek"}, {"Sobota"},
{"Niedziela"} };
TKalendarz::TKalendarz(int dzien = 1, int miesiac = 1, int rok = 2009) //ustawiamy konstruktor
{
if (!ustawDate(dzien, miesiac, rok))
{
m_dzien = 1;
m_miesiac = 1;
m_rok = 2009;
}
}
bool TKalendarz::ustawDate(int dzien, int miesiac, int rok)
{
static int dlugosciMiesiaca[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// Alternatywna metoda
//if ((dzien < 0 || dzien > dlugosciMiesiaca[miesiac] || miesiac <0 ) && miesiac != 2)
// return false;
//else
//{
// if (czyPrzystepny(rok))
// {
// if (dzien > 29)
// return false;
// }
// else
// {
// if (dzien > 28)
// return false;
// }
//}
if (dzien < 0 || miesiac < 0 || rok < 0) //jezeli ktorys z tych warunkow jest niespelniony to zwroc NULL
return false;
if (miesiac != 2) //jezeli miesiac nie jest lutym oraz dzien jest wiekszy od dni miesiaca zwroc false ->
{
if (dzien > dlugosciMiesiaca[miesiac]) // ->
return false;
}
else
{
if (czyPrzystepny(rok)) //sprawdzamy czy rok przestepny, jezeli tak to sprawdzamy czy dzien jest wiekszy jezeli tak to return false
{
if (dzien > 29)
return false;
}
else
{
if (dzien > 28) //tutaj sprawdzamy juz na roku zwyklym nieprzestepnym
return false;
}
}
m_dzien = dzien;
m_miesiac = miesiac;
m_rok = rok;
return true;
}
void TKalendarz::wyswietl(int typ) //deklarujemy typy, jeszcze nie skonczone
{
switch (typ)
{
case 1: std::cout << m_dzien<<" " << TKalendarz::m_miesiace[m_miesiac][20] <<" "<< TKalendarz::m_dni[m_miesiac][15]<<std::endl;
break;
case 2: std::cout << m_dzien << "/" << m_miesiac << "/" << m_rok << std::endl;
break;
default: std::cout <<m_dzien<<"."<<m_miesiac<<"."<<m_rok<< std::endl;
break;
}
}
std::string TKalendarz::podajDzienTyg()
{
return std::string();
}
int TKalendarz::zmienDate(int d_zmien, int m_zmien, int r_zmien)
{
return 0;
}
int TKalendarz::ileDni(int dzien, int miesiac, int rok) //funkcja ile dni testowa, odejmujemy wieksze od mniejszej poniewaz nie wykona sie petla glowna z warunkiem for (int ir = 0; ir <= m_rok - 1; ir++)
{
int dni1 = iloscDniOd(m_dzien, m_miesiac, m_rok);
int dni2 = iloscDniOd(dzien, miesiac, rok);
return dni1 - dni2;
}
bool TKalendarz::czyPrzystepny(int rok) //sprawdza czy rok jest przestepny
{
if ((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0)
return true;
return false;
}
int TKalendarz::iloscDniOd(int dzien, int miesiac, int rok) //deklaracja ilosci dniOd
{
static int dlugosciMiesiaca[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // deklarujemy liczbe dni w miesiacu
int licznikDni = 0;
for (int ir = 0; ir <= m_rok - 1; ir++) // musimy odejmowac rok wiekszy od mniejszego poniewaz petla nie zadziala :/ tutaj liczmy dla roku z parametru
{
for (int im = 1; im <= 12; im++)
{
if (im != 2) // obliczamy dla lutego
{
licznikDni += dlugosciMiesiaca[im];
}
else
{
if (czyPrzystepny(ir)) //jezeli przystepny to dodaj 29dni
{
licznikDni += 29;
}
else //jezeli nie to licz +28
licznikDni += 28;
}
}
}
for (int i = 1; i <= m_miesiac; i++) //startujemy od stycznia na podstawie m_miesiac ; tutaj liczmy dla roku obecnego
{
if (i != 2)
{
licznikDni += dlugosciMiesiaca[i]; //zliczamy dni do licznika poprzed wczesniej zadeklarowana tablice char, i zwieksza nam miesiac
}
else
{
if (czyPrzystepny(m_rok)) //jezeli przystepny to licznikDni zwieksz o 29
licznikDni += 29;
else
licznikDni += 28; //jezeli nie przystepny to +28
}
}
return licznikDni; //zwracamy licznikDni
}