51232

Средства объектно-ориентированного программирования в Visual Basic

Лабораторная работа

Информатика, кибернетика и программирование

Цель данной лабораторной работы состоит в изучении средств, приемов и получении практических навыков разработки, написания и отладки проектов, использующих объектно-ориентированную технологию, стандартные модули и классы при решении различных задач.

Русский

2014-02-08

662.35 KB

3 чел.

Тема 5.3. Лабораторная работа

«Средства объектно-ориентированного программирования в Visual Basic»

Цель данной лабораторной работы состоит в изучении  средств, приемов и получении практических навыков разработки, написания и отладки проектов, использующих объектно-ориентированную технологию, стандартные  модули и классы при решении различных задач.

5.3.1. Задание

  1.  Данная лабораторная работа является продолжением предыдущей темы, в которой была построена объектная модель решаемой задачи. Поэтому исходными данными для выполнения лабораторной работы является результат предыдущей.
  2.  Разработать интерфейс пользователя:
  3.  разработать форму, предназначенную для ввода исходных данных, как с клавиатуры, так и из текстового файла, и для отображения входных данных на форме;
  4.  разработать выходную форму, предназначенную для вывода результатов решения задачи, как на форму, так и для записи в файл.

  1.  Составить общую (укрупненную) схему алгоритма решения задачи.
  2.  Составить схемы алгоритмов решения функциональных задач с учетом того,  что они будут реализованы в виде методов и процедур, и работать с полями и свойствами.
  3.  Создать  программный код проекта, реализующий поставленную задачу.
  4.  Подготовить тестовые наборы исходных данных, соответствующие смысловой направленности решаемой задачи как для ввода с клавиатуры, так и из текстового файла (формат текстового файла должен быть задан преподавателем, см. примеры выполнения задания п.5.1.4, а сам текстовый файл с расширением *.txt должен быть подготовлен студентом  средствами MS Windows). При создании текстового файла на русском языке с помощью БЛОКНОТА, файл следует сохранять  в кодировке UTF-8.
  5.  Получить решение.
  6.  Обосновать правильность полученных результатов.


5.3.2.  Варианты задания

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

5.3.3. Содержание отчета

  1.  Тема и название работы.
  2.  Задание на разработку проекта  и вариант задания.
  3.  Разработка приложения:
  4.   Графический интерфейс пользователя;
  5.   Таблица свойств объектов;
  6.   Укрупненная схема алгоритма решения задачи и схемы алгоритмов  

 функциональных задач;

  1.    Программный код проекта с использованием методов и процедур

  функциональных задач,   стандартных модулей и классов.

  1.  Результаты выполнения приложения.
  2.  Доказательство правильности работы программы.

5.3.4. Примеры выполнения задания

  1.  Тема  лабораторной работы:

Средства объектно-ориентированного программирования в Visual Basic – Формирование списка фамилий студентов, которым по итогам сессии необходимо повысить успеваемость до фактического среднего уровня.

  1.  Задание:

Разработать программный проект решение задачи формирования списка фамилий студентов, которым по итогам сессии необходимо повысить успеваемость до фактического среднего уровня, при условии, что для каждого студента известны по 5 оценок, полученных им в сессию, а  всего в группе  n студентов. Формируемый список фамилий студентов необходимо представить в порядке убывания среднего балла, полученного за сессию. В качестве другого варианта предполагается, что имеется не одна группа студентов, а  kg  групп.

Исходные списки студентов и результатов сессии могут находиться как в текстовом файле, так, и введены с клавиатуры.

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

В программном коде необходимо использовать две формы, стандартные модули и классы.

           


1 вариант реализации проекта:

Одна группа; в программном коде проекта используется стандартный модуль, один объект класса и две формы; исходные данные  вводятся с клавиатуры  и    отображаются на 1-ой форме;  результаты отображаются на 2-ой форме.

  1.  Разработка проекта:
  2.  Разработка графического интерфейса пользователя

Разработанные формы интерфейса пользователя приведены на рис. 5.3-2 и                     рис. 5.3-3.

   Рис. 5.3-2        Рис. 5.3-3

  1.  Установка свойств объекта

Свойства объектов управления разработанной формы студенты   

         устанавливают самостоятельно и отображают в таблице.

 

  1.  Разработка схемы алгоритма

В соответствии с заданием 1-го варианта, решение задачи можно разбить на следующие функциональные задачи:

  1.  определение количества студентов в группе – n;
  2.  создание объекта класса – v = New Студенты(n);
  3.  ввод  исходных данных с клавиатуры и формирование  массива

     фамилий fam( ) с помощью свойства Famil   и массива оценок
     
