Министерство РФ по транспорту и связи
Сибирский государственный университет телекоммуникаций и информатики
Курсовое проектирование по информатике:
«Разработка приложения для обработки экономической информации в среде 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, ячейки которого предварительно очищаются: