This project is based on OOP344 course.