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

структура и класс - C++

Восстановить пароль Регистрация
 
нона
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 14
29.03.2012, 23:50     структура и класс #1
помогите доработать
вот само задание
условия:
должно быть :метод инициализации Init,ввод с клавиатуры Read, вывод на экран Display,преобразование в строку toString
должны быть реализованы 3 способами:
-тип данных представляется структурой с необходимыми полями, а операции реализуются как внешние функции,которые получают объекты данного типа в качестве аргументов
-как класс с закрытыми полями, где опреции реализуются как методы класса
-инкапсулировать поля класса в независимой структуре и в ней реализовать методы Init (),Read (),Display (),toString ();
в основном классе должно быть одно поле данных, представленное объектом-стуктурой.
Задача :
Создать класс Date для работы с датой в формате "год.месяц.день". Дата представляется структурой с тремя полями типа unsigned int: для года, месяца и дня.
Класс должен включать не менее трех функций инициализации: числами, строкой вида "год.месяц.день"(например "2004.08.31) и датой.
Обязательными операциями являются: вычисление даты через заданное кол-во дней, вычитание заданного кол-ва дней из даты,
определение високосного года, присвоение и получение отдельных частей(год, месяц, день), сравнение дат(равно, до, после), вычисление кол-ва дней между датами. Вот что набросала:
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
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <time.h>
 
 
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;
    getch ();
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 23:50     структура и класс
Посмотрите здесь:

Структура и класс string. Проблема с выводом строки. C++
C++ Вложенная структура в класс
C++ оператора индексации+класс+структура
Класс, структура C++
Получается структура в С++ - это класс? C++
Структура или класс C++
C++ структура и класс
Структура «Школьник»: фамилия, имя, отчество; класс; номер телефона; оценки по предметам C++

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

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

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