Автоматизация расчета начислений заработной платы в строительном управлении N 151

Государственный комитет Российской Федерации

по высшему образованию









ГОСУДАРСТВЕННАЯ АКАДЕМИЯ УПРАВЛЕНИЯ

имени СЕРГО ОРДЖОНИКИДЗЕ









Институт управления и предпринимательства в строительстве





Кафедра производственного менеджмента в строительстве







КУРСОВОЙ ПРОЕКТ







по курсу "Автоматизация и моделирование

процессов управления"







Тема проекта: " Автоматизация расчета начислений

заработной платы в строительном управлении N 151"









Выполнил: Ростовцев А.И., ПМ- строй III-2

Проверил:  Сороко Г.Я.





Москва-1997.



Содержание.



1. Введение;

2. Экономико-организационная сущность задачи;

3. Входная и выходная информация, структура файлов;

4. Блок-схема алгоритма решения задачи;

5. Краткие сведения по техническому и общесистемному программному обеспечению;

6. Тексты программ (в приложении);

7. Инструкция пользователя;

8. Результаты решения задачи на ПЭВМ.









































Экономико-организационная сущность задачи.



По заданию на курсовое проектирование производится автоматизация расчета начисления заработной платы в строительном управлении N 152. Данная задача реализуется экономистом-бухгалтером отдела бухгалтерского учета и отчетности строительного управления.

При автоматизации задачи должны быть учтены следующие основные требования:

-оптимальное для пользователя представление исходной и конечной информации.

 -простота и удобство в эксплуатации программы автоматизации;



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

В программе предусмотрен расчет доплаты из коллективного фонда оплаты труда к зарплате работника по тарифу и его индивидуальным выплатам, распределяемого в соответствии с коэффициентом трудового участия (КТУ).Величина этого коллективного фонда определяется как разность между фондом заработной платы на текущий месяц, который определяет руководство в зависимости от выполнения производственной программы, и суммой зарплаты по тарифу и индивидуальных выплат по всем участкам ("ПОСОБИЯ" и "БОЛЬНИЧНЫЙ" при расчете выплат из коллективного фонда исключаются, так как выплачиваются из специальных фондов).

При расчете дополнительной заработной платы для каждого работника определяется величина набранных им в текущем месяце баллов, которая рассчитывается как произведение зарплаты по тарифу (с учетом выходных и сверхурочных) работника и полученного им КТУ.

Далее определяются нормативные коэффициенты доплаты из коллективного фонда для рабочих и служащих. Величина нормативного коэффициента для рабочих равна отношению части коллективного фонда на рабочих к сумме баллов по рабочим. Величина нормативного коэффициента для ИТР равна отношению части коллективного фонда на ИТР к сумме баллов по ИТР.

При распределении коллективного фонда между рабочими и ИТР предусматривается равенство общей зарплаты рабочего 5-го разряда (т.е. сумма зарплаты по тарифу и доплаты распределенной по КТУ без учета индивидуальных начислений) общей зарплате мастера (при окладе мастера - 250000).

Доплата из коллективного фонда каждому работнику рассчитывается как произведение количества баллов данного работника и соответствующего нормативного коэффициента.

Также в программе рассчитываются начисления по каждому работнику итоговой суммы заработной платы, включающей зарплату по тарифу (в том числе оплату за выходные и сверхурочные),доплату из коллективного фонда и индивидуальные выплаты, при этом "БОЛЬНИЧНЫЙ" и "ПОСОБИЯ" складываются только для определения общей суммы начислений.









Входная и выходная информация, структура файлов.



Имя файла

Размер файла [байт]

Тип 

файла



Функции файла

pr1.dpr

256

исходный

Определяет структуру программы, 

осуществляет ее запуск при компиляции

 программы.

pr1.exe

224768

рабочий

Определяет структуру программы,

 осуществляет ее запуск.

pr1.opt

279

формат-

ный

