Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Microsoft Excel на языке Visual Basic for Appli....doc
Скачиваний:
3
Добавлен:
30.11.2018
Размер:
649.73 Кб
Скачать

Министерство РФ по транспорту и связи

Сибирский государственный университет телекоммуникаций и информатики

Курсовое проектирование по информатике:

«Разработка приложения для обработки экономической информации в среде Microsoft Excel на языке Visual Basic for Applications».

Выполнил: студент группы Э-35 Степанов Денис

Проверил: Лебеденко Л.Ф., Лапова С.Г.

Вариант:17

Новосибирск,2004.

Содержание.

Введение………………………………………………………………………….…3

Переменные проекта………….………………………………………………..4

Основной алгоритм проекта……………………………………………...…5

Алгоритмы подпрограмм, тексты программ на языке Visual Basic.

Часть1………………………………………………………………………………………….……6

Задание2………………………………………………………………………………………....…..9

Задание3………………………………………………………………………………………….…12

Задание4……………………………………………………………………………………….……15

Часть2……………………………………………………………………………………….……16

Задание1………….………………………………………………………………………….……..17

Задание2……………………………………………………………………………………………20

Задание3……………………………………………………………………………………………21

Заключение………………………………………………………………………………………22

Введение.

Данный курсовой проект предназначен для развития навыков в области разработки программного обеспечения для обработки экономической информации с помощью средств Visual Basic for Applications. Курсовая работа должна отвечать следующим требованиям:

  • Правильное описание типов переменных, использующихся в работе, правильное задание локальных и глобальных переменных. Должен быть также разработан собственный тип пользователя.

  • Создание удобного пользовательского интерфейса.

  • Возможность работы в режиме диалога.

  • Обработка массива методами структурного программирования.

Приложение должно позволять оперировать с экономической информацией, содержащейся в электронной таблице Excel. Приложение должно представлять собой совокупность пользовательских форм и программ на языке Visual Basic. Интерфейс должен быть доступен и удобен для пользователя, должен сопровождаться комментариями.

В данной курсовой работе дана информация о расчете заработной платы работников предприятия: ФИО работников, пол, стаж, отдел, должность, оклад, надбавка, районный коэффициент. Необходимо произвести различные действия с этой информацией: рассчитать заработную плату каждого работника, сгруппировать информацию по отделам, упорядочить по окладу, ФИО и заработной плате, вывести необходимые сведения, построить диаграмму.

Проект состоит из трех пользовательских форм: одна выводит информацию о студенте, две другие соответствуют заданиям первой и второй части курсовой. Все программы содержатся в процедурах нажатия кнопок. Курсовая работа состоит из двух частей. Все задания сопровождаются текстами на языке Visual Basic, пояснительными комментариями, результатами работы программы. К первой все задания сопровождаются алгоритмами. Задания 1,2,3,4 части1 и задание3 части2 выполняются с помощью написанных на языке Visual Basic программ. Задания 1 и 2 части2 выполняются с помощью средств Excel. Сама курсовая работа разработана в системе Office2000, поэтому на некоторых старых версиях Office97 могут появляться ошибки. Курсовой проект размещен на диске А в файле «Курсовая_17». Диск А приложен к оформленной курсовой работе.

Переменные проекта

Первоначально есть информация о расчете заработной платы 20 работников предприятия 20 человек, которая находится в таблице Excel. Для работы с этими данными в проекте задается собственный тип пользователя dann, который состоит из значений следующего типа:

Type dann

fio As String * 20 – ФИО работников предприятия, строковое значение, длина максимум 20 символов.

Pol As String – пол работников, строковое значение.

stag As Single – стаж работников, тип Single.

otd As String – отдел, строковое значение.

dolg As String – должность, строковое значение.

okl As Integer – оклад, тип Integer, целое значение.

nadb As Integer – надбавка к окладу, тип Integer, целое значение.

rakoe As Single – районный коэффициент, тип Single.

kvid As Single – сумма к выдаче, тип Single.

End Type

Значения Fio, Pol, Stag, otd, dolg, okl, nadb, rakoe считываются из электронной таблицы Excel, значения kvid вычисляются в процессе работы программы.

Далее заданы следующие переменные, которые используются в проекте:

Public i, j, k, m As Integer – переменные i, j используются для работы в циклах, переменные m и k используются при выводе данных в электронную таблицу.