oc( , ) c       помощью свойства ocen – процедура-функция vvod( );

  1.  нахождение общего среднего балла за сессию студентов одной группы

      –  sr и средних баллов студентов – процедура-подпрограмма sred( );

  1.  сортировка массива so( ) в порядке убывания – процедура-

      подпрограмма sort( );

  1.  вывод полученных результатов: фамилии и средние оценки студентов,

     для которых средняя оценка меньше  общей средней в группе

     формируется в одну строку – процедура-функция vivod( ).


Общая (укрупненная) схема алгоритма решения задачи представлена на
рис. 5.3-4.

 Рис. 5.3-4

Схемы алгоритмов функциональных задач студенты разрабатывают самостоятельно.

  1.  Создание программного кода с использованием модуля, процедур и

          класса.

                       Создадим класс Студенты, членами которого будут:

  1.  Поля число студентов одной группы  n, одномерный массив фамилий студентов  fam( ), двумерный массив оценок oc( , ), массив средних оценок каждого  студента so( ), общий средний балл за сессию студентов одной группы sr;
  2.  Свойства, необходимые для заполнения полей класса и для чтения их значений:  Famil - для поля  fam( ),  ocen – для поля oc( ,), num – для поля  n; для работы с полями средних оценок so( ) и sr создадим свойства  SrStud и SrGrup только для чтения, т.к. значения этих полей не могут изменяться вне класса, а вычисляются методами класса из значений массива oc( , ) ;
  3.  Методы - процедура-подпрограмма  sred(  ), процедура-подпрограмма sort(  ), процедура-функция  vivod( ). Так как  эти процедуры являются членами класса, то поля этого класса для них доступны напрямую (без использования свойств).

Процедуру-функцию ввода фамилий и оценок vvod( ) запишем в стандартный модуль. Эта процедура содержит параметры, необходимые для доступа к членам класса через свойства. Также в стандартном модуле объявим объект v типа класса   Студенты, тогда этот объект будет доступен обеим формам проекта

Программный код проекта, представлен на рис. 5.3-5.

Option Strict On

Option Explicit On

Module Module1

   Public v As Студенты

   ' Функция ввода исходных данных и формирование

   ' строки для их вывода на форму

   

   Public Function vvod(ByVal n As Integer,ByRef Fam()As String, _

                       ByRef Oc(,) As Integer) As String

       Dim result As New System.Text.StringBuilder

       Dim i, j As Integer

       For i = 0 To n - 1

           fam(i) = InputBox("Фамилия")

           result.Append(Fam(i)) : result.Append("      ")

           For j = 0 To 4

               Oc(i, j) = CInt(Val(InputBox("Оценка")))

               result.Append(Oc(i, j))

               result.Append(" ")

           Next j

           result.AppendLine(vbNewLine)

       Next i

       Return result.ToString

   End Function

End Module

Public Class Студенты

   Private n As Integer      ' Количество студентов

   Private oc(,) As Integer  ' Оценки, полученные в сессию

   Private fam() As String   ' Фамилии студентов

   Private sr As Single      ' Общий сред. балл группы за сессию

   Private so() As Single    ' Средние баллы каждого студента

   ' Конструктор класса

   Public Sub New(ByVal KolCt As Integer)

       ReDim oc(KolCt - 1, 4), fam(KolCt - 1), so(KolCt - 1)

   End Sub

   Public Property Famil() As String()

       Get

           Return fam

       End Get

       Set(ByVal value() As String)

           fam = value

       End Set

   End Property

   Public Property Ocen() As Integer(,)

       Get

           Return oc

       End Get

       Set(ByVal value(,) As Integer)

           oc = value

       End Set

   End Property

   

   Public ReadOnly Property SrGrup() As Single

       Get

           Return sr

       End Get

   End Property

   Public Property num() As Integer

       Get

           Return n

       End Get

       Set(ByVal value As Integer)

           n = value

       End Set

   End Property

   Public ReadOnly Property SrStud() As Single()

       Get

           Return so

       End Get

   End Property

  'Процедура сортировки массивов методом пузырька

   Public Sub sort()

       Dim i, j As Integer

       Dim t As Single

       Dim c As String

       For i = n - 1 To 1 Step -1

           For j = 1 To i

              If so(j) > so(j - 1) Then

                 t = so(j) : so(j) = so(j - 1) : so(j - 1) = t

                 c = fam(j) : fam(j) = fam(j - 1) : fam(j - 1) = c

               End If

           Next

       Next

   End Sub

  ' Определение  общего среднего балла группы  

  ' за сессию и средних баллов каждого студента

   Public Sub sred()

       Dim i, j As Integer

       sr = 0

       For i = 0 To n - 1

           For j = 0 To 4

               sr = sr + oc(i, j) : so(i) = so(i) + oc(i, j)

           Next j

           so(i) = so(i) / 5

       Next i

       sr = sr/ (5 * n)

   End Sub

   

   ' Формирование  списка студентов,

   ' имеющих средний балл ниже общего среднего

   Public Function vivod() As String

       Dim result As New System.Text.StringBuilder

       Dim i As Integer

       For i = 0 To n - 1

           If so(i) < sr Then

               result.Append(fam(i))

               result.Append("     ")

               result.Append(so(i).ToString)

               result.AppendLine(vbNewLine)

           End If

       Next i

       Return result.ToString

   End Function

