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.  Для  чего нужен конструктор?

 

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

42902. Комплексный анализ проблем оплаты труда на предприятии питания и предложение направлений совершенствования оплаты труда на предприятии 67.08 KB
  Формы и системы оплаты труда. Фонд оплаты труда и его структура. Направления совершенствования системы оплаты труда на предприятии. Администрация предприятий питания самостоятельно выбирает и применяет различные системы оплаты труда работников.
42903. Розробка блоку зв’язку з електроавтоматикою верстата 16Б16. Пристрій управління шпінделем 875.86 KB
  Числове програмне керування (ЧПК) (англ. Computer numerical control) - комп'ютеризована система керування, яка зчитує командні інструкції спеціалізованої мови програмування (наприклад, G-код) і керує приводами метало-, дерево- чи пластмасообробних верстатів та верстатним оснащенням.
42904. Предпримемательство: эволюционный подход 33.65 MB
  Предпринимательство есть способ хозяйствования, который в результате многовековой эволюции утвердился в экономике всех развитых стран. Первоначально предпринимателями называли предприимчивых людей, действующих на рынке, или просто людей энергичных, азартных, склонных к рискованным операциям. В дальнейшем к предпринимательству стали относить любую деятельность, направленную на увеличение прибыли и не запрещённую законом. Однако возникновение предпринимательства как оформившегося устойчивого явления относят к XVII веку.
42905. Сестринский процесс при ожирении 186.5 KB
  Эта проблема касается всех слоев населения независимо от социальной и профессиональной принадлежности, возраста, места проживания и пола. Так, в странах Западной Европы избыточную массу тела имеет от 10 до 20% мужчин и от 20 до 25% женщин. В некоторых регионах Восточной Европы доля людей, страдающих ожирением, достигла 35%. В России в среднем 30% трудоспособного населения имеют ожирение и 25% - избыточную массу тела.
42906. Разработка программы для реализации модели боя типа «Б» с учетом корректировки огня 66.8 KB
  Исходные данные В качестве исходных данных задачи принимаются следующие величины: N1 – численность наших войск на момент начала бояN2 – численность войск противника на момент начала бояn1 – численность при которой наши подразделения выходят из бояn2 – численность при которой подразделения противника выходят из бояλ1 – скорострельность наших подразделенийλ2 – скорострельность подразделений противникаP1 – вероятность поражения БЕ противника при попаданииP2 – вероятность поражения нашей БЕ при попаданииK1 – коэффициент корректировки огня наших...
42907. Розробка алгоритмів покриття та сортування 733.57 KB
  Алгоритм - це точний припис, що визначає обчислювальний процес, що веде від варійованих вихідних даних до шуканого результату. Саме слово «алгоритм» походить від латинської форми написання імені великого математика IX століття Аль Хорезмі (Мухаммеда ібн Муса аль Horesmi)
42908. Разработка программы по учету покупок 4.71 MB
  Стек – это линейный список в котором добавление новых элементов и удаление существующих производится только с одного конца называемого вершиной стека. Это сокращение помогает запомнить механизм работы стека. Значением указателя представляющего стек является ссылка на вершину стека и каждый элемент стека содержит поле ссылки на соседний нижний элемент.Описание процедур Процедура Функция Параметры Описание dd b:Integer Общее колво элементов p:TPElemВершина стека В стек добавляется элемент.
42910. Генератор с широтно-импульсной модуляции 667.11 KB
  Сфера применения: в схемах управления скоростью вращения электродвигателей постоянного тока преобразователях напряжения в импульсных блоках питания и т. Схема ШИМ в своём составе обычно содержит сравнивающий элемент для сравнения управляющего и опорного напряжения генератор сигналов опорного напряжения выходной каскад для обеспечения нужного уровня выходного сигнала по напряжению и мощности. В приведён пример схемы генератора пилообразного напряжения генератора импульсов прямоугольной формы – мультивибратора необходимых для работы...