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

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

Войти
Регистрация
Восстановить пароль
 
MVM
Сообщений: n/a
#1

Создать класс CDateAddDays - C++

09.04.2013, 22:00. Просмотров 212. Ответов 0
Метки нет (Все метки)

Пожалуйста, помогите доделать задачку!
Найти дату, которая наступит по прошествии указанного количества дней после заданной даты. Например, через три дня после 29.12.2003 будет 01.01.2004.
Имя класса: CDateAddDays
Исходное данное: строка в формате dd.mm.yyyy
Имя метода для установки исходного данного: SetDateString
Имена полей, в которых хранятся исходные данные: m_year, m_month, m_day
Результат: строка в формате dd.mm.yyyy
Прототип метода, который будет выполнять действие: void AddDays(int);
Имя метода для взятия результата: GetDateString
Имена объектов: date1, date2

вот что получилось у меня:
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
stdafx.h 
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>//DateAddDays.h
 
class CDateAddDays
{
   int m_year; //год
   int m_month; //месяц
   int m_day; //день
   int m_month_days[12]; 
   int m_day1;
   long dc; 
   
 public:
 
    CDateAddDays(); //конструктор
   ~CDateAddDays(); //деструктор
 
   void GetDateAddDays(char *buf); //вся строка
    
   int GetY(); //функции-члены "Взять"
   int GetM();
   int GetD();
   void GetDate2(char *buf);
   long Date2DaysFromYear1(int a,int b,int e);
   long Days2Date2();
   void Days2Date(int *m_year,int *m_month,int *m_day,long dc);
   int SetY(int); //функции-члены "Установить"
   int SetM(int);
   int SetD(int);
   int SetDate2(char *buf);
   int SetDateAddDays(int AY, int AM, int AD); //установить дату
   int SetDateAddDays(char *buf); 
   
 
   int SetDateString(); //метод для установки исходного данного
};
 
stdafx.cpp
 
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<io.h>
#include <math.h>
 
      
    CDateAddDays::CDateAddDays() //Конструктор
    {   m_year=1;
        m_month=1;
        m_day=1;
        m_day1=1;
                                //Инициализация массива  
        
        m_month_days[0]=31;
        m_month_days[1]=28;
        m_month_days[2]=31;
        m_month_days[3]=30;
        m_month_days[4]=31;
        m_month_days[5]=30;
        m_month_days[6]=30;
        m_month_days[7]=31;
        m_month_days[8]=30;
        m_month_days[9]=31;
        m_month_days[10]=30;
        m_month_days[11]=31;
    }
 
    
    CDateAddDays::~CDateAddDays() //Деструктор
    {}
 
 
                                 //Метод, берет всю дату в виде строки
    void CDateAddDays::GetDateAddDays(char *buf)
    {
     printf(buf, "%02d.%02d.%04d", m_day, m_month, m_year);
    }
 
    int CDateAddDays::GetD()       //номер дня
    { return m_day; }
    int CDateAddDays::GetM()      //номер месяца
    { return m_month; }
    int CDateAddDays::GetY()      //номер года
    { return m_year; }
 
               //Метод установки сразу всей даты по номеру года, месяца и дня
    int CDateAddDays::SetDateAddDays(int AY,int AM,int AD)
    {
                 return
                    SetY(AY)&&
                    SetM(AM)&&
                    SetD(AD);
    }
 
             //Метод установки всей даты из строки
    int CDateAddDays::SetDateAddDays(char *buf)
    {
                 int y,m,d;
                 sscanf_s(buf,"%d.%d.%d",&d,&m,&y);
     return SetDateAddDays(y,m,d);
    }
 
           //Метод утановки дня по его номеру
     int CDateAddDays::SetD(int AD)
                {
     if(AD>=1&&AD<=m_month_days[m_month-1])
         { m_day=AD;
                         return 1;
                     }
                 else
                         return 0;
    }
 
          //Метод установки месяца по его номеру
    int CDateAddDays::SetM(int AM)
                {
     if(AM>=1&&AM<=12)
                     { m_month=AM;
                         return 1;
                     }
                 else
                         return 0;
                 }
 
        //Метод установки года по его номеру
    int CDateAddDays::SetY(int AY)
                {
     if(AY>=1&&AY<=9999)
                     {  m_year=AY; //условие, является ли год високосным
                     
                                  //установка кол-ва дней в феврале
                if(m_year%4==0&&m_year%100!=0||m_year%400==0)
                                 m_month_days[1]=29;    //високосный
                            else
                                 m_month_days[1]=28;    //нормальный
                                     return 1;
                }
     else
        return 0;
    }
    
             //метод подсчета кол-ва дней от начала 01/01/00001 года до
             //заданной даты
             
  long CDateAddDays:: Date2DaysFromYear1 (int a,int b,int e)
{ 
  int m = (b - 14) / 12;
  return ((1461 * (a + 4800 + m)) / 4 + (367 * (b - 2 - 12 * m)) / 12 - (3 * ((a + 4900 + m) / 100)) / 4 + e - 32075) - 1757585;
 
}
  void CDateAddDays::GetDate2(char *buf) //метод  берет ввод кол-ва дней
    {
     printf(buf, "%d", m_day1);
    }
   int CDateAddDays::SetDate2(char *buf) //метод  устанавливает ввод кол-ва дней
 {     
      int m_day1;
       scanf_s("%d", &m_day1);
     return SetDate2(buf);
 }
 
 
 long CDateAddDays:: Days2Date2() //метод прибавляет дни 
 { long dc;
   dc=Date2DaysFromYear1(m_year, m_month, m_day);
   dc=dc+m_day1;
   return dc;
  } 
 
  
        /* по заданному номеру дня, если нумерация начиналась с 01.01.0001,
   определяет год, месяц и день
   dc - количество дней,
   0<=dc<=3652059
     (верхний предел соответствует дате 31.12.9999)
*/
void CDateAddDays:: Days2Date(int *m_year, int *m_month, int *m_day, long dc)
{
  long century;
  long year,month,days;
 
  days=dc+306;
  century=floor(( 4.0 * days -  1) /  146097.0);
  days   =floor(floor (4.0 * days - 1 - 146097.0 * century)/4.0);
  year   =floor(( 4 * days +  3) /  1461.0);
  days   =4l * days +  3 -  1461l * year;
  days   =floor((days +  4.0) /  4.0);
 
  month  =floor(( 5.0 * days -  3.0) /  153.0);
  days   =5 * days -  3 -  153 * month;
  days   =floor((days +  5.0) /  5.0);
 
  if(month < 10)
    month +=3;
  else
  {
    month -=9;
    if(year++ == 99)
    {
      year = 0;
      century++;
    }
  }
  *m_year=(int)(century*100+year);
  *m_month=(int)month;
  *m_day=(int)days;
} 
 
