Написание программы на языке VBA

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ИДО ГОУ МГИУ





















Курсовая работа

По дисциплине «Информатика»







Задание:№ 93

Группа: № Жл09Ф22п

Студент: Соколова Виктория Игоревна

Руководитель: Ф.И.О. Левкова Анна Витальевна















Железнодорожный 2010


Содержание

	

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

	2. Описание переменных

	3. Блок схема

	4. Описание алгоритма

	5. Листинг программы

	6. Описание входных данных и результат вычислений

	7. Список использованной литературы


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



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

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

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

 • общее количество букетов за 3 года;

 • доход по всем цветам за каждый год;

 • общий доход колхоза за 3 года;

 • вид цветов, принесший максимальный доход за 2 года. 



2. Описание переменных



Исходные данные находятся на листе «Нач_д» (рис. 1) и содержат следующую информацию:

	Наименование цветов.

	Количество проданных букетов в год (количество не меняется).

	Закупочные цены букетов каждого вида.

Результаты работы программы оформляются на листе «Результат» (рис. 2).




Рис.1. Лист с начальными данными





Рис.2. Полученные результаты



В программе переменные описаны следующим образом:

	1)	cena(6,3) — закупочные цены каждого вида цветов

Dim cena(6,3) As Integer 

2)	koll(6) — количество букетов каждого вида

Dim koll(6) As Integer

	3)	zar(6,3) — доход за каждый год (от 1 до 3) 

Dim zar(6,3) As Integer

	4)	koll_n(6) — количество букетов каждого вида за 3 года
представляет массив целых чисел

Dim kol_n(6) As Integer

	5)den — доход колхоза за 3 года

Dim den As Long

 6)Koll_i-Итоговое количество букетов за 3 года

Dim Koll_i As Integer

7)zarpl (6)— доход за 3 года

Dim zarpl(6) As Integer

8) sum(6.3)-вид цветов принесший максимальный доход за 2 года.

В программе также были использованы вспомогательные переменные, счетчики циклов, i и j, являющиеся целыми числами.

Dim i As Integer, j As Integer

Переменные для расчета я взяла целые числа




3. Блок схема





НачалоJ

Ввод данных

(нулевых) данных

Вспомогательных

Величин

Открытие листа с

данными («Нач_д.»)

Koll (i) =Cells (3+1.2)

Cena (i.j) =Cells (3+1,2+j)

i=1, 6

i=1.6

j=1.3=j=

	Рис3. Блок- схема



Рис.3. Блок-схема
Рис.3. Блок-схема (продолжение)



Открытие листа с

данными («Результат»)

Вывод данных формы

Ctlls(*.*)=

Cells (3+I,2) =Koll(i)

Cena (i.j) =Cells (3+1,2+j)

Koll_n(i)=koll(i)*3

 

Cells(3+1.7)=Koll_ (i)

i=1.6

J=1.3

Рис.3. Блок-схе


Ввод данных формы

Cells(*,*)=

Cells(14+i,2) =koll(i)*cena(I,j)

Zarpl (i)=zarpl(i,j)+zarpl(i)







Cells (14+i, 2+j) =zarp (i, j) 



i=1.6

I=1.6

J=1.3

Sum(i, j)>min

z=i

min=sum(i.j)

Sum (i, 1) =sar (i.1) +sar (i.2)

Sum (i, 2) =sar (i.2) +sar (i.3)

Sum (i, 3) =sar (i.1) +sar (i.3)



J=1.3

Ввод данных формы

Cells(*,*)=



Конец   программы 

Рис.3. Блок-схемаРис.3. Блок-схема (окончание)

4. Описание алгоритма



Начало программы.

Ввод начальных (нулевых) значений для расчетных величин (количество проданных букетов за год, доход по годам и общий, Вид цветов, принесший максимальный доход за 2 года).

Открытие листа с начальными данными («Нач_д») и получение этих данных в рабочие переменные (массивы сеnа(7) и kоll(7, 5)).

