Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание С++ 07_10_08_.doc
Скачиваний:
25
Добавлен:
11.03.2016
Размер:
1.15 Mб
Скачать

Задание 5.3 Представление базовых понятий предметной области в виде классов. Разработка интерфейса и реализации. Определение конструкторов классов.

Разработать все перечисленные ниже классы

Номер варианта задания на разработку определенного класса вычисляется , как остаток от деления номера варианта второго задания на количество вариантов заданий на разработку определенного класса.

Варианты задания отличаются только реализацией, т.е. интерфейс класса один и тот же, а способы представления хранимых данных различны. Класс должен содержать несколько конструкторов для инициализации объектов класса данными , представленными в различных форматах . При инициализации и при вводе данных необходима проверка их корректности.

Для тестирования построенных классов разработать приложение WindowsForms. Каждому классу соответствует вкладка многостраничного блокнота

Интерфейс программы имеет следующий вид:

1. Разработать класс MyDate (дата-время)

Данные хранятся в виде:

  1. День месяца, месяц ,год

  2. День года, год

  3. День от рождества Христова

  4. День месяца, название месяца ,год

  5. Секунды, минуты, часы , день месяца, месяц ,год

  6. Секунды в текущем часе, час, день месяца, месяц ,год

  7. Секунды в текущем дне, день месяца, месяц ,год

  8. Секунды в текущем месяце, месяц ,год

  9. Секунды в текущем годе, ,год

  10. Секунды от рождества Христова

Дополнительно в классе должны быть реализованы следующие функциию

#pragma once

#include "io.h"

class MyDate

{ int day,month,year;

static int daytab[2][13];

static char* MonthName[13];

static char* DayNames[8];

public:

int get_day() {return day;}

int get_month() {return month;}

int get_year() {return year;}

int get_day()const {return day;}

int get_month()const {return month;}

int get_year()const {return year;}

int validate();

void set_day (int d){int tmp= day; day=d; if(!validate()) day=tmp;}

void set_month (int m){int tmp=month; month=m; if(!validate()) month=tmp;}

void set_year (int y){int tmp=year; year=q; if(!validate()) year=tmp;}

char* get_ DayOfWeek();

MyDate get_Now();

MyDate Parser(char*);

voidAddDays(long); //аргумент может быть отрицательным числом

voidAddMonths(int); //аргумент может быть отрицательным числом

voidAddYears(int); //аргумент может быть отрицательным числом

static int dayofyear(int y,int m,int d);

static void day_month(int d,int y,int *m,int* dd);

static int vis(int y)

{ return ((!(y%4))&&(y%100)||(!(y%400))); }

char* ToPchar();

String* ToString();

unsigned long ToLong();

public:

MyDate(void);

~MyDate(void);

MyDate(int d,int m,int y);

MyDate (char* s);

MyDate (const MyDate& );

void assign (const MyDate& t);

void dispose ();

MyDate* copy();

int equal(const MyDate& t);

int cmp(const MyDate& t);

int input(File fp) ;

int input() ;

int output(File f);

int output();

int input(TextBox * t1, TextBox * t2, TextBox * t3) ;

};

#include "stdafx.h"

#include " MyDate.h"

using namespace System;

using namespace System::Windows::Forms;

int MyDate::daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};

char* MyDate::MonthName[13]={"Wrong month","January","February","March","April","May","June","July","August","September","October","November","December"};

