Имя файла
|
Размер файла
[байт]
|
Тип
файла
|
Функции файла
|
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);
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 и др., пользователю
рекомендуется проводить используя стандартные средства операционной системы или
оболочки.