Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Turbo Pascal 7.0 / TP7 / DOCDEMOS / WORKERS

.PAS
Скачиваний:
12
Добавлен:
28.06.2014
Размер:
3.49 Кб
Скачать
{************************************************}
{ }
{ Turbo Pascal for Windows }
{ Demo unit }
{ Copyright (c) 1991 by Borland International }
{ }
{************************************************}

unit Workers;

interface

const
PayPeriods = 26; { per annum }
OvertimeThreshold = 80; { per pay period }
OvertimeFactor = 1.5; { times normal hourly rate }

type
PEmployee = ^TEmployee;
TEmployee = object
Name: string[25];
Title: string[25];
Rate: Real;
constructor Init(AName, ATitle: String; ARate: Real);
destructor Done; virtual;
function GetName: String;
function GetPayAmount: Real; virtual;
function GetRate: Real;
function GetTitle: String;
procedure Show; virtual;
end;

PHourly = ^THourly;
THourly = object(TEmployee)
Time: Integer;
constructor Init(AName, ATitle: String; ARate: Real; ATime: Integer);
function GetPayAmount: Real; virtual;
function GetTime: Integer;
end;

PSalaried = ^TSalaried;
TSalaried = object(TEmployee)
function GetPayAmount: Real; virtual;
end;

PCommissioned = ^TCommissioned;
TCommissioned = object(TSalaried)
Commission: Real;
SalesAmount: Real;
constructor Init(AName, ATitle: String;
ARate, ACommission, ASalesAmount: Real);
function GetPayAmount: Real; virtual;
end;


implementation

function RoundPay(Wages: Real): Real;
{ Round pay amount to ignore any pay less than 1 penny }
begin
RoundPay := Trunc(Wages * 100) / 100;
end;


{ TEmployee }
constructor TEmployee.Init(AName, ATitle: String; ARate: Real);
begin
Name := AName;
Title := ATitle;
Rate := ARate;
end;

destructor TEmployee.Done;
begin
end;

function TEmployee.GetPayAmount: Real;
begin
RunError(211); { Give runtime error }
end;

function TEmployee.GetName: String;
begin
GetName := Name;
end;

function TEmployee.GetRate: Real;
begin
GetRate := Rate;
end;

function TEmployee.GetTitle: String;
begin
GetTitle := Title;
end;

procedure TEmployee.Show;
var
S: string[25];
begin
S := GetName;
Write(S, ' ':30 - Length(S));
S := GetTitle;
Write(S, ' ':30 - Length(S));
Writeln(GetPayAmount:10:2);
end;

{ THourly }
constructor THourly.Init(AName, ATitle: String; ARate: Real; ATime: Integer);
begin
TEmployee.Init(AName, ATitle, ARate);
Time := ATime;
end;

function THourly.GetPayAmount: Real;
var
OverTime: Integer;
begin
Overtime := Time - OvertimeThreshold;
if Overtime > 0 then
GetPayAmount := RoundPay(OvertimeThreshold * Rate +
OverTime * OvertimeFactor * Rate)
else
GetPayAmount := RoundPay(Time * Rate);
end;

function THourly.GetTime: Integer;
begin
GetTime := Time;
end;


{ TSalaried }
function TSalaried.GetPayAmount: Real;
begin
GetPayAmount := RoundPay(Rate / PayPeriods);
end;


{ TCommissioned }
constructor TCommissioned.Init(AName, ATitle: String;
ARate, ACommission, ASalesAmount: Real);
begin
TSalaried.Init(AName, ATitle, ARate);
Commission := ACommission;
SalesAmount := ASalesAmount;
end;

function TCommissioned.GetPayAmount: Real;
begin
GetPayAmount := RoundPay(TSalaried.GetPayAmount + Commission * SalesAmount);
end;

end.
Соседние файлы в папке DOCDEMOS