Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРСОВАЯ КИТ КОЛЕСНИКОВА В.А.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
489.16 Кб
Скачать
  1. Разработка входных и выходных форм

При разработке данного программного модуля использовались следующие входные и выходные формы:

  1. Начальная форма при входе в программу представлена на рисунке 3.1. На форме расположены командная кнопка «РАСЧЕТ СТОИМОСТИ ДЕПОЗИТА» (CommandButton) и командная кнопка «УДАЛИТЬ» (CommandButton).

Рисунок 3.1 - Начальная форма при входе в программу.

  1. Входная форма, открывающаяся при нажатии кнопки «РАСЧЕТ СТОИМОСТИ ДЕПОЗИТА» представлена на рисунке 3.2 пользовательской формой «Выбор схемы процента» (UserForm1). При выборе кнопки «ПРОСТОЙ ПРОЦЕНТ» (OptionButton1) выходит пользовательская форма «Простой процент» (UserForm2), при выборе кнопки «ПРОСТОЙ ПРОЦЕНТ» (OptionButton2) - «СЛОЖНЫЙ ПРОЦЕНТ» (UserForm3) и при выборе кнопки «СРАВНИТЕЛЬНЫЙ АНАЛИЗ» (OptionButton3) - «Сравнение процентов» (UserForm4).

Рисунок 3.2 - Входная форма

  1. Следующие входные формы представлены пользовательскими формами «Простой процент» (UserForm2), «Сложный процент» (UserForm3) и «Сравнение процентов» (UserForm4), кнопками «ПРОСТОЙ ПРОЦЕНТ», «СЛОЖНЫЙ ПРОЦЕНТ», «СРАВНИТЕЛЬНЫЙ АНАЛИЗ ПРОЦЕНТОВ», «НАЗАД» и флажком «ВЫВОД НА ПЕЧАТЬ», элементом управления «Image» (для вывода графика), которые выбираются в зависимости от выбора расчета схемы процентов и представлены на рисунках 3.3, 3.4, 3.5

Рисунок 3.3 - Пользовательская форма «Простой процент» (UserForm2)

Рисунок 3.4 - Пользовательская форма «Сложный процент» (UserForm3)

Рисунок 3.5 - Пользовательская форма «Сравнение процентов» (UserForm4)

  1. Выходные формы представлены с помощью диалоговых окон функцией MsgBox и в виде соответствующих им таблиц, выводящей данные на лист Excel (рис. 3.6 (а, б), 3.7 (а, б), 3.8 (а, б)).

а) б)

Рисунок 3.6 - Функция MsgBox (а) и итоговая таблица (б)

а) б)

Рисунок 3.7 - Функция MsgBox (а) и итоговая таблица (б)

а) б)

Рис. 3.8 - Функция MsgBox (а) и итоговая таблица (б)

  1. Выходная форма сравнительного анализа представлена графической интерпретацией в виде линейчатой диаграммы с группировкой (рис. 3.9)

Рисунок 3.9 - Линейчатая диаграмма с группировкой

  1. Структура данных и программного обеспечения

В разработанном программном модуле на языке 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