«информатика»

Вид материалаКурсовая

Содержание


Процедуры обработки событий (писание программного хода приложения)
Подобный материал:
1   2   3   4   5   6

Процедуры обработки событий (писание программного хода приложения)


Option Explicit

Dim p As Double ' сумма валюты

Dim i As Double 'ставка наращения для рублевой суммы

Dim n As Double 'срок депозита

Dim k0 As Double 'курс валюты на начало операции

Dim k1 As Double 'курс валюты на конец операции

________________________________________________________________________________

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

Public Function s(ByVal p As Double, ByVal i As Double, ByVal n As Double, ByVal k0 As Double, ByVal k1 As Double) As Double

Const Msg As String = "Ошибка при вычислении показателя!"

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

On Error GoTo err1 ' в случае ошибки, перейти на метку err1

s = p * k0 * (1 + n / 12 * i / 100) * (1 / k1) ' функция наращения суммы в валюте

On Error GoTo 0

On Error GoTo 0

Exit Function ' выйти из функции

err1: ' обработка ошибки

If Err.Number = 6 Then 'если ошибка - переполнение, вывести на экран сообщение

MsgBox Msg"Переполнение"

Err.Clear 'очистка поля ошибки

Else

MsgBox Msg & Err.Number

Err.Clear

End If

' очистка формы

Picture1.Cls 'очистка PictureBox

Frame1.Enabled = False 'фрейм недоступен

Frame2.Enabled = False 'фрейм недоступен

End Function

__________________________________________________________________________________

Private Sub Form_Load()

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

Picture1.Cls 'очистка PictureBox

Frame1.Enabled = False 'фрейм не доступен

Frame2.Enabled = False 'фрейм не доступен

Command6.Enabled = False ' коммандная кнопка не доступна

End Sub

__________________________________________________________________________________

Private Sub Command1_Click()

'после нажатия кнопки "Расчет показателя", становится доступным фрейм "Расчет показателя остальные элементы формы становятся недоступными.

Frame1.Enabled = True 'фрейм доступен

Frame2.Enabled = False 'фрейм недоступен

Command6.Enabled = True 'кнопка доступна

Text6.Text = "" 'очистка текстовых окон

Text1.SetFocus

End Sub

__________________________________________________________________________________

Private Sub Text1_KeyPress (KeyAscii As Integer) 'после нажатия клавиши «enter» происходит перемещение курсора в текстовое окно.

If KeyAscii = 13 Then ' если нажата клавиша «Enter»

Text2.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text2_KeyPress (KeyAscii As Integer)

'после нажатия клавиши «enter» происходит перемещение курсора в текстовое окно.

If KeyAscii = 13 Then ' если нажата клавиша «Enter»

Text3.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text3_KeyPress (KeyAscii As Integer)

'после нажатия клавиши "Enter"производится перевод курсора на командную кнопку OK.

If KeyAscii = 13 Then ' если нажата клавиша «Enter»

Text4.SetFocus 'перевести курсор в текстовое окно.

End If

End Sub


Private Sub Text4_KeyPress(KeyAscii As Integer) 'после нажатия клавиши "Enter"производится перевод курсора в текстовое окно.

If KeyAscii = 13 Then ' если нажата клавиша «Enter»

Text5.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text5_KeyPress(KeyAscii As Integer)

'после нажатия клавиши "Enter"производится перевод курсора в текстовое окно.

If KeyAscii = 13 Then ' если нажата клавиша «Enter»

Command2.SetFocus ' перевести курсор в текстовое окно

End If

End Sub

__________________________________________________________________________________

Private Sub Command2_Click()

'Dim nChr As Long

'производится проверка на заполнение текстовых окон (если окно не заполнено, то происходит выдача сообщения и курсор переводится в соответствующее текстовое окно)

'проверка данных начата.

If Text1.Text = "" Then

MsgBox "Сумма валюты не задана.", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text1.Text = ""

Text1.SetFocus

Exit Sub

End If

If Not IsNumeric(Text1.Text) Then ' проверка на число.

MsgBox "Сумма валюты не - число.<" & Text1.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text1.Text = ""

Text1.SetFocus

Exit Sub

End If

If Val(Text1.Text) <= 0 Then

MsgBox "Сумма валюты должна быть положительной.", vbExclamation + vbOKOnly, " Проверка исходных данных."

Text1.Text = ""

Text1.SetFocus

Exit Sub

End If


If Text2.Text = "" Then

MsgBox "Процентная ставка не задана.", vbExclamation + vbOKOnly, " Проверка исходных данных."

Text2.Text = ""

Text2.SetFocus

Exit Sub

End If

If Not IsNumeric(Text2.Text) Then

MsgBox "Процентная ставка - не число.<" & Text2.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text2.Text = ""

Text2.SetFocus

Exit Sub

End If

If Val(Text2.Text) <= 0 Then

MsgBox "Процентная ставка должна быть положительной.", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text2.Text = ""

Text2.SetFocus

Exit Sub

End If


If Text3.Text = "" Then

MsgBox "срок депозита не задан.", vbExclamation + vbOKOnly, " Проверка исходных данных."

Text3.Text = ""

Text3.SetFocus

Exit Sub

End If

If Not IsNumeric(Text3.Text) Then

MsgBox "срок депозита – не число.<" & Text3.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text3.Text = ""

Text3.SetFocus

Exit Sub

End If

If Val(Text3.Text) <= 0 Then

MsgBox "Срок депозита должен быть положительным.", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text3.Text = ""

Text3.SetFocus

Exit Sub

End If

If Text4.Text = "" Then

MsgBox "Курс на начало периода не задан.", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text4.Text = ""

Text4.SetFocus

Exit Sub

End If

If Not IsNumeric(Text4.Text) Then

MsgBox "курс на начало периода – не число.<" & Text4.Text & ">", vbExclamation + vbOKOnly," Проверка исходных данных."

Text4.Text = ""

Text4.SetFocus

Exit Sub

End If

If Val(Text4.Text) <= 0 Then

MsgBox "Курс на начало периода должен быть положительным.", vbExclamation + vbOKOnly,

"Проверка исходных данных."

Text4.Text = ""

Text4.SetFocus

Exit Sub

End If

If Text5.Text = "" Then

MsgBox "курс на конец периода не задан.", vbExclamation + vbOKOnly, "Проверка исходных данных."

Text5.Text = ""

Text5.SetFocus

Exit Sub

End If

If Not IsNumeric(Text5.Text) Then

MsgBox "Курс на конец периода – не число.<" & Text5.Text & ">", vbExclamation + vbOKOnly,

" Проверка исходных данных."

Text5.Text = ""

Text5.SetFocus

Exit Sub

End If

If Val(Text5.Text) <= 0 Then

MsgBox "Курс на конец периода должен быть положительным.", vbExclamation + vbOKOnly,

"Проверка исходных данных."

Text5.Text = ""

Text5.SetFocus

Exit Sub

End If

'проверка исходных данных закончена.

'После проверки происходит вызов функции для расчета финансового показателя (в качестве параметров передаются значения текстовых окон)

' Результаты расчета передаются в текстовое окно "сумма платежа"

' Все три фрейма становятся недоступными (доступ возможен к командным кнопкам «Построение графика», «Расчет показателя», «Выход»).

'Проверка закончена, получаем исходные данные для вычисления.


p = Val(Text1.Text) ' Val(string) – возвращает числовую составляющую строки

i = Val(Text2.Text) ' Присвоение переменным значений введенных параметров из

n = Val(Text3.Text) ' текстовых окон

k0 = Val(Text4.Text)

k1 = Val(Text5.Text)

Text6.Text = CStr(s(p, i, n, k0, k1))

' В текстовое окно передать значение результата.


Frame1.Enabled = False ' Фрейм 1 недоступен.

Frame2.Enabled = False ' Фрейм 2 доступен.


Command1.Enabled = True 'Командная кнопка доступна.

Command2.Enabled = True 'Командная кнопка доступна.

Picture1.Cls 'очистка PictureBox

End Sub

__________________________________________________________________________________

'кнопка Command3 используется для активизации рамки Frame2

Private Sub Command3_Click()

Frame1.Enabled = False 'фрейм недоступен

Frame2.Enabled = True 'фрейм доступен

Picture1.Cls 'очистка PictureBox

Command6.Enabled = True 'кнопка доступна

Text6.Text = "" 'очистка текстового окна

Text7.SetFocus

End Sub

__________________________________________________________________________________

Private Sub Text7_KeyPress(KeyAscii As Integer)

'После нажатия кнопки "Enter" производится перевод курсора в следующее текстовое окно.

If KeyAscii = 13 Then ' ' Если нажата клавиша Enter

Text8.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text8_KeyPress(KeyAscii As Integer)

'После нажатия кнопки "Enter" производится перевод курсора в следующее текстовое окно.

If KeyAscii = 13 Then ' Если нажата клавиша Enter

Text9.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text9_KeyPress(KeyAscii As Integer)

'После нажатия кнопки "Enter" производится перевод курсора в следующее текстовое окно.

If KeyAscii = 13 Then ' Если нажата клавиша Enter

Text10.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text12_KeyPress(KeyAscii As Integer)

'после нажатия клавиши "Enter"производится перевод курсора на командную кнопку OK.

If KeyAscii = 13 Then ' Если нажата клавиша Enter

Command4.SetFocus ' перевести курсор на командную кнопку OK.

End If

End Sub


Private Sub Text10_KeyPress(KeyAscii As Integer)

