Программирование на VBA в среде MS Excel
| Министерство
образования Российской
Федерации
Государственное образовательное учреждение высшего профессионального образования Московский государственный индустриальный университет (ГОУ МГИУ) |
| Кафедра «Информационных технологий и систем в экономике и управлении» |
| К
У Р С О В
А Я Р
А Б О Т А | ||
| по дисциплине «Информатика» | ||
|
на тему «Программирование
на VBA в среде MS Excel»
12
вариант | ||
| Группа | 2252 | |
| Студент | Е.С. Наумова | |
| Руководитель
работы,
заведующий кафедрой, доцент |
||
| ДОПУСКАЕТСЯ К ЗАЩИТЕ | ||
| Ассистент | ||
| Оценка
работы
Дата |
«___»_____________ | |
Содержание
Задание на курсовую работу.
Задание 12
На хлебозаводе в цехе изготовления тортов выпускаются изделия 5-ти наименований. В каждое изделие входят до 6-ти видов различных компонентов.
Написать программу на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран:
- исходные данные в виде таблицы, где перечислены наименования изделий, вес компонентов, цена каждой компоненты;
- вес каждого вида торта;
- стоимость каждого вида торта;
- название самого дешевого вида торта;
его цена..
Требования к курсовой работе:
Интерфейс
1. Интерфейс
программы должен содержать
2. Поля
для вывода результатов
3. На листе должны быть, как минимум, пять командных кнопок, вызывающих выполнений процедур:
3.1. Кнопка «Рассчитать данные» вызывает выполнения процедур расчета значений по всем заданиям варианта.
3.2. Кнопка
«Сортировать». Алгоритм
3.3. Кнопка
«Проверить правильность
3.4. Кнопка
«Проверить правильность
3.5. Кнопка «Очистить» восстанавливает исходные данные и удаляет все результаты вычислений на всех листах.
4. Процедуры кнопок вызывают вычисляющие процедуры через команду Call.
5. Использование типа данных Currency – обязательное требование.
6. На листе в заголовке таблицы должны содержаться ФИО и номер группы студента, выполнившего работу.
Программная часть
1. Переменные должны быть описаны до первой процедуры.
2. Все
исходные данные содержатся в
одномерных и двумерных
3. Каждая
процедура должна содержать
4. Сохранение
исходных данных может
Описание переменных
В программе переменные объявлены до первой процедуры, что делает их видимыми из любой процедуры программы, и описаны следующим образом:
| Dim tort(5) As String | Одномерный массив строкового типа - Наименования изделий |
| Dim price_komp(6) As Currency | Одномерный массив чисел - Цены компонент |
| Dim ves_komp(5, 6) As Double | Двумерный массив дробных чисел - вес компонентов |
| Dim VES_TORTA(5) As Double | Одномерный массив дробных чисел - вес каждого вида торта |
| Dim PRICE_TORTA(5) As Currency | Одномерный массив чисел - стоимость каждого вида торта |
| Dim MIN_PRICE_TORTA As Currency | Переменная дробного типа - цена самого дешевого вида торта |
| Dim MIN_TORT As String | Переменная строкового типа - название самого дешевого вида торта |
| Dim vspomog As Variant | Вспомогательная переменная произвольного типа |
| Dim i, j, z As Integer | Переменные целого типа – счетчики |
Тип Currency используется для хранения чисел, когда точность крайне важна, что бывает при вычислениях с денежными единицами
Блок-схема
Объявляем переменные:
Процедура Restore_ID() - восстановление исходных данных
Процедура Cleaning() - очистка полей с результатами
Процедура Zeroing () - обнуление рабочих переменных
Процедура Basic_data() – Сохранение исходных данных в массивы
Процедура Calc() – основные выччисления:
Процедура CalcMIN() – Ищем самую «ходовую» ткань
Процедура Finish() – Процедура для всех расчетов и вывода результата
Процедура Sorting () - сортировка
Процедура Sorting1 () - сортировка
Процедура Sorting2 () - сортировка
Процедура Testing_1 () - проверка правильности алгоритма 1
Процедура Testing_0 () - проверка правильности алгоритма 0
Процедура List1 () - Переход на Лист 1
Описание алгоритма
Программ представляет собой 13 процедур:
- Процедура для восстановления исходных данных (Restore_ID) копируют соответствующий диапазон ячеек из правой части листа в таблицу для исходных даных и вызывает процедуру для очистки ячеек с результатами (Cleaning).
- Процедура очистки (Cleaning) ячеек с результатами - копирует пустое значение в соответствующие ячейки.
- Процедура (Zeroing) обнуления рабочих массивов. Состоит из цикла на операторах For-Next.
- Процедура (Basic_data) считывания исходных данных в массивы. Состоит из двух вложенных циклов на операторах Do While – Loop и Do Until –Loop.
- Процедура (Calc) с основными вычислениями. Вначале вызывает процедуры Zeroing и Basic_data (см.выше). Далее используя два вложенных цикла на операторах For-Next где считаем вес и стоимость каждого торта.
- Процедура (CalcMIN) поиска самого дешевого торта. Алгоритм использует метод пузырька.
- Процедура (Finish). Алгоритм вызывает процедуры с вычислениями Calc и CalcMIN, и выводит результаты, при необходимости используем циклы на операторах For-Next.
- Процедура сортировки (Sorting) выводит сообщение для выбора столбца по которому будет осуществляться сортировка и вызывается соответствующая процедура (Sorting1 или Sorting2) В конце процедуры осуществляется вывод результатов сортировки.
- Процедура сортировки (Sorting1) Алгоритм основан на сортировке методом «всплывающего пузырька» и сортирует данные по столбцу «вес торта»
- Процедура сортировки (Sorting2) Алгоритм основан на сортировке методом «всплывающего пузырька» и сортирует данные по столбцу «стоимость торта»
- Процедура проверки алгоритма на 1 (Testing_1) – алгоритм переходит на «Лист2», где исходная таблица заполнена единицами и вызывает процедуру расчета данных (Finish).
- Процедура проверки алгоритма на 0 (Testing_0) – алгоритм аналогичен
- Процедура для возврата на «Лист 1» (List1) – осуществляет переход на «Лист1»
Листинг программы
Dim tort(5) As String 'Одномерный массив строкового типа - Наименования изделий
Dim price_komp(6) As Currency 'Одномерный массив чисел - Цены компонент
Dim ves_komp(5, 6) As Double 'Двумерный массив дробных чисел - вес компонентов
Dim VES_TORTA(5) As Double
'Одномерный массив дробных
Dim PRICE_TORTA(5) As Currency 'Одномерный массив чисел - стоимость каждого вида торта
Dim MIN_PRICE_TORTA As Currency 'Переменная дробного типа - цена самого дешевого вида торта
Dim MIN_TORT As String 'Переменная строкового типа - название самого дешевого вида торта
Dim vspomog As Variant 'Вспомогательная переменная произвольного типа
Dim i, j, z As Integer 'Переменные целого типа - счетчики
Sub Restore_ID()
'восстановление исходных данных
Range("A5:G10").Value = Range("AA5:AG10").Value
Call Cleaning
End Sub
Sub Cleaning()
'очистка полей с результатами
Worksheets("Лист1").Range("H5:
Worksheets("Лист1").Range("
Worksheets("Лист1").Range("
Worksheets("Лист2").Range("H5:
Worksheets("Лист2").Range("
Worksheets("Лист3").Range("H5:
Worksheets("Лист3").Range("
End Sub
Sub Zeroing()
'обнуляем рабочие переменные
For i = 1 To 5
VES_TORTA(i) = 0
PRICE_TORTA(i) = 0
Next i
End Sub
Sub Basic_data()
'сохраняем исходные данные в массивы
i = 1
Do While i <> 6
'Считывание в массив наименования изделий:
tort(i) = Cells(i + 4, 1)
j = 1
Do Until j = 7
'Считывание в массив цены на комплненты:
price_komp(j) = Cells(10, j + 1)
'считывание вес компонентов:
ves_komp(i, j) = Cells(i + 4, j + 1)
j = j + 1
Loop
i = i + 1
Loop
End Sub
Sub Calc()
'Основные вычисления
Call Zeroing
Call Basic_data
For i = 1 To 5
For j = 1 To 6
'Считаем вес каждого торта:
VES_TORTA(i) = VES_TORTA(i) + ves_komp(i, j)
'Считаем стоимость каждого торта:
PRICE_TORTA(i) = PRICE_TORTA(i) + ves_komp(i, j) * price_komp(j)
Next j
Next i
End Sub
Sub CalcMIN()
'Ищем название и цену самого дешевого вида торта
'принимаем за максимум первое изделие
MIN_PRICE_TORTA = PRICE_TORTA(1)
MIN_TORT = tort(1)
For i = 2 To 5
If MIN_PRICE_TORTA > PRICE_TORTA(i) Then
MIN_PRICE_TORTA = PRICE_TORTA(i)
MIN_TORT = tort(i)
End If
Next i
End Sub
Sub Finish()
'Процедура для
всех расчетов и вывода
Call Calc
Call CalcMIN
'вывод результатов:
For i = 1 To 5
Cells(i + 4, 8) = VES_TORTA(i)
Cells(i + 4, 9) = PRICE_TORTA(i)
Next i
Cells(12, 4) = MIN_TORT
Cells(12, 6) = MIN_PRICE_TORTA
End Sub
Sub Sorting()
'сортировка
'вызов процедуры с расчетами:
Call Calc
vspomog = MsgBox("Если Вы хотите отсортировать по весу нажмите ДА, если по стоимости - НЕТ", vbYesNo + vbQuestion, "Проверка правильности алгоритма")
If vspomog = vbYes Then
Call Sorting1
Else
Call Sorting2
End If
'вывод результатов
Cells(20, 1) = "Наименования изделий"
Cells(20, 2) = "Вес каждого вида торта"
Cells(20, 3) = "Стоимость каждого вида торта"
For i = 1 To 5
Cells(i + 20, 1) = tort(i)
Cells(i + 20, 2) = VES_TORTA(i)
Cells(i + 20, 3) = PRICE_TORTA(i)
Next i
End Sub
Sub Sorting1()
'сортируем массив попарно сравнивая вес каждого торта
'если предыдущий элемент больше следующего, то меняем обе строчки местами
For z = 1 To 4
For i = 1 To 4
If VES_TORTA(i) > VES_TORTA(i + 1) Then
vspomog = VES_TORTA(i)
VES_TORTA(i) = VES_TORTA(i + 1)
VES_TORTA(i + 1) = vspomog
vspomog = PRICE_TORTA(i)
PRICE_TORTA(i) = PRICE_TORTA(i + 1)
PRICE_TORTA(i + 1) = vspomog
vspomog = tort(i)
tort(i) = tort(i + 1)
tort(i + 1) = vspomog
End If
Next i
Next z
End Sub
Sub Sorting2()
'сортируем массив попарно сравнивая вес каждого торта
'если предыдущий элемент больше следующего, то меняем обе строчки местами
For z = 1 To 4
For i = 1 To 4
If PRICE_TORTA(i) > PRICE_TORTA(i + 1) Then
vspomog = VES_TORTA(i)
VES_TORTA(i) = VES_TORTA(i + 1)
VES_TORTA(i + 1) = vspomog
vspomog = PRICE_TORTA(i)
PRICE_TORTA(i) = PRICE_TORTA(i + 1)
PRICE_TORTA(i + 1) = vspomog
vspomog = tort(i)
tort(i) = tort(i + 1)
tort(i + 1) = vspomog
End If
Next i
Next z
End Sub
Sub Testing_1()
'проверка правильности алгоритма 1
'Переходим на Лист2
Worksheets("Лист2").Activate
'вызов процедуры с расчетами:
Call Finish
End Sub
Sub Testing_0()
'проверка правильности алгоритма 0
'Переходим на Лист3
Worksheets("Лист3").Activate
'вызов процедуры с расчетами:
Call Finish
End Sub
Sub List1()
'Переходим на Лист1
Worksheets("Лист1").Activate
End Sub
Описание входных данных и результатов вычислений
Исходные данные:
Результат основных вычислений:
Сортировка:
Результат сортировки по весу:
Результат сортировки по стоимости:
Проверка на 1:
Проверка на 0:
Список литературы
- Иванов М.Н., Суворов С.В. Информатика. Часть 2. Программирование. – Москва, МГИУ 2009.
- Хорев В. Д. «Самоучитель программирования на VBA в Microsoft Office» 2001
- Конспект курса лекционных и практических занятий в МГИУ