laba22.cpp
 
#include "stdafx.h"
 
#include<cstdlib>
#include<iostream>
#include<conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{CDateAddDays DateAddDays1;      //вызов конструктора
    
     char buf[32];        //задает исходную дату, которую будет выдавать
 
     while(1)
     {
        printf("\n vvedite daty ('q' to exit) [dd.mm.yyyy]: ");
                    scanf_s("%s",buf);
                    if(!strcmp(buf,"q")) break;
            //в объект DateAddDays1 устанавливает дату из строки в перем.buf
            
            if(!DateAddDays1.SetDateAddDays(buf))
                {
                             printf("vveli nevernuyu daty \n");
                             continue;     //снова ввести дату
                }
     
                       
            printf("\n vvedite kol-vo dney  ('q' to exit): ");
                    scanf_s("%s", buf);
                    if(!strcmp(buf,"q")) break; 
                    if(DateAddDays1.SetDate2(buf))
                {
                             printf(" vvely neverno \n");
                             continue;     
                }
                    
        
 
    DateAddDays1.Days2Date2();
    DateAddDays1.GetDateAddDays(buf);
    printf("novaya data: %s\n ", buf);
}
    getch();
         
return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 22:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать класс CDateAddDays (C++):

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ... - C++
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени, возраста и веса. Создать производный класс...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями - C++
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Создать класс - данные - абстрактный базовый класс. Создать производные классы - C++
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

Создать класс Элемент списка (Node), а затем класс Список (List) - C++
Задание: Создать класс Элемент списка (Node), а затем класс Список (List). В зависимости от варианта список должен быть одно или...

Класс: создать класс Fraction для работы с дробными числами - C++
Необходимо создать класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое...

Создать класс Pair(пара чисел) и класс-наследник Fraction - C++
Создать класс Pair (пара чисел); определить методы изменения полей и сравнения пар: пара p1 больше пары p2, если (first.p1&gt;first.p2) или...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 22:00
Привет! Вот еще темы с ответами:

Создать класс Point и производный класс ColoredPoint (цветная точка) - C++
Создайте класс Point (точка на плоскости), характеризующийся двумя координатами. Создайте производный класс ColoredPoint (цветная точка), в...

Создать Класс Coins (монеты). Класс сохраняет массив из 3 монет ... - C++
Помогите написать програмку, где: Нужно создать Класс Coins (монеты). Класс сохраняет массив из 3 монет и общее количество лицевых сторон...

Класс: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. - C++
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle...

Создать базовый класс Car (машина) и производный класс Lorry (грузовик): ООП ошибки - C++
Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цилиндров, мощностью. Определить методы переназначения...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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