'После нажатия кнопки "Enter" производится перевод курсора в следующее текстовое окно.

If KeyAscii = 13 Then ' Если нажата клавиша Enter

Text11.SetFocus ' перевести курсор в текстовое окно

End If

End Sub


Private Sub Text11_KeyPress(KeyAscii As Integer)

'После нажатия кнопки "Enter" производится перевод курсора в следующее текстовое окно.

If KeyAscii = 13 Then ' Если нажата клавиша Enter

Text12.SetFocus ' перевести курсор в текстовое окно

End If

End Sub

__________________________________________________________________________________

Private Sub Command4_Click() ' кнопка с именем Command4 используется для проверки

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

' построения графика

Dim minfx As Double

Dim maxfx As Double

Dim minX As Double

Dim maxX As Double

Dim step_t As Double

Dim st As Double

Dim nChr As Long

'Проверка исходных данных начата.

If Text7.Text = "" Then

MsgBox "Сумма валюты не задана.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text7.SetFocus

Exit Sub

End If

If Not IsNumeric(Text7.Text) Then

MsgBox "Сумма валюты – не число.<" & Text7.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text7.Text = ""

Text7.SetFocus

Exit Sub

End If

If Val(Text7.Text) <= 0 Then

MsgBox "Сумма валюты должна быть положительной", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text7.Text = ""

Text7.SetFocus

Exit Sub

End If

If Text8.Text = "" Then

MsgBox "Прцентная ставка не задана.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text8.Text = ""

Text8.SetFocus

Exit Sub

End If

If Not IsNumeric(Text8.Text) Then

MsgBox "Процентная ставка – не число.<" & Text8.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text8.Text = ""

Text8.SetFocus

Exit Sub

End If

If Val(Text8.Text) <= 0 Then

MsgBox "Процентная ставка должна быть положительной.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text8.Text = ""

Text8.SetFocus

Exit Sub

End If

If Text9.Text = "" Then

MsgBox "Срок депозита не задан.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text9.Text = ""

Text9.SetFocus

Exit Sub

End If

If Not IsNumeric(Text9.Text) Then

MsgBox "Срок депозита – не число.<" & Text9.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text9.Text = ""

Text9.SetFocus

Exit Sub

End If

If Val(Text9.Text) <= 0 Then

MsgBox "Срок депозита должен быть положительным.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text9.Text = ""

Text9.SetFocus

Exit Sub

End If

If Text10.Text = "" Then

MsgBox "курс на начало периода не задан.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text10.Text = ""

Text10.SetFocus

Exit Sub

End If

If Not IsNumeric(Text10.Text) Then

MsgBox "Курс на начало периода – не число.<" & Text10.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text10.Text = ""

Text10.SetFocus

Exit Sub

End If

If Val(Text10.Text) <= 0 Then

MsgBox "курс на начало периода должен быть положительным.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text10.Text = ""

Text10.SetFocus

Exit Sub

End If

If Text11.Text = "" Then

MsgBox "Курс на конец периода не задан.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text11.Text = ""

Text11.SetFocus

Exit Sub

End If

If Not IsNumeric(Text11.Text) Then

MsgBox "курс на конец периода – не число.<" & Text11.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text11.Text = ""

Text11.SetFocus

Exit Sub

End If

If Val(Text11.Text) <= 0 Then

MsgBox "курс на конец периода должен быть положительным.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text11.Text = ""

Text11.SetFocus

Exit Sub

End If

If Text12.Text = "" Then

MsgBox "Шаг графика не задан.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text12.Text = ""

Text12.SetFocus

Exit Sub

End If

If Not IsNumeric(Text12.Text) Then

MsgBox "Шаг графика –не число.<" & Text12.Text & ">", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text12.Text = ""

Text12.SetFocus

Exit Sub

End If

If Val(Text12.Text) <= 0 Then

MsgBox "Шаг графика должен быть положительным.", vbExclamation + vbOKOnly, "Проверка исходных данных"

Text12.Text = ""

Text12.SetFocus

Exit Sub

End If

'проверка исходных данных закончена.

Picture1.Cls ' очистка элемента PictureBox

p = Val(Text7.Text) ' Val(string) - возвращает числовую составляющую строки

i = Val(Text8.Text) ' присвоение переменным значений

n = Val(Text9.Text) ' введенных параметров из текстовых окон.

k0 = Val(Text10.Text)

k1 = Val(Text11.Text)

' зададим систему координат формы

' для чего найдем максимальное и минимальное значение принимаемое

' функцией на отрезке

' начальное значение выбираем произвольное

minfx = s(p, i, 0, k0, k1) ' минимальное значение функции (до их вычисления)

maxfx = s(p, i, 0, k0, k1) ' максимальное значение функции (до их вычисления)

minX = 0 ' минимальное значение аргумента (до их вычисления)

