Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 77, средняя оценка - 4.68
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
#1

класс дата - C++

22.08.2011, 12:41. Просмотров 11143. Ответов 24
Метки нет (Все метки)

Создать класс типа - дата с полями: день (1-31), месяц (1-12), год(целое число).Класс имеет конструктор:с параметрами, без параметров,копирования; деструктор; функции-члены получения дня,месяца и года,а также две функции-члены печати по шаблону: "5 января 1997 года" и "05.01.1997"; функции-члены должны проверять корректность задаваемых параметров.
Помогите пожалуйста с определением класса! Вот что у меня:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class date
{
    int day,month,year;
public:
    date();   //конструктор без параметров
    date(int=0,int=0,int=0);   //конструктор с параметрами
    date(const date&);   //конструктор копирования
    ~date();   //деструктор
    void set(int,int,int);   //получение
    void get(int*,int*,int*);   //установка
    void print();   //копирование???
}
Помогите доработать!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2011, 12:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос класс дата (C++):

Дата класс - C++
Перешарила интернет. Помогите описать Класс даты,чтобы работало+вычисляла новые даты путем слож/вычит

Разработать класс Дата - C++
Разработать программу для работы с датами, используя понятие класса. По введенной дате определите время года, номер квартала, номер...

Создать класс Дата - C++
Добрый день:) Ребята помогите пожалуйста исправить ошибки. Задание звучит так: "Оглашается класс для роботы с датой в формате: день, год...

Создать класс Дата - C++
Нужно создать класс date, задать день, месяц и год, создать конструктор. Перегрузить операторы вычитания двух дат (-), сравнение дат и. В...

Описать класс Дата - C++
Описать класс «Дата» - день, месяц (в виде числа), год. Предусмотреть возможность задания месяца в виде строки, возможность вывода даты на...

Класс Триада, Дата и Время - C++
Всем привет. Я в программировании новичок :) пожалуйста, помогите написать программу. Создать класс Triad (тройка) с виртуальными...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
24.08.2011, 10:12 #16
Цитата Сообщение от easybudda Посмотреть сообщение
Конструктор копирования по-моему здесь всё-таки не нужен потому, что коль скоро удалось создать копируемый объект, значит данные в нём корректные, иначе было бы брошено исключение. А вот чем плохо вызывать исключения в конструкторе и как по-другому бороться с некорректными параметрами при создании объекта - было бы интересно узнать...
Можно завести в классе булеву переменную is_valid. И в остальных методах проверять ее, соответственно в конструкторе при плохих данных просто выставить ее в true.
0
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
03.09.2011, 16:15  [ТС] #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// 11111.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
 
class Date 
{
public:
        Date(int d = 0, int m = 0, int y = 0) 
        {
                setDate(d, m, y);
                std::cout<<"Constructor"<<std::endl;
        }
 
        Date(const Date &date) 
        {
                setDate(date.day, date.month, date.year);
                std::cout<<"Constructor copy"<<std::endl;
        }
 
        ~Date()
        {
            
        }
 
        int getDay() const 
        {
                return day;
        }
 
        int getMonth() const 
        {
                return month;
        }
 
        int getYear() const 
        {
                return year;
        }
 
        void setDay(int day) 
        {
                this->day = day;
        }
 
        void setMonth(int month) 
        {
                this->month = month;
        }
 
        void setYear(int year) 
        {
                this->year = year;
        }
 
        void setDate(int day, int month, int year) 
        {
                if (isValidDate(day, month, year)) 
                {
                        setDay(day);
                        setMonth(month);
                        setYear(year);
                }
                else {
                        throw std::string("Not valid date");
                }
        }
 
        void print() const 
        {
                        std::cout << day << '.'
                                  << month << '.'
                                  << year << std::endl;
        }
 
        void print1() const 
        {
            
            //функция печати по шаблону 5 января 1997
        }
                        
 
        static bool isValidDate(int day, int month, int year) 
        {
                if ((day<1 || day>31) || (month<1 || month>12))
                {
                    std::cout<<"Not valid date"<<std::endl;
                }
                return true;
        }
 
        static bool isLeapYear(int year) 
        {
               return ((year % 4 == 0 && year% 100 != 0) || year % 400);
            
        }
 
        static int dayInMonth(int month) 
        {
                  int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
                  if(isLeapYear)days[1]=29;
                  return days[month-1];
        }
 
private:
        int day;
        int month;
        int year;
};
 
