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

 

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

45432. Модель нейрона. Понятие нейронной сети. Особенности функционирования технических структур, моделируемых нейронной сетью 92 KB
  Схема работы натрийкалиевого насоса: а активные центры захватили ион калия снаружи и ион натрия внутри клетки; б белковая молекула захватившая ионы повернулась на 180 за счет энергии АТФ и освободила захваченные ионы при этом калий попал внутрь клетки а ион натрия был выброшен наружу в молекула вновь повернулась на 180 и готова к захвату новых ионов. Диффузия в жидкостях происходит при помощи ионов. Идет расслаивание ионов возникает потенциал...
45433. Модель обучения на примере автоматов с линейной тактикой. Автомат с переменной структурой 124.5 KB
  Автомат с переменной структурой. Рациональность поведения автомата в детерминированной стохастической стационарной и нестационарной среде. Автомат с линейной тактикой рис.
45434. Применение метода оценочной функции при реализации интеллектуальных функций. Уровни интеллектуальности поведения 61.5 KB
  Черепаха представляет собой трехколесную тележку на которой размещены аккумуляторы система реле и электронная ламповая схема. Схема отрегулирована таким образом что при низком потенциале анода лампы Л1 запирается лампа Л2 и реле Р2 устанавливается так что исключается одновременное нахождение под током реле P1 и Р2. При умеренном освещении фотоэлемента лампа Л2 приоткрывается однако проводимый ею ток недостаточен для срабатывания реле P1 хотя уменьшение напряжения на аноде лампы и приводит к отпусканию реле Р2. Замыкание...
45435. Модели языка. Синтез и анализ языковых фрагментов. Проблема представления знаний 351 KB
  Проблема представления знаний Язык Человек лингвизирует свой мир живет в мире пересотворяемом с помощью его собственного языка. Границы языка границы мира. Если два языка подобны некой системе то они подобно друг другу.
45436. Понятие ядра и процесса, состояние процесса, подпроцессы. Межпроцессное взаимодействие 175.5 KB
  Межпроцессное взаимодействие Резидентная в RM часть OS UNIX называется ядром. Все работы вне ядра оформлены в виде процессов выполнения системных и прикладных программ. Под процессом понимается единица вычислительной работы потребляющая ресурсы предоставляемые ядром для обработки системных и прикладных программ которые оформлены как командные или выполняемые файлы на внешнем устройстве.
45437. Понятия приоритета и очереди процессов. Диспетчеризация и синхронизация процессов 128.5 KB
  Диспетчеризация и синхронизация процессов. Алгоритмы планирования процессов Планирование процессов включает в себя решение следующих задач: определение момента времени для смены выполняемого процесса; выбор процесса на выполнение из очереди готовых процессов; переключение контекстов старого и нового процессов. Средства аппаратной поддержки управления памятью и многозадачной среды в микропроцессорах Intel 80386 80486 и Pentium .
45438. Программирование на Shell. Скрипты 227 KB
  Shell интерпретатор командного языка В этом разделе описаны команды и символы имеющие специальное значение которые позволяют: находить с помощью шаблона и манипулировать группами файлов; запускать команду в фоновом режиме или в определенное время; выполнять последовательно группу команд; перенаправлять стандартный ввод и вывод; завершать работающие программы. Таблица 20 Метасимволы Символ Функция [ ] Эти метасимволы позволяют указывать сокращенные имена файлов при поиске по шаблону Означает что команда будет выполняться...
45439. Управление оперативной памятью (распределение и защита) в многозадачной ОС. Механизм реализации виртуальной памяти 211 KB
  Механизм реализации виртуальной памяти. От выбранных механизмов распределения памяти между выполняющимися процессорами в значительной степени зависит эффективность использования ресурсов системы ее производительность а также возможности которыми могут пользоваться программисты при создании своих программ. С другой стороны поскольку любой процесс имеет потребности в операциях вводавывода и процессор достаточно часто переключается с одной задачи на другую желательно в оперативной памяти расположить достаточное количество активных задач с...
45440. Планирование и диспетчеризация процессов и задач 611 KB
  Долгосрочный планировщик решает какой из процессов находящихся во входной очереди в случае освобождения ресурсов памяти должен быть переведен в очередь процессов готовых к выполнению. Они определяются не только переключениями контекстов задач но и при переключении на потоки другого приложения перемещениями страниц виртуальной памяти а также необходимостью обновления данных в кэше коды и данные одной задачи находящиеся в кэше не нужны другой задаче и будут заменены что приведет к дополнительным задержкам. От выбранных механизмов...