maxX = 0 ' максимальное значение аргумента (до их вычисления)

step_t = Val(Text12.Text) 'переменной присвоим значение шага построения графика

For st = 0 To n Step step_t ' вычислим минимальное и максимальное значения функции

If minfx > s(p, i, st, k0, k1) Then ' вычислим максимальное значение функции

minfx = s(p, i, st, k0, k1)

minX = st

End If

If maxfx < s(p, i, st, k0, k1) Then ' вычислим максимальное значение функции

maxfx = s(p, i, st, k0, k1) '

maxX = st '

End If '

Next st

' дополнительно проверим временной конец шкалы T на возможный Min и Max

' ,т.к.можем не попасть в него на отрезке [0 , N ] ,если не укладывается целое число шагов.

If minfx > s(p, i, n, k0, k1) Then ' проверим минимальное значение функции

minfx = s(p, i, n, k0, k1)

minX = n

End If

If maxfx < s(p, i, n, k0, k1) Then ' проверим максимальное значение функции

maxfx = s(p, i, n, k0, k1) '

maxX = n '

End If '

'задание пользовательской системы координат в окне отображения

On Error GoTo e1 ' проверяем укладывается ли число в диапазон типа Single

' т.к. "scale " работает с числами типа single

maxfx = CSng(maxfx)

On Error GoTo 0

Picture1.Scale (0, maxfx)-(n, 0) 'установка масштаба.

Picture1.DrawWidth = 6 ' толщина точки равна 6.

' рисуем ось X.

Picture1.Line (0, 0 + 0.01 * maxfx)-(n, 0 + 0.01 * maxfx), RGB(255, 0, 0)

' при рисовании осиX задается отступ на 0.01 * maxfx для лучшей видимости координатной оси

'рисуем ось Y.

Picture1.Line (0 + 0.01 * n, 0)-(0 + 0.01 * n, maxfx), RGB(255, 0, 0)

' при рисовании оси Y задается отступ от края объекта PictureBox на 0.01 * n для лучшей видимости координатной оси.

'отмечаем точку MIN

Picture1.DrawWidth = 1 ' толщина точки равна 1

Picture1.CurrentX = minX ' задание координат пера.

Picture1.CurrentY = s(p, i, minX, k0, k1) ' задание координат пера.

'отмечаем точку MAX

Picture1.DrawWidth = 8 ' толщина точки равна 8

Picture1.PSet (Picture1.CurrentX, Picture1.CurrentY) ' рисование точки в начале графика.

Picture1.DrawWidth = 1 ' толщина точки равна 1

Picture1.CurrentX = 0 ' задание координат пера.

Picture1.CurrentY = s(p, i, 0, k0, k1) ' задание координат пера.

' рисование ломаной линии графика.

For st = 0 To n Step step_t

Picture1.DrawWidth = 5 ' Толщина точки равна5

Picture1.PSet (Picture1.CurrentX, Picture1.CurrentY) 'рисование точек построения графика

Picture1.DrawWidth = 1 ' толщина точки равна 1

Picture1.Line -(st, s(p, i, st, k0, k1)) ' рисование графика

Next st

'дорисовываем график до конечной точки (если интервал «шаг графика» укладывается на целое число раз)

Picture1.Line -(n, s(p, i, n, k0, k1)) ' рисование графика

Picture1.DrawWidth = 5

Picture1.PSet (n, s(p, i, n, k0, k1))

' выводим максимальное значение функции на экран

Label12.Caption = maxfx ' значение метки – сумма наращенного платежа

Label12.Visible = True ' метка видима

Frame1.Enabled = False ' фрейм недоступен

Frame2.Enabled = False ' фрейм недоступен

Command1.Enabled = True ' командная кнопка доступна

Command3.Enabled = True ' командная кнопка доступна

Exit Sub

e1:

MsgBox "Переполнение в координатах графика", , ""

End Sub

__________________________________________________________________________________

_Private Sub Command6_Click()

Picture1.Cls 'очистка PictureBox

Text1.Text = "" 'очистка текстовых окон

Text2.Text = "" 'очистка текстовых окон

Text3.Text = "" 'очистка текстовых окон

Text4.Text = "" 'очистка текстовых окон

Text5.Text = "" 'очистка текстовых окон

Text6.Text = "" 'очистка текстовых окон

Text7.Text = "" 'очистка текстовых окон

Text8.Text = "" 'очистка текстовых окон

Text9.Text = "" 'очистка текстовых окон

Text10.Text = "" 'очистка текстовых окон

Text11.Text = "" 'очистка текстовых окон

Text12.Text = "" 'очистка текстовых окон

Label12.Caption = "" ' очистка текста метки

End Sub

___________________________________________________________________________

Private Sub Command5_Click()

End ' завершение работы проекта при нажатии клавиши «выход».

End Sub