End Class

Public Class Form1

   

   Private Sub Button1_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button1.Click

       Dim n As Integer

       n = CInt(Val(InputBox("Введите количество студентов")))

       'создание экземпляра класса через конструктор

       v = New Студенты(n)

       'в классе заполняется поле n(число студ.)через свойство num

       v.num = n

       TextBox1.Text = CStr(n)

       'Ввод исходных данных фамилий и оценок (полей класса) через

       'свойства

       TextBox2.Text = vvod(v.num, v.Famil, v.Ocen)

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       Form2.Show()

   End Sub

   Private Sub Button3_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button3.Click

       End

   End Sub

End Class

Public Class Form2

       Public Sub Button1_Click(ByVal sender As System.Object, _

                            ByVal e As System.EventArgs) _

                            Handles Button1.Click

       'Расчет средних баллов

       v.sred()

       TextBox1.Text = CStr(v.SrGrup)

       'Сортировка по убыванию средних оценок

       v.sort()

       ' Вывод списка студентов,

       ' имеющих средний балл ниже общего среднего

       

       TextBox2.Text = v.vivod()

   End Sub

   'Процедура для окончания работы программы

   Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       End

   End Sub

End Class

   Рис. 5.2-5

  1.  Выполнение приложения и получение результатов:

Результаты работы проекта представлены на рис. 5.3-6 и рис. 5.3.7.

  Рис. 5.3-6                                                   Рис. 5.3-7

                

  1.  Доказательство правильности работы программ


2 вариант реализации проекта:

Одна группа; в программном коде проекта используется стандартный модуль, один объект класса и две формы; исходные данные вводятся из текстового файла чтением целиком в одну строку и выводятся на первую форму одной строкой; результаты вычислений формируются в одну строку, которая записывается в другой текстовый файл и отображаются на 2-ой форме.

Формат исходного файла: допускается разделение данных в строке несколькими пробелами, т.е. может иметь формат вида:
фамилия 5    4  5  3   4.

  1.  Разработка проекта:
  2.  Разработка графического интерфейса пользователя

Разработанные формы интерфейса пользователя приведены на рис. 5.3-8 и                     рис. 5.3-9.

      Рис. 5.3-8             Рис. 5.3-9

  1.  Установка свойств объекта

  Свойства объектов управления разработанной формы студенты устанавливают    самостоятельно и отображают в таблице.

  1.   Разработка схемы алгоритма

В соответствии с заданием 2-го варианта, решение задачи можно разбить на следующие функциональные задачи:

  1.   ввод исходных данных из текстового файла одной строкой – vvodFile("путь1", s);
  2.   получение из этой строки массива подстрок lineset( ) с помощью функции Split( ) и определение количества студентов в группеn;
  3.  создание объекта класса  v = New Студенты(n);
  4.  заполнение полей класса из массива строк файла lineset( ) формирование  массива фамилий fam( ) с помощью свойства Famil   и массива оценок oc( , ) c помощью свойства ocen – процедура sozdmas(lineset, n, fam, oc);
  5.  нахождение общего среднего балла за сессию студентов одной группы – sr и средних баллов студентов – процедура-подпрограмма sred( );
  6.  сортировка массива so( ) в порядке убывания – процедура-подпрограмма sort( );
  7.  вывод полученных результатов: фамилии и средние оценки студентов, для которых средняя оценка меньше  общей средней в группе формируются в одну строку – процедура-функция spisok( ).
  8.  запись строки результата в текстовый файл – vivod("путь2", res);

Общая (укрупненная) схема алгоритма решения задачи представлена на
рис. 5.3-10.  

 Рис. 5.3-10

 Схемы алгоритмов функциональных задач студенты разрабатывают   

     самостоятельно.

  1.  Написание программного кода с использованием модуля, процедур и класса.

