Задание 5. Хранение данных и расчет заработной платы
Запустите Visual Basic, выберите тип создаваемого приложения Standart.exe.
Щ елкните на появившемся изображении формы. Перейдите в окно свойств и выберите шрифт (Font) Arial 11, жирный. Затем измените в окне свойств формы имя “Form1” на “Начисление заработной платы”.
Добавьте в форму метку Label1, пять окон редактирования TextBox1 TextBox5 и четыре кнопки
Command1 Command4.
Разместите элементы на форме так, как это представлено на рисунке и установите для них указанные в таблице
Объект |
Свойство |
Значения |
Form1 |
Caption |
Начисление заработной платы |
Label1 |
Caption |
Ф.И.О. Тар.ст. Часы Стаж |
Text1 |
Text |
1 |
Text2 |
Text |
Ничего |
Text3 |
Text |
Ничего |
Text4 |
Text |
Ничего |
Text5 |
Text |
Ничего |
Text6 |
Text |
Ничего |
Text6 |
MultiLine |
True |
Text6 |
ScrolBars |
Vertical |
Command1 |
Caption |
Выход |
Command2 |
Caption |
Добавит запись № |
Command3 |
Caption |
Просмотр БД |
Command4 |
Caption |
Зарплата |
Затем, в самом начале модуля формы впишите код, определяющий общедоступные переменные и структуру записи Rabotnik.
Option Explicit 'Общедоступные переменные
Dim FRec As Rabotnik 'Объявление записи типа Rabotnik
Dim ZpN, i As Integer 'Объявление целочисленной переменной
Private Type Rabotnik 'Структура записи
Id As Integer 'Номер записи
FIO As String * 30 'Ф.И.О. (Максимум 30 символов)
TrSt As Double 'Тарифная ставка
RbCh As Double 'Отработан. часы
StRb As Double 'Надбавка
End Type 'Конец объявления структуры
В конечном итоге форма программы будет иметь следующий вид.
Двойным щелчком на кнопке Command1 откройте окно кода для ввода операторов программы. Между строками Sub и End Sub введите оператор End.
Private Sub Command1_Click()
End
End Sub
После этой процедуры напишите текст процедуры SaveRecord.
Sub SaveRecord() 'Процедура записи в файл
ZpN = Val(Text1.Text)
'******************************* Открытие файла для чтения
Open "D:\DataZrp.txt" For Random As #1 Len = Len(FRec)
FRec.ID = ZpN 'Добавляем № в состав записи
FRec.FIO = Text2.Text 'Добавляем Ф.И.О. в запись
FRec.TrSt = Text3.Text 'Добавляем размер тарифной ставки
FRec.RbCh = Text4.Text 'Добавляем число отработанных часов
FRec.StRb = Text5.Text 'Добавляем коэффициент надбавки (%)
Put #1, ZpN, FRec 'Запись в файл
Close #1 'Закрытие файла
End Sub 'Закрытие процедуры
Двойным щелчком кнопки “Добавить запись №” (Command2), создайте процедуру вызова процедуры Call SaveRecord:
Private Sub Command2_Click()
Call SaveRecord
End Sub
Вслед за этим кодом поместите текст процедуры чтения строки ReadRecord().
Sub ReadRecord() ' Процедура чтения строки
Dim Srk As String ' Строковая переменная
'****************************************** Открытие файла
Open "E:\DataZrp.txt" For Random As #1 Len = Len(FRec)
ZpN = 1 ' Запись №1
Do While Not EOF(1) ' Выполнять до обнаружения EOF(1)
Get #1, ZpN, FRec ' Чтение текста записи из файла
If EOF(1) = True Then ' Проверка наличия конца файла
GoTo q ' Безусловный переход к метке q
Else ' Иначе формируем строку
Srk = Srk + Str(FRec.ID) + vbTab + FRec.FIO + _
vbTab + Str(FRec.TrSt) + vbTab + " " + _
Str(FRec.RbCh) + vbTab + " " + _
Str(FRec.StRb) + vbTab + vbCrLf
ZpN = ZpN + 1 ' Увеличение номера записи на 1
End If ' Конец If
'**********************************************************
Loop ' Конец цикла Do While Not EOF(1)
q: ' Метка
Text6.Text = Srk + vbCrLf + vbTab + _
"Конец файла" ' Вывод строки в Text6.Text
Close #1 ' Закрытие файла №1
End Sub ' Закрытие процедуры
Двойным щелчком кнопки “Просмотр БД” (Command3), создайте процедуру вызова процедуры Call ReadRecord:
Private Sub Command3_Click()
Call ReadRecord
End Sub
Далее, двойным щелчком кнопки “Зарплата” (Command4) создайте заготовку этой процедуры и впишите в нее следующий код:
Private Sub Command4_Click() 'Заголовок процедуры
Dim Srk As String 'Строковая переменная
Dim ST, NS, ZP, N, TS As Double 'Действительные переменные
Dim SJ, DH, K1, K2 As Double 'Действительные переменные
'****************************************** Открытие файла
Open "D:\DataZrp.txt" For Random As #1 Len = Len(FRec)
ZpN = 1 'Запись № 1
'**************************************** Заголовок строки
Srk = vbCrLf + _
" Pасчет заработной платы" + vbCrLf + _
" ===============================" + vbCrLf + vbCrLf
Do While Not EOF(1) 'Выполнять до обнаружения EOF(1)
Get #1, ZpN, FRec 'Чтение текста записи из файла
If EOF(1) = True Then 'Проверка наличия конца файла
GoTo q 'Безусловный переход к метке q
Else 'Иначе формируем строку
'****************************************** Оплата по дням
TS = FRec.TrSt 'Тарифная ставка
DH = FRec.RbCh 'Отработано часов
ST = (TS * DH) / 162 'Оплата отработанных часов
'**************************************** Надбавка за стаж
SJ = FRec.StRb ' Стаж работы
If SJ <= 5 Then ' Если стаж работы <= 5 лет то
K1 = 0
ElseIf 5 < SJ <= 10 Then ' Если стаж работы от 5 до 10 лет
K1 = 0.05
ElseIf 10 < SJ <= 20 Then ' Если стаж от 10 до 20 лет
K1 = 0.1
Else ' Иначе
K1 = 0.25
End If ' Конец If
NS = ST * K1 ' Величина надбавки за стаж
'**************************************** Вычитаемый налог
If (NS + ST) <= 2500 Then ' Если стаж и оклад <= 2500 то
K2 = 0.12
Else ' Иначе
K2 = 0.2
End If ' Конец If
N = (ST + NS) * K2 ' Величина налога
ZP = ST + NS – N ' Итого
Srk = Srk + " " + Str(FRec.ID) + vbTab + FRec.FIO + _
vbCrLf + _
" ***************************** " + vbCrLf + _
" Тар.Ставка" + vbTab + Format(TS, "0.00") + vbCrLf + _
" Отр.часы " + vbTab + Format(DH, "0") + vbCrLf + _
" Оплачено " + vbTab + Format(ST, "0.00") + vbCrLf + _
" За стаж " + vbTab + Format(NS, "0.00") + vbCrLf + _
" Налог " + vbTab + Format(N, "0.00") + vbCrLf + _
" Итого " + vbTab + Format(ZP, "0.00") + vbCrLf + _