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

 

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

14202. Эффективность методики оценки кредитоспособности клиента ЗАО КБ «Пятигорск» и ОАО «Ставропольпромстройбанка» 2.3 MB
  ВВЕДЕНИЕ Кредитнофинансовая система одна из важнейших и неотъемлемых структур рыночной экономики. Развитие банковской системы и товарного производства исторически шло параллельно и тесно переплеталось. Находясь в центре экономической жизни банки опосредуют с...
14203. КОНСПЕКТЫ ЛЕКЦИЙ ПО БЕЛОРУССКОЙ МУЗЫКЕ 69.22 KB
  КОНСПЕКТЫ ЛЕКЦИЙ ПО БЕЛОРУССКОЙ МУЗЫКЕ БЕЛОРУССКАЯ МУЗЫКА XVIII ВЕКА В XVIII веке Беларусь входила в состав Речи Посполитой. В конце века Речь Посполитая была разделена тремя государствами и перестала существовать как самостоятельная политическая единица. Белору...
14204. Белорусская народная музыка 219.5 KB
  Белорусская народная музыка Музыкальный фольклор уникальная самобытная культура наших предков осознается современным обществом как значительный фактор духовности преемственности поколений приобщения к национальным жизненным истокам. Зарод
14205. Владислав Голубок 18.51 KB
  История белорусского театра первых двух десятилетий XX века богата на многочисленные знаменательные события уникальные явления к которым можно отнести и многолетнюю деятельность Владислава Голубка. Он сочетал в себе талант писателя и драматурга актера и режиссера худ...
14206. Иосиф Жинович: цимбалист-виртуоз, композитор и дирижер 25.3 KB
  Иосиф Жинович: цимбалиствиртуоз композитор и дирижер досье белта Современную белорусскую музыкальную культуру сложно представить без цимбал которые воспринимаются в определенной степени как музыкальный символ Беларуси. Главная заслуга в этом принадлежит перв
14207. Фортепианное искусство Беларуси XX века 92.5 KB
  Фортепианное искусство Беларуси XX века Фортепианная музыка является неотъемлемой частью профессионального искусства Беларуси. Формирование белорусской национальной композиторской школы завершилось к концу XIX столетия и фортепианное искусство как композиторское...
14208. ИСТОРИЯ БЕЛОРУССКОЙ МУЗЫКАЛЬНОЙ КУЛЬТУРЫ ДО XX ВЕКА 553.5 KB
  Е.С. Бондаренко ИСТОРИЯ БЕЛОРУССКОЙ МУЗЫКАЛЬНОЙ КУЛЬТУРЫ ДО XX ВЕКА Учебно-методическое пособие Минск 2007 ВВЕДЕНИЕ Курс истории белорусской музыки музыки нашей страны занимает одно из важнейших мест в ряду музыкальнои...
14209. История белорусской музыки ХХ века 3.37 MB
  Л.А. Волкова История белорусской музыки ХХ века Симфония В пособии освещены актуальные проблемы исторической эволюции национального симфонизма и собственно симфонии жанра занимающего центральное место в белорусской музыке ХХ века. Особое внимание уде...
14210. Музична память (англ. music memory) 155 KB
  Музична память. Музична память англ. music memory здатність впізнавати і відтворювати музичний матеріал. Музичне впізнавання необхідно для осмисленого сприйняття музики. Необхідна умова музичної памяті достатній розвиток музичного слуху. Важливе місце в музичній