
- •Описание экономического объекта и постановка задачи
- •Теоретические аспекты применения простых и сложных процентов по депозитам
- •Нормативные и законодательные акты Республики Беларусь в области регулирования депозитных операций
- •1.3 Постановка задачи по разработке программного модуля
- •Математическая модель и метод анализа
- •2.1 Математическая модель расчета и сравнения простого и сложного процентов по депозитам
- •2.2 Метод анализ для расчета и сравнения простого и сложного процентов по депозитам
- •Разработка входных и выходных форм
- •Структура данных и программного обеспечения
- •Разработка алгоритмов
- •Тестирование програмного обеспечения
Разработка входных и выходных форм
При разработке данного программного модуля использовались следующие входные и выходные формы:
Начальная форма при входе в программу представлена на рисунке 3.1. На форме расположены командная кнопка «РАСЧЕТ СТОИМОСТИ ДЕПОЗИТА» (CommandButton) и командная кнопка «УДАЛИТЬ» (CommandButton).
Рисунок 3.1 - Начальная форма при входе в программу.
Входная форма, открывающаяся при нажатии кнопки «РАСЧЕТ СТОИМОСТИ ДЕПОЗИТА» представлена на рисунке 3.2 пользовательской формой «Выбор схемы процента» (UserForm1). При выборе кнопки «ПРОСТОЙ ПРОЦЕНТ» (OptionButton1) выходит пользовательская форма «Простой процент» (UserForm2), при выборе кнопки «ПРОСТОЙ ПРОЦЕНТ» (OptionButton2) - «СЛОЖНЫЙ ПРОЦЕНТ» (UserForm3) и при выборе кнопки «СРАВНИТЕЛЬНЫЙ АНАЛИЗ» (OptionButton3) - «Сравнение процентов» (UserForm4).
Рисунок 3.2 - Входная форма
Следующие входные формы представлены пользовательскими формами «Простой процент» (UserForm2), «Сложный процент» (UserForm3) и «Сравнение процентов» (UserForm4), кнопками «ПРОСТОЙ ПРОЦЕНТ», «СЛОЖНЫЙ ПРОЦЕНТ», «СРАВНИТЕЛЬНЫЙ АНАЛИЗ ПРОЦЕНТОВ», «НАЗАД» и флажком «ВЫВОД НА ПЕЧАТЬ», элементом управления «Image» (для вывода графика), которые выбираются в зависимости от выбора расчета схемы процентов и представлены на рисунках 3.3, 3.4, 3.5
Рисунок 3.3 - Пользовательская форма «Простой процент» (UserForm2)
Рисунок 3.4 - Пользовательская форма «Сложный процент» (UserForm3)
Рисунок 3.5 - Пользовательская форма «Сравнение процентов» (UserForm4)
Выходные формы представлены с помощью диалоговых окон функцией MsgBox и в виде соответствующих им таблиц, выводящей данные на лист Excel (рис. 3.6 (а, б), 3.7 (а, б), 3.8 (а, б)).
а)
б)
Рисунок 3.6 - Функция MsgBox (а) и итоговая таблица (б)
а)
б)
Рисунок 3.7 - Функция MsgBox (а) и итоговая таблица (б)
а)
б)
Рис. 3.8 - Функция MsgBox (а) и итоговая таблица (б)
Выходная форма сравнительного анализа представлена графической интерпретацией в виде линейчатой диаграммы с группировкой (рис. 3.9)
Рисунок 3.9 - Линейчатая диаграмма с группировкой
Структура данных и программного обеспечения
В разработанном программном модуле на языке VBA для расчета простых и сложных процентов по депозитам используются функция вызова (UserForm_.Show) и функция закрытия (Unload Me) пользовательских форм:
Private Sub OptionButton1_Click()
Unload Me
UserForm2.Show
End Sub
Private Sub OptionButton2_Click()
Unload Me
UserForm3.Show
End Sub
Private Sub OptionButton3_Click()
Unload Me
UserForm4.Show
End Sub
При написании подпрограммы на пользовательскую форму расчета суммы инвестированного капитала (Rn) по схеме простого процента используется подпрограмма с использованием формулы:
Rn = Fix(P * (1 + i * R / 100))
Функция Fix позволяет отбросить дробную часть числа, что является актуальным в условиях действующей системы округления в банковской сфере.
При написании программы на пользовательскую форму расчета депозита по схеме простого процента используется следующая подпрограмма, в которой используются макросы (выделены зеленым цветом) вывода таблицы на печать и формирования таблицы:
Private Sub CheckBox1_Click()
If Not CheckBox1 Then
Exit Sub
End If
End Sub
Private Sub CommandButton1_Click()
Dim P As Double
Dim R As Double
Dim n As Double
Dim str_P
Dim Rn As Double
Dim str_R
Dim str_n
Dim a As String, b As String, c As String, d As String
Dim i As Integer
Dim st As String
str_n = TextBox1.Value
If IsGoodNum1(str_n) = False Then
MsgBox (NotNumberГод(str_n))
Exit Sub
End If
str_P = TextBox2.Value
If IsGoodNum2(str_P) = False Then
MsgBox (NotNumberКап(str_P))
Exit Sub
End If
str_R = TextBox3.Value
If IsGoodNum3(str_R) = False Then
MsgBox (NotNumberПроц(str_R))
Exit Sub
End If
Worksheets("Лист1").Range("B1") = "Простой процент"
Worksheets("Лист1").Range("A1") = "Год"
Worksheets("Лист1").Range("A3") = 0
Worksheets("Лист1").Range("B2") = "Сумма"
Worksheets("Лист1").Range("B3") = TextBox2.Value
P = Val(str_P)
n = Val(str_n)
R = Val(str_R)
For i = 1 To n
Rn = Fix(P * (1 + i * R / 100))
a = "Инвестируемый капитал Rn за " + Chr(10)
b = "-й год по схеме простого процента равен" + Str(Rn)
st = st + Str(i) + b + Chr(10)
Cells(i + 3, 1) = i
Cells(i + 3, 2) = Rn
Next i
Unload Me
' формирование таблицы
Range("A1:A2").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("A1:B8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A1:A2").Select
MsgBox (a & st)
c = InputBox("Введите название банка")
d = InputBox("Введите название депозита")
Worksheets("Лист1").Range("C1") = c
Worksheets("Лист1").Range("C2") = d
' вывод на печать
If CheckBox1 Then
Application.Visible = True
Unload Me
Range("A1:M30").Select
ActiveWindow.SelectedSheets.PrintPreview
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
UserForm1.Show
End Sub
При написании подпрограммы на пользовательскую форму расчета инвестированного капитала (Fn) по схеме сложного процента используется аналогичная подпрограмма только с использованием другой формулы:
Fn = Fix(P * (1 + R / 100) ^ i)
При написании подпрограммы на пользовательскую форму сравнительного анализа расчета депозитов по схемам простого и сложного процентов используется следующая подпрограмма, которая соединяет в себе расчет двух видов процента (с использованием двух указанных выше формул) и макрос построения результирующего графика:
Dim g As String
Private Sub CheckBox1_Click()
If Not CheckBox1 Then
Exit Sub
End If
End Sub
Public Sub grafik()
Dim n As Integer
n = Application.CountA(Worksheets(1).Range("A:A"))
' График Макрос
Range("B3:C8").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Лист1!$B$3:$C$8")
ActiveChart.ChartType = xlBarClustered
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = "=Лист1!$A$3:$A$8"
ActiveChart.SeriesCollection(1).Name = "=Лист1!$B$1"
ActiveChart.SeriesCollection(2).Name = "=Лист1!$C$1"
ActiveChart.ApplyLayout (8)
ActiveChart.Axes(xlCategory).AxisTitle.Select
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Год"
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Сумма"
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Сравнение процентов"
ActiveChart.Export "grafic.gif" 'экспортируем в картинку
g = "grafic.gif" 'переменной присваиваем имя картинки
Image1.Picture = LoadPicture(g) 'загружаем картинку в image1 на форме
Worksheets(1).ChartObjects.Delete
End Sub
Private Sub CommandButton1_Click()
Dim P As Double
Dim Rn As Double
Dim Fn As Double
Dim R As Double
Dim n As Double
Dim a As String, b As String, c As String, d As String, e As String, f As String
Dim i As Integer
Dim Rt As String
Dim Ft As String
Dim str_P
Dim str_R
Dim str_n
Worksheets("Лист1").Range("B1") = "Простой процент"
Worksheets("Лист1").Range("A1") = "Год"
Worksheets("Лист1").Range("A3") = 0
Worksheets("Лист1").Range("B2") = "Сумма"
Worksheets("Лист1").Range("C2") = "Сумма"
Worksheets("Лист1").Range("B3") = TextBox2.Value
Worksheets("Лист1").Range("C1") = "Сложный процент"
Worksheets("лист1").Range("C3") = TextBox2.Value
str_n = TextBox1.Value
If IsGoodNum1(str_n) = False Then
MsgBox (NotNumberГод(str_n))
Exit Sub
End If
str_P = TextBox2.Value
If IsGoodNum2(str_P) = False Then
MsgBox (NotNumberКап(str_P))
Exit Sub
End If
str_R = TextBox3.Value
If IsGoodNum3(str_R) = False Then
MsgBox (NotNumberПроц(str_R))
Exit Sub
End If
P = Val(str_P)
n = Val(str_n)
R = Val(str_R)
For i = 1 To n
Rn = Fix(P * (1 + i * R / 100))
Fn = Fix(P * (1 + R / 100) ^ i)
a = "Инвестируемый капитал Rn за " + Chr(10)
b = "-й год по схеме простого процента равен " + Str(Rn)
Rt = Rt + Str(i) + b + Chr(10)
c = "Инвестируемый капитал Fn за " + Chr(10)
d = "-й год по схеме сложного процента равен " + Str(Fn)
Ft = Ft + Str(i) + d + Chr(10)
Cells(i + 3, 1) = i
Cells(i + 3, 2) = Rn
Cells(i + 3, 3) = Fn
Next i
' формирование таблицы
Range("A1:A2").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("A1:C8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A1:A2").Select
grafik
MsgBox (a & Rt & c & Ft)
e = InputBox("Введите название банка")
f = InputBox("Введите название депозита")
Worksheets("Лист1").Range("D1") = e
Worksheets("Лист1").Range("D2") = f
' График Макрос
Range("B3:C8").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Лист1!$B$3:$C$8")
ActiveChart.ChartType = xlBarClustered
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = "=Лист1!$A$3:$A$8"
ActiveChart.SeriesCollection(1).Name = "=Лист1!$B$1"
ActiveChart.SeriesCollection(2).Name = "=Лист1!$C$1"
ActiveChart.ApplyLayout (8)
ActiveChart.Axes(xlCategory).AxisTitle.Select
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Год"
ActiveChart.Axes(xlValue).AxisTitle.Select
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Сумма"
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Сравнение процентов"
' вывод на печать
If CheckBox1 Then
Application.Visible = True
Unload Me
Range("A1:M30").Select
ActiveWindow.SelectedSheets.PrintPreview
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
UserForm1.Show
End Sub
В следующем программном модуле, который проверяет правильность ввода данных, используются функции для проверки данных. Данные проверяются с помощью функций, вызываемых подпрограммой. Если переменная не удовлетворяет определенным условиям (ввод отрицательного числа, ввод символов, отсутствие ввода и количество лет, не превышающее 5-ти лет), то подпрограмма выдает название ошибки и совершает преждевременный выход из подпрограммы. В функциях используются условия, которые определяют ошибку в зависимости от введенных данных. Такая функция используется для проверки каждой из входных данных. Данные функции написаны в «Module1»:
' проверка n
Public Function IsGoodNum1(var_n) As Boolean
If IsNumeric(var_n) = True And Val(var_n) > 0 And Val(var_n) < 6 Then
IsGoodNum1 = True
Else
IsGoodNum1 = False
End If
End Function
Public Function NotNumberГод(var_n) As String
NotNumber = "Ошибка ввода данных"
If var_n = "" Then
NotNumberГод = "Вы не ввели количество лет"
End If
If Val(var_n) > 5 Then
NotNumberГод = "Период не более 5-ти лет"
End If
If Val(var_n) < 0 Then
NotNumberГод = "Вы ввели отрицательное число"
End If
If IsNumeric(var_n) = False Then
NotNumberГод = "Вы ввели не число"
End If
End Function
' проверка P
Public Function IsGoodNum2(var_P) As Boolean
If IsNumeric(var_P) = True And Val(var_P) > 0 Then
IsGoodNum2 = True
Else
IsGoodNum2 = False
End If
End Function
Public Function NotNumberКап(var_P) As String
NotNumberКап = "Ошибка ввода данных"
If var_P = "" Then
NotNumberКап = "Вы не ввели капитал"
If Val(var_P) < 0 Then
NotNumberКап = "Вы ввели отрицательное число"
End If
If IsNumeric(var_P) = False Then
NotNumberКап = "Вы ввели не число"
End If
End Function
' проверка R
Public Function IsGoodNum3(var_R) As Boolean
If IsNumeric(var_R) = True And Val(var_R) > 0 Then
IsGoodNum3 = True
Else
IsGoodNum3 = False
End If
End Function
Public Function NotNumberПроц(var_R) As String
NotNumberПроц = "Ошибка ввода данных"
If var_R = "" Then
NotNumberПроц = "Вы забыли ввести процент"
End If
If Val(var_R) < 0 Then
NotNumberКап = "Вы ввели отрицательное число"
End If
If IsNumeric(var_R) = False Then
NotNumberПроц = "Вы ввели не число"
End If
End Function
К кнопкам управления (CommandButton1 – «РАСЧЕТ СТОИМОСТИ ДЕПОЗИТА», CommandButton2 – «УДАЛИТЬ»), находящихся на листе Excel, привязаны следующие подпрограммы, с использованием макросов удаления данных и очищения форматированной таблицы:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Private Sub CommandButton2_Click()
' удаление данных с листа
Cells.Select
Selection.ClearContents
Range("A1").Select
' очищение форматированной таблицы
Range("A1:C8").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A1").Select
End Sub
Для того, чтобы книга Excel открывада сразу пользовательскую форму «Выбор схемы процента» (UserForm1) в «ЭтаКнига» была записана следующая подпрограмма:
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show
End Sub