home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / tpw / docdemos / worklist.pas < prev   
Pascal/Delphi Source File  |  1991-05-20  |  3KB  |  131 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Pascal for Windows                     }
  4. {   Demo program                                 }
  5. {   Copyright (c) 1991 by Borland International  }
  6. {                                                }
  7. {************************************************}
  8.  
  9. program WorkList;
  10.  
  11. uses WinCrt, Workers;
  12.  
  13. const
  14.   CompanyName = 'Sand Tech, Inc.';
  15.  
  16. type
  17.   { Linked list management objects }
  18.   PNode = ^TNode;
  19.   TNode = record
  20.     Item: PEmployee;
  21.     Next: PNode;
  22.   end;
  23.  
  24.   PStaffList = ^TStaffList;
  25.   TStaffList = object
  26.     Nodes: PNode;
  27.     constructor Init;
  28.     destructor Done; virtual;
  29.     procedure Add(Item: PEmployee);
  30.     procedure Report;
  31.   end;
  32.  
  33. { TStaffList }
  34. constructor TStaffList.Init;
  35. begin
  36.   Nodes := nil;
  37. end;
  38.  
  39. destructor TStaffList.Done;
  40. var
  41.   N: PNode;
  42. begin
  43.   while Nodes <> nil do
  44.   begin
  45.     N := Nodes;
  46.     Nodes := N^.Next;
  47.     Dispose(N^.Item, Done);
  48.     Dispose(N);
  49.   end;
  50. end;
  51.  
  52. procedure TStaffList.Add(Item: PEmployee);
  53. var
  54.   N: PNode;
  55. begin
  56.   New(N);
  57.   N^.Item := Item;
  58.   N^.Next := Nodes;
  59.   Nodes := N;
  60. end;
  61.  
  62. procedure TStaffList.Report;
  63.  
  64. procedure PadString(S: String; PadLen: Integer);
  65. begin
  66.   Write(S, ' ':PadLen - Length(S));
  67. end;
  68.  
  69. var
  70.   Current: PNode;
  71.   TotalPayAmount: Real;
  72.   StaffCount: LongInt;
  73. begin
  74.   { Report header }
  75.   TotalPayAmount := 0;
  76.   StaffCount := 0;
  77.   Writeln;
  78.   Writeln(' ':35 - Length(CompanyName), CompanyName, ' Payroll Report');
  79.   Writeln;
  80.   PadString('Name', 30);
  81.   PadString('Title', 30);
  82.   Writeln('Pay amount');
  83.   PadString('----', 30);
  84.   PadString('-----', 30);
  85.   Writeln('----------');
  86.  
  87.   { Traverse linked list, dump payroll report for each worker }
  88.   Current := Nodes;
  89.   while Current <> nil do
  90.     with Current^.Item^ do
  91.     begin
  92.       Inc(StaffCount);
  93.       TotalPayAmount := TotalPayAmount + GetPayAmount;
  94.       Show;
  95.       Current := Current^.Next;
  96.     end;
  97.  
  98.   { Report summary }
  99.   Writeln;
  100.   Writeln('Number of employees:     ', StaffCount:15);
  101.   Writeln('Total payroll amount:    ', TotalPayAmount:15:2);
  102.   Writeln('Estimated annual payroll:', TotalPayAmount * PayPeriods:15:2);
  103.   Writeln;
  104. end;
  105.  
  106. var
  107.   TotalPayAmount: Real;
  108.   Staff: TStaffList;
  109.  
  110. begin
  111.   { Create an empty list }
  112.   Staff.Init;
  113.  
  114.   { Now create and add several workers to the staff list }
  115.   Staff.Add(New(PHourly, Init('Von Staadt, Alfred',
  116.     'Word processor', 8.35, 80)));
  117.   Staff.Add(New(PHourly, Init('Karlon, Allison',
  118.     'Fork lift operator', 12.95, 80)));
  119.   Staff.Add(New(PCommissioned, Init('Smith, Sam "Snake oil"',
  120.     'Direct Sales', 30000, 0.03, 89743)));
  121.   Staff.Add(New(PSalaried, Init('Gomez, Rosa',
  122.     'Managing Editor', 56000)));
  123.   Staff.Add(New(PSalaried, Init('Carter, Cynthia', 'CEO', 110000)));
  124.  
  125.   { Traverse the list and produce a payroll report }
  126.   Staff.Report;
  127.  
  128.   { Deallocate list and its contents with one destructor call }
  129.   Staff.Done;
  130. end.
  131.