Открытие листа с результатами, формирование матрицы входных данных. Организуется два вложенных цикла (по каждому букету и году). Во внутреннем цикле (по годам, расчет по 1 букету) определяется количество букетов за 3 года. Результат выводится.

Расчет сумм дохода по букетам за каждый год вывод результатов. Организуется два вложенных цикла: внешний по букетам, внутренний по годам. Для оптимизации процесса расчетная часть совмещена с выводом: во внутреннем цикле происходит вычисление суммы доходод по i-му букету в j-й год с выводом результата, во внешнем цикле (после получения результатов внутреннего цикла) — вывод количество букетов. Расчет дохода за каждый год организован в этом же внутреннем цикле.

Определение вида цветов принесшего максимальный доход за 2 года.

Сравниваем доход за 2 года(1-й год+ 2-й год; 1-й год+ 3-й год; 2-й год+ 3-й год) сумма двух с наибольшим показателем складывается и выводится вид цветов.



5. Листинг программы



Sub Function()

'Сначала объявляем переменные, используемые в программе.

Sub Funct()

'объявляем переменные используемые в программе

Dim i As Integer, j As Integer, min As Integer, z As Integer 'счетчики циклов

Dim cena(6, 3) As Integer ' закупочные цены каждого вида

Dim zar(6, 3) As Integer 'доход за каждый год

Dim koll_n(6) As Integer 'количество букетов каждого вида вида за 3 года

Dim den As Long 'доход колхоза за 3 года

Dim zarpl(6) As Integer 'доход за 3 года

Dim koll(6) As Integer 'количество букетов каждого вида

Dim koll_i As Integer 'итоговое количество букетов за 3 года

Dim sum(6, 3) As Integer

'в начале программы все переменные равны нулям

'создаем цикл, 

For i = 1 To 6

koll_n(i) = 0

Next

koll_i = 0

den = 0

'считываем начальные данные

Sheets("Нач_д").Select

'в каждую ячейку массива koll(i) записывается количество букетов каждого вида

'для этого используем цикл

For i = 1 To 6

Koll(i) = Cells(3 + i, 2)

koll_n(i) = koll(i) * 3

koll_i = koll_i + koll_n(i)

zarpl(i) = 0

Next i

'в каждую ячейку массива cena(i, j) записывается закупочные цены каждого вида за год

'так как массив двумерный цикл проходит по двум счетчикам

For i = 1 To 6

For j = 1 To 3

cena(i, j) = Cells(3 + i, 2 + j)

zar(i, j) = 0

 Next j

Next i

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

Sheets("Результат").Cells(1, 1) = "Закупочные цены за год"

Sheets("Результат").Cells(2, 1) = "Наименование букетов"

Sheets("Результат").Cells(2, 2) = "Количество букетов"

Sheets("Результат").Cells(2, 3) = "Закуплено"

Sheets("Результат").Cells(3, 3) = "1-й год"

Sheets("Результат").Cells(3, 4) = "2-й год"

Sheets("Результат").Cells(3, 5) = "3-й год"

Sheets("Результат").Cells(3, 6) = "Всего"

Sheets("Результат").Cells(4, 1) = "розы"

Sheets("Результат").Cells(5, 1) = "гвоздики"

Sheets("Результат").Cells(6, 1) = "лилии"

Sheets("Результат").Cells(7, 1) = "ромашка"

Sheets("Результат").Cells(8, 1) = "хризантема"

Sheets("Результат").Cells(9, 1) = "тюльпан"

Sheets("Результат").Cells(10, 1) = "Итого"

Sheets("Результат").Cells(10, 6) = koll_i

'в соответствующие ячейки записываются количество букетов

For i = 1 To 6

Sheets ("Результат").Cells(3 + i, 2) = koll(i)

Sheets ("Результат").Cells(3 + i, 6) = koll_n(i)

For j = 1 To 3