Определяет взаимодействие программы

 с Windows; опции ее запуска.

start.pas

1951

исходный

Отвечает за интерфейс общения с

 пользователем, ввод дополнительной

 информации из файла base.dat при

 компиляции программы.

start.dcu

5312

рабочий

Отвечает за интерфейс общения с

 пользователем, ввод дополнительной 

информации из файла base.dat.

start.dfm

1205

формат-

ный

Отвечает за опции интерфейса

 пользователя, графическую часть

 программы.

unit1.pas

1090

исходный

Осуществляет  идентификацию

 переменных при компиляции программы.

unit1.dcu

1856

рабочий

Осуществляет идентификацию

 переменных.

unit2.pas

2357

исходный

Осуществляет ввод данных из входных

 таблиц при компиляции программы.

unit2.dcu

7440

рабочий

Осуществляет ввод данных из входных

 таблиц.

unit3.pas

2432

исходный

Осуществляет  основной расчет при

 компиляции программы.

unit3.dcu

7488

рабочий

Осуществляет основной расчет.

unit4.pas

918

исходный

Осуществляет  вывод данных в выход-

ные таблицы при компиляции программы.

unit4.dcu

2848

рабочий

Осуществляет вывод данных в выход-

ные таблицы.

base.dat

30

входной

Файл, хранящий дополнительную информацию.

shapka

1126

входной

Файл, хранящий шапку выходной таблицы.

X-1-Y.txt

изменя-ется

входной

Таблицы входной информации №1, где X

- № участка, а Y- № месяца.

X-2-Y.txt

изменя-ется

входной

Таблицы входной информации №2, где X

- № участка, а Y- № месяца.

X-Y.txt

изменя-ется

выходной

Таблицы выходной информации, где X- 

№ участка, а Y- № месяца.



Краткие сведения по техническому и общесистемному

программному обеспечению.



Минимальная конфигурация компьютера:



- Оболочка или операционная система: Windows 3.1, Windows 95 , Windows NT или OS/2,MAC (поддержка 16-bit-ного кода и символьной кодировки Windows 3.1)

- 2 MB RAM

- VGA Card

- Hard Drive 15 Mb

- Floppy drive 1.44 MB



Коротко о программе:



Программа " Автоматизация расчета начислений заработной платы в строительном управлении N 151" была написана Delphi 1.0 for Windows 3.1 и скомпилирована в 16-ти битном коде. Предусмотрен удобный интерфейс пользователя, возможность запуска программы параллельно с другими программами, что ускоряет работу пользователя и делает программу более практичной. У программы есть один большой недостаток и в то же время достоинство: программа работает в кодировке символов Windows, что делает возможным делать удобную ландшафтную печать из Windows, использовать полученную информацию в других приложениях Windows. Для упрощения программы я не предусмотрел в ней встроенного конвектора для перевода файлов в формат DOS, поэтому для использования результатов в приложениях DOS следует перевести выходные файлы в нужный формат. Это можно сделать при помощи стандартного редактора WordPad или Write.

Общий размер программы составляет 252 246 байт. Программа не содержит самораспаковывающихся архивов, файлов, что делает возможность ее быстрого запуска прямо с незащищенной дискеты. Но лучше производить запуск с жесткого диска, так как скорость обращения к нему и скорость записи на него выше, чем у дискеты, так же это повысит надежность сохранения информации. В принципе данная программа- примитивная демонстрационная версия, которую можно развить в настоящую хорошую программу: организовать вызов встроенного редактора, вывод на принтер, систему помощи, меню с всплывающими подсказками, "сделать конфетку". Возможности Delphi 1.0 for Windows 3.1 очень велики, при использовании 32-bit-ного кода они почти не ограничены. Существует множество библиотек и модулей, при подключении которых можно сделать настоящего монстра, который будет делать все, что хочешь и будет прост в обращении.

	Программа была написана под Windows 3.1, но может работать и под другими оболочками, эмулирующих работу Windows 3.1 -OS/2; MAC, поддерживающих 16-bit-ный код и кодировку Windows3.1- Windows NT, Windows 95.

















