Две таблицы - суть два массива следующих классов: class Students { int ID; std::String Name; /* И остальные нужные поля, такие как факультет, специальность */ }; Class Results { int StudentID; // ID студента int result; // балл за экзамен int semestr; // номер семестра, можно вместо int строку }; Объявляешь два массива (или списка) и дальше заполняешь нужным способом. А для отчётов - если по специальностям и т. п. перебираешь студентов, сортируешь по специальностям, выводишь данные Если по семестрам, отличникам и двоечникам - перебираешь результаты, сортируешь по баллам (семестрам) и выводишь данные.