'в соответствующие ячейки записываются закупочные цены за год

 Sheets("Результат").Cells(3 + i, 2 + j) = cena(i, j)

'рассчитывается закупочные цены каждого вида за год

Next j

'результат записывается в соответствующие ячейки

Next i

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

Sheets("Результат").Select

Sheets("Результат").Cells(12, 1) = "Результат в денежном эквиваленте"

Sheets("Результат").Cells(13, 1) = "Наименование букетов"

Sheets("Результат").Cells(13, 2) = "количество букетов в каждом году."

Sheets("Результат").Cells(13, 3) = "Заработано"

Sheets("Результат").Cells(14, 3) = "1-й год"

Sheets("Результат").Cells(14, 4) = "2-й год"

Sheets("Результат").Cells(14, 5) = "3-й год"

Sheets("Результат").Cells(14, 6) = "Всего"

Sheets("Результат").Cells(15, 1) = "роза"

Sheets("Результат").Cells(16, 1) = "гвоздики"

Sheets("Результат").Cells(17, 1) = "лилии"

Sheets("Результат").Cells(18, 1) = "ромашка"

Sheets("Результат").Cells(19, 1) = "хризантема"

Sheets("Результат").Cells(20, 1) = "тюльпан"

Sheets("Результат").Cells(21, 1) = "ИТОГО"

Sheets("Результат").Cells(22, 1) = "Вид цветов принесший макс доход за 2 года"

'производится вывод количества букетов в каждом году

For i = 1 To 6

Sheets ("Результат").Cells (14 + i, 2) = koll (i)

Next i

'расчет сумм: проданных букетов, за 3 года каждого вида цветов, общего дохода за 3 года;

'вывод: проданных букетов, за 3 года каждого вида цветов

For i = 1 To 6

For j = 1 To 3

zar (i, j) = koll(i) * cena(i, j)

Sheets ("Результат").Cells (14 + i, 2 + j) = zar(i, j)

zarpl (i) = zarpl(i) + zar(i, j)

Next j

Sheets ("Результат").Cells (14 + i, 6) = zarpl (i)

 den = den + zarpl (i)

Next i

'вывод общего дохода за 3 года

Sheets("Результат").Cells(21, 6) = den

'расчет вида цветов за 2 года принесших максим доход

min = 0

For i = 1 To 6

sum (i, 1) = zar (i, 1) + zar (i, 2)

sum (i, 2) = zar (i, 2) + zar (i, 3)

sum (i, 3) = zar (i, 1) + zar (i, 3)

For j = 1 To 3

If sum (i, j) > min Then

z = i

min = sum(i, j)

End If

Next j



Next i

Sheets ("Результат").Cells (22, 6) = Sheets ("Результат").Cells (14 + z, 1)

End Sub


6. Описание входных данных и результат вычислений



Проверка программы на всех единицах:










Проверка на всех нулях:





Проверка на произвольных данных:








Исходные данные для задания № представлены на Рис.№1., решение – на Рис.2..


7. Список использованной литературы



Информатика. Методическое пособие по выполнению практических работ в компьютерном классе (Word, Excel) / Гришин М.П. М.: МГИУ, 2005.

Информатика. Часть 1. Введение в информатику: учебное пособие / Гришин М.П., Иванов М.Н., Носова Т.К., Суворов С.В. М.: МГИУ, 2008.

Информатика. Часть 2. Программирование: Учебно-методическое пособие / Иванов М.Н., Суворов С.В. М.: МГИУ. 2006.

Моделирование с помощью Microsoft Excel и VBA. Разработка систем поддержки принятия решений/ Кристиан Олбрайт: Вильямс, 2005

Профессиональная разработка приложений Excel/ Стивен Буллен, Роб Боуви, Джон Грин: Вильямс, 2005

Самоучитель VBA/ Андрей Гарнаев: БХВ-Петербург,2004

Самоучитель программирования на VBA в Microsoft Office/В. Д. Хореев: Юниор, 2001