Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Turbo Pascal 7.0 / TP7 / DOCDEMOS / WORKLIST
.PAS {************************************************}
{ }
{ 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.
{ }
{ 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