There is more than one approach and the precise details can vary depending on how you need your employees to report their time, but I'd have a table of hours worked with (at least) one record for each day that an employee works. A calculation field in that table could compute a common date for Sunday for all records recorded for the same week:
DateWorked - DayOfWeek ( DateWOrked ) + 1
For the report format shown above, you could then set up a table with one record for employee for each week of the year worked with a date field with the same first day of the week date and this relationship:
Weeks::WeekStart = HoursWorked::cWeekStart and
Weeks::_fkEmployeeID = HoursWorked::_fkEmployeeID
To set up columns of data, you can put 5 (or 7) one row filtered portals to HoursWorked on a list view layout. The portal for Monday would look like this: DayOfWeek ( HoursWorked::DateWorked ) = 2. So you'd set up the first such portal to look and show the data that you want and then you can make copies of it, changing the portal filter to specify a different day of the week.
There are a number of possible variations to this basic method. For example, you could require employees to clock out and in for lunch breaks and this could be set up to create two records for each day. In such case, a summary field defined in HoursWorked could be placed inside the row of the one row portal to show the total hours worked that day. Such a summary field placed inside a portal that does not have a filter and thus matches to all records for the week would report a weekly total.