Sid M. answered 02/14/20
Senior Software Engineer, with BS, and almost MS, in Computer Science
Hi, Cesar L,
Your question presents a non-trivial application! Its description raises all kinds of questions, so the first thing I think you should do is create a list of questions: they'll help drive a design, the answers of which will help you designing, and begin planning code. For example:
- How does the professor interact with the program? We know that s/he will "pre-populate available time slots for students to select to be advised", but how will s/he to that? What sort of user interface should the program present to the professor? For creating the schedule? For listing the students (and their email address)? For seeing which student has what slot? For seeing which students haven't selected a slot, yet?
- Students can't select a time slot until the professor's schedule has been created; how do you insure that the schedule is available before students can try to select a slot.
- How do students interact with the program? We know that they will "select [a time slot] to be advised" but, again, what sort of user interface should the program present to the students?
- What should happens if there are no slots available for a student to select? What happens if there are no slots available that the student wants?
- Can the professor change an existing schedule? Add more slots? Remove slots? What if a slot that the professor wants to delete has already been selected by a student?
- Can students change their selection?
- When should the program send emails to students who haven't selected a slot? Should it be automatic, or does the professor have to do something? If so, what?
- When should the program send a reminder email to a student? Does the professor decide how much lead time before an email is sent?
- After some time (how much?), should students who haven't yet selected a slot, but have already been sent an email, get another email? Should the professor be told who hasn't made reservations?
You'll need to think about these questions, and others, before you design the application, or write a line of code. Perhaps you'll be able to simplify things to reduce the complexity. Perhaps you'll need to get clarification from the professor about the program's requirements?
In any case, these questions are a start. Don't be discouraged by the scope of this project. Remember that you can break big problems into smaller ones, and smaller ones still, until the smallest ones are easy enough to complete. That goes for specification (what do I need to build? how do the users use it?), design (how am I going to build it? what parts do I need?), and [finally] code. Remember, too, that you don't have to do everything in a certain order; once you answer *some* questions, you can design that part, then write (and test) some code, then go back to questions, etc.
Good luck! Let us know how things go, and consider asking more questions, here, as you progress.

Sid M.
02/14/20
CESAR L.
Thank you so much02/14/20