Автор работы: Пользователь скрыл имя, 10 Июня 2014 в 18:53, контрольная работа
1)Инкапсуляция
Построить класс для работы с датами. Предусмотреть ввод даты, метод ввода, Придумать представление. Метод подсчета разности 2-х дат (в днях).
Мин дат 1 января 1 года
Макс 31 декабря 9999
По григорианскому считать. Високосные года считать по григорианскому календарю.
2) Инкапсуляция
На базе класса даты создать произвольный класс
Дата + число = какой то день
Дата - число = также как вверху
3)Полиморфизм
Есть класс событий, включающий название событие и либо дату, либо время.
Ввод в массив
Название события, тип события(дата-время), от того что введем программа разветвляется.
Инкапсуляция
4
2
Инкапсуляция
5
3
Полиморфизм
Министерство образования и науки Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет информационных технологий.
Кафедра программного обеспечения.
Контрольная работа
по дисциплине Объектно-ориентированное программирование
ОГУ 230000.65.4109.09 ПЗ
Проверил:
Выполнил:
Оренбург 2014.
Задание на контрольную работу
1)Инкапсуляция
Построить класс для работы с датами. Предусмотреть ввод даты, метод ввода, Придумать представление. Метод подсчета разности 2-х дат (в днях).
Мин дат 1 января 1 года
Макс 31 декабря 9999
По григорианскому считать. Високосные года считать по григорианскому календарю.
2) Инкапсуляция
На базе класса даты создать произвольный класс
Дата + число = какой то день
Дата - число = также как вверху
3)Полиморфизм
Есть класс событий, включающий название событие и либо дату, либо время.
Ввод в массив
Название события, тип события(дата-время), от того что введем программа разветвляется.
Содержание
1 |
Инкапсуляция |
4 |
2 |
Инкапсуляция |
5 |
3 |
Полиморфизм |
7 |
Инкапсуляция
#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;
int InputDat();
class Date
{
public:
int day;
int month;
int year;
Date()
{
day = 0;
month = 0;
year = 0;
}
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system ("color a");
cout << "Эта программа вычисляет усложненные даты с классами" << endl;
}
int InputDat(Date a)
{
cout << "Введите дату в формате дд мм гг" << endl;
cin >> a.day >> a.month >> a.year;
}
Инкапсуляция
#include <iostream>
#include <math.h>
#include <windows.h>
using namespace std;
class data{
protected:
int day;
int month;
int year;
public:
void inputDat()
{
cout << "Введите дату в формате дд мм гг" << endl;
cin >> day >> month >> year;
cout << endl;
}
static int differenceDat(data a,data b)
{
int i,j;
int amountDay = 0;
if ((b.year-a.year-1)>=1)
{
for (i=1;a.year+i<b.year;i++)
if (((fmod(a.year+i,4)==0) && (fmod(a.year+i,100)!=0)) || (fmod(a.year+i,400)==0)) amountDay=amountDay+366; else amountDay=amountDay+365;
}
if (a.year!=b.year)
{
if (a.month<12)
{
for (i=a.month+1;i<=12;i++)
{
if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;
if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;
if (i==2)
if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;
}
}
if (b.month>1)
{
for (i=1;i<=b.month-1;i++)
{
if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;
if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;
if (i==2)
if (((fmod(b.year,4)==0) && (fmod(b.year,100)!=0)) || (fmod(b.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;
}
}
} else
{
for (i=a.month+1;i<=b.month-1;i++)
{
if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;
if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;
if (i==2)
if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;
}
}
if ((a.month==b.month) && (a.year==b.year))
{
for (i=a.day;i<b.day;i++)
amountDay=amountDay+1;
}
else
{
if ((a.month==1) || (a.month==3) || (a.month==5) || (a.month==7) || (a.month==8) || (a.month==10) || (a.month==12))
for (i=a.day;i<31;i++)
amountDay=amountDay+1;
if ((a.month==4) || (a.month==6) || (a.month==9) || (a.month==11))
for (i=a.day;i<30;i++)
amountDay=amountDay+1;
if (a.month==2)
{
if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0))
{
for (i=a.day;i<29;i++) amountDay=amountDay+1;
}
else
{
for (i=a.day;i<28;i++) amountDay=amountDay+1;
}
}
for (i=1;i<b.day;i++) amountDay=amountDay+1;
amountDay=amountDay+1;
}
if (b.year<a.year){
cout<<"Вторая
дата меньше предыдущей!"<<
amountDay=-amountDay;
}
return amountDay;
}
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
data a;
a.inputDat();
data b;
b.inputDat();
int difference = data::differenceDat(a,b);
cout << difference << endl;
system("pause");
}
Полиморфизм
#include <iostream>
#include <math.h>
#include <windows.h>
using namespace std;
class data
{
public:
int day;
int month;
int year;
bool YearIsLeap()
{
if(year%4 == 0)
{
if(year%100 == 0)
{
if(year%400 == 0)
{
return true;
}
return false;
}
return true;
}
return false;
}
void inputDat()
{
cout << "Введите дату в формате дд мм гг" << endl;
cin >> day >> month >> year;
cout << endl;
}
void input(int d, int m, int y)
{
day = d;
month = m;
year =y;
}
void output()
{
cout << endl << day << " " << month << " " << year << endl;
}
static int differenceDat(data a,data b)
{
int i,j;
int amountDay = 0;
if ((b.year-a.year-1)>=1)
{
for (i=1;a.year+i<b.year;i++)
if (((fmod(a.year+i,4)==0) && (fmod(a.year+i,100)!=0)) || (fmod(a.year+i,400)==0)) amountDay=amountDay+366; else amountDay=amountDay+365;
}
if (a.year!=b.year)
{
if (a.month<12)
{
for (i=a.month+1;i<=12;i++)
{
if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;
if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;
if (i==2)
if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;
}
}
if (b.month>1)
{
for (i=1;i<=b.month-1;i++)
{
if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;
if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;
if (i==2)
if (((fmod(b.year,4)==0) && (fmod(b.year,100)!=0)) || (fmod(b.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;
}
}
} else
{
for (i=a.month+1;i<=b.month-1;i++)
{
if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;
if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;
if (i==2)
if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;
}
}
if ((a.month==b.month) && (a.year==b.year))
{
for (i=a.day;i<b.day;i++)
amountDay=amountDay+1;
}
else
{
if ((a.month==1) || (a.month==3) || (a.month==5) || (a.month==7) || (a.month==8) || (a.month==10) || (a.month==12))
for (i=a.day;i<31;i++)
amountDay=amountDay+1;
if ((a.month==4) || (a.month==6) || (a.month==9) || (a.month==11))
for (i=a.day;i<30;i++)
amountDay=amountDay+1;
if (a.month==2)
{
if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0))
{
for (i=a.day;i<29;i++) amountDay=amountDay+1;
}
else
{
for (i=a.day;i<28;i++) amountDay=amountDay+1;
}
}
for (i=1;i<b.day;i++) amountDay=amountDay+1;
amountDay=amountDay+1;
}
if (b.year<a.year){
cout<<"Вторая
дата меньше предыдущей!"<<
amountDay=-amountDay;
}
return amountDay;
}
};
class dat: public data
{
public:
void Summa(int amount)
{
int i;
i = DateToDays();
cout << i << endl;
i+=amount;
cout << i << endl;
DaysToDate(i);
}
int DateToDays()
{
dat temp;
temp.input(1,1,1);
int i = dat::differenceDat(temp,*this)
return i;
}
void DaysToDate(int amount)
{
dat temp;
temp.input(1,1,1);
while (amount > 0)
{
while(temp.day < temp.CountDayInMonth() && amount > 0)
{
temp.day++;
amount--;
}
if (amount > 0)
{
if( temp.month < 12 )
{
temp.day = 1;
temp.month++;
amount--;
}
else
{
temp.day = 1;
temp.month = 1;
temp.year++;
amount--;
}
}
}
day = temp.day;
month = temp.month;
year = temp.year;
}
int CountDayInMonth()
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31;
case 4:
case 6:
case 9:
case 11: return 30;
case 2:
{
if (YearIsLeap())
{
return 29;
}
else{return 28;}
}
}
}
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
dat a;
a.inputDat();
int amount;
cout << "Введите количество дней" << endl;
cin >> amount;
a.Summa(amount);
a.output();
system("pause");
}
Информация о работе Контрольная работа по «Программированию и компьютерам»