Тексты программ (в приложении).



Главный запускающий файл программы.

Pr1.dpr



program Pr1;



uses

  Forms,

  Start in 'START.PAS' {Form1},

  unit1 in 'UNIT1.PAS',

  unit2 in 'UNIT2.PAS',

  unit3 in 'UNIT3.PAS',

  unit4 in 'UNIT4.PAS';



{$R *.RES}



begin

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.



Файл определяющий ввод дополнительной информации через интерфейс программы.

Start.pas



unit Start;



interface



uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs, StdCtrls,Unit1,Unit2,Unit3,Unit4;



type

  TForm1 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Edit1: TEdit;

    Label4: TLabel;

    Edit2: TEdit;

    Label5: TLabel;

    Edit3: TEdit;

    Label6: TLabel;

    Edit4: TEdit;

    Label7: TLabel;

    Edit5: TEdit;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);

begin

    str(n_mes,mw);



    system.assign(f,'vhod\base.dat');

    rewrite(f);



    z:=Edit3.Text;

    writeln(f,z);{val(z,fzp,conv);}{ФЗП}



    z:=Edit2.Text;

    writeln(f,z);{val(z,kol_d,conv);} {Кол-во дней}



    z:=Edit5.Text;

    writeln(f,z);{val(z,tar_rab,conv);} {Тариф рабочего 5-го разряда}



    z:=Edit4.Text;

    writeln(f,z);{val(z,oc_m,conv);} {Оклад мастера}



    z:=Edit1.Text;

    writeln(f,z);{val(z,n_mes,conv);}



    system.close(f);

   Unit2.vvod;

   Unit3.prog;

   Unit4.vivod;



end;



procedure TForm1.FormCreate(Sender: TObject);

begin



   Edit1.Text:='0';

   Edit2.Text:='0';

   Edit3.Text:='0';

   Edit4.Text:='0';

   Edit5.Text:='0';



   system.assign(f,'vhod\base.dat');

   reset(f);



   readln(f,z);val(z,fzp,conv);{ФЗП}

   Edit3.Text:=FloatToStr(fzp);



   readln(f,z);val(z,kol_d,conv); {Кол-во дней}

   Edit2.Text:=IntToStr(kol_d);



   readln(f,z);val(z,tar_rab,conv); {Тариф рабочего 5-го разряда}

   Edit5.Text:=IntToStr(tar_rab);



   readln(f,z);val(z,oc_m,conv); {Оклад мастера}

   Edit4.Text:=FloatToStr(oc_m);



   readln(f,z);val(z,n_mes,conv);

   Edit1.Text:=IntToStr(n_mes);



   system.close(f);



end;



end.





Файл, отвечающий за идентификацию переменных.

Unit1.pas



unit unit1;

interface

    { Раздел констант }

    const mes:array [1..12] of string [8]=('Январь','Февраль','Март','Апрель','Май',

      'Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');





    { Описание переменных }

    VAR n_mes:integer;{N месяца}

    conv:integer; {перем.-конвектор}

    f,f1:system.text;

    z,s,mw:string;x,y:real; {дополнительные переменные}

    kol_d,tar_rab: integer; {Исходная информация}

    fzp,oc_m:extended; {Исходная информация}

    kol_vo:array[1..4] of integer; {Количество работников в группе}

    ktu:array[1..4,1..20] of real; {КТУ}

    fio:array[1..4,1..20] of string[16]; {ФИО}

    a:array[1..4,1..20,3..20] of longint; {Выходная информация}

    t:array[1..4,1..20,1..7] of real; {Тариф/оклад и табель}

    balls:array[1..4,1..20] of extended; {Баллы работников}

    br,bi:extended; {Сумма баллов}

