Министерство образования и науки Луганской народной республики
ГОУ ВПО «Луганский государственный университет имени Владимира Даля»
Стахановский инженерно-педагогический институт менеджмента
Кафедра информационных систем
Альбом лабораторных работ
по дисциплине «Объектно-ориентированное программирование и теории разработки программного обеспечения»
Луганск, Стаханов 2020
Лабораторная работа №1
Тема: Средства создания диаграмм классов в ООП
Ход работы
Задание 1. Создание Диаграммы классов в Microsoft Visio.
Аналогично создайте второй класс, например «Телефоны». Чтобы соединить их, перетащите фигуру «Композиция» или «Двуместная ассоциация» на изображение класса «Компьютеры». Затем второй конец связи перетащите на изображение класса «Телефоны».
Задание 2. Создать диаграмму классов Записная книжка.
Рисунок 1.1. – Результат выполнения задания 1
Рисунок 1.2. – Результат выполнения задания 2
Вывод: в ходе выполнения лабораторной работы изучено создание Диаграммы классов в Microsoft Visio.
Лабораторная работа № 2
Тема: Объектно-ориентированное программирование.
Определение класса.
Цель: Классы, объекты, методы, свойства.
Задание 1
Создать класс по образцу.
Рзультат
Рисунок 2.1. – Результат работы программы
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TBook = class
PagesCount: integer;
Title, Author: string;
function CompareWithBook(OtherBook: TBook): integer;
procedure ShowTitle;
constructor Create(NewTitle, NewAuthor: string; NewPagesCount: integer);
destructor Destroy;
end;
var
MyBook1, MyBook2: TBook; a: integer;
Form1: TForm1;
implementation
{$R *.dfm}
{ TBook }
function TBook.CompareWithBook(OtherBook: TBook): integer;
begin
Result := Abs(OtherBook.PagesCount-PagesCount);
end;
constructor TBook.Create(NewTitle, NewAuthor: string; NewPagesCount: integer);
begin
Title := NewTitle;
Author := NewAuthor;
PagesCount := NewPagesCount;
end;
destructor TBook.Destroy;
begin
ShowMessage('Уничтожается книга «' + Title + '»');
end;
procedure TBook.ShowTitle;
begin
ShowMessage(Author + ' «' + Title + '»');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyBook1 := TBook.Create('ООП на Delphi', 'Я автор книги', 1000);
MyBook2 := TBook.Create('ООП на Delphi 2', 'Мой сосед', 1300);
a := MyBook1.CompareWithBook(MyBook2);
ShowMessage(IntToStr(a));
MyBook1.ShowTitle;
MyBook2.ShowTitle;
MyBook1.Destroy;
MyBook2. Destroy;
end;
end.
Рисунок 2.2. – Диаграмма классов
Задание 2
Согласно своему варианту, создайте класс и заполните его свойства.
Вывести по своему усмотрению результат вычисления с выбором подходящего объекта.
Результат
Рисунок 2.3. – Результат работы программы
Листинг программы
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DateUtils, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TNotebook = class
DateOfBirth: TDate;
Surname, PhonNumber, PlaceOfResidence: string;
function CompareWithNotebook(OtherNotebook: TNotebook): TDate;
procedure ShowDateOfBirth;
constructor Create(NewPhonNumber, NewSurname, NewPlaceOfResidence: string;
NewDateOfBirth: TDate);
destructor Destroy;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TNotebook }
function TNotebook.CompareWithNotebook(OtherNotebook: TNotebook): TDate;
begin
Result := Abs(OtherNotebook.DateOfBirth-DateOfBirth);
end;
constructor TNotebook.Create(NewPhonNumber, NewSurname,
NewPlaceOfResidence: string; NewDateOfBirth: TDate);
begin
PhonNumber:= NewPhonNumber;
Surname:= NewSurname;
PlaceOfResidence:= NewPlaceOfResidence;
DateOfBirth:= NewDateOfBirth;
end;
destructor TNotebook.Destroy;
begin
ShowMessage('Уничтожается запись «' + Surname + '»');
end;
procedure TNotebook.ShowDateOfBirth;
begin
ShowMessage(Surname + '' + ' ');
end;
procedure TForm2.Button1Click(Sender: TObject);
var MyNotebook1, MyNotebook2: TNotebook;
a: real;
begin
MyNotebook1 := TNotebook.Create('0', ' Иванов', 'Стаханов', strtodate('22.02.1988'));
MyNotebook2 := TNotebook.Create('0' , 'Сидоров', 'Кировск' , strtodate('22.02.1978'));
a := MyNotebook1.CompareWithNotebook(MyNotebook2);
ShowMessage(FloatToStr(a));
MyNotebook1.ShowDateOfBirth;
MyNotebook2.ShowDateOfBirth;
MyNotebook1.Destroy;
MyNotebook2.Destroy;
end;
end.
Рисунок 2.4. – Диаграмма классов
Вывод: на лабораторной работе было выполнено вычисление данных и вывод вычисленной информации был показан в сообщении. Так же была создана диаграмма классов.
Лабораторная работа №3
Тема: Реализация собственного класса.
Цель: Выполнить вывод экземпляра класса (код программы) по нажатию на кнопку.
Задание 1
Задача: Есть дом. В нем живут жильцы. Сопоставить номер квартиры с фамилией жильца.
Рисунок 3.1. – Вывод результата в сообщение
Рисунок 3.2. – Вывод результата в компонент Memo и Striggrid
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
type Resident = class
apartament : Integer;
Surrname : String;
function Info (): String;
end;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1.Resident }
function TForm1.Resident.Info: String;
begin
Result := 'resident: ' + Surrname +
' apartament №: ' + IntToStr(apartament) + '.';
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
Ivanov : Resident;
Petrov : Resident;
S: String;
i: integer;
begin
Ivanov := Resident.Create();
Ivanov.apartament:=20;
Ivanov.Surrname:=Edit1.Text;
Showmessage(Ivanov.Info());
Memo1.Lines[0]:= (Edit1.text) + ' ' + 'Живёт в ' + IntTostr(Ivanov.apartament)+ ' квартире';
S:=Memo1.Lines[0];
Petrov := Resident.Create();
Petrov.apartament:=30;
Petrov.Surrname:=Edit2.Text;
Showmessage(Petrov.Info());
Memo1.Lines[1]:= (Edit2.text) + ' ' +'Живёт в ' + IntTostr(Petrov.apartament)+ ' квартире';
S:=Memo1.Lines[1];
StringGrid1.Cols[0].Add(Edit1.text);
StringGrid1.Cols[1].Add(Edit2.text);
end;
end.
Задание 2
Запись в записной книжке. Создайте класс и заполните его свойства, вводя данные с формы.
Рисунок 3.3. – Вывод результата в сообщение
Рисунок 3.4. – Вывод результата в компонент Memo и Striggrid
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, DateUtils;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
Button1: TButton;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
type Resident = class
nomer: integer;
rod: TDate;
apartament : Integer;
Surrname : String;
function Info (): String;
end;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.Resident.Info: String;
begin
Result := 'Фамилия: ' + Surrname + ' ' +
' номер телефона:' + ' ' + IntToStr(nomer) + ' ' + ' дата рождения: ' + DateToStr (rod)
+ ' ' +'место проживания: квартира' + ' ' + IntToStr(apartament);
end;
procedure TForm1.Button1Click(Sender: TObject);
var Ivanov : Resident;
Petrov : Resident;
S: String;
begin
Ivanov := Resident.Create();
Ivanov.apartament:=20;
Ivanov.Surrname:='Ivanov';
Ivanov.rod:= strtodate('22.02.1988');
Ivanov.nomer:= 452698;
Ivanov.Surrname:=Edit1.Text;
Showmessage(Ivanov.Info());
Memo1.Lines[0]:= (Edit1.text) + ' ' + 'номер телефона: ' + ' ' + IntToStr(Ivanov.nomer) + ' ' + ' дата рождения: '
+ DateToStr (Ivanov.rod) + ' ' + ' место проживания: квартира ' + IntToStr(Ivanov.apartament);
S:=Memo1.Lines[0];
Petrov := Resident.Create();
Petrov.apartament:=30;
Petrov.Surrname:='Petrov';
Petrov.rod:= strtodate ('24.07.1978');
Petrov.nomer:= 852698;
Petrov.Surrname:=Edit2.Text;
Showmessage(Petrov.Info());
Memo1.Lines[1]:= (Edit2.text) + ' ' + ' номер телефона: ' + ' ' + IntToStr(Petrov.nomer) + ' ' + ' дата рождения: ' + DateToStr (Petrov.rod) +
' ' + ' место проживания: квартира ' + ' ' + IntToStr(Petrov.apartament);
S:=Memo1.Lines[1];
StringGrid1.Cols[0].Add(Edit1.text);
StringGrid1.Cols[1].Add(Edit2.text);
end;
end.
Рисунок 3.5. – Диаграмма класса
Вывод: на лабораторной работе было выполнено два задания. В ходе работы были созданы программы для вывода информации в компоненты Memo, Striggrid и в Windows сообщение.
Лабораторная работа №4
Тема: Наследование классов
Задание общее
1. По изученным выше структурам создать рабочую область – форму с четырьмя кнопками: Students, Teachers, Marks and Exit.
2. В конструктор constructor TStudent.CreateWithFirstMark дописать:
ShowMessage('Ученику '+NewFirstName+' '+NewLastName+' '+' оценка '+IntToStr(FirstMark));
end;
3. Написать функцию для подсчета количества лет студента. Для этого подвести курсор к function Age: byte; и нажать Ctrl+Shift+C
Обработка функции выглядит следующим образом:
Result:=2018-YearOfBirth;
4. Создаем конструктор для TTeacher constructor Create (Ctrl+Shift+C)
constructor TTeacher.Create(NewFirstName, NewLastName, NewSubject: string);
begin
FirstName:=NewFirstName;
LastName:=NewLastName;
Subject:=NewSubject;
end;
5. Создадим пользовательскую процедуру для вывода информации о преподаватели и читаемой им дисциплине
procedure TTeacher.ShowInfo;
begin
ShowMessage( FirstName +' ' + LastName+ ' '+ Subject);
end;
Далее необходимо в классе TTeacher идентифицировать процедуру. Для этого в класс TTeacher необходимо написать:
Procedure ShowInfo;
6. Все предварительные этапы описания функций выполнены. Теперь необходимо каждой созданной кнопке по событию OnClick задать функции и задаться объектами класса. Для этого:
1) на кнопку Teachers поместить по событию OnClick
var
Teach1,Teach2: TTeacher;
begin
Teach1:=TTeacher.Create('Ivanova','Alla','Math');
Teach2:=TTeacher.Create('Petrova','Maya','Informatics');
Teach1.ShowInfo;
Teach2.ShowInfo; end;
2) на кнопку Students поместить по событию OnClick
var Student1,student2:TStudent;
begin
Student1:=TStudent.Create('Adelina','Studentkina',74);
Student2:=TStudent.Create('Timur','Studentkin',44);
end;
3) на кнопку Marks поместить по событию OnClick
var studentsmarks1,studentsmarks2:TStudent;
begin
studentsmarks1:=TStudent.CreateWithFirstMark('Fedor','Smith',15,5);
end;
4) на кнопку Exit поместить по событию OnClick:
Form1.Close;
В случае некорректной работы программы закомментируйте:
Create(NewFirstName, NewLastName, NewClassNumber); // Вызываем сначала базовый конструктор
Задание индивидуальное
Согласно номеру своего варианта добавить каждому классу ровно столько объектов, каков номер вашего варианта.
Например, вариант 15:
2 – по условию teachers + 15 = 17
2 – по условию students + 15 = 17
2 – по условию marks + 15 = 17
Дополнительное задание
Выводить все объекты в Edit
(например, в цикле с помощью FindComponent('Edit'+IntToStr(i)) as TEdit) или в другие компоненты.
Ход работы
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
THuman = class
public
FirstName, LastName: string;
YearOfBirth: integer;
Height: integer;
function Age: byte;
constructor Create(NewFirstName, NewLastName: string);
end;
TTeacher = class(THuman) // В скобках после ключевого слова class
// указывается родительский класс, методы и поля которого
// будут также доступны из этого класса TTeacher
public
Subject: string;
Procedure ShowInfo;
constructor Create(NewFirstName, NewLastName, NewSubject: string);
end;
TStudent = class(THuman) // В скобках после ключевого слова class
// указывается родительский класс, методы и поля которого
// будут также доступны из этого класса TStudent
constructor CreateWithFirstMark(NewFirstName, NewLastName: string;
NewClassNumber: byte; FirstMark: byte);
public
ClassNumber: byte;
Marks: array [0..10] of byte;
Teachers: array [0..10] of TTeacher;
constructor Create(NewFirstName, NewLastName: string; NewClassNumber: byte);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TStudent.Create(NewFirstName, NewLastName: string;
NewClassNumber: byte);
begin
inherited Create(NewFirstName, NewLastName);
ClassNumber := NewClassNumber;
YearOfBirth := 1996; // Обращение к полю родительского класса
ShowMessage('Ученику '+NewFirstName+' '+NewLastName+' '+IntToStr(Age)+' years'); // Обращение к методу Age родительского класса
end;
constructor TStudent.CreateWithFirstMark(NewFirstName, NewLastName: string;
NewClassNumber, FirstMark: byte);
begin
Create(NewFirstName, NewLastName, NewClassNumber);
ShowMessage('Ученику '+NewFirstName+' '+NewLastName+' '+' оценка '+IntToStr(FirstMark));
end;
function THuman.Age: byte;
begin
Result:=2020-YearOfBirth
end;
constructor THuman.Create(NewFirstName, NewLastName: string);
begin
end;
constructor TTeacher.Create(NewFirstName, NewLastName, NewSubject: string);
begin
FirstName:=NewFirstName;
LastName:=NewLastName;
Subject:=NewSubject;
end;
procedure TTeacher.ShowInfo;
begin
ShowMessage( FirstName +' ' + LastName+ ' '+ Subject);
end;
procedure TForm1.Button1Click(Sender: TObject);
var Student1,student2, student3, student4, student5:TStudent; i: integer; z:TComponent;
begin
Student1:=TStudent.Create('Anastasia','Dorofeeva',74);
Student2:=TStudent.Create('Alina','Shevchenko',74);
student3:= TStudent.Create('Anna','Kaplan',74);
student4:= TStudent.Create('Fedor','Komarov',74);
student5:= TStudent.Create('Viktoria','Karlova',74);
for i:=0 to Screen.CustomFormCount-1 do
(FindComponent('Memo1') as TMemo).Lines.Append ('Anastasia Dorofeeva 24 ears, Alina Shevchenko 24 ears, Anna Kaplan 24 ears, Fedor Komarov 24 ears, Viktoria Karlova 24 ears');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Teach1,Teach2, Teach3, Teach4, Teach5: TTeacher;
i: integer; z:TComponent;
begin
Teach1:=TTeacher.Create('Volkov','Aleksandr','Math');
Teach2:=TTeacher.Create('Trufanova','Margarita','Informatics');
Teach3:=TTeacher.Create('Ivanova','Anna','Rus. lit');
Teach4:=TTeacher.Create('Petrova','Alisa','Sociologia');
Teach5:=TTeacher.Create('Avershina','Marina','PO');
Teach1.ShowInfo;
Teach2.ShowInfo;
Teach3.ShowInfo;
Teach4.ShowInfo;
Teach5.ShowInfo;
for i:=0 to Screen.CustomFormCount-1 do
(FindComponent('Memo1') as TMemo).Lines.Append ('Volkov Aleksandr Math, Trufanova Margarita Informatics, Ivanova Anna Rus. lit, Petrova Alisa Sociologia, Avershina Marina PO. ');
end;
procedure TForm1.Button3Click(Sender: TObject);
var i: integer; z:TComponent; studentsmarks1, studentsmarks2, studentsmarks3, studentsmarks4, studentsmarks5:TStudent;
begin
studentsmarks1:=TStudent.CreateWithFirstMark('Maria','Smith',15,5);
studentsmarks2:=TStudent.CreateWithFirstMark('Olga','Biver',15,4);
studentsmarks3:=TStudent.CreateWithFirstMark('Mira','Svil',15,3);
studentsmarks4:=TStudent.CreateWithFirstMark('Vika','Smile',15,5);
studentsmarks5:=TStudent.CreateWithFirstMark('Oleg','Voronov',15,3);
for i:=0 to Screen.CustomFormCount-1 do
(FindComponent('Memo1') as TMemo).Lines.Append ('Maria Smith 5, Olga Biver 4, Mira Svil 3, Vika Smile 5, Oleg Voronov 3');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.Close;
end;
end.
Рисунок 4.1.- Результат работы программы
Рисунок 4.2. – Вывод информации в компоненту Memo
Рисунок 4.3. – Диаграмма классов
Вывод: получен опыт выполнения работы по наследованию классов.
Лабораторная работа 5
Тема: Свойства объектов. Сеттеры. Геттеры.
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTriangle = class
public
a, b, c: double;
function Square: double;
//function Perimeter: double;
function GetPerimeter: double;
procedure SetPerimeter(Value: double);
property Perimeter: double read GetPerimeter write SetPerimeter;
constructor Create(NewA, NewB, NewC: double);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TTriangle }
constructor TTriangle.Create(NewA, NewB, NewC: double);
begin
a := NewA;
b := NewB;
c := NewC;
end;
{
function TTriangle.Perimeter: double;
begin
result := a + b + c;
end; }
function TTriangle.GetPerimeter: double;
begin
result := a + b + c;
end;
procedure TTriangle.SetPerimeter(Value: double);
begin
a := Value / 3;
b := Value / 3;
c := Value / 3;
end;
function TTriangle.Square: double;
var
p: double; // Полупериметр, пригодится в вычислениях
begin
// Находим площадь треугольника по формуле Герона
p := (a + b + c) / 2;
result := sqrt(p*(p-a)*(p-b)*(p-c));
end;
procedure TForm1.FormCreate(Sender: TObject);
var
t: TTriangle;
begin
t := TTriangle.Create(10, 11, 12);
t.Perimeter := 40; // Присваиваем периметр посредством property.
// Соответственно будет выполнен Setter (SetPerimeter) и присвоено значение сторонам треугольника
ShowMessage('Стороны треугольника: '+FloatToStrF(t.a, ffFixed, 6,2)+'; '+FloatToStrF(t.b, ffFixed, 6,2)+'; '+FloatToStrF(t.c, ffFixed, 6,2)+' Периметр : '+FloatToStr(t.Perimeter));
// Здесь мы опять обращаемся к property Perimeter, это свойство вызывает Getter GetPerimeter, которое и возвращает нам значение
end;
end.
Рисунок 5.1. – Окно результата выполненной программы
Рисунок 5.2. – Диаграмма класса TTriangle
Вывод: На данной лабораторной работе была выполнена работа по подсчету сторон треугольника по заданному периметру. В листинге программы были реализованы: метод Getter и метод-процедура Setter.
Лабораторная работа 6
Тема: Свойства объектов. Сеттеры. Геттеры.
Задание к лабораторной работе
1. Выполните пример, приведенный в лабораторной работе.
2. Согласно своему варианту, создайте класс и заполните его свойства.
3. Выполнить проверку работы программы.
4. Продемонстрировать преподавателю работу ваших программ.
5. Оформить отчёт.
Ход работы
Вариант 3
В классе Треугольник добавить поля Углы треугольника и вычислить внешний угол от заданного.
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTriangle = class
public
a, b, c: double;
procedure ShowTitle;
procedure SetPerimeter(Value: double);
constructor Create(NewA, NewB, NewC: double);
destructor Destroy;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
t: TTriangle; A, B, C: integer; Aa, Bb, Cc: integer;
begin
t := TTriangle.Create(10, 11, 12);
A:= 40;
B:= 60;
C:= 70;
Aa:= 180-A;
Bb:= 180-B;
Cc:= 180-C;
ShowMessage ('Угол А =' + ' ' + IntToStr (A) + ', ' + ' ' + 'внешний угол Аа' + ' ' + intToStr(Aa) + #13 + Угол B =' + ' ' + IntToStr (B) + ', ' + 'Внешний угол Вв =' + ' ' + IntToStr (Bb) + '#13 + 'Угол C =' + ' ' + IntToStr (C) + ', ' + 'Внешний угол Сс =' + ' ' + IntToStr (Cc));
t.ShowTitle;
t.Destroy;
end;
{ TTriangle }
constructor TTriangle.Create(NewA, NewB, NewC: double);
begin
a := NewA;
b := NewB;
c := NewC;
end;
destructor TTriangle.Destroy;
var A, B, C, Aa, Bb, Cc: integer;
begin
ShowMessage ('Уничтожается запись:’ +#13+ 'Угол А =' + ' ' + IntToStr (A) + ', ' + ' ' + 'внешний угол Аа' + ' ' + intToStr(Aa) + #13 + Угол B =' + ' ' + IntToStr (B) + ', ' + 'Внешний угол Вв =' + ' ' + IntToStr (Bb) + '#13 + 'Угол C =' + ' ' + IntToStr (C) + ', ' + 'Внешний угол Сс =' + ' ' + IntToStr (Cc));
end;
procedure TTriangle.SetPerimeter(Value: double);
begin
a := Value / 3;
b := Value / 3;
c := Value / 3;
end;
procedure TTriangle.ShowTitle;
var A, B, C, Aa, Bb, Cc: integer;
begin
ShowMessage ('Угол А =' + ' ' + IntToStr (A) + ', ' + ' ' + 'внешний угол Аа' + ' ' + intToStr(Aa) + #13 + Угол B =' + ' ' + IntToStr (B) + ', ' + 'Внешний угол Вв =' + ' ' + IntToStr (Bb) + '#13 + 'Угол C =' + ' ' + IntToStr (C) + ', ' + 'Внешний угол Сс =' + ' ' + IntToStr (Cc));
end;
end.
Рисунок 6.1. – Окно приложения
Рисунок 6.2. – Окно результата выполнения индивидуального задания
Рисунок 6.3. – Окно результата работы деструктора
Рисунок 6.4. – Диаграмма класса TTriangle
Вывод: на лабораторной работе была выполнена работа по определению внешнего угла от заданного.
Лабораторная работа 7
Тема: Разработка приложения с использованием класса.
Цель: Получение практических навыков работы с пользовательскими классами в DELPHI.
Задание
1. Выполнить пример по образцу: написать приложение, которое
создает массив объектов и выполняет его обработку.
2. Написать приложение ПО ВАРИАНТУ, которое создает массив
объектов и выполняет его обработку.
3. Поля и методы класса выбрать в зависимости от свойств самого
объекта и тех действий, которые необходимо выполнить.
4. Обязательные методы:
конструктор, предназначенный для инициализации элементов массива
об объектов;
метод вывода списка объектов.
5. Выполнить проверку работы программы.
6. Оформить отчёт.
7. Продемонстрировать преподавателю работу ваших программ.
Задание 1
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
Type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
GroupBox2: TGroupBox;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private{ Private declarations }
public
{ Public declarations }
end;
Type
Tklient=class
fFio: String;
fVklad: Integer;
fSumma: Real;
constructor create (Fio: String; Vklad: Integer; Summa: real);
Function MinVklad : String;
end;
const
s=4;
var
Form1: TForm1;
MasivKlient: array [1..s] of Tklient; //список
k: Integer=0;
implementation
{$R *.dfm}
constructor Tklient.create (Fio: String; Vklad: Integer; Summa: real);
begin
fFio:=Fio;
fVklad:=Vklad;
fSumma:=Summa;
end;
Function Tklient.MinVklad: String;
begin
result:=fFio+' '+IntToStr(fVklad)+' '+FloatToStr(fSumma);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if k<s then begin
k:=k+1;
MasivKlient[k]:=Tklient.create(Edit1.Text, strtoint(Edit2.Text),strtofloat(Edit3.Text));
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit1.SetFocus;
end else ShowMessage('Список заполнен!');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
sr: Real;
begin
sr:=0;
for i:=1 to k do sr:=sr+MasivKlient[i].fSumma;
sr:=sr/k;
for i:=1 to k do if MasivKlient[i].fSumma<sr then
Label4.Caption:=Label4.Caption+masivKlient[i].fFio+' №'+Inttostr(masivKlient[i].fVklad)
+' ' +FloatTostr(masivKlient[i].fSumma)+' руб.'+#13;
end; end.
Рисунок 7.1. – Окно результата выполненной программы
Рисунок 7.2. – Диаграмма класса TKlient
Вариант задания
3.Объект: журнал. Создать массив объектов и определить журналы,
которые выходят чаще всего.
Задание 2
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
GroupBox2: TGroupBox;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
{--------------------------------------------}
TGornal=class
fIzdat: String;
fName: string;
fKol: Real;
constructor create (Izdat: String; Name: string; Kol: real);
Function MaxKol : String;
end;
{--------------------------------------------}
const
s=4;
var
Form1: TForm1;
MasivGornal: array [1..s] of TGornal; //список
k: Integer=0;
implementation
{$R *.dfm}
constructor TGornal.create (Izdat: String; Name: string; Kol: real);
begin
fIzdat:=Izdat;
fName:=Name;
fKol:=Kol;
end;
Function TGornal.MaxKol: String;
begin
result:=fIzdat+' '+fName+' '+FloatToStr(fKol);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if k<s then begin
k:=k+1;
MasivGornal[k]:=TGornal.create(Edit1.Text, Edit2.Text,strtofloat(Edit3.Text));
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit1.SetFocus;
end else ShowMessage('Список заполнен!');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
sr: Real;
begin
sr:=0;
for i:=1 to k do sr:=sr+MasivGornal[i].fKol;
sr:=sr/k;
for i:=1 to k do if MasivGornal[i].fKol>sr then
Label5.Caption:='Издательство'+' '+ Label5.Caption+masivGornal[i].fIzdat +' ' +' журнал' + ' '
+masivGornal[i].fName + ' '
+' выходит'+ ' ' +FloatTostr(masivGornal[i].fKol)+' ' +' раза месяц'+#13;
end;
end.
Рисунок 7.3. – Окно результата выполненной программы
Рисунок 7.4. – Диаграмма класса TGornal
Вывод: на лабораторной работе были выполнены работы по созданию записи клиентов банка с максимальным вкладом и вычисление журнала, выходящего чаще остальных.
© ООО «Знанио»
С вами с 2009 года.