- •Федеральное агенство по образованию
- •Оглавление
- •Массивы указателей на строки Задание 1. Текстовый редактор Задание 1.1 Динамическая память. Модульное программирование
- •Задание 1.2 Реализация таблицы на основе динамического массива
- •Задание 1.3 Специальные функции работы со строками
- •Задание 1.3 Разработка приложенияWindowsForms
- •Структуры Задание 2 Реализация текстового редактора с использованием структур данных Задание 2.1 Представления набора строк в виде структур данных
- •Задание 2.2 Реализация операций выборки, преобразования и сортировки наборов строк с использованием словаря данных
- •Задание 3. Информационная система
- •Задание 3.1 Модульное программирование
- •Задание 3.2 Работа с и динамической памятью
- •Задание 3.3 Ввод и вывод
- •Пример реализации для консольного приложения
- •Пример реализации для приложения с оконным графическим интерфейсом
- •Задание 3.4 Сравнение структур
- •Задание 3.5 Консольное приложение
- •Задание 3.5 Приложение WindowsForms
- •3.6 Пример пошаговой разработки приложение WindowsForms
- •Классы. Задание 4. Объектно-ориентированная реализация текстового редактора
- •Задание 4. 1 Разработка класса классаMyString.
- •Задание 4. 2 Разработка класса таблица.
- •Задание 5. Объектно-ориентированная реализация информационной системы Задание 5.1 Представление структуры данных записи (Record), в виде класса с конструкторами и деструкторами
- •Задание 5. 2 Разработка класса таблица для хранения объектов классаRecord.
- •Задание 5.3 Представление базовых понятий предметной области в виде классов. Разработка интерфейса и реализации. Определение конструкторов классов.
- •1. Разработать класс MyDate (дата-время)
- •3. Дополнить класс MyString (строка)
- •4. Разработать класс Title (название)
- •5 . Разработать класс Name (имя)
- •6. Разработать класс Address (Адрес)
- •7. Разработать класс Telephone ( номер телефона)
- •8. Разработать класс e_Mail (Адрес электронной почты)
- •Задание 5.2 Использование объектов классов в качестве элементов классов
- •Задание 5.3 Использование указателей на объекты классов и объекты классов в качестве элементов классов
- •Задание 5.4 Система управления данными.
- •Задание 5.5 Иерархия классов
- •Задание 5.6 Шаблоны классов
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •В среде разработки Visual Studio .Net (массивы строк, структуры, классы)
Задание 5.3 Представление базовых понятий предметной области в виде классов. Разработка интерфейса и реализации. Определение конструкторов классов.
Разработать все перечисленные ниже классы
Номер варианта задания на разработку определенного класса вычисляется , как остаток от деления номера варианта второго задания на количество вариантов заданий на разработку определенного класса.
Варианты задания отличаются только реализацией, т.е. интерфейс класса один и тот же, а способы представления хранимых данных различны. Класс должен содержать несколько конструкторов для инициализации объектов класса данными , представленными в различных форматах . При инициализации и при вводе данных необходима проверка их корректности.
Для тестирования построенных классов разработать приложение WindowsForms. Каждому классу соответствует вкладка многостраничного блокнота
Интерфейс программы имеет следующий вид:
1. Разработать класс MyDate (дата-время)
Данные хранятся в виде:
День месяца, месяц ,год
День года, год
День от рождества Христова
День месяца, название месяца ,год
Секунды, минуты, часы , день месяца, месяц ,год
Секунды в текущем часе, час, день месяца, месяц ,год
Секунды в текущем дне, день месяца, месяц ,год
Секунды в текущем месяце, месяц ,год
Секунды в текущем годе, ,год
Секунды от рождества Христова
Дополнительно в классе должны быть реализованы следующие функциию
#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 (стоимость)
Класс должен содержать функции ввода и вывода данных , в которых присутствует символ денежной единицы, а так же функции сравнения. Для иностранной валюты ввести коэффициенты перевода в рубли.
Данные хранятся в виде:
Рублей и копеек
Копеек
Долларов и центов
Центов
Евро
Фунтов
В одной из трех денежных единиц : рубли, доллары, евро (Для перевода использовать вспомогательную таблицу).