{    i,j,g,h,}c:integer; {переменные-счетчики}

    nkr,nki,p,q:extended; {Нормативные коэффициенты, Доля ИТР,Перем.-счетчик}

    fr,fi:real; { Средства распред. по КТУ рабочим и ИТР}









implementation



end.



Файл, отвечающий за ввод данных из входных таблиц.

Unit2.pas



unit unit2;



interface

uses unit1;



procedure vvod;



implementation

procedure vvod;

var i,j,g,h:integer;

begin









{ Считывание данных из первой таблицы }

for i:=1 to 4 do kol_vo[i]:=0;

for i:=1 to 4 do begin

str(i,s);assign(f,'vhod\'+s+'-1-'+mw+'.txt');reset(f);



for j:=1 to 7 do readln(f,z); {пропустить шапку таблицы}

repeat readln(f,z);kol_vo[i]:=kol_vo[i]+1;

       j:=pos('|',z);z:=copy(z,j+1,250); {Пропускаем номер}

       j:=pos('|',z);fio[i,kol_vo[i]]:=copy(z,1,j-1);z:=copy(z,j+1,250); {ФИО}

       j:=pos('|',z);val(copy(z,1,j-1),ktu[i,kol_vo[i]],conv);z:=copy(z,j+1,300);{КТУ}

       {Разряд работника}

       j:=pos('|',z);val(copy(z,1,j-1),a[i,kol_vo[i],6],conv);z:=copy(z,j+1,300);

       {Тариф/оклад работника}

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],1],conv);z:=copy(z,j+1,300);

       {Табель времени работника}

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],2],conv);z:=copy(z,j+1,300);

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],3],conv);z:=copy(z,j+1,300);

       {Выходные работника}

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],4],conv);z:=copy(z,j+1,300);

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],5],conv);z:=copy(z,j+1,300);

       { Сверхурочные работника}

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],6],conv);z:=copy(z,j+1,300);

       j:=pos('|',z);val(copy(z,1,j-1),t[i,kol_vo[i],7],conv);

until eof(f);

close(f);end;



{ Считывание данных из второй таблицы }





for i:=1 to 4 do begin