Создадим класс Студенты, членами которого будут:

  1.  Поля число студентов одной группы  n, одномерный массив фамилий студентов fam( ), двумерный массив оценок oc( , ), массив средних оценок каждого  студента so( ), общий средний балл за сессию студентов одной группы sr;
  2.  Свойства, необходимые для заполнения полей класса и для чтения их значений:  Famil - для поля fam( ), ocen – для поля oc(,), num – для поля n; для работы с полями средних оценок so( ) и sr создадим свойства  SrStud и SrGrup только для чтения, т.к. значения этих полей не могут изменяться вне класса, а вычисляются методами класса из значений массива oc(,);
  3.  Методы - процедура-подпрограмма sred( ), процедура-подпрограмма sort( ), процедура-функция  spisok( ). Так как  эти процедуры являются членами класса, то поля этого класса для них доступны напрямую (без использования свойств).

В стандартный модуль запишем процедуру чтения сведений о студентах  из файла в одну строку  vvodFile( ). Эта процедура не может быть членом класса, так как вызывается до создания экземпляра класса (число студентов при чтении из файла заранее неизвестно). Также в стандартный модуль запишем процедуру sozdmas( ), которая заполняет поля класса - массив фамилий fam( ) и  массив оценок  oc(,)  и процедуру записи в файл строки – результата решения задачи  vivodFile().  

Процедура  sozdmas( ) содержит параметры, необходимые для доступа к членам класса через свойства.  Еще в стандартном модуле объявим объект v типа класса   Студенты, тогда этот объект будет доступен обеим формам проекта

Программный код проекта, представлен на рис. 5.3-11.

Option Strict On

Option Explicit On

Module Module1

   Public v As Студенты

 

 'Процедура создания массива фамилий студентов и массива оценок

   Sub sozdmas(ByVal lineset() As String, ByVal n As Integer, _

               ByRef fam() As String, ByRef oc(,) As Integer)

       Dim i, j As Integer

       Dim line As String

       Dim buf() As String

       For i = 0 To n - 1

           line = lineset(i)

           'Удаление из строки возможных лишних пробелов

           '(цикл замены двух пробелов одним)

           Do While line.IndexOf(Space(2)) >= 0

               line = line.Replace(Space(2), Space(1))

           Loop

           If lineset(i) = "" Then

               n = n - 1

               MsgBox("В файле есть пустая строка")

               Exit For

           Else

              'Ф-ция Split разбивает строку line на массив

               ' подстрок buf()по символам пробела

               buf = Split(line, Space(1))

              '1-ый элемент этого массива-фамилия,следующие-оценки

               fam(i) = buf(0)

               For j = 0 To 4

                   oc(i, j) = CInt(buf(j + 1))

               Next

           End If

       Next

   End Sub

   'Процедура чтения сведений о студентах из текстового файла

   'в одну строку

   Sub vvodFile(ByVal filename As String, ByRef Str3 As String)

       ' Открываем существующий файл и загружаем его текстовое

       'содержимое целиком в одну строку Str3.

       Try

           Str3 = My.Computer.FileSystem.ReadAllText(filename)

       Catch ex As Exception

           MsgBox("ошибка при чтении файла")

       End Try

   End Sub

 ' Процедура записи результата в текстовый файл

   Sub vivodFile(ByVal filename As String, ByRef Str3 As String)

   'Записьстроки-результата Str3 в текстовый файл;значение False

   'параметра задает,что файл будет перезаписан.

       Try

          My.Computer.FileSystem.WriteAllText(filename,Str3,False)

       Catch ex As Exception

          MsgBox("ошибка при чтении файла")

       End Try

   End Sub

End Module

Public Class Студенты

   Private n As Integer      ' Количество студентов

   Private oc(,) As Integer  ' Оценки, полученные в сессию

   Private fam() As String   ' Фамилии студентов

   Private sr As Single      ' Общий сред. балл  группы за сессию

   Private so() As Single    ' Средние баллы каждого студента

   ' Конструктор класса

   Public Sub New(ByVal KolCt As Integer)

       ReDim oc(KolCt - 1, 4), fam(KolCt - 1), so(KolCt - 1)

   End Sub

   Public Property Famil() As String()

       Get

           Return fam

       End Get

       Set(ByVal value() As String)

           fam = value

       End Set

   End Property

   Public Property Ocen() As Integer(,)

       Get

           Return oc

       End Get

       Set(ByVal value(,) As Integer)

           oc = value

       End Set

   End Property

   Public ReadOnly Property SrGrup() As Single

       Get

           Return sr

       End Get

   End Property

   Public Property num() As Integer

       Get

           Return n

       End Get

       

       Set(ByVal value As Integer)

           n = value

       End Set

   End Property

   Public ReadOnly Property SrStud() As Single()

       Get

           Return so

       End Get

   End Property

  'Процедура сортировки массивов методом пузырька

   Public Sub sort()

       Dim i, j As Integer

       Dim t As Single

       Dim c As String

       For i = n - 1 To 1 Step -1

           For j = 1 To i

             If so(j) > so(j - 1) Then

                t = so(j) : so(j) = so(j - 1) : so(j - 1) = t

                c = fam(j) : fam(j) = fam(j - 1) : fam(j - 1) = c

               End If

           Next

       Next

   End Sub

  ' Определение  общего среднего балла группы  

  ' за сессию и средних баллов каждого студента

   Public Sub sred()

       Dim i, j As Integer

       sr = 0

       For i = 0 To n - 1

           For j = 0 To 4

               sr = sr + oc(i, j) : so(i) = so(i) + oc(i, j)

           Next j

           so(i) = so(i) / 5

       Next i

       sr = sr/ (5 * n)

   End Sub

   ' Формирование  списка студентов,

   ' имеющих средний балл ниже общего среднего

   Public Function spisok() As String

       Dim result As New System.Text.StringBuilder

       Dim i As Integer

       For i = 0 To n - 1

           If so(i) < sr Then

               result.Append(fam(i))

               result.Append("     ")

               result.Append(so(i).ToString)

               result.AppendLine(vbNewLine)

           End If

       Next i

       Return result.ToString

   End Function