Public n As String – в переменную n заносится значение отдела при группировке информации по отделам.

Public info(21) As dann – массив типа dann, в нем содержатся данные о 20 работниках предприятия.

Public p As dann – переменная типа dann, используется при упорядочивании информации.

Все эти переменные являются глобальными, используются в нескольких программах и описываются как Public перед модулем1.

Основной алгоритм проекта

Комментарии:

Первоначально происходит считывание данных из электронной таблицы, заполняются 20 значений массива info. Затем вычисляются значения сумм к выдаче для каждого работника предприятия. Суммы к выдаче вычисляются путем складывания оклада работника, его надбавки и умножения полученной суммы на районный коэффициент. Полученные значения выводятся в электронную таблицу. После этого открываются пользовательские формы, на которых пользователь должен нажать какую-либо кнопку, т.е. открывается кнопочное меню и нажатие любой кнопки соответствует выбору определенного условия. При нажатии на определенные кнопки запускаются подпрограмма1 и подпрограмма2 (см. ниже) или же может открыться новое кнопочное меню, при нажатии на одну из кнопок которого запускается подпрограмма3, подпрограмма4, рисуется диаграмма или же завершается работа с проектом.

Алгоритмы подпрограмм, тексты программ на языке Visual Basic и инструкция пользователя.

При нажатии какой-либо кнопки запускается необходимая программа, которая содержится в процедуре нажатия кнопки.

Часть1.

Первоначально имеются сведения о 20 работниках предприятия, которые расположены на листе «Данные» электронной таблицы Excel.

Ф.И.О.

Пол

Стаж (лет)

Отдел

Должность

Оклад

Надбавка

Районный коэффициент

К выдаче

Буторин В.В.

м

5,5

Технический

Механик

2500

0

1

Федорцев А.Н.

м

2,9

Технический

Механик

2500

2000

1

Худяков С.К.

м

4

Транспортный

Водитель

2600

2000

1

Печенцева В.И.

ж

7,1

Технический

Техничка

1700

0

1

Курапов Н.И.

м

9,5

Обслуживания

Охранник

2600

2000

1,12

Иванов И.И

м

5

Технический

Техник

2400

1800

1,13

Степанов Д.В.

м

8

Планово-финансовый

Директор

9000

3000

1,7

Романов Д.И.

м

7

Обслуживания

Продавец

4000

2000

1,1

Афанасьева Т.А.

ж

10

Обслуживания

Секретарь

2900

0

1,01

Уфимцев А.Л.

м

2,1

Планово-финансовый

Гендиректор

12000

3000

1,7

Устинова Л.А.

ж

3

Планово-финансовый

Секретарь

2900

1700

1,07

Кузубов В.А.

м

6

Обслуживания

Юрист

4500

2300

1,14

Кирилов Н.А

м

8

Планово-финансовый

Менеджер

7000

2500

1,2

Метелкин Д.А.

м

4,5

Обслуживания

Психолог

5000

0

1,16

Соколова М.Н.

ж

6,5

Планово-финансовый

Бухгалтер

4000

1000

1,13

Савельев Н.И.

м

4

Обслуживания

Секретарь-референт

6000

2100

1,08

Постников П.А.

м

6

Обслуживания

Менеждер

8000

2500

1,2

Щербакова Т.И.

ж

3

Планово-финансовый

Бухгалтер

4000

0

1,13

Щеголев К.С.

м

11

Технический

Конструктор

4000

1000

1,05

Денисова Г.А.

ж

11

Технический

Техничка

1700

1500

1

 

 

 

 

 

 

 

 

На листе с данными имеется незаполненная колонка «К выдаче». Она будет заполнена в процессе работы программы. На листе размещена кнопка. При ее нажатии («Начать») вызывается модуль1, в котором содержится макрос Student. (Call Studen). Этот макрос предназначен для занесения данных с электронной таблицы в массив info.

Sub Student()

Worksheets(1).Activate

For i = 1 To 20

With info(i)

.fio = Worksheets(1).Cells(1 + i, 1)

.Pol = Worksheets(1).Cells(1 + i, 2)

.stag = Worksheets(1).Cells(1 + i, 3)

.otd = Worksheets(1).Cells(1 + i, 4)

.dolg = Worksheets(1).Cells(1 + i, 5)

.okl = Worksheets(1).Cells(1 + i, 6)

.nadb = Worksheets(1).Cells(i + 1, 7)

