feladat4 almost done
This commit is contained in:
parent
fb99f36335
commit
c0886a6cc7
4 changed files with 124 additions and 41 deletions
|
|
@ -3,6 +3,6 @@
|
||||||
<Platform Name="x64" />
|
<Platform Name="x64" />
|
||||||
<Platform Name="x86" />
|
<Platform Name="x86" />
|
||||||
</Configurations>
|
</Configurations>
|
||||||
<Project Path="feladat4/feladat4.vcxproj" />
|
<Project Path="feladat4/feladat4.vcxproj" Id="e8886623-03f8-424c-becd-f95c36ad1f1b" />
|
||||||
<Project Path="UnitTest1/UnitTest1.vcxproj" />
|
<Project Path="UnitTest1/UnitTest1.vcxproj" />
|
||||||
</Solution>
|
</Solution>
|
||||||
|
|
|
||||||
|
|
@ -4,41 +4,35 @@
|
||||||
#include "cmydate.h"
|
#include "cmydate.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
static bool IsLeapYear(int year);
|
static bool IsLeapYear(int year) {
|
||||||
|
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
|
||||||
CMyDate::CMyDate() {
|
|
||||||
m_iYear = 1970;
|
|
||||||
m_iMonth = 1;
|
|
||||||
m_iDay = 1;
|
|
||||||
}
|
|
||||||
CMyDate::CMyDate(int year, int month, int day) {
|
|
||||||
if (!IsValid(year, month, day))
|
|
||||||
{
|
{
|
||||||
throw new exception; // rewrite to correct exception
|
return true;
|
||||||
}
|
}
|
||||||
m_iYear = year;
|
return false;
|
||||||
m_iMonth = month;
|
|
||||||
m_iDay = day;
|
|
||||||
}
|
}
|
||||||
CMyDate::~CMyDate(){
|
static bool IsValidYear(int year) {
|
||||||
//hey jimmy, get me a desctructor with nothing
|
|
||||||
}
|
|
||||||
void CMyDate::Display() const {
|
|
||||||
}
|
|
||||||
int CMyDate::DayOfTheYear() const {
|
|
||||||
}
|
|
||||||
bool CMyDate::IsValid(int year, int month, int day) const {
|
|
||||||
if (year < 1970)
|
if (year < 1970)
|
||||||
{
|
{
|
||||||
return false;
|
throw new CMyDateException(CMyDateException::ErrMinYear);
|
||||||
}
|
}
|
||||||
if (month < 1 || month > 12)
|
return true;
|
||||||
|
}
|
||||||
|
static bool IsValidMonth(int month) {
|
||||||
|
if (month < 1)
|
||||||
{
|
{
|
||||||
return false;
|
throw new CMyDateException(CMyDateException::ErrMinMonth);
|
||||||
}
|
}
|
||||||
|
if (month > 12)
|
||||||
|
{
|
||||||
|
throw new CMyDateException(CMyDateException::ErrMaxMonth);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
static bool IsValidDay(int year, int month, int day) {
|
||||||
if (day < 1)
|
if (day < 1)
|
||||||
{
|
{
|
||||||
return false;
|
throw new CMyDateException(CMyDateException::ErrMinDay);
|
||||||
}
|
}
|
||||||
switch (month)
|
switch (month)
|
||||||
{
|
{
|
||||||
|
|
@ -51,7 +45,7 @@ bool CMyDate::IsValid(int year, int month, int day) const {
|
||||||
case 12:
|
case 12:
|
||||||
if (day > 31)
|
if (day > 31)
|
||||||
{
|
{
|
||||||
return false;
|
throw new CMyDateException(CMyDateException::ErrMaxDay);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
|
@ -60,18 +54,96 @@ bool CMyDate::IsValid(int year, int month, int day) const {
|
||||||
case 11:
|
case 11:
|
||||||
if (day > 30)
|
if (day > 30)
|
||||||
{
|
{
|
||||||
return false;
|
throw new CMyDateException(CMyDateException::ErrMaxDay);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (day > 29 || (day > 28 && !IsLeapYear(year)))
|
if (day > 29 || (day > 28 && !IsLeapYear(year)))
|
||||||
{
|
{
|
||||||
return false;
|
throw new CMyDateException(CMyDateException::ErrMaxDay);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
throw new CMyDateException(CMyDateException::ErrUnexpected);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CMyDate::CMyDate() {
|
||||||
|
m_iYear = 1970;
|
||||||
|
m_iMonth = 1;
|
||||||
|
m_iDay = 1;
|
||||||
|
}
|
||||||
|
CMyDate::CMyDate(int year, int month, int day) {
|
||||||
|
IsValid(year, month, day);
|
||||||
|
SetYear(year);
|
||||||
|
SetMonth(month);
|
||||||
|
SetDay(day);
|
||||||
|
}
|
||||||
|
CMyDate::~CMyDate(){
|
||||||
|
//hey jimmy, get me a destructor with nothing
|
||||||
|
}
|
||||||
|
void CMyDate::Display() const {
|
||||||
|
char monthName[11] = {};
|
||||||
|
switch (m_iMonth)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
strncpy(monthName, "Január", 7);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
strncpy(monthName, "Február", 8);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
strncpy(monthName, "Március", 8);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
strncpy(monthName, "Április", 9);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
strncpy(monthName, "Május", 6);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
strncpy(monthName, "Június", 7);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
strncpy(monthName, "Július", 7);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
strncpy(monthName, "Augusztus", 10);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
strncpy(monthName, "Szeptember", 11);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
strncpy(monthName, "Október", 8);
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
strncpy(monthName, "November", 9);
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
strncpy(monthName, "December", 9);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new CMyDateException(CMyDateException::ErrUnexpected);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cout << m_iYear << " " << monthName << " " << m_iDay << ".";
|
||||||
|
}
|
||||||
|
int CMyDate::DayOfTheYear() const {
|
||||||
|
int d = 30.4375 * (m_iMonth - 1); //avg day in a month
|
||||||
|
return d + m_iDay - (int)IsLeapYear(m_iYear);
|
||||||
|
}
|
||||||
|
bool CMyDate::IsValid(int year, int month, int day) const {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
IsValidYear(year);
|
||||||
|
IsValidMonth(month);
|
||||||
|
IsValidDay(year, month, day);
|
||||||
|
}
|
||||||
|
catch (const CMyDateException& e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void CMyDate::AddDays(int days) {
|
void CMyDate::AddDays(int days) {
|
||||||
|
|
@ -92,28 +164,20 @@ int CMyDate::GetYear() const {
|
||||||
return m_iYear;
|
return m_iYear;
|
||||||
}
|
}
|
||||||
void CMyDate::SetDay(int day) {
|
void CMyDate::SetDay(int day) {
|
||||||
if (IsValid(m_iYear, m_iMonth, day))
|
if (IsValidDay(m_iYear, m_iMonth, day))
|
||||||
{
|
{
|
||||||
m_iDay = day;
|
m_iDay = day;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void CMyDate::SetMonth(int month) {
|
void CMyDate::SetMonth(int month) {
|
||||||
if (IsValid(m_iYear, month, m_iDay))
|
if (IsValidMonth(month))
|
||||||
{
|
{
|
||||||
m_iMonth = month;
|
m_iMonth = month;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void CMyDate::SetYear(int year) {
|
void CMyDate::SetYear(int year) {
|
||||||
if (IsValid(year, m_iMonth, m_iDay))
|
if (IsValidYear(year))
|
||||||
{
|
{
|
||||||
m_iYear = year;
|
m_iYear = year;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsLeapYear(int year) {
|
|
||||||
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
@ -1 +1,8 @@
|
||||||
//Tóth Dániel Mátyás | IFPQYY | V1
|
//Tóth Dániel Mátyás | IFPQYY | V1
|
||||||
|
#include "cmydateexception.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
CMyDateException::CMyDateException(const char* s)
|
||||||
|
{
|
||||||
|
strncpy(msg, s, sizeof(s));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,14 @@
|
||||||
//Tóth Dániel Mátyás | IFPQYY | V1
|
//Tóth Dániel Mátyás | IFPQYY | V1
|
||||||
#pragma once
|
#pragma once
|
||||||
|
class CMyDateException {
|
||||||
|
public:
|
||||||
|
CMyDateException(const char* s);
|
||||||
|
static constexpr const char* ErrMinDay = "Hiba: nap kisebb, mint 1!";
|
||||||
|
static constexpr const char* ErrMaxDay = "Hiba: nap nagyobb, mint az adott hónap napszáma!";
|
||||||
|
static constexpr const char* ErrMinMonth = "Hiba: hónap kisebb, mint 1!";
|
||||||
|
static constexpr const char* ErrMaxMonth = "Hiba: hónap nagyobb, mint 12!";
|
||||||
|
static constexpr const char* ErrMinYear = "Hiba: év kisebb, mint 1970!";
|
||||||
|
static constexpr const char* ErrUnexpected = "Váratlan hiba";
|
||||||
|
private:
|
||||||
|
char* msg;
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue