2. Проектирование структуры классов

При рассмотрении исходных данных создается структура иерархии классов «Экран курсового проектирования». Для максимального соответствия заданию, создается три класса:

-  TObject (абстрактный базовый класс);

-  TScreen (класс, содержащий информацию об экране курсового проектирования);

-  TStudent (класс, содержащий информацию о студенте и ходе его выполнения курсовой работы).

Иерархия классов показана на рисунке 1.

Абстрактный базовый класс TObject содержит поле TName(имя), которое наследуется в классы TStudent и TScreen. Это поле служит для задания имени курсовому проекту и имени студента. В конструкторе класса TObject этому полю присваивается значение «Default». Это поле наследуется с атрибутом Public. Также класс TObject содержит виртуальную функцию SetName(), которая переопределяется в классах TStudent и TScreen. Она служит для присвоения значения полю TName заданного имени. В качестве атрибута ей передается устанавливаемое имя.

Класс TScreenсодержит поля и методы, относящиеся к заголовку экрана курсового проекитрования. Информация о группе студентов, выполняющих курсовые работы хранится в поле TName, которое наследуется от базового класса TObject; информация о дате утверждения экрана курсового проектирования хранится в поле Date; информация о составе приемной комиссии – в поле Composition. В этом классе переопределяется функция присвоения имени полю TNameSetName(). Данный класс содержит две собственные функции:

-  SetDate(присваивает полю Date дату утверждения экрана курсового проектирования);

-  SetComposition(присваивает полю Composition информацию о составе приемной комиссии).

В качестве атрибутов этим функциям передается необходимая информация.

В классе TStudent содержится информация о студенте, выполняющем курсовую работу, точнее о ходе ее выполнения. Также как класс TScreen класс TStudent имеет наследуемое поле TName от класса TObject. Этому полю присваивается значение функцией SetName, которая переопределяется в этом же классе. Помимо этого наследуемого поля, класс содержит собственные поля:

-  ControlScore(контрольная оценка за курсовой проект);

-  NumberWeek(номер контрольной недели);

-  *Plan(указатель на массив с плановыми процентами выполнения курсовых работ);

-  *Fact(указатель на массив с фактическими процентами выполнения курсовых работ);

-  *Control(указатель на массив с оценками за контрольные недели);

-  Test(плановая дата сдачи завершенного курсового проекта на проверку);

-  TestF(фактическая дата сдачи завершенного курсового проекта на проверку);

-  Revision(плановая дата выдачи завершенного курсового проекта на доработку);

-  RevisionF(фактическая дата выдачи завершенного курсового проекта на доработку);

-  Protection(плановая дата защиты курсового проекта);

-  ProtectionF(фактическая дата защиты курсового проекта);

Каждому полю соответствует определенный метод, который устанавливает его значение. Ниже приведен список собственных методов, содержащихся в классе TStudent:

-  SetNumberWeek();

-  SetPlan();

-  SetFact();

-  SetControl();

-  SetTest();

-  SetTestF();

-  SetRevision();

-  SetRevisionF();

-  SetProtection();

-  SetProtectionF();

-  SetControlScore();

Реализация иерархии классов «Экран курсового проектирования» предложен в Приложении А.


Рисунок 1 - Иерархия классов «Экран курсового проектирования»

Алгоритм работы программы на основе иерархии классов следующий:

1)  Пользователь вводит название дисциплины, по которой проводятся курсовые работы и номер группы, состав приемной комиссии и дату утверждения экрана курсового проектирования;

2)  Создается экземпляр класса TScreen, в который с помощью методов заносится введенная пользователем информация;

3)  Производится копирование полей в визуальные компоненты для отображения введенной информации;

4)  Далее программа ожидает действия пользователя:

1)  При добавлении записи происходит создание экземпляра класса TStudent. Пользователь вводит информацию о студенте, с помощью методов экземпляра класса происходит присвоение значений полям класса. Затем происходит копирование полей в визуальный компонент для отображения введенной информации;

2)  При удалении выбирается нужная запись, программа запрашивает разрешение на удаление и в случае успешного подтверждения удаляет запись, информируя об этом пользователя;

3)  При редактировании записи выбирается нужная запись, программа запрашивает разрешение на редактирование и в случае успешного подтверждения открывается окно для редактирования. Пользователь редактирует запись и подтверждает свои действия, либо отменяет их;

4)  При поиске программа запрашивает у пользователя информацию на поиск и в случае успешного поиска информирует его об этом. В случае, если пользователь не удовлетворен результатом, можно продолжить поиск;

5)  Изменение листа подразумевает в себе редактирование полей экземпляра класса TScreen. Пользователь задает новые поля с помощью методов, происходит обновление экземпляра класса TScreen;

5)  В визуальных компонентах отображается введенная пользователем информация, которая впоследствии обрабатывается им;

6)  Выход из программы с вызовом деструкторов в экземплярах классов TScreen и TStudent, и удаление самих экземпляров.

3.  Программная реализация

Для реализации визуальных компонентов было создано 4 формы:

-  Главное окно, в котором отображается вводимая информация, а также осуществляется вызов окон для добавления, редактирования и поиска;

-  Стартовое окно, которое запрашивает у пользователя информацию о названии экрана курсового проектирования, дате утверждения экрана и состава приемной комиссии;

-  Окно добавления/редактирования позволяет добавлять/редактировать записи.

-  Окно поиска служит для приема искомой информации.

Большую часть главного окна занимает визуальный компонент dataGridView, который служит таблицей для отображения введенных записей. В данном случае он очень удобен, т.к. отвечает всем требованиям для хранения и отображения записей о студентах. Заполнение таблицы происходит с помощью кнопки «Добавить», которая расположена внизу окна. При нажатии на нее происходит вызов окна добавления, которое содержит текстовые поля(textbox) для ввода информации. Пользователь вводит необходимую информацию, затем необходимо нажать на кнопку «Проверка». Так как поля класса TStudent имеют различные типы данных, то необходимо провести соответствие введенных полей этим типам. В случае успешной проверки появляется кнопка добавить, с помощью которой введенные записи присваиваются полям класса. В случае ошибки ввода пользователь будет выведена ошибка о несоответствии типов, либо пользователь пропустил ввод некоторого поля.

Рассмотрим процедуру добавления записи в dataGridView:

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {

Form2 ^newdlg=gcnewForm2();//вызов форма добавления записи

if(dialres==System::Windows::Forms::DialogResult::OK){//проверкаусловиянанажатиеклавиши «ОК» вформедобавления

Student->SetName(newdlg->textBox1->Text);//присвоение значений полям класса значений из формы добавления

dataGridView1->Rows->Add(Student->TName,…);//добавлениеполейзаписивтаблицуdataGridView1

return;//возврат в главную программу

 }

 }

Полная реализация данной процедуры представлена в приложении В.

Процедура удаления доступна при выполнении двух условий:

-  В таблице есть хотя бы одна запись;

-  Если значение визуального компонента checkBox->Checked равно True (стоит галочка);

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

Процедураудаленияприведенаниже:

private: System::Voidbutton6_Click(System::Object^ sender, System::EventArgs^ e) {

dialres=MessageBox::Show("Выточнохотитеудалитьзапись?","Удалить?",MessageBoxButtons::OKCancel,MessageBoxIcon::Warning);//вывод предупреждения

if(dialres==System::Windows::Forms::DialogResult::OK){//проверкаусловиянаудаление

 if(this->dataGridView1->SelectedRows->Count > 0 &&

 this->dataGridView1->SelectedRows[0]->Index !=

this->dataGridView1->Rows->Count){// проверкананаличиестрокивыделенияудаляемойстроки

this->dataGridView1->Rows->RemoveAt(this->dataGridView1->SelectedRows[0]->Index);//удалениевыделеннойстроки

CountDataGrid--;//уменьшение количества записей в таблице

}

 }

 }

Полная реализация данной процедуры представлена в приложении В.

Функция редактирования использует то же окно, что и функция добавления, с той лишь разницей, что ее поля заполняются информацией редактируемой записи. Для выполнения редактирования необходимо наличие тех же двух условий, что и для удаления. После редактирования записи в выделенную строку в dataGridView возвращаются обновленные поля.

Рассмотримфункциюредактирования:

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

 dl=MessageBox::Show("Редактироватьзапись?","Изменить?",MessageBoxButtons::OKCancel,MessageBoxIcon::Question);//выводпредупрежденияобизменениизаписи

 if(dl==System::Windows::Forms::DialogResult::OK){//проверкаподтверждения

 if(this->dataGridView1->SelectedRows->Count > 0 &&

 this->dataGridView1->SelectedRows[0]->Index !=

this->dataGridView1->Rows->Count){// проверкананаличиестрокивыделенияудаляемойстроки

Form2 ^newdlg=gcnewForm2();//инициализация формы редактирования

newdlg->textBox1->Text=System::Convert::ToString(this->dataGridView1->SelectedRows[0]->Cells[0]->Value);//передачавформуредактированияполейтаблицы

dialres=newdlg->ShowDialog();//вызовформыредактирования и редактирование полей записи

if(dialres==System::Windows::Forms::DialogResult::OK){//подтверждениедобавления измененныхполей

this->dataGridView1->SelectedRows[0]->Cells[0]->Value=newdlg->textBox1->Text;//возврат отредактированных полей обратно в таблицу

 }

 }

 }