.rakoe = Worksheets(1).Cells(i + 1, 8)

End With

Next

studen.Show

End Sub

После занесения данных в массив info открывается форма с информацией о студенте (studen.show).

При нажатии на кнопку «Продолжить» открывается форма UserForm1 – «Часть1». При инициализации формы вычисляется значение сумм к выдаче для каждого работника предприятия (задание1 первой части), на листе1 заполняется колонка «К выдаче»:

Private Sub UserForm_Initialize()

For i = 1 To 20

With info(i)

.kvid = (.okl + .nadb) * .rakoe

Worksheets(1).Cells(i + 1, 9) = .kvid

End With

Next

End Sub

На форме расположено несколько кнопок. Пользователь должен нажать какую-либо из них.

Задание2.Часть1

Для группировки информации задается значение, с которым сравнивается значение отдела элемента массива info. Если оно совпадает, этот элемент массива выводится. Алгоритм группировки информации по отделу:

Итак, для группировки начальной информации необходимо нажать на кнопку «Начать» на рамке «Группировка информации по отделам» на UserForm1. При нажатии кнопки «Начать» запускается следующая программа:

Private Sub CommandButton2_Click()

Worksheets(2).Activate

Range("A1:I48").Select

Selection.ClearContents

Range("A1").Select

m = 1

Cells(m, 1) = "По отделам"

For i = 1 To 9

Worksheets(2).Cells(m + 1, i) = Worksheets(1).Cells(1, i)

Next

n = "Планово-финансовый"

For i = 1 To 20

If info(i).otd = n Then

Worksheets(2).Cells(m + 3, 1) = info(i).fio

Worksheets(2).Cells(m + 3, 2) = info(i).Pol

Worksheets(2).Cells(m + 3, 3) = info(i).stag

Worksheets(2).Cells(m + 3, 4) = info(i).otd

Worksheets(2).Cells(m + 3, 5) = info(i).dolg

Worksheets(2).Cells(m + 3, 6) = info(i).okl

Worksheets(2).Cells(m + 3, 7) = info(i).nadb

Worksheets(2).Cells(m + 3, 8) = info(i).rakoe

Worksheets(2).Cells(m + 3, 9) = info(i).kvid

m = m + 1

End If

Next

m = m + 2

n = "Технический"

For i = 1 To 20

If info(i).otd = n Then

Worksheets(2).Cells(m + 2, 1) = info(i).fio

Worksheets(2).Cells(m + 2, 2) = info(i).Pol

Worksheets(2).Cells(m + 2, 3) = info(i).stag

Worksheets(2).Cells(m + 2, 4) = info(i).otd

Worksheets(2).Cells(m + 2, 5) = info(i).dolg

Worksheets(2).Cells(m + 2, 6) = info(i).okl

Worksheets(2).Cells(m + 2, 7) = info(i).nadb

Worksheets(2).Cells(m + 2, 8) = info(i).rakoe

Worksheets(2).Cells(m + 2, 9) = info(i).kvid

m = m + 1

End If

Next

m = m + 2

n = "Обслуживания"

For i = 1 To 20

If info(i).otd = n Then

Worksheets(2).Cells(m + 2, 1) = info(i).fio

Worksheets(2).Cells(m + 2, 2) = info(i).Pol

Worksheets(2).Cells(m + 2, 3) = info(i).stag

Worksheets(2).Cells(m + 2, 4) = info(i).otd

Worksheets(2).Cells(m + 2, 5) = info(i).dolg

Worksheets(2).Cells(m + 2, 6) = info(i).okl

Worksheets(2).Cells(m + 2, 7) = info(i).nadb

Worksheets(2).Cells(m + 2, 8) = info(i).rakoe

Worksheets(2).Cells(m + 2, 9) = info(i).kvid

m = m + 1

End If

Next

If CheckBox1.Value = True Then 'задание 4

m = m + 2

Worksheets(2).Cells(m, 1) = "Упорядочивание по окладу по возрастанию"

For j = 1 To 9

Worksheets(2).Cells(m + 1, j) = Worksheets(1).Cells(1, j)

Next

For i = 2 To 20

For j = 20 To i Step -1

If info(j).okl < info(j - 1).okl Then

p = info(j - 1)

info(j - 1) = info(j)

info(j) = p

End If

Next j

Next i

For i = 1 To 20

