Code without a DS1302 is probably easier than code with it, especially if you are not familiar with it's quirky bi-directional data pin. Having said that, I use them and they work extremely well.
Think about how a clock works, it is nothing more than counting at a fixed rate and carrying when the limit for each time unit is reached. The trick is to get the one second count as accurate as possible and you can use the hardware timers for that (TMR1 for example). Then:
at one second intervals count up to 60, add one to the minutes and reset the seconds to zero,
when minutes reach 60, add one to the hours and reset the minutes to zero,
when hours reaches 24, add one to the date and reset the hours.
You don't have to use the date if you don't want to but if you do, remember to reset the day to one at the end of the month, not zero! Also, if you use months you will have to cater for different lengths. That is also very easy, just make an array of number of days in each month and use it's contents to decide when to reset and carry to the next month or year.
With a good crystal (16F877A does not have an internal timing source) you should be able to keep accuracy better than one second per day quite easily.
Brian.