int main() 
{
        Date d1(5, 1, 1997);
            d1.print();
 
            Date d2 = d1;
            d2.setDay(6);
            d2.print();
        
 
        Date d3(d2);
            //d3.print2();
            return 0;
        
}
Помогите с одной функцией, печати по шаблону, так вроде все сделала
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.09.2011, 11:55 #18
Цитата Сообщение от Nadinka______ Посмотреть сообщение
Создать класс типа - дата с полями: день (1-31), месяц (1-12), год(целое число).Класс имеет конструктор:с параметрами, без параметров,копирования; деструктор; функции-члены получения дня,месяца и года,а также две функции-члены печати по шаблону: "5 января 1997 года" и "05.01.1997"; функции-члены должны проверять корректность задаваемых параметров.
- Предлагаю свой класс data, в классе предусмотрена проверка введенных параметров + печать по шаблону

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#ifndef DATE_H
#define DATE_H
 
#include <stdio.h>
 
int LongMonth[] = {1,3,5,7,8,10,12};
char * sMonth[] = 
{
    "января",
    "февраля",
    "марта",
    "апреля",
    "мая",
    "июня",
    "июля",
    "августа",
    "сентября",
    "октября",
    "ноября",
    "декабря"
};
 
class date
{
private:
    int day, month, year;
    bool bChangeDay,bChangeMonth,bChangeYear;//Флаги указывающие на корректировку 
    char sDate[256];//Дата в строковом формате
public:
    date();                               //конструктор без параметров
    date(int iDay, int iMonth, int iYear);//конструктор с параметрами
    date(const date &val);                //конструктор копирования
    ~date();                              //деструктор
 
    int getDay()    {return day;}
    int getMonth()  {return month;}
    int getYear()   {return year;} 
 
    void setDay(int iDay); 
    void setMonth(int iMonth);
    void setYear(int iYear); 
    //Сигнализируют пользователя о некрректности ввода даты
    bool IsChangeDay(){return bChangeDay;}
    bool IsChangeMonth(){return bChangeMonth;}
    bool IsChangeYear(){return bChangeYear;}
 
    char * ShowDate(int ifmt);
};
 
date::date()
{
    day   = 1;
    month = 1;
    year  = 1900;
    
    bChangeDay   = false;
    bChangeMonth = false;
    bChangeYear  = false;
 
    sDate[0] = '\0';
}
 
date::date(int iDay, int iMonth, int iYear)
{
    bChangeDay   = false;
    bChangeMonth = false;
    bChangeYear  = false;
 
    setDay(iDay);
    setMonth(iMonth);
    setYear(iYear);
 
    sDate[0] = '\0';
}
 
date::date(const date &val)
{
    day   = val.day;
    month = val.month;
    year  = val.year;
 
    sDate[0] = '\0';
}
 
date::~date()
{
    //Память не выделяли так что думаю, 
    //кроме установки дефалтных значений 
    //ничего сделать и не можем
    day   = 1;
    month = 1;
    year  = 1900;
 
    sDate[0] = '\0';
}
 
void date::setDay(int iDay)
{
    if(iDay < 1 || 31 < iDay)
        bChangeDay   = true;
    if(bChangeDay)
        day = 1;
    day = iDay;
}
 
void date::setMonth(int iMonth)
{
    int i, nMonth = sizeof(LongMonth)/sizeof(int);
    if(iMonth < 1 || 12 < iMonth)
        bChangeMonth = true;
    if(bChangeMonth)
        month = 1;
    //Если месяц не 31-дневный, 
    //а day == 31,
    //то устанавливаем day == 1
    if(day == 31)
    {
        for(i = 0; i < nMonth; i++)
        {
            if(iMonth == LongMonth[i])
                break;
        }
        if(nMonth <= i)
            bChangeDay = true;
    }
    if(bChangeDay)
        day = 1;
    month = iMonth;
}
 
void date::setYear(int iYear)
{
    if(iYear < 1)
        bChangeYear = true;
    if(bChangeYear)
        iYear = 1;
    if(28 < day && month == 2)
    if(iYear % 4 != 0)
        bChangeDay = true;
    if(bChangeDay)
        day = 1;
    year = iYear;
}
 
char * date::ShowDate(int ifmt)
{
    switch(ifmt)
    {
        case 1 :
            sprintf(sDate,"%02d %s %04d\r\n",day,sMonth[month - 1],year);
            break;
        default :
            sprintf(sDate,"%02d.%02d.%04d\r\n",day,month,year);
            break;
    }
    return &sDate[0];
}
 