Worksheets(2).Cells(m + 2, 1) = info(i).fio

Worksheets(2).Cells(m + 2, 2) = info(i).Pol

Worksheets(2).Cells(m + 2, 3) = info(i).stag

Worksheets(2).Cells(m + 2, 4) = info(i).otd

Worksheets(2).Cells(m + 2, 5) = info(i).dolg

Worksheets(2).Cells(m + 2, 6) = info(i).okl

Worksheets(2).Cells(m + 2, 7) = info(i).nadb

Worksheets(2).Cells(m + 2, 8) = info(i).rakoe

Worksheets(2).Cells(m + 2, 9) = info(i).kvid

m = m + 1

Next

CheckBox1.Value = False

Worksheets(2).Activate

End If

End Sub

Полученные результаты выводятся на лист2, ячейки которого предварительно очищаются при каждом нажатии кнопки «Начать».

Результат группировки следующий:

По отделам

Ф.И.О.

Пол

Стаж (лет)

Отдел

Должность

Оклад

Надбавка

Районный коэффициент

К выдаче

Степанов Д.В.

м

8,0

Планово-финансовый

Директор

9000

3000

1,70

20400

Уфимцев А.Л.

м

2,1

Планово-финансовый

Гендиректор

12000

3000

1,70

25500

Устинова Л.А.

ж

3,0

Планово-финансовый

Секретарь

2900

1700

1,07

4922

Кирилов Н.А

м

8,0

Планово-финансовый

Менеджер

7000

2500

1,20

11400

Соколова М.Н.

ж

6,5

Планово-финансовый

Бухгалтер

4000

1000

1,13

5650

Щербакова Т.И.

ж

3,0

Планово-финансовый

Бухгалтер

4000

0

1,13

4520

Буторин В.В.

м

5,5

Технический

Механик

2500

0

1,00

2500

Федорцев А.Н.

м

2,9

Технический

Механик

2500

2000

1,00

4500

Печенцева В.И.

ж

7,1

Технический

Техничка

1700

0

1,00

1700

Иванов И.И

м

5,0

Технический

Техник

2400

1800

1,13

4746

Щеголев К.С.

м

11,0

Технический

Конструктор

4000

1000

1,05

5250

Денисова Г.А.

ж

11,0

Технический

Техничка

1700

1500

1,00

3200

Курапов Н.И.

м

9,5

Обслуживания

Охранник

2600

2000

1,12

5152

Романов Д.И.

м

7,0

Обслуживания

Продавец

4000

2000

1,10

6600

Афанасьева Т.А.

ж

10,0

Обслуживания

Секретарь

2900

0

1,01

2929

Кузубов В.А.

м

6,0

Обслуживания

Юрист

4500

2300

1,14

7752

Метелкин Д.А.

м

4,5

Обслуживания

Психолог

5000

0

1,16

5800

Савельев Н.И.

м

4,0

Обслуживания

Секретарь-референт

6000

2100

1,08

8748

Постников П.А.

м

6,0

Обслуживания

Менеждер

8000

2500

1,20

12600

Задание3. Часть1.

В задании3 к части1 необходимо получить сведения о работниках с определенным стажем, имеющим надбавки к зарплате, т.е. предполагается, что величина стажа работника, по которой будет искаться информация о работниках среди тех, кто имеет надбавки к зарплате, должна определяться пользователем (в алгоритме – ввод n). Алгоритм программы следующий:

Для выполнения этого задания необходимо нажать кнопку «Запустить» на UserForm1. Запустится следующая программа:

Private Sub CommandButton4_Click()

Label2.Enabled = True 'задание 3

ComboBox1.Enabled = True

ComboBox1.Value = Clear

Worksheets(4).Activate

ActiveWindow.Zoom = 75

Worksheets(4).Name = "Вывод информации"

Range("A1:I48").Select

Selection.ClearContents

Range("A1").Select

m = 1

Cells(1, 1) = "Работники с надбавкой"

For i = 1 To 9

Worksheets(4).Cells(m + 1, i) = Worksheets(1).Cells(1, i)

Next

k = 1

For i = 1 To 20

If info(i).nadb <> 0 Then 'находим работников с надбавкой

Worksheets(4).Cells(k + 2, 1) = info(i).fio

Worksheets(4).Cells(k + 2, 2) = info(i).Pol

Worksheets(4).Cells(k + 2, 3) = info(i).stag

