with ada.text_io; use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
with ada.float_text_io; use ada.float_text_io;
procedure emp5 is
-- A type for a single employee
type Employee is record
name: String(1..20);
id: String(1..6);
salary: Float;
end record;
-- A type for storing employees
type EmpArray is array(1 .. 100) of Employee;
-- A type for storing an array of employees and a count
-- of how many valid employees are currently in the array
type EmployeeList is record
emps: EmpArray;
count: Natural := 0; -- Initialize
end record;
-- Get the employees and count them
procedure getEmps(el: out EmployeeList) is
-- Stores an employee as it's populated, then stored in the array
e: Employee;
begin
skip_line; -- Skip the header line
while not end_of_file loop
-- Populate an employee record
get(e.name);
get(e.id);
get(e.salary);
-- Count and store the employee that was read
el.count := el.count + 1;
el.emps(el.count) := e;
end loop;
end getEmps;
-- Output in reverse the employees with high salaries
procedure putEmps(elist: EmployeeList) is
-- A local for storing a copy of an employee
e: Employee;
begin
for i in reverse 1 .. elist.count loop
-- Pull out a copy of an employee, for convenience
e := elist.emps(i);
if e.salary > 100_000.00 then
-- For an example, let's access the name using the long way
put(elist.emps(i).name);
put(e.id);
put(e.salary, fore=> 7, aft=> 2, exp=>0);
new_line;
end if;
end loop;
end putEmps;
-- Allocate an employee list
emplist: EmployeeList;
begin
getEmps(emplist);
putEmps(emplist);
end emp5;