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

Turbo Pascal 7.0 / TP7 / DOCDEMOS / WORKLIST

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

program WorkList;

uses WinCrt, Workers;

const
CompanyName = 'Sand Tech, Inc.';

type
{ Linked list management objects }
PNode = ^TNode;
TNode = record
Item: PEmployee;
Next: PNode;
end;

PStaffList = ^TStaffList;
TStaffList = object
Nodes: PNode;
constructor Init;
destructor Done; virtual;
procedure Add(Item: PEmployee);
procedure Report;
end;

{ TStaffList }
constructor TStaffList.Init;
begin
Nodes := nil;
end;

destructor TStaffList.Done;
var
N: PNode;
begin
while Nodes <> nil do
begin
N := Nodes;
Nodes := N^.Next;
Dispose(N^.Item, Done);
Dispose(N);
end;
end;

procedure TStaffList.Add(Item: PEmployee);
var
N: PNode;
begin
New(N);
N^.Item := Item;
N^.Next := Nodes;
Nodes := N;
end;

procedure TStaffList.Report;

procedure PadString(S: String; PadLen: Integer);
begin
Write(S, ' ':PadLen - Length(S));
end;

var
Current: PNode;
TotalPayAmount: Real;
StaffCount: LongInt;
begin
{ Report header }
TotalPayAmount := 0;
StaffCount := 0;
Writeln;
Writeln(' ':35 - Length(CompanyName), CompanyName, ' Payroll Report');
Writeln;
PadString('Name', 30);
PadString('Title', 30);
Writeln('Pay amount');
PadString('----', 30);
PadString('-----', 30);
Writeln('----------');

{ Traverse linked list, dump payroll report for each worker }
Current := Nodes;
while Current <> nil do
with Current^.Item^ do
begin
Inc(StaffCount);
TotalPayAmount := TotalPayAmount + GetPayAmount;
Show;
Current := Current^.Next;
end;

{ Report summary }
Writeln;
Writeln('Number of employees: ', StaffCount:15);
Writeln('Total payroll amount: ', TotalPayAmount:15:2);
Writeln('Estimated annual payroll:', TotalPayAmount * PayPeriods:15:2);
Writeln;
end;

var
TotalPayAmount: Real;
Staff: TStaffList;

begin
{ Create an empty list }
Staff.Init;

{ Now create and add several workers to the staff list }
Staff.Add(New(PHourly, Init('Von Staadt, Alfred',
'Word processor', 8.35, 80)));
Staff.Add(New(PHourly, Init('Karlon, Allison',
'Fork lift operator', 12.95, 80)));
Staff.Add(New(PCommissioned, Init('Smith, Sam "Snake oil"',
'Direct Sales', 30000, 0.03, 89743)));
Staff.Add(New(PSalaried, Init('Gomez, Rosa',
'Managing Editor', 56000)));
Staff.Add(New(PSalaried, Init('Carter, Cynthia', 'CEO', 110000)));

{ Traverse the list and produce a payroll report }
Staff.Report;

{ Deallocate list and its contents with one destructor call }
Staff.Done;
end.
Соседние файлы в папке DOCDEMOS