Worksheets(4).Cells(k + 2, 4) = info(i).otd

Worksheets(4).Cells(k + 2, 5) = info(i).dolg

Worksheets(4).Cells(k + 2, 6) = info(i).okl

Worksheets(4).Cells(k + 2, 7) = info(i).nadb

Worksheets(4).Cells(k + 2, 8) = info(i).rakoe

Worksheets(4).Cells(k + 2, 9) = info(i).kvid

k = k + 1

End If

Next

m = k

ComboBox1.Visible = True

With ComboBox1

.RowSource = "c3:c15"

.ListIndex = 0

End With

End Sub

Из программы видно, что первоначально на лист4 выводятся сведения о тех работниках, что имеют надбавку к зарплате. Далее у работников с надбавкой берется информация о стаже таких работников (колонка c3:c15) и полученные данные заносятся в список ComboBox1, который становится доступным (ComboBox1.Enabled = True). Далее пользователь из ниспадающего списка ComboBox1 должен выбрать величину стажа, о работниках с которой он хотел бы получить информацию. При изменении значения ComboBox1 запускается следующая программа:

Private Sub ComboBox1_click()

k = m + 1

n = Val(ComboBox1.Value)

For i = 1 To 9

Worksheets(4).Cells(k + 1, i) = Worksheets(1).Cells(1, i)

Next

For i = 1 To 20

If info(i).stag = n Then

If info(i).nadb <> 0 Then

Worksheets(4).Cells(k + 2, 1) = info(i).fio

Worksheets(4).Cells(k + 2, 2) = info(i).Pol

Worksheets(4).Cells(k + 2, 3) = info(i).stag

Worksheets(4).Cells(k + 2, 4) = info(i).otd

Worksheets(4).Cells(k + 2, 5) = info(i).dolg

Worksheets(4).Cells(k + 2, 6) = info(i).okl

Worksheets(4).Cells(k + 2, 7) = info(i).nadb

Worksheets(4).Cells(k + 2, 8) = info(i).rakoe

Worksheets(4).Cells(k + 2, 9) = info(i).kvid

k = k + 1

End If

End If

Next

For i = 1 To 20

Worksheets(4).Cells(k + 2, i) = Clear

Next

End Sub

Информация о работниках с надбавкой со стажем, который установил пользователь, выводится на лист4 ниже работников с надбавкой:

Задание4. Часть1.

В данном проекте модно производить упорядочивание данных в порядке возрастания оклада (задание4, часть1). Алгоритм упорядочивания следующий:

Для упорядочивания данных массива info используется метод пузырька. Для того, чтобы в проекте произошло упорядочивание данных по возрастанию оклада, необходимо щелкнуть на форме UserForm1 на флажок надписью «Выполнить задания с упорядочиванием данных в порядке возрастания оклада». Программа упорядочивания содержится в процедуре нажатия флажка CheckBox1:

Private Sub CheckBox1_Click()

Worksheets(3).Activate

Worksheets(3).Name = "Упорядочивание"

m = 1

Worksheets(3).Activate

Range("A1:I48").Select

Selection.ClearContents

Range("A1").Select

Worksheets(3).Cells(m, 1) = "Упорядочивание по окладу по возрастанию"

For j = 1 To 9

Worksheets(3).Cells(m + 1, j) = Worksheets(1).Cells(1, j)

Next

For i = 2 To 20

For j = 20 To i Step -1

If info(j).okl < info(j - 1).okl Then

p = info(j - 1)

info(j - 1) = info(j)

info(j) = p

End If

Next j

Next i

For i = 1 To 20

Worksheets(3).Cells(m + 2, 1) = info(i).fio

Worksheets(3).Cells(m + 2, 2) = info(i).Pol

Worksheets(3).Cells(m + 2, 3) = info(i).stag

Worksheets(3).Cells(m + 2, 4) = info(i).otd

Worksheets(3).Cells(m + 2, 5) = info(i).dolg

Worksheets(3).Cells(m + 2, 6) = info(i).okl

Worksheets(3).Cells(m + 2, 7) = info(i).nadb

Worksheets(3).Cells(m + 2, 8) = info(i).rakoe

Worksheets(3).Cells(m + 2, 9) = info(i).kvid

m = m + 1

Next

CheckBox1.Value = False

End Sub

Результат упорядочивания выводится на лист3, ячейки которого предварительно очищаются:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]