End Class

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button1.Click

       Dim s As String = ""

       'Вызов проц-ры чтения сведений о студентах из текст. файла

       'целиком в одну строку s

       vvodFile("c:\file1.txt", s)

       'вывод считанных данных в Textbox

       TextBox2.Text = s

       Dim lineset() As String

       'Ф-ция Split разбивает s на массив подстрок lineset()

       'по символам конца строки vbNewLine

       lineset = Split(s, vbNewLine)

       Dim n As Integer

       n = lineset.Length 'кол-во эл-тов получ. массива(кол. студ)

      'создание экземпляра класса через конструктор

       v = New Студенты(n)

      'в классе заполняется поле n(число студентов)через св-во num

       v.num = n

       TextBox1.Text = CStr(n)

      'Вызов проц-ры создания массива фамилий студентов и массива

      'оценок (заполнение полей класса через свойства)

       sozdmas(lineset, v.num, v.Famil, v.Ocen)

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       Form2.Show()

   End Sub

   Private Sub Button3_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button3.Click

       End

   End Sub

End Class

Public Class Form2

       Public Sub Button1_Click(ByVal sender As System.Object, _

                            ByVal e As System.EventArgs) _

                            Handles Button1.Click

       'Расчет средних баллов

       v.sred()

       TextBox1.Text = CStr(v.SrGrup)

       'Сортировка по убыванию средних оценок

       v.sort()

       Dim res As String

       'Вызов функции формирования одной строки из студентов,

       'имеющих средний балл ниже общего среднего

       res = v.spisok()

       TextBox2.Text = res

       'Вызов процедуры записи результата в текстовый файл

       vivodFile("c:\file2.txt", res)  

 End Sub

  'Процедура для окончания работы программы

   Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       End

   End Sub

End Class

   Рис. 5.3-11

  1.  Выполнение приложения и получение результатов: 

Результаты работы проекта Проект-5-3-Лаб-2 представлены на рис. 5.3-12 и
рис. 5.3.13.

  Рис. 5.3-12                                                         Рис. 5.3-13

                

  1.   Доказательство правильности работы программ

\


3 вариант  реализации  проекта:

kg групп; в программном коде проекта используется стандартный модуль, kg объектов класса и две формы; исходные данные  вводятся с клавиатуры  и    отображаются на 1-ой форме;  результаты отображаются на 2-ой форме.

  1.  Разработка проекта:
  2.  Разработка графического интерфейса пользователя

Разработанная форма интерфейса пользователя приведена на рис. 5.3-14 и                     рис. 5.3-15.  

Рис. 5.3-14                                                       Рис. 5.3-15

  1.  Установка свойств объекта

  Свойства объектов управления разработанной формы студенты устанавливают    самостоятельно и отображают в таблице.

         

  1.  Разработка схемы алгоритма

В соответствии с заданием 3-го варианта, решение задачи можно разбить на следующие функциональные задачи:

  1.  определение количества студентов в группе – n и количество групп – kg;
  2.  создание i-го объекта класса – v(i) = New Студенты(n);
  3.  ввод  исходных данных с клавиатуры  для i-го объекта – vvod( );
  4.  нахождение общего среднего балла за сессию студентов одной группы –

     sr и средних баллов студентов для i-го объекта – v(i).sred( );

  1.  сортировка массива so( ) в порядке убывания для i-го объекта –

      v(i).sort( );

  1.  вывод полученных результатов: фамилии и средние оценки студентов,

     для которых средняя оценка меньше  общей средней в группе для i-го

     объекта – v(i).vivod( ).

