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

Результаты работы проекта (вариант 1) представлены на рис. 5.1-6 и рис. 5.1.7.

Рис. 5.1-6 Рис. 5.1-7

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

2 вариант реализации проекта:

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

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

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

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

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

Рис. 5.1-8 Рис. 5.1-9

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

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

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

В соответствии с заданием 2-го варианта реализации проекта, решение задачи можно разбить на следующие функциональные задачи:

    • ввод исходных данных из текстового файла и определение количества студентов в группе – readfile(“путь1”, n, p);

    • отображение данных в текстовое поле на форме - vivod(p, TextBox);

    • создание массива фамилий студентов fam( ) и массива оценок oc( ) из читаемого файла – sozdmas(“путь1”, n, fam, oc);

    • нахождение общего среднего балла за сессию студентов одной группы – sr и средних баллов студентов – sred(oc, n, so, sr) ;

    • сортировка массива so( ) и fam( ) в порядке убывания – sort(so, fam, n);

    • решение задачи: определение студентов, для которых средняя оценка меньше общей средней в группе и формирование двух строк-списков из их фамилий и средних оценок – Reshenie(sr, fam, so, n, p1, p2);

    • запись результатов в текстовый файл – writefile(“путь2”,fam, so, n, sr).

Общая (укрупненная) схема алгоритма решения задачи представлена на рис. 5.1-10.

Рис. 5.1-10

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

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

Программный код, решаемой задачи, реализованный с использованием процедур, стандартного модуля и двух форм, представлен на рис. 5.1-11.

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 ' Средние баллы, полученные за сессию

'Процедура вывода строки в Textbox

Sub vivod(ByVal z As String, ByVal T As TextBox)

T.Text = z

End Sub

'Процедура сортировки массива средних оценок по убыванию

'методом пузырька с одновременной перестановкой фамилий

Sub sort(ByRef so() As Single, ByRef f() 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 = f(j) : f(j) = f(j - 1) : f(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

'Процедура построчного чтения сведений о студентах из тек. файла,

'подсчета числа студентов и формирования строки для вывода данных

Sub readfile(ByVal filename As String, ByRef n As Integer, _

ByRef p As String)

'создание потока для чтения из текстового файла

Dim f = New StreamReader(filename)

Dim line As String

p = "" 'строка с исходными данными

n = 0 'количество строк в файле

Try

Do While Not f.endOfStream 'пока не достигнут конец потока

line = f.ReadLine() 'чтение строки из файла в line

n = n + 1

p = p & line & vbNewLine

Loop

f.close() 'закрытие потока

Catch ex As Exception

MsgBox("Невозможно прочитать данные из файла")

End Try

End Sub

' Процедура построчной записи в текстовый файл отсортированного

' массива студентов,имеющих средний балл ниже общего среднего

Sub writefile(ByVal filename As String, ByVal fam() As String, _

ByVal so() As Single , ByVal n As Integer, _

ByVal sr As Single)

'создание нового текст. файла и потока wf для записи в файл

Dim wf As StreamWriter = File.CreateText(filename)

Dim s As String

For i As Integer = 0 To n - 1

If so(i) < sr Then

s = fam(i) + " " + CStr(so(i))

'запись сведений об одном студенте в текстовый файл

wf.WriteLine(s)

End If

Next

wf.Flush() : wf.Close() 'очистка и закрытие потока

End Sub

' Процедура формирования списка студентов

' имеющих средний балл ниже общего среднего

Sub Reshenie(ByVal sr As Single, ByVal fam() As String, _

ByVal so() As Single , ByVal n As Integer, _

ByRef p1 As String, ByRef p2 As String)

Dim i As Integer

p1 = "" 'формируемая строка из фамилий

p2 = "" 'формируемая строка средних баллов ниже общ. средн.

For i = 0 To n - 1

If so(i) < sr Then

p1 = p1 & fam(i) & vbNewLine

p2 = p2 & CStr(so(i)) & vbNewLine

End If

Next i

End Sub

'Процедура построчного считывания сведений о студентах из файла

'и создание массива фамилий студентов и массива оценок

Sub sozdmas(ByVal filename As String , ByVal n As Integer, _

ByRef fam() As String, ByRef oc(,) As Integer)

Dim p, i, j As Integer

ReDim fam(n - 1), oc(n - 1, 4)

Dim line, ball As String

'создание потока для чтения из текстового файла

Dim f As New StreamReader(filename)

Try

i = 0

Do While Not f.EndOfStream 'пока не достигнут конец потока

line = f.ReadLine() 'чтение строки из файла в line

line = line + " " 'добавляем пробел в конец строки

p = line.IndexOf(" ") 'p-позиция первого пробела

'в переменной line подстрока до первого пробела-это

'фамилия

fam(i) = line.Substring(0, p)

'удаление из строки line фамилии с пробелом

line = line.Remove(0, p + 1)

For j = 0 To 4

p = line.IndexOf(" ")

'p-позиция 1-го пробела в строке

'теперь в line подстрока до 1-го пробела-это оценка

ball = line.Substring(0, p)

oc(i, j) = CInt(ball)

'удаление из строки line оценки с пробелом

line = line.Remove(0, p + 1)

Next

i = i + 1

Loop

f.Close()

Catch ex As Exception

MsgBox("Невозможно прочитать данные из файла")

End Try

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 p As String

readfile("d:\myfile2.txt", n, p)’вызов проц. чтения из файла

vivod(p, TextBox1)

sozdmas("d:\myfile2.txt", n, fam, oc)'вызов проц.

'созд.массивов из файла

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles Button2.Click

Form2.Show() 'показ 2 формы для продолжения решения

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

Dim p1 As String = ""

Dim p2 As String = ""

'Расчет средних баллов

sred(oc, n, so, sr)

vivod(CStr(sr), TextBox1)

'Вызов процедуры сортировки по убыванию средних оценок

sort(so, fam, n)

' Вызов процедуры вывода списка студентов,

' имеющих средний балл ниже общего среднего

Reshenie(sr, fam, so, n, p1, p2)

vivod(p1, TextBox2) : vivod(p2, TextBox3)

End Sub

' Запись в текстовый файл студентов,

' имеющих средний балл ниже общего среднего

Private Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles Button2.Click

writefile("d:\myfile13.txt", fam, so, sr)

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-11.