char* MyDate::DayNames[8]={"Wrong day","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

void MyDate::AddDays(long d)

{

if(d>0)

{

while(d--)

{

day++;

if(day>daytab[vis(year)][month])

{

day=1;

month++;

if(month==13)

{

month=1;

year++;

}

}

}

}

else

{

while(d++)

{

day--;

if(!day)

{

month--;

if(!month)

{

month=12;

year--;

if(!year)

{

year=1;

month=1;

day=1;

return;

}

}

day=daytab[vis(year)][month];

}

}

}

}

void MyDate::AddMonth(long m)

{

if(m>0)

while(m--)

{

month++;

if(month==13)

{

month=1;

year++;

}

}

else

while(m++)

{

month--;

if(!month)

{

month=12;

year--;

if(!year) {year=1;month=1;return;}

}

}

int k;

if (day>(k=daytab[vis(year)][month])) day=k;

}

void MyDate::AddYear(long y)

{

year+=y;

if (year<=0)

{

year=1;

month=1;

day=1;

}

int k;

if (day>(k=daytab[vis(year)][month])) day=k;

}

long ToLong();

{

unsigned long d,m,y;

d=day;y=1;m=1;

while(y<year)

{

d+=365+vis(y);

y++;

}

while(m<month)

{

d+=daytab[vis(year)][m];

m++;

}

return d;

}

char* MyDate::get_DayOfWeek()

{

long dd=(get_AllDays())%7+1;

char*s=new char[strlen(DayNames[dd])+1];

strcpy(s,DayNames[dd]);

return s;

}

int MyDate::dayofyear(int y,int m,int d)

{

int dd=d;

while(--m)

{

dd+=daytab[vis(y)][m];

}

return dd;

}

void MyDate::day_month(int d,int y,int *m,int* dd)

{

*m=1;

while(d>daytab[vis(y)][*m])

{

d-=daytab[vis(y)][(*m)++];

}

*dd=d;

return;

}

MyDate::MyDate(void)

{day=month=year=0;

}

MyDate::~MyDate(void)

{ }

MyDate::MyDate(int d,int m,int y)

{

day=d;

month=m;

year=y;

if(!validate()) ExeptionInvalidValue("MyDate");

}

int MyDate::validate()

{

return (year>0&&month>0&&month<=12&&day>0&&day<=daytab[vis(year)][month]);

}

MyDate::MyDate (char* s){}

MyDate::MyDate (const MyDate& d)

{day=d.day;

month=d.month;

year=d.year;}

void MyDate::assign (const MyDate& d)

{day=d.day;

month=d.month;

year=d.year;}

void MyDate::dispose (){}

MyDate* MyDate::copy()

{return new MyDate();}

char* MyDate::ToPchar()

{char s[256],buf[256],*s1;

s[0]='\0';

itoa(day,buf,10); strcat(s,buf); strcat(s,".");

itoa(month,buf,10); strcat(s,buf); strcat(s,".");

itoa(year,buf,10); strcat(s,buf);

s1=new char[strlen(s)+1];

strcpy(s1,s);

return s1;}

String* MyDate::ToString()

{return new String(ToPchar());}

int MyDate::equal(const MyDate& d)

{return day==d.day && month==d.month && year==d.year;}

int MyDate::cmp(const MyDate& d)

{if(year!=d.year)return year-d.year;

else if(month!=d.month)return month-d.month;

else return day-d.day;

}

int MyDate::input(File fp)

{int state=1;

state&=::input(fp,&day); if(eof( fp)) return 0;

state&=::input(fp,&month); if(eof( fp)) return 0;

state&=::input(fp,&year); if(eof( fp)) return 0;

return state;}

int MyDate::input()

{int state=1;

::output( "day");

state&=::input(&day); if(eof( )) return 0;

::output("month");

state&=::input(&month); if(eof( )) return 0;

::output("year");

state&=::input(&year); if(eof( )) return 0;

return state;}

int MyDate::output(File f)

{return fprintf(f,"%d\t%d\t%d\n",

day,month,year);

}

int MyDate::output()

{return output(stdin);}

int MyDate::input(TextBox * t1, TextBox * t2, TextBox * t3)

{int state=1;

state&=::input(t1,&day) ;

state&=::input(t2,&month) ;

state&=::input(t3,&year ) ;

return state;}

2. Разработать класс Price (стоимость)

Класс должен содержать функции ввода и вывода данных , в которых присутствует символ денежной единицы, а так же функции сравнения. Для иностранной валюты ввести коэффициенты перевода в рубли.

Данные хранятся в виде:

  1. Рублей и копеек

  2. Копеек

  3. Долларов и центов

  4. Центов

  5. Евро

  6. Фунтов

  7. В одной из трех денежных единиц : рубли, доллары, евро (Для перевода использовать вспомогательную таблицу).