Полная реализация данной процедуры представлена в приложении В.

В приложении также реализован поиск. Для его выполнения достаточно одного условия – в таблице должна быть хотя бы одна запись. Поиск производится по всем полям таблицы, независимо от типов данных, которые там хранятся. При нажатии на кнопку поиска появляется окно, в котором есть единственный компонент textBox. В него вводится искомая информация. Введенная информация сравнивается с той, что хранится в полях таблицы. Если она соответствует запросу, то происходит выделение поля таблицы. Если запрос не соответствует результату, то можно продолжить поиск, нажав на «ОК» в информационном сообщении.

Запросискомойинформации:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

 if(textBox1->Text!=""){//проверка наличия информации для поиска

this->DialogResult=System::Windows::Forms::DialogResult::OK;//подтверждениепоска

this->Close();//закрытие окна поиска и переход в главную программу

}

 }

Полная реализация данной процедуры представлена в приложении В.

Поискинформациивтаблице:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

 dialres=newdlg->ShowDialog();//вызовформыпоиска

System::String ^srh;//объявление строки поиска

srh=newdlg->textBox1->Text;//присвоение значения строке поиска

 for(int i=0; i<CountDataGrid; i++){//циклповсемстрокамтаблицы

 for(int j=0; j<dataGridView1->ColumnCount; j++){//циклповсемстолбцамтаблицы

 if(System::Convert::ToString(dataGridView1->Rows[i]->Cells[j]->Value)==srh){//проверканасоответствиезапросаполямтаблицы

 dataGridView1->CurrentCell=dataGridView1->Rows[i]->Cells[j];//выделениенайденногополя

 }

 }

}

 }

 }

Полная реализация данной процедуры представлена в приложении В.

Функция изменения названия экрана курсового проектирования:

private: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e) {

Start ^newdlg=gcnewStart();//инициализацияформыстартового окна

dialres=newdlg->ShowDialog();//вызов стартового окна

Screen.SetName(newdlg->textBox1->Text);//присвоениеполямклассаTScreenзначенийполейформы

listBox2->Items->Add(Screen.Composition);//передачаполейклассаTScreenвlistBox1 главнойформы

}

 }

Полная реализация данной процедуры представлена в приложении В.



Информация о работе «Структура иерархии классов "Экран курсового проектирования"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 101539
Количество таблиц: 0
Количество изображений: 3

Похожие работы

Скачать
100919
2
11

... при определенных условиях значительно повысить эффективность обучения.   Глава II. Техническая составляющая проектирования и разработки ЭУК   2.1 Анализ предметной области дисциплины   Данный обучающий модуль электронный учебный курс по дисциплине «Начертательная геометрия, инженерная графика» разработан для студентов Института профессионального образования и информационных технологий ...

Скачать
34207
0
5

... выводит значения элементов массива переменных класса wind на экран, вычисляет значения составляющих скорости для каждого элемента, следовательно, она работает правильно. Заключение Проектирование и разработка классов является основой построения сложных программных комплексов. Навыки, приобретенные мною в ходе выполнения курсовой работы помогут в дальнейшем при выполнении курсовых и ...

Скачать
25631
0
1

... пользовательский интерфейс; 2.  Обеспечение гибкости программы для добавления новых функций; 3.  Надежность программы; Проектирование структуры программы и базовых алгоритмов Анализируя исходные данные к программе, ставится задача создать иерархию классов «Адресное бюро». Базовым классом в иерархии является абстрактный класс Address, который имеет поля: город(), улица(), дом(), корпус(). ...

Скачать
119257
6
22

... центра для котельных установок. Создание такого центра обусловлено техническим заданием руководства УЖКХ, для того чтобы иметь постоянный контроль за процессом работы котельных установок в режиме реального времени. Диспетчерский центр должен находиться в здании УЖКХ п. Варламово. 3.1 Аппаратная часть В состав аппаратной части входи входят: а. Компьютер б. сетевая карта в. модем ...

0 комментариев


Наверх