94 lines
2.8 KiB
Lua
94 lines
2.8 KiB
Lua
--Employee Class
|
|
local EmployeeMethods = {
|
|
|
|
}
|
|
local EmployeeMetamethods = {
|
|
__index=EmployeeMethods,
|
|
__tostring=function(self)
|
|
return ("%s %s %s %s"):format(self.Name,self.EmployeeId,self.Salary,self.DepartmentName)
|
|
end,
|
|
__metatable="Locked",
|
|
}
|
|
local EmployeeBase = {}
|
|
|
|
EmployeeBase.new = function(Name,EmployeeId,Salary,DepartmentName)
|
|
return setmetatable({
|
|
Name=Name,
|
|
EmployeeId=EmployeeId,
|
|
Salary=Salary,
|
|
DepartmentName=DepartmentName,
|
|
},EmployeeMetamethods)
|
|
end
|
|
|
|
--Department Class
|
|
local DepartmentMethods = {
|
|
NewEmployee=function(self,Employee)
|
|
table.insert(self.__Employees,Employee)
|
|
end,
|
|
CalculateHighestSalaries=function(self,Amount)
|
|
local Highest = {}
|
|
local EL = #self.__Employees
|
|
table.sort(self.__Employees,function(a,b)
|
|
return a.Salary > b.Salary
|
|
end)
|
|
for i=1,Amount do
|
|
if i>EL then
|
|
break
|
|
end
|
|
table.insert(Highest,self.__Employees[i])
|
|
end
|
|
return Highest
|
|
end,
|
|
}
|
|
local DepartmentMetamethods = {
|
|
__index=DepartmentMethods,
|
|
__tostring=function(self)
|
|
return ("Department %s"):format(self.Name)
|
|
end,
|
|
__metatable="Locked",
|
|
}
|
|
local DepartmentBase = {
|
|
__Departments={},
|
|
}
|
|
|
|
DepartmentBase.new = function(Name)
|
|
local Department = DepartmentBase.__Departments[Name]
|
|
if Department then return Department end
|
|
Department = setmetatable({
|
|
__Employees={},
|
|
Name=Name,
|
|
},DepartmentMetamethods)
|
|
DepartmentBase.__Departments[Name] = Department
|
|
return Department
|
|
end
|
|
|
|
--Main Program
|
|
|
|
local Employees = {
|
|
EmployeeBase.new("Tyler Bennett","E10297",32000,"D101"),
|
|
EmployeeBase.new("John Rappl","E21437",47000,"D050"),
|
|
EmployeeBase.new("George Woltman","E00127",53500,"D101"),
|
|
EmployeeBase.new("Adam Smith","E63535",18000,"D202"),
|
|
EmployeeBase.new("Claire Buckman","E39876",27800,"D202"),
|
|
EmployeeBase.new("David McClellan","E04242",41500,"D101"),
|
|
EmployeeBase.new("Rich Holcomb","E01234",49500,"D202"),
|
|
EmployeeBase.new("Nathan Adams","E41298",21900,"D050"),
|
|
EmployeeBase.new("Richard Potter","E43128",15900,"D101"),
|
|
EmployeeBase.new("David Motsinger","E27002",19250,"D202"),
|
|
EmployeeBase.new("Tim Sampair","E03033",27000,"D101"),
|
|
EmployeeBase.new("Kim Arlich","E10001",57000,"D190"),
|
|
EmployeeBase.new("Timothy Grove","E16398",29900,"D190"),
|
|
}
|
|
|
|
for _,Employee in next,Employees do
|
|
local Department = DepartmentBase.new(Employee.DepartmentName)
|
|
Department:NewEmployee(Employee)
|
|
end
|
|
|
|
for _,Department in next,DepartmentBase.__Departments do
|
|
local Highest = Department:CalculateHighestSalaries(2)
|
|
print(Department)
|
|
for _,Employee in next,Highest do
|
|
print("\t"..tostring(Employee))
|
|
end
|
|
end
|