- •Тема 5.1. Лабораторная работа «Стандартные модули и модульная структура приложений в vb»
- •5.1.1. Задание
- •5.1.2. Варианты задания
- •5.1.3. Содержание отчета
- •1 Вариант реализации проекта:
- •Разработка проекта:
- •Ввод количества студентов в группе – n;
- •Выполнение приложения и получение результатов:
- •Выполнение приложения и получение результатов:
- •Доказательство правильности работы программ.
- •3 Вариант реализации проекта:
- •Разработка проекта:
- •Выполнение приложения и получение результатов:
Выполнение приложения и получение результатов:
Результаты работы проекта Проект-5-1-Лаб-2 (вариант 2) представлены на рис. 5.1-12 и рис. 5.1.13.
Рис. 5.1-12 Рис. 5.1-13
Доказательство правильности работы программ.
3 Вариант реализации проекта:
Одна группа; в программном коде проекта используется стандартный модуль и две формы; исходные данные вводятся из текстового файла чтением целиком в одну строку и выводятся на первую форму одной строкой; результаты вычислений формируются в одну строку, которая записывается в другой текстовый файл; записанные в файл результаты считываются и отображаются на второй форме.
Формат исходного файла: допускается разделение данных в строке несколькими пробелами, т.е. может иметь формат вида: фамилия 5 4 5 3 4.
Разработка проекта:
Разработка графического интерфейса пользователя
Разработанная форма интерфейса приведена на рис. 5.1-14 и рис. 5.1-15.
Рис. 5.1-14 Рис. 5.1-15
Установка свойств объектов
Свойства объектов управления разработанной формы студенты устанавливают самостоятельно и отображают в таблице.
Разработка схемы алгоритма
В соответствии с заданием 3-го варианта реализации проекта, решение задачи можно разбить на следующие функциональные задачи:
ввод исходных данных из текстового файла одной строкой – vvodFile(“путь1”, s);
отображение данных в текстовом поле на форме – vivod(s, TextBox);
получение из этой строки массива подстрок lineset( ) с помощью функции Split( ) и определение n;
cоздание массива фамилий студентов fam( ) и массива оценок oc( ) – sozdmas(Lineset, n, fam, oc);
нахождение общего среднего балла за сессию студентов одной группы – sr и средних баллов студентов – sred(oc, n, so, sr);
сортировка массива so( ) и fam( ) в порядке убывания – sort(so,fam, n);
формирование строки s из фамилий и средних баллов студентов, для которых средняя оценка so(i) меньше sr – функция res(fam, so, n, sr);
запись строки результата в текстовый файл – vivod("путь2", s);
чтение результатов из файла - vvodFile("путь2", s) и отображение результатов на форме.
Общая (укрупненная) схема алгоритма решения задачи представлена на рис. 5.1-16.
Рис. 5.1-16
Схемы алгоритмов отдельных функциональных задач студенты должны разработать самостоятельно, в соответствии с функциональной схемой.
Написание программного кода с использованием модуля и процедур
Программный код проекта, представлен на рис. 5.1-17.
-
Option Strict On
Option Explicit On
Imports System.IO
Module Module1
Public n As Integer 'Количество студентов
Public oc(,) As Integer ' Оценки, полученные в сессию
Public fam() As String ' Фамилии студентов
Public sr As Single ' Средний балл за сессию
Public so() As Single ' Средние баллы, полученные за сессию
'Процедура сортировки массивов методом пузырька
Sub sort(ByRef so() As Single, ByRef fam() As String, _
ByVal n As Integer)
Dim i, j As Integer
Dim m 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
m = so(j) : so(j) = so(j - 1) : so(j - 1) = m
c = fam(j) : fam(j) = fam(j - 1) : fam(j - 1) = c
End If
Next
Next
End Sub
'Процедура определения среднего балла за сессию
' и средних баллов каждого студента
Sub sred(ByVal oc(,) As Integer, ByVal n As Integer, _
ByRef so() As Single, ByRef sr As Single)
Dim i, j As Integer
ReDim so(n - 1)
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
' Функция формирования одной строки из отсортированного массива
' студентов,имеющих средний балл ниже общего среднего
Function res(ByVal fam() As String, ByVal so() As Single, _
ByVal n As Integer, ByVal sr As Single) As String
'Создание объекта result типа StringBuilder(результирующей строки)
'для очень быстрой и эффективной обработки строковых данных
Dim result As New System.Text.StringBuilder
For i As Integer = 0 To n - 1
If so(i) < sr Then
result.Append(fam(i))'добавление фамилии в объект result
result.Append(Space(1)) 'добавление пробела
result.Append(so(i).ToString) 'добавление среднего балла
result.Append(vbNewLine)’добавление признака конца стр.
End If
Next i
Return result.ToString
End Function
'Процедура создания массива фамилий студентов и массива оценок
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))
'Первый элем. этого массива-фамилия,следующие-оценки
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
Sub vivod(ByVal z As String, ByVal T As TextBox)
T.Text = z
End Sub
End Module
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:\myfile.txt", s) 'vvodFile("d:\myfile2.txt", s)
'вывод данных в Textbox
vivod(s, TextBox1)
Dim lineset() As String
'Ф-ция Split разбивает строку s на массив подстрок lineset()
'по символам конца строки vbNewLine
lineset = Split(s, vbNewLine)
n = lineset.Length 'кол. эл-тов получ. массива(кол.студентов)
ReDim fam(n - 1), oc(n - 1, 4)
'Вызов проц-ры создания массива фамилий студ.и массива оценок
sozdmas(lineset, n, fam, oc)
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
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
sred(oc, n, so, sr) 'Расчет средних баллов
vivod(CStr(sr), TextBox1)
sort(so, fam, n) 'Сортировка по убыванию средних оценок
End Sub
' Событийная процедура для записи в текстовый файл студентов,
' имеющих средний балл ниже общего среднего
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button2.Click
Dim s As String = ""
'Вызов функции формирования одной строки из отсортированного
'массива студентов,имеющих средний балл ниже общего среднего
s = res(fam, so, n, sr)
'Вызов процедуры записи результата в текстовый файл
vivodFile("c:\myfile1.txt", s)'vivodFile("d:\myfile3.txt", s)
'Вызов процедуры чтения результата из текстового файл
vvodFile("c:\myfile1.txt", s)
vivod(s, TextBox2)
End Sub
'Процедура для окончания работы программы
Private Sub Button3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button3.Click
End
End Sub
End Class
Рис. 5.1-17