#endif
1
Миниатюры
класс дата  
Вложения
Тип файла: rar date.rar (1.7 Кб, 113 просмотров)
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.09.2011, 17:03 #19
Nadinka______, -=ЮрА=-, 30 февраля?
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.09.2011, 17:28 #20
Цитата Сообщение от fasked Посмотреть сообщение
Nadinka______, -=ЮрА=-, 30 февраля?
- Да понял баг, нужно модернизировать функцию setYear(int iYear) и ввести ветвь с проверкой условия 28 < day при не високосном годе
C++
1
2
3
4
5
6
7
8
9
10
11
12
void date::setYear(int iYear)
{
    if(iYear < 1)
        bChangeYear = true;
    if(bChangeYear)
        iYear = 1;
    if(month == 2 && 28 + ((iYear % 4 == 0) ? 1 : 0) < day)
            bChangeDay = true;
    if(bChangeDay)
        day = 1;
    year = iYear;
}
PS:Сразу сложно написать без багов
0
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
05.09.2011, 09:17  [ТС] #21
Nadinka______, -=ЮрА=-, 30 февраля?
Вроде же с февралем все нормально???
C++
1
2
3
4
5
6
static int dayInMonth(int month) 
        {
                  int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
                  if(isLeapYear)days[1]=29;
                  return days[month-1];
        }
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.09.2011, 10:14 #22
Цитата Сообщение от Nadinka______ Посмотреть сообщение
Вроде же с февралем все нормально???
С помощью функций setDate, setDay etc. возможно создать некорректную дату.
0
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
13.09.2011, 16:44  [ТС] #23
Вот весь код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "stdafx.h"
#include <iostream>
#include <string>
 
class Date 
{
public:
        Date(int d = 0, int m = 0, int y = 0) 
        {
                setDate(d, m, y);
                std::cout<<"Constructor"<<std::endl;
        }
 
        Date(const Date &date) 
        {
                setDate(date.day, date.month, date.year);
                std::cout<<"Constructor copy"<<std::endl;
        }
 
        ~Date()
        {
            
        }
 
        int getDay() const 
        {
                return day;
        }
 
        int getMonth() const 
        {
                return month;
        }
 
        int getYear() const 
        {
                return year;
        }
 
        void setDay(int day) 
        {
                this->day = day;
        }
 
        void setMonth(int month) 
        {
                this->month = month;
        }
 
        void setYear(int year) 
        {
                this->year = year;
        }
 
        void setDate(int day, int month, int year) 
        {
                if (isValidDate(day, month, year)) 
                {
                        setDay(day);
                        setMonth(month);
                        setYear(year);
                }
                else {
                        throw std::string("Not valid date");
                }
        }
 
        void print() const 
        {
                        std::cout << day << '.'
                                  << month << '.'
                                  << year << std::endl;
        }
 
    void print1() const 
        {
        
    
    }
                        
 
        static bool isValidDate(int day, int month, int year) 
        {
                if ((day<1 || day>31) || (month<1 || month>12))
                {
                    std::cout<<"Not valid date"<<std::endl;
                }
                return true;
        }
 
        static bool isLeapYear(int year) 
        {
 
               return ((year % 4 == 0 && year% 100 != 0) || year % 400);
            
        }
 
        static int dayInMonth(int month) 
        {
                  int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
                  if(isLeapYear)days[1]=29;
                  return days[month-1];
        }
 
 
private:
        int day;
        int month;
        int year;
};
 
int main() 
{
        Date d1(5, 1, 1997);
        d1.print();
 
        Date d2 = d1;
        d2.setDay(6);
        d2.print();
        
 
        Date d3(d2);
        d3.print1();
        system ("pause");
        return 0;
        
}
Помогите мне с функцией print1 печати по шаблону 5 января 1997
0
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 17:09 #24
Nadinka______, чем мой вариант не устроил???Ведь баг поправил http://www.cyberforum.ru/cpp/thread3...ml#post1960008

Добавлено через 5 минут
Цитата Сообщение от fasked Посмотреть сообщение
С помощью функций setDate, setDay etc. возможно создать некорректную дату.
- можно пример неправильной работы этих функций???(хочу отладить свой алгоритм если там упущения ещё есть)
0
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
13.09.2011, 19:32  [ТС] #25
У меня все работает корректно!
Просто не могу твою функцию интерпретировать в свой пример(((
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2011, 19:32
Привет! Вот еще темы с ответами:

ООП. Определить класс Дата - C++
Определить класс Дата (Date), в котором производится ввод календарной даты, определение соответствующего дате дня недели, прибавление к...

Реализовать класс Date (дата) - C++
в общем, утопающий студент просит о помощи, потому как сам уже себя не успеет спасти. нужно к понедельнику сдать 5 лабораторных на с++ ...

Класс «Дата». Сложение/вычитание дат - C++
Здравствуйте, нужна помощь - подсказка. Вот задание: Описать класс «Дата» – день, месяц (число), год. Предусмотреть возможность задания...

Класс Дата-Время. Создать наследников класса: - C++
Приветствую вас уважаемое сообщество. Я только начал изучать наследование. В теории знаю, что такое наследование, как оно работает, про...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.09.2011, 19:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru