Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
2 / 2 / 0
Регистрация: 09.09.2013
Сообщений: 51
1

Разработка системы классов "дата"

29.05.2014, 14:26. Показов 632. Ответов 0
Метки нет (Все метки)

Мне нужно сделать курсовую на тему представленную в заголовке. Нужно прибавлять, отнимать от даты, и переходить на заданную дату. на сайте я нашла не плохую программу, можете мне помочь сделать ее в C++Builder.
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
#include <iostream>
class Date{
private:
    bool leapyear;
    int day;
    int month;
    int year;
    bool leap(int)const;
    int maxday()const;
public:
    Date(int d,int m,int y):leapyear(leap(y)),day(d),month(m),year(y){};
    Date& operator+=(int);
    Date& operator-=(int);
    std::string operator-(Date&)const;
    bool operator==(Date&)const;
    friend std::ostream& operator<<(std::ostream&, const Date&);
};
bool Date::leap(int y)const{ 
    return ((y % 4 == 0 && y% 100 != 0) || y % 400);
}
int Date::maxday()const{
    int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(leapyear)days[1]=29;
    return days[month-1];
}
Date& Date::operator+=(int d){
    if(day+d>maxday()){
        d-=maxday()-day;
        if(++month>12){
            month=1;
            year++;
        }
        while(d/maxday()){
            if(++month>12){
                month=1;
                year++;
            }
            d-=maxday();
        }
        day=d;
    }
    else day+=d;
    return *this;
}
Date& Date::operator-=(int d){
    if(day-d<1){
        d-=day;
        if(--month==0){
            month=12;
            year--;
        }
        while(d/maxday()){
            d-=maxday();
            if(--month==0){
                month=12;
                year--;
            }
        }
        day=maxday()-d;
    }
    else day-=d;
    return *this;
}
#include <sstream> //stringstream       
std::string Date::operator-(Date &dt)const{
    int d,m,y;
    if(year>=dt.year){
        y=year-dt.year;
        if(month>dt.month){
            m=month-dt.month;
            d=day+dt.maxday()-dt.day;
            if(d>dt.maxday())d-=dt.maxday();
            else --m;
            --y;
        }
        else {
            m=12-month+dt.month;
            d=dt.day+maxday()-day;
            if(d>maxday())d-=maxday();
            else --m;
        }
    }
    else {
        y=dt.year-year;
        if(month>dt.month){
            m=12-month+dt.month;
            d=day+dt.maxday()-dt.day;
            if(d>dt.maxday())d-=dt.maxday();
            else --m;
            --y;
        }
        else {
            m=dt.month-month;
            d=maxday()-day+dt.day;
            if(d>maxday())d-=maxday();
            else --m;
        }
    }
    std::string s;
    std::stringstream ss;
    ss<<d<<" days "<<m<<" month "<<y<<" years";
    getline(ss,s);
    return s;
}
bool Date::operator==(Date& dt)const{
    return day==dt.day && month==dt.month && year==dt.year;
}
std::ostream& operator<<(std::ostream &os, const Date &dt){
    std::string m[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    os<<dt.day<<" "<<m[dt.month-1]<<" "<<dt.year;
    return os;
}   
    
int main(){
    int d,m,y,reduce,increase;
    std::cout<<"Enter first date (day month year): ";
    std::cin>>d>>m>>y;
    Date date(d,m,y);
    std::cout<<"Date = "<<date<<std::endl;
    std::cout<<"reduce  date by : ";//óìåíüøèòü äàòó íà ñòîëüêî òî äíåé
    std::cin>>reduce;
    date-=reduce;
    std::cout<<"Date = "<<date<<std::endl;
    std::cout<<"Increase date by : ";//óâåëè÷èòü äàòó 
    std::cin>>increase;
    date+=increase;
    std::cout<<"Date = "<<date<<std::endl;
    std::cout<<"Enter second date (day month year): ";
    std::cin>>d>>m>>y;
    Date date2(d,m,y);
    std::cout<<"Date2 = "<<date2<<std::endl;
    std::cout<<"Dates are "<<(date==date2 ? "equal":"not equal")<<std::endl;
    std::cout<<"Date1 - Date2 = "<<date-date2<<std::endl;
    return 0;
}
Вот то, на что меня хватило(
0
Вложения
Тип файла: rar Курсова.rar (9.35 Мб, 7 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2014, 14:26
Ответы с готовыми решениями:

Разработка системы классов
Нужно создать систему разработки &quot;Мобильный телефон&quot;

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application-&gt;MessageBox(L&quot;Text&quot;, L&quot;Caption&quot;,...

Создать систему классов "Фигуры второго порядка"
Нужна ваша помощь! Нужно создать систему классов фигур 2-го порядка(пирамида, куб, шар) на площе,...

Разработка приложения "Минисклад для бизнес центра"
Дали задание,как решать-ума не приложу...Даже не знаю с чего начать.. Задание:Разработка...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2014, 14:26

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Разработка ScreenSaver "Летающий текст" с OpenGL
Здравствуйте.Помогите пожалуйста написать программу- заставку на языке программирования С ++ в...

Открыть папку "мой компьютер", "панель управления", "program files"
Нужно открыть папку &quot;мой компьютер&quot;, &quot;панель управления&quot;, &quot;program files&quot;

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие &quot;Солитер&quot;, &quot;Быки и коровы&quot;, &quot;Змейка&quot; и т. д. Или ссылки на...

Разработка "игры" для зачета
Идея такова: есть автобус, он ездит и собирает людей по остановкам, по дороге самособой. Кругом...

Найти частоту встречаемости следующих друг за другом символов "А", "В"и "С".
В заданном тексте найти частоту встречаемости следующих друг за другом символов &quot;А&quot;, &quot;В&quot;и &quot;С&quot;. ...

Ошибки: "Failed to allocate SAVEmem" и ""bcc32" exited with code 1."
Помогите пожалуйста с этими ошибками. Такое не только у меня, полазил по разным форумам,...


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

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

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