-- Now give raises to employeees
with ada.text_io; use ada.text_io;
with ada.float_text_io; use ada.float_text_io;
procedure emp4 is
type Employee is record
Name: String(1 .. 20);
ID: String(1 .. 6);
Salary: Float;
end record;
type Emp_Array is array(1 .. 10) of Employee;
type Emp_List is record
emps: Emp_Array;
num: Natural := 0; -- How many currently stored
end record;
-- Add all employees to list
procedure get_emps(employs: out Emp_List) is
e_tmp: Employee;
begin
while not end_of_file loop
employs.num := employs.num + 1;
get(e_tmp.Name);
get(e_tmp.ID);
get(e_tmp.salary);
employs.emps(employs.num) := e_tmp;
end loop;
-- put(employs.emps(2).id);
end get_emps;
-- Print all the employees
procedure put_emps(employs: in Emp_List) is
e_tmp: Employee;
begin
for i in 1 .. employs.num loop
e_tmp := employs.emps(i);
put(e_tmp.Name);
put(e_tmp.ID);
put(e_tmp.salary, 7, 2, 0);
new_line;
end loop;
end put_emps;
procedure give_raises(employs: in out Emp_List; raise_amt: Float) is
-- e_tmp: Employee;
begin
for i in 1 .. employs.num loop
employs.emps(i).salary := employs.emps(i).salary + raise_amt;
-- Alternate solution uses e_tmp, but
-- if e_tmp is used, it must be copied BACK into the array
-- e_tmp := employs.emps(i);
-- e_tmp.salary := e_tmp.salary + raise_amt;
-- employs.emps(i) := e_tmp; -- Copy back into array
end loop;
end give_raises;
-- Give them all raises - version 2 using an iterator loop
procedure give_raises2(employs: in out Emp_List; raise_amt: Float) is
begin
for e_tmp of employs.emps(1 .. employs.num) loop
e_tmp.salary := e_tmp .salary+ raise_amt;
end loop;
end give_raises2;
the_emps: Emp_List;
begin
get_emps(the_emps);
put_emps(the_emps);
new_line;
give_raises(the_emps, 1_000.0);
put_emps(the_emps);
new_line;
give_raises2(the_emps, 2_000.0);
put_emps(the_emps);
end emp4;