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

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

Восстановить пароль Регистрация
 
MVM
Сообщений: n/a
09.04.2013, 22:00     Создать класс CDateAddDays #1
Пожалуйста, помогите доделать задачку!
Найти дату, которая наступит по прошествии указанного количества дней после заданной даты. Например, через три дня после 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++
создать класс C++
C++ создать класс)
C++ Создать класс Matrix и класс Size
C++ Класс: создать класс "Person"
Как создать класс кот может создать general purpose counting objects C++
C++ Создать класс данных Person и класс отображения данных
C++ Создать класс и класс-потомок с полями

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 19:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru