- •Федеральное агенство по образованию
- •Оглавление
- •Массивы указателей на строки Задание 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 (массивы строк, структуры, классы)
Классы. Задание 4. Объектно-ориентированная реализация текстового редактора
Реализовать представление данных и функций для работы со строками в виде классов
Задание 4. 1 Разработка класса классаMyString.
Строки представлены в виде обьектов класса MyString
Файл MyString.h
#pragma once
#include "io.h"
class MyString
{char* s;
int len;
public:
MyString(void);
MyString (char* s);
MyString (const MyString& );
MyString* copy();
void assign (const MyString& t);
~MyString(void);
void dispose ();
int length(){return len;}
int length()const {return len;}
char* ToPchar();
int ToInt();
double ToDouble();
String* ToString();
int equal(const MyString& t);
int cmp(const MyString& t);
int input(File fp) ;
int input() ;
int output(File f);
int output();
intinput(TextBox*t);
};
Пример реализации
Файл MyString.cpp
#include "StdAfx.h"
#include "MyString.h"
#include "MyConvert.h"
MyString::MyString(void)
{s=0; len=0;}
MyString::~MyString(void)
{dispose() ;
}
void MyString::dispose()
{delete [] s;}
MyString::MyString (char* ss)
{if(ss==0){s=0; len=0;return ;}
s=new char[(len=strlen(s))+1];
strcpy(s,ss);
}
MyString::MyString(const MyString& t)
{s=new char[(len=t.len)+1];
strcpy(s,t.s);
}
void MyString::assign (const MyString& t)
{if(this==&t)return;
char*ss=new char[(len=t.len)+1];
strcpy(ss,t.s);
delete [] s;
s=ss;
}
MyString* MyString::copy()
{return new MyString(*this);}
char* MyString::ToPchar()
{if(s==0)return 0;
char* ss=new char[len+1];
strcpy(ss,s);
return ss;}
int MyString::ToInt()
{int i;
MyConvert::copyto(&i,s);
return i;}
double MyString::ToDouble()
{double d;
MyConvert::copyto( &d,s);
return d;}
String* MyString::ToString()
{return new String(s);}
int MyString::equal(const MyString& ss)
{return strcmp(s,ss.s)==0;}
int MyString::cmp(const MyString& ss)
{return strcmp(s,ss.s);}
int MyString::input(File f)
{ if(::input(f,&s))
return len=strlen(s);
return 0;}
int MyString::input()
{ if(::input(&s))
return len=strlen(s);
return 0;}
int MyString::input(TextBox * t)
{if(::input(t,&s))
return len=strlen(s);
return 0;}
int MyString::output(File f )
{return ::output(f,s);}
int MyString::output()
{return ::output(s);}
Задание 4. 2 Разработка класса таблица.
Для выделения динамической памяти под массив объектов класса MyStringиспользуется классvec. Количество строк указывается в виде параметра конструктора классvec.
class vec
{ T* start;
T* finish;
public:
vec(void){start=new T[100];finish=start+100;}
vec(int sz){start=new T[sz];finish=start+sz;}
~vec(void){delete [] start;}
T* begin(void){return start;}
T* end(void){return finish;}
int get_size(void){return finish-start;}
T& get_item(int i){return *(begin()+i);}
};
#pragma once
#include "item.h"
#include "io.h"
#include "compare.h"
#include "vec.h"
class Tabl{
vec v;
T* cur;
T buf;
public:
Tabl( int sz=100,T buffer=0);
~Tabl( );
void resize(int n);
void clear();
void dispose ();
T* begin();
T* end() ;
int length();
T get_item(int i);
T* insert(const T& item);
T* erase(T* pos);
int remove(const T& item);
int find(int first,int last,const T& item);
int replace(const T&Old,const T&New);
void output();
int input();
int input(File f);
void output(File f);
void foutput(char* FileName);
int finput(char* FileName);
void output(ListView*list);
};
Пример реализации
#include "Tabl.h"
T* Tabl::begin(){return v.begin();}
T* Tabl::end() {return cur;}
T Tabl::get_item(int i){return v.get_item(i);}
int Tabl::length(){return cur-begin();}
Tabl::Tabl( int sz,T buffer):v(sz)
{buf=buffer;
cur=begin();
}
void Tabl::clear( )
{T* i;
for( i=begin(); i!=cur;i++)
{(*i)->dispose();
delete (*i);}
cur=begin();
}
void Tabl::dispose ()
{clear();
delete buf;}
Tabl::~Tabl( ){dispose ();}
T* Tabl::insert(const T& item)
{if(length()>v.get_size())
v.resize(2*length());
*cur++=item->copy();
return cur;
}
void Tabl::output(ListView*list)
{list->Items->Clear();
for(T* i=begin();i!=end();i++)
(*i)->output(list);
}