Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР-05-01 «Стандартные модули и модульная структура приложений в VB».doc
Скачиваний:
48
Добавлен:
03.05.2015
Размер:
880.13 Кб
Скачать
  1. Выполнение приложения и получение результатов:

Результаты работы проекта Проект-5-1-Лаб-2 (вариант 2) представлены на рис. 5.1-12 и рис. 5.1.13.

Рис. 5.1-12 Рис. 5.1-13

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

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

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

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

  1. Разработка проекта:

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

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

Рис. 5.1-14 Рис. 5.1-15

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

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

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

В соответствии с заданием 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

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

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

Программный код проекта, представлен на рис. 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