Программирование на VBA в среде MS Excel

Министерство  образования Российской Федерации

Государственное образовательное  учреждение

высшего профессионального  образования

Московский  государственный  индустриальный университет

(ГОУ  МГИУ)

 
Кафедра «Информационных технологий и систем в экономике и управлении»
 
 
К У Р С О В  А Я    Р  А Б О Т А 
 
по  дисциплине «Информатика» 
на тему «Программирование на VBA в среде MS Excel»

12 вариант 

 
Группа 2252  
Студент   Е.С. Наумова
 
Руководитель  работы,

заведующий кафедрой, доцент

   
 
 
ДОПУСКАЕТСЯ К ЗАЩИТЕ
Ассистент    
 
Оценка  работы

Дата

  «___»_____________
 
 
 

 

Содержание

 
 

 

Задание на курсовую работу.

Задание 12

 

 На  хлебозаводе в цехе изготовления тортов выпускаются изделия 5-ти наименований. В каждое изделие входят до 6-ти видов различных компонентов.

 Написать  программу на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран:

  • исходные данные в виде таблицы, где перечислены наименования изделий, вес компонентов, цена каждой компоненты;
  • вес каждого вида торта;
  • стоимость каждого вида торта; 
  • название самого дешевого вида торта;

   его цена..

 

   Требования  к курсовой работе:

 

    Интерфейс

    1. Интерфейс  программы должен содержать все  исходные данные, указанные в  варианте.

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

    3. На  листе должны быть, как минимум, пять командных кнопок, вызывающих выполнений процедур:

    3.1. Кнопка  «Рассчитать данные» вызывает  выполнения процедур расчета  значений по всем заданиям  варианта.

    3.2. Кнопка  «Сортировать». Алгоритм сортирует  любой из результатных массивов и связанными с ним заголовками строк (столбцов) на свободной месте листа.

    3.3. Кнопка  «Проверить правильность алгоритма  на 1». Результат отображается  на Листе 2.

    3.4. Кнопка  «Проверить правильность алгоритма  на 0». Результат отображается  на Листе 3.

    3.5. Кнопка «Очистить» восстанавливает исходные данные и удаляет все результаты вычислений на всех листах.

    4. Процедуры  кнопок вызывают вычисляющие  процедуры через команду Call.

    5. Использование  типа данных Currency – обязательное  требование.

    6. На  листе в заголовке таблицы должны содержаться ФИО и номер группы студента, выполнившего работу.

 

    Программная часть

    1. Переменные  должны быть описаны до первой  процедуры.

    2. Все  исходные данные содержатся в  одномерных и двумерных массивах. Обращение к ячейкам только  при считывании и записи на лист. Все массивы обрабатываются в циклах. В теле программы должны хотя бы однократно использоваться циклы Do While (Until) - Loop и For – Next.

    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 процедур:

 
  1. Процедура для восстановления исходных данных (Restore_ID) копируют соответствующий диапазон ячеек из правой части листа в таблицу для исходных даных и вызывает процедуру для очистки ячеек с результатами (Cleaning).
  2. Процедура очистки (Cleaning) ячеек с результатами  - копирует пустое значение в соответствующие ячейки.
  3. Процедура (Zeroing) обнуления рабочих массивов. Состоит из цикла на операторах For-Next.
  4. Процедура (Basic_data) считывания исходных данных в массивы. Состоит из двух вложенных циклов на операторах Do While – Loop и Do Until –Loop.
  5. Процедура (Calc) с основными вычислениями. Вначале вызывает процедуры Zeroing и Basic_data (см.выше). Далее используя два вложенных цикла на операторах For-Next где считаем вес и стоимость каждого торта.
  6. Процедура (CalcMIN) поиска самого дешевого торта. Алгоритм использует метод пузырька.
  7. Процедура (Finish). Алгоритм вызывает процедуры с вычислениями Calc и CalcMIN, и выводит результаты, при необходимости используем циклы на операторах For-Next.
  8. Процедура сортировки (Sorting) выводит сообщение для выбора столбца по которому будет осуществляться сортировка и вызывается соответствующая процедура (Sorting1 или Sorting2) В конце процедуры осуществляется вывод результатов сортировки.
  9. Процедура сортировки (Sorting1) Алгоритм основан на сортировке методом «всплывающего пузырька» и сортирует данные по столбцу «вес торта»
  10. Процедура сортировки (Sorting2) Алгоритм основан на сортировке методом «всплывающего пузырька» и сортирует данные по столбцу «стоимость торта»
  11. Процедура проверки алгоритма на 1 (Testing_1) – алгоритм переходит на «Лист2», где исходная таблица заполнена единицами и вызывает процедуру расчета данных (Finish).
  12. Процедура проверки алгоритма на 0 (Testing_0) – алгоритм аналогичен
  13. Процедура для возврата на «Лист 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:I9").Value = ""

Worksheets("Лист1").Range("D12:I12").Value = ""

Worksheets("Лист1").Range("A20:C25").Value = ""

 

Worksheets("Лист2").Range("H5:I9").Value = ""

Worksheets("Лист2").Range("D12:I12").Value = ""

 

Worksheets("Лист3").Range("H5:I9").Value = ""

Worksheets("Лист3").Range("D12:I12").Value = ""

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:

 

 

Список  литературы

 
  1. Иванов М.Н., Суворов С.В. Информатика. Часть 2. Программирование. – Москва, МГИУ 2009.
  2. Хорев В. Д. «Самоучитель программирования на VBA в Microsoft Office» 2001
  3. Конспект курса лекционных и практических занятий в МГИУ
Программирование на VBA в среде MS Excel