str(i,s);assign(f,'vhod\'+s+'-2-'+mw+'.txt');reset(f);

for g:=1 to 7 do readln(f,z); {пропустить шапку таблицы}

for g:=1 to kol_vo [i] do begin

    readln(f,z);j:=pos('|',z);z:=copy(z,j+1,250);

    j:=pos('|',z);z:=copy(z,j+1,250);

    for h:=8 to 10 do begin j:=pos('|',z);val(copy(z,1,j-1),x,c);

        a[i,g,h]:=round(x);fzp:=fzp-a[i,g,h];z:=copy(z,j+1,250);end;

    j:=pos('|',z);val(copy(z,1,j-1),x,c);

    a[i,g,18]:=round(x);z:=copy(z,j+1,250);

    for h:=11 to 12 do begin j:=pos('|',z);val(copy(z,1,j-1),x,c);

        a[i,g,h]:=round(x);fzp:=fzp-a[i,g,h];z:=copy(z,j+1,250);end;

    j:=pos('|',z);val(copy(z,1,j-1),x,c);a[i,g,19]:=round(x);

    for h:=13 to 16 do begin z:=copy(z,j+1,250);j:=pos('|',z);

        val(copy(z,1,j-1),x,c);a[i,g,h]:=round(x);fzp:=fzp-a[i,g,h];end;

end;

close(f);end;





end;

end.



Файл, отвечающий за основной расчет.

Unit3.pas

unit unit3;



interface

uses unit1;



procedure prog;



implementation

procedure prog;

var i,j,h:integer;

begin



br:=0;

bi:=0;



for i:=1 to 4 do for j:=1 to kol_vo[i] do begin



if a[i,j,6]=0 then balls[i,j]:=t[i,j,1]*t[i,j,2]/kol_d

              else balls[i,j]:=t[i,j,1]*t[i,j,3];

a[i,j,3]:=round(balls[i,j]);



{Выходные}

if a[i,j,6]=0 then begin a[i,j,4]:=round(1.5*t[i,j,1]*t[i,j,4]/kol_d);

   balls[i,j]:=balls[i,j]+t[i,j,1]*t[i,j,4]/kol_d;end

   else begin balls[i,j]:=balls[i,j]+t[i,j,1]*t[i,j,5];

   a[i,j,4]:=round(1.5*t[i,j,1]*t[i,j,5]);end;

{Сверхурочные}

if a[i,j,6]<>0 then begin balls[i,j]:=balls[i,j]+t[i,j,1]*(t[i,j,6]+t[i,j,7]);

   a[i,j,5]:=round(t[i,j,1]*(1.5*t[i,j,6]+2*t[i,j,7]));end

      else begin balls[i,j]:=balls[i,j]+t[i,j,1]*(t[i,j,6]+t[i,j,7])/8/kol_d;

   a[i,j,5]:=round(t[i,j,1]*(1.5*t[i,j,6]+2*t[i,j,7])/8/kol_d);end;

{Расчет баллов}

        balls[i,j]:=balls[i,j]*ktu[i,j];

        if a[i,j,6]<>0 then br:=br+balls[i,j] else bi:=bi+balls[i,j];

for h:=3 to 5 do fzp:=fzp-a[i,j,h];{Уменьшение ФЗП}

end;

{writeln ('  bi: ',round(bi),'  br: ',round(br));}







{ Надбавка по КТУ }

nkr:=0.75*fzp/br;nki:=0.25*fzp/bi;

{writeln('fzp  ',round(fzp));}



p:=0;

q:=1;

{ Цикл оптимизации}

repeat

    if round (oc_m+oc_m*1.5*nki)> round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr)

    then begin p:=p+q; q:=q/10; end;



    p:=p-q;

    nkr:=(1-p)*fzp/br;

    nki:=p*fzp/bi;

 {   writeln (round (oc_m+oc_m*1.5*nki),'   ',round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr));

    writeln ('oc_m  ',round(oc_m),' nki   ',round( nki));

    writeln ('oc_m  ',round(oc_m),' nkr   ',round( nkr));}

until round (oc_m+oc_m*1.5*nki)<> round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr);



{writeln ('ok ',round (oc_m+oc_m*1.5*nki),'   ',round(tar_rab*8*kol_d+tar_rab*8*kol_d*1.5*nkr));

writeln ('ok nkr : ',round(nkr) ,' nki :  ',nki);}



{ Зарплата по КТУ выпл. рабочим }

for i:=1 to 3 do

    for j:=1 to kol_vo[i] do a[i,j,7]:=round(nkr*balls[i,j]);



{ Зарплата по КТУ выпл. ИТР }

    for j:=1 to kol_vo[i] do a[4,j,7]:=round(nki*balls[4,j]);



{ Итоговое суммирование }



for i:=1 to 4 do

    for j:=1 to kol_vo[i] do begin

        a[i,j,17]:=0;a[i,j,20]:=0;

        for h:=3 to  5 do a[i,j,17]:=a[i,j,17]+a[i,j,h];

        for h:=7 to 16 do a[i,j,17]:=a[i,j,17]+a[i,j,h];

        for h:=17 to 19 do a[i,j,20]:=a[i,j,20]+a[i,j,h];

        end;









end;

end.



Файл, отвечающий за вывод данных в выводные таблицы.

Unit4.pas



unit unit4;



interface

uses unit1;



procedure vivod;



implementation

procedure vivod ;

var i,j,h:integer;

begin

{Вывод в таблицу}



for i:=1 to 4 do begin

    str(i,s);assign(f,'vihod\'+s+'-'+mw+'.txt');rewrite(f);

    s:='Таблица заработной платы по ' +s+' участку на '+mes[n_mes]+' месяц';

    writeln(f,s);



    {Создание шапки таблицы}

    assign(f1,'vhod/shapka');reset(f1);

    for j:=1 to 6 do begin readln(f1,z);writeln(f,z);end;close(f1);



    for j:=1 to kol_vo[i] do begin {Вывод данных в таблицу}

        write(f,'|');write(f,j:2);write(f,'|');

        write(f,fio[i,j]:16);write(f,'|');

        for h:=3 to 5 do begin write(f,a[i,j,h]:8);write(f,'|');end;

        str(round(balls[i,j]),s);write(f,s:8);write(f,'|');

        for h:=7 to 20 do begin write(f,a[i,j,h]:8);write(f,'|');end;

    write(f,j:2);writeln(f,'|');

    end;

    close(f);

end;



{readln;}



end;

end.











Список идентификаторов, используемых в программе:

n_mes -№ ìåñÿöà;

conv -ïåðåì.-êîíâåêòîð;

f,f1 -òåêñòîâûå;

z,s,mw:string;x,yl -äîïîëíèòåëüíûå ïåðåìåííûå;

kol_d,tar_rab, fzp,oc_m -Èñõîäíàÿ èíôîðìàöèÿ;

kol_vo[1..4] -Êîëè÷åñòâî ðàáîòíèêîâ â ãðóïïå;

ktu[1..4,1..20] -ÊÒÓ;

fio[1..4,1..20] -Ôамилия, Èмя, Îчество работника;

a[1..4,1..20,3..20] -Âûõîäíàÿ èíôîðìàöèÿ èç òàáëèöû;

t:[1..4,1..20,1..7] -Òàðèô, îêëàä è òàáåëü;

balls[1..4,1..20] of extended -Áàëëû ðàáîòíèêîâ;

br,bi -Ñóììы áàëëîâ рабочих и ИТР;

i,j,g,h,c; -ïåðåìåííûå-ñ÷åò÷èêè;

nkr,nki,p,q -Íîðìàòèâíûå êîýôôèöèåíòû, Äîëÿ ÈÒÐ,Ïåðåì.-ñ÷åò÷èê;

fr,fi -Ñðåäñòâà ðàñïðåä. ïî ÊÒÓ ðàáî÷èì è ÈÒÐ;

mes -наименование месецев;



Дополнительно:

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

















































































Инструкции пользователя.



Создание входной информации:

	Перед запуском программы необходимо создать соответствующие входные файлы в директории VHOD на основе уже имеющихся файлов. При работе в Windows, пользователю рекомендуется создавать их при помощи стандартного редактора Write (WordPad). Каждому участку в каждом месяце соответствует два файла. Формат файлов должен строго соответствовать формату уже имеющихся файлов, сохраняя структуру таблицы. Наименование файлов должно соответствовать следующим стандартам: 

-Имя первого файла: X-1-Y.txt , где X- номер участка, а Y- номер месяца.

-Имя второго файла: X-2-Y.txt , где X- номер участка, а Y- номер месяца.

Запуск программы:

	Запуск программы осуществляется после запуска Windows или эмулятора Windows 3.1 в случае использования OS/2 или MAC. Запускающий файл- файл pr1.exe. После запуска программы перед пользователем появляется ее интерфейс.

Пользование программой:

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

Просмотр выходной информации:

Выходные таблицы находятся в поддиректории VIHOD. Каждому участку в каждом месяце соответствует определенный файл:

-Имя файла: X-1-Y.txt , где X- № участка, а Y- № месяца.

При работе в Windows, пользователю рекомендуется просматривать их при помощи стандартного редактора Write (WordPad), или Notepad.

Дополнительные операции:

	Дополнительные операции над выходной информацией, как печать выходных таблиц, перевод их в кодировку DOS и др., пользователю рекомендуется проводить используя стандартные средства операционной системы или оболочки.