Общая (укрупненная)  схема алгоритма решения задачи представлена на
рис. 5.3-16.

Рис. 5.3-16

 Схемы алгоритмов функциональных задач аналогичны вариантам 1 и 2.

  1.  Написание программного кода с использованием модуля и процедур

Создадим класс Студенты, членами которого будут:

  1.  Поля число студентов одной группы  n, одномерный массив фамилий студентов fam( ), двумерный массив оценок oc( , ), массив средних оценок каждого  студента so( ), общий средний балл за сессию студентов одной группы sr;
  2.  Свойства, необходимые для заполнения полей класса и для чтения их значений:  Famil  для поля fam( ), ocen – для поля oc(,), num – для поля n; для работы с полями средних оценок so( ) и sr создадим свойства  SrStud и  SrGrup  только для чтения, т.к. значения этих полей не могут изменяться вне класса, а вычисляются методами класса из значений массива oc(,) ;
  3.  Методы - процедура-подпрограмма sred( ), процедура-подпрограмма sort( ), процедура-функция vivod( ). Так как  эти процедуры являются членами класса, то поля этого класса для них доступны напрямую (без использования свойств).

Процедуру-функцию ввода фамилий и оценок vvod( ) запишем в стандартный модуль. Эта процедура содержит параметры, необходимые для доступа к членам класса через свойства. Также в стандартном модуле объявим массив
v( ) объектов типа класса   Студенты,  и объект kg - количество групп, тогда эти объекты будут доступны обеим формам проекта.

 

            Программный код проекта, представлен на рис. 5.3-17.

Option Strict On

Option Explicit On

Module Module1

   Public kg As Integer

   Public v() As Студенты

   ' Функция ввода исходных данных и формирование

   ' строки для их вывода на форму

  Public Function vvod(ByVal n As Integer,ByRef Fam() As String, _

                       ByRef Oc(,) As Integer) As String

       Dim result As New System.Text.StringBuilder

       Dim i, j As Integer

       For i = 0 To n - 1

           Fam(i) = InputBox("Фамилия")

           result.Append(Fam(i))

           result.Append("       ")

           For j = 0 To 4

               Oc(i, j) = CInt(Val(InputBox("Оценка")))

               result.Append(Oc(i, j).ToString)

               result.Append(" ")

           Next j

           result.AppendLine()

       Next i

       Return result.ToString

   End Function

End Module

Public Class Студенты

   Private n As Integer        ' Количество студентов

   Private oc(,) As Integer    ' Оценки, полученные в сессию

   Private fam() As String     ' Фамилии студентов

   Private sr As Single        ' Общий сред. балл  груп. за сессию

   Private so() As Single      ' Средние баллы каждого студента

   ' Конструктор класса

   Public Sub New(ByVal KolCt As Integer)

       ReDim oc(KolCt - 1, 4), fam(KolCt - 1), so(KolCt - 1)

   End Sub

   Public Property num() As Integer

       Get

           Return n

       End Get

       Set(ByVal value As Integer)

           n = value

       End Set

   End Property

   Public Property Famil() As String()

       Get

           Return fam

       End Get

       Set(ByVal value() As String)

           fam = value

       End Set

   End Property

   Public Property Ocen() As Integer(,)

       Get

           Return oc

       End Get

       Set(ByVal value(,) As Integer)

           oc = value

       End Set

   End Property

   Public ReadOnly Property SrGrup() As Single

       Get

           Return sr

       End Get

   End Property

   Public ReadOnly Property SrStud() As Single()

       Get

           Return so

       End Get

   End Property

   ' Определение  общего среднего балла группы  

   ' за сессию и средних баллов каждого студента

   Public Sub sred()

       Dim i, j As Integer

       sr = 0

       For i = 0 To n - 1

           For j = 0 To 4

               sr = sr + oc(i, j)

               so(i) = so(i) + oc(i, j)

           Next j

           so(i) = so(i) / 5

       Next i

       sr = sr / (5 * n)

   End Sub

   'Процедура сортировки массивов методом пузырька

   Public Sub sort()

       Dim i, j As Integer

       Dim t As Single

       Dim c As String

       For i = n - 1 To 1 Step -1

           For j = 1 To i

             If so(j) > so(j - 1) Then

                t = so(j) : so(j) = so(j - 1) : so(j - 1) = t

                c = fam(j) : fam(j) = fam(j - 1) : fam(j - 1) = c

               End If

           Next

       Next

   End Sub

   ' Формирование  списка студентов

   Public Function vivod() As String

       Dim result As New System.Text.StringBuilder

       Dim i, flag As Integer

       flag = 0

       For i = 0 To n - 1

           If so(i) < sr Then

               flag = 1

               result.Append(fam(i))

               result.Append(" - сред. балл студента=")

               result.Append(so(i).ToString)

               result.AppendLine()

           End If

       Next i

       If flag = 0 Then

           result.AppendLine("Нет студентов с меньшим ср. баллом")

       End If

       Return result.ToString

   End Function

End Class

Public Class Form1

       

   Private Sub Button3_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button3.Click

       End

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       Form2.Show()

   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button1.Click

       Dim i, n As Integer

       Dim resultin As New System.Text.StringBuilder

       Dim Tex1 As String = ""

       kg = CInt(Val(InputBox("Введите количество групп")))

       TextBox3.Text = CStr(kg)

       ReDim v(kg - 1)

       For i = 0 To kg - 1

           n = CInt(InputBox("Введите количество студентов в " _

                              & i + 1 & "группе"))

           v(i) = New Студенты(n)

           v(i).num = n

           Tex1 = "В " & CStr(i + 1) & " группе " & CStr(n)

           Tex1 = Tex1 & "студентов" & vbCrLf

           resultin.Append(Tex1)

           resultin.Append(vvod(v(i).num, v(i).Famil, v(i).Ocen))

           resultin.Append(vbNewLine)

       Next i

       TextBox2.Text = resultin.ToString

   End Sub

End Class

Public Class Form2

   

   Public Sub Button1_Click(ByVal sender As System.Object, _

                            ByVal e As System.EventArgs) _

                            Handles Button1.Click

       Dim resultot As New System.Text.StringBuilder

       Dim Tex1 As String = ""

       Dim i As Integer

       For i = 0 To kg - 1

          'Расчет средних баллов

          v(i).sred()

          Tex1 = "Ср. балл для " & CStr(i + 1) &" группы равен " _

                                 & CStr(v(i).SrGrup) & vbNewLine

           'Сортировка по убыванию средних оценок

           v(i).sort()

           ' Вывод списка студентов,

           ' имеющих средний балл ниже общего среднего

           resultot.Append(Tex1)

           resultot.Append(v(i).vivod())

           resultot.Append(vbNewLine)

       Next i

       TextBox2.Text = resultot.ToString

   End Sub

   'Процедура для окончания работы программы

   Private Sub Button2_Click(ByVal sender As System.Object, _

                             ByVal e As System.EventArgs) _

                             Handles Button2.Click

       End

   End Sub

End Class

     Рис. 5.2-17

  1.  Выполнение приложения и получение результатов:

Результаты работы проекта Проект-5-3-Лаб-3 представлены на рис. 5.3-18 и
рис. 5.3.19.

  Рис. 5.3-18                                                            Рис. 5.3-19 

  1.  Доказательство правильности работы программ


5.3.5. Контрольные вопросы по теме
«Введение в объектно-ориентированное программирование»

  1.  Что означает объектно-ориентированный подход в программировании?
  2.  Что является классом в ООП?
  3.  Что является объектом в ООП?
  4.  Какие основополагающие свойства ООП известны?
  5.  Что лежит в основе ООП?
  6.  Что такое инкапсуляция?
  7.  Что такое наследование?
  8.  Что такое полиморфизм?
  9.  Из каких элементов состоит класс?
  10.  Какие модификаторы доступа известны?
  11.  Что такое модификаторы, устанавливающие принадлежность к классу или  к экземпляру класса?
  12.  Как описывается класс?
  13.  Что может быть членом класса?
  14.  Какие правила обращения к переменным и процедурам?
  15.  Какие области видимости известны?
  16.  Каким образом можно изменять состояние объекта,
  17.  Какие средства описания свойств  класса известны?
  18.  Что такое конструкторы и для чего они используются?
  19.  Какие члены класса называются разделяемыми (статическими)?
  20.  Какие члены класса называются экземплярными?
  21.  В чем сходство и различие стандартных модулей, форм и классов?
  22.  Что такое поле класса?
  23.  Что такое свойство класса?
  24.  Что такое конструктор класса?
  25.  Для  чего нужен конструктор?

 

А также другие работы, которые могут Вас заинтересовать

81534. Патогенез поздних осложнений сахарного диабета (макро- и микроангиопатии, нефропатия, ретинопатия, катаракта). Диабетическая кома 108.17 KB
  Диабетическая кома. Диабетическая ретинопатия поражение сетчатки глаза в виде микроаневризм точечных и пятнистых кровоизлияний твёрдых экссудатов отёка образования новых сосудов. Диабетическая микро и макроангиопатия нарушение проницаемости сосудов повышение их ломкости склонность к тромбозам и развитию атеросклероза возникает рано поражаются преимущественно мелкие сосуды. Диабетическая полинейропатия чаще всего в виде двусторонней периферической нейропатии по типу перчаток и чулок начинающаяся в нижних частях конечностей.
81535. Регуляция водно-солевого обмена. Строение и функции альдостерона и вазопрессина 199.48 KB
  Основные гормоны участвующие в тонкой регуляции водносолевого баланса и действующие на дистальные извитые канальцы и собирательные трубочки почек: антидиуретический гормон АДГ альдостерон и предсердный натриуретический фактор ПНФ. Антидиуретический гормон Антидиуретический гормон АДГ или вазопрессин пептид с молекулярной массой около 1100 Д содержащий 9 аминокислот соединённых одним дисульфидным мостиком. АДГ синтезируется в нейронах гипоталамуса в виде предшественника препрогормона который поступает в аппарат Гольджи и...
81536. Система ренин-ангиотензин-альдостерон. Биохимические механизмы возникновения почечной гипертонии, отеков, дегидратации 105.02 KB
  Главным механизмом регуляции синтеза и секреции альдостерона служит система ренинангиотензин. Субстратом для ренина служит ангиотензиноген. Ангиотензиноген α2глобулин содержащий более чем 400 аминокислотных остатков.
81537. Роль гормонов в регуляции обмена кальция и фосфатов (паратгормон, кальцитонин). Причины и проявления гипо- и гиперпаратироидизма 106.8 KB
  Паратгормон Паратгормон ПТГ одноцепочечный полипептид состоящий из 84 аминокислотных остатков около 95 кД действие которого направлено на повышение концентрации ионов кальция и снижение концентрации фосфатов в плазме крови. Скорость распада гормона уменьшается при низкой концентрации ионов кальция и увеличивается если концентрация ионов кальция высока. Секреция ПТГ регулируется уровнем ионов кальция в плазме: гормон секретируется в ответ на снижение концентрации кальция в крови.
81538. Строение, биосинтез и механизм действия кальцитриола. Причины и проявление рахита 137.84 KB
  Действие гормона направлено на повышение концентрации кальция в плазме крови. Низкая концентрация фосфатов и ионов Са2 в крови также ускоряет синтез кальцитриола причём ионы кальция действуют опосредованно через паратгормон. Так например в клетках кишечника кальцитриол индуцирует синтез Са2переносящих белков которые обеспечивают всасывание ионов кальция и фосфатов из полости кишечника в эпителиальную клетку кишечника и далее транспорт из клетки в кровь благодаря чему концентрация ионов кальция во внеклеточной жидкости поддерживается на...
81539. Строение и секреция кортикостероидов. Изменения катаболизма при гипо- и гиперкортицизме 159.94 KB
  Гормоны коры надпочечников кортикостероиды. В коре надпочечников синтезируется более 40 различных стероидов различающихся по структуре и биологической активности. В коре надпочечников образуются предшественники андрогенов из которых наиболее активный дегидроэпиандростерон ДЭА и слабый андростендион. Самый мощный андроген надпочечников тестостерон синтезируется в надпочечниках в небольшом количестве.
81540. Регуляция синтезами секреции гормонов по принципу обратной связи 126.07 KB
  Поддержание уровня гормонов в организме обеспечивает механизм отрицательной обратной связи. Изменение концентрации метаболитов в клеткахмишенях по механизму отрицательной обратной связи подавляет синтез гормонов действуя либо на эндокринные железы либо на гипоталамус. Синтез и секреция тропных гормонов подавляется гормонами эндокринных периферических желёз.
81541. Половые гормоны: строение, влияние на обмен веществ и функции половых желез, матки и молочных желез 133.12 KB
  Биосинтез эстрогенов как биохимический процесс представляет собой ароматизацию С19стероидов катализируемую комплексом ферментов локализованных в микросомах. У женщин детородного возраста основная масса эстрогенов синтезируется в яичнике содержащем зреющий фолликул или желтое тело. Синтез эстрогенов в фолликуле определяется взаимодействием двух стероидпродуцирующих структур зернистого слоя и текаклеток. Синтез эстрогенов в зреющем фолликуле является одним из основных факторов определяющих функцию гипофизарноовариальной системы т.
81542. Гормон роста, строение, функции 102.09 KB
  Гормон роста соматотропин пептидный гормон образуется в соматотропных клетках аденогипофиза. Молекула СТГ состоит из 191 аминокислотного остатка на восемь остатков меньше чем в молекуле пролактина и в отличие от пролактина содержит не три а два внутримолекулярных дисульфидных мостика Гормоном роста соматотропин называют за то что у детей и подростков а также молодых людей с ещё не закрывшимися зонами роста в костях он вызывает выраженное ускорение линейного в длину роста в основном за счет роста длинных трубчатых костей...