Building a menu and scheduler for a thermostat (rotary encoder for input, LCD screen)
For the scheduler, use the Time library. Maintain an array that mentions what change must happen when (create your own protocol for this, for example take "2000/40" to mean "change the thermostat to 40 at 20:00").

Now, in your main loop, set up loop() with a wait period of a second or so. (Since you're taking input as well, you cannot afford to have a longer wait period). Now, just compare your array values with the stuff returned by hour() and minute(), and trigger the changes as needed.

Ramping is also easy, just divvy up the temperature change by every hour. So, the ramp from 45 to 50 in 3 days, just set the Arduino to increase the temperature by 1 every 14 hours.