ЗОТФ-ЗФ / 5.1. Стандартные модули и модульная структура приложений в VB / Оформление 5.1
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
СВЯЗИ И ИНФОРМАТИКИ
Кафедра информатики
Курсовая работа
по теме: «5.1. Стандартные модули и модульная структура приложений в VB»
Задание
1. Выбрать вариант задания из таблицы 5.1-1 в соответствии с указанием преподавателя, а также, по указанию преподавателя, студент выбирает варианты реализации проекта: со стандартным модулем и двумя формами и вводом с клавиатуры; со стандартным модулем и двумя формами и вводом из файла.
2. Провести формализацию задачи, для чего необходимо:
• определить перечень исходных данных и предусмотреть для них проверку правильности ввода;
• представить смысловые данные, которые будут использоваться в ходе решения задачи в виде переменных и массивов, присвоив им соответствующие имена;
• определить размерности и типы используемых данных;
• представить выходные данные в виде массивов;
• привести геометрическую иллюстрацию решения задачи;
• при необходимости привести расчетные формулы, которые будут использоваться для преобразования исходных данных в результаты.
3. Разработать интерфейс пользователя:
• разработать форму, предназначенную для ввода исходных данных, как с клавиатуры, так и из текстового файла, и для отображения входных данных на форме;
• разработать выходную форму, предназначенную для вывода результатов решения задачи, как на форму, так и для записи в файл.
4. Составить общую (укрупненную) схему алгоритма решения задачи.
5. Составить схемы алгоритмов решения функциональных задач с учетом того, что они будут реализованы в виде процедур с параметрами.
6. Создать программный код проекта, реализующий поставленную задачу.
Графический интерфейс
Программный код Form 1
'на этой форме вводятся и выводятся исходные данные о кандидатах
Option Strict On
Public Class Form1
'Процедура ввода данных с клавиатуры
Public Sub vvod(ByVal n As Integer, ByVal m As Integer, _
ByRef okr() As String, ByRef part() As String, ByRef oc(,) As Integer)
Dim i, j As Integer
For i = 0 To n - 1
part(i) = InputBox("Введите название партии")
Next
For j = 0 To m - 1
okr(j) = InputBox("Введите название округа")
For i = 0 To n - 1
oc(i, j) = CInt(InputBox("Сколько голосов набрал кандидат от партии " + part(i) + " в округе " + okr(j)))
Next i
Next j
End Sub
'кнопка для ввода с клавиатуры
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim s As String = ""
n = CInt(InputBox("Введите количество партий"))
m = CInt(InputBox("Введите количество округов"))
ReDim oc(n - 1, m - 1), part(n - 1), okr(m - 1), sr(m - 1), proh(n - 1), maxo(n - 1), max(n - 1) 'liner(m - 1)
'вызов процедуры ввода группы с клавиатуры
vvod(n, m, okr, part, oc)
ReDim so(m - 1)
func1(n, m, oc, so, sr, proh) ' Подсчет значений
VivodMasStr(okr, s) ' Вывод в текстовые поля, после ввода данных.
TextBox5.Text = s
VivodMasStr(part, s)
TextBox3.Text = s
vivodMatr(oc, n, m, s)
TextBox2.Text = s
'Кнопку3 делаем доступной после ввода данных и расчета
'средних баллов
Button3.Enabled = True
End Sub
'Процедура для продолжения работы программы(перехода на 2-ю форму)
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button2.Click
Dim Form2 As New Form2
Me.Hide()
Form2.ShowDialog()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button3.Click
End
End Sub
End Class
Программный код Form 2
Public Class Form2
' Формирование массива f() фамилий кандидатов,
' и массива sb() с количествами прошедших кандидатов
Public Sub FormirSpisok(ByVal n As Integer, ByVal sr() As Integer, _
ByVal so() As Integer, _
ByRef f() As String, ByRef sb() As Integer, ByRef k As Integer)
Dim i As Integer
k = 0
For i = 0 To n - 1
f(k) = part(i)
sb(k) = proh(i)
k = k + 1
Next
ReDim Preserve f(k - 1), sb(k - 1)
End Sub
'сортировка по убыванию
Sub sort(ByRef s() As String, ByRef kol() As Integer, ByRef max() As Integer)
Dim i, j, k As Integer, temp As String, t As Integer, z As Integer
k = s.Length - 1
For i = 0 To k - 1
For j = i + 1 To k
If kol(i) < kol(j) Then
t = kol(i) : kol(i) = kol(j) : kol(j) = t
temp = s(i) : s(i) = s(j) : s(j) = temp
z = maxo(i) : maxo(i) = maxo(j) : maxo(j) = z
End If
Next
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim z As String = "" 'строка для вывода массивов
Dim k As Integer 'кол-во партий, прошедших в Думу
Dim f(n - 1) As String 'массив партий победителей
Dim sb(n - 1) As Integer 'Набранный балл
FormirSpisok(n, sr, so, f, sb, k)
sort(f, sb, maxo)
VivodMasStr(f, z) 'Финальные выводы
TextBox1.Text = z
TextBox3.Text = okr(maxo(0))
VivodMas(sb, z)
TextBox2.Text = z
End Sub
' Кнопка для повторения
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Me.Hide()
Dim Frm1 As New Form1
Frm1.TextBox2.Text = ""
Frm1.TextBox3.Text = ""
Frm1.Button1.Enabled = True
Frm1.Button2.Enabled = True
Frm1.Button3.Enabled = True
Frm1.Show()
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
End
End Sub
End Class
Программный код Module1
Option Strict On
Option Explicit On
Module Module1
Public n As Integer ' Количество партий
Public m As Integer ' Количество округов
Public oc(,) As Integer ' Голоса, полученные в сессию
Public part() As String ' Название партии по n обязательная
Public okr() As String ' Названия округов по м обязательная
Public sr() As Integer ' Максимальное число голосов в регионе по м
Public so() As Integer ' номер победителей в округе по m
' Public liner() As Integer ' Сумма всех голосов по m (не пригодился)
Public proh() As Integer ' Число прошедших кандидатов по n
Public max() As Integer ' Максимальное число голосов за партию по n
Public maxo() As Integer ' Номер победного региона по n
Public Sub func1(ByVal n As Integer, ByVal m As Integer, _
ByRef oc(,) As Integer, ByRef so() As Integer, _
ByRef sr() As Integer, ByRef proh() As Integer) ' Подсчет значений
Dim i, j As Integer
For j = 0 To m - 1
' liner(j) = 0
sr(j) = 0
For i = 0 To n - 1
If sr(j) < oc(i, j) Then
sr(j) = oc(i, j) ' Максимальное значение в регионе
so(j) = i ' Номера победителей в округе
End If
' liner(j) = liner(j) + oc(i, j) ' Всего голосов в регионе
Next i
Next j
For i = 0 To n - 1
maxo(i) = -1
For j = 0 To m - 1
If i = so(j) Then
proh(i) = proh(i) + 1
If max(i) > -1 Then
If max(i) < sr(j) Then
max(i) = sr(j)
maxo(i) = j
End If
End If
End If
Next
Next
End Sub
'Процедура вывода строкового массива данных
Public Sub VivodMasStr(ByVal a() As String, ByRef z As String)
Dim i As Integer
z = ""
For i = 0 To UBound(a)
z = z + a(i) + vbNewLine
Next
End Sub
'Процедура вывода вещественного массива данных
Public Sub VivodMas(ByVal a() As Integer, ByRef z As String)
Dim i As Integer
z = ""
For i = 0 To UBound(a)
z = z + Format(a(i), "0") + vbNewLine
Next
End Sub
'Процедура вывода двумерного массива
'(собираем матрицу в одну строку)
Sub vivodMatr(ByRef x(,) As Integer, ByVal n As Integer, _
ByVal m As Integer, ByRef z As String)
Dim i, j As Integer
z = ""
For j = 0 To m - 1
For i = 0 To n - 1
z = z + CStr(x(i, j)) & Space(3)
Next i
z = z + vbNewLine
Next j
End Sub
End Module
~