In a similar situation with my own school based apps, I have a routine predictably called UpdateAcademicYear
This goes through various tables running update queries to change records as appropriate including
1. Transfer leavers in Year 11 to archive tables
2. Transfer reporting and attendance data for year to archive tables
3. Increase AcYear by 1 e.g. from 2017-18 to 2018-19
4. Modify year group for student tutor groups e.g. 7A to 8A
5. Import new students and staff
6. Update course and class details and student/staff timetables
7. Archive old school calendar and replace with new
Etc, etc
The details will vary for each country and indeed each school but the idea is to create a routine which can just be run each year at the click of a button by an administrator.
It should also have safeguards so it can be undone in case of issues. Also to prevent it being run twice by mistake.
Setting all of this up is time consuming and should only be tested on backup copies of your data.
Do NOT use on LIVE DATA until you are SURE it works correctly. Even then BACKUP your data first.
If you ignore the above you will likely spend a huge number of hours sorting out data where part has been updated but not all.
Good luck