I had to do this as well for my Operating Systems class. It wasn't the best code I have ever written. Well I usually work with the nuts and bolts first when I write code, so that is probably the best way to explain my chain of thought.
First I wrote a process class that held all the information about an individual process that I would need. The main pieces of information I was concerned with was the arrival time (don't know if this is somethign you need to take into consideration or not), time spent in the ready queue, time spent in the cpu, and the time left on the process. The class consisted of a lot of retrieve variable functions and a few modifier functions to set these variables. I also wrote a function in the class that would be used if the process in the cpu was preempted. This function would basically create a new process with the same information but would maintain a variable saying that it was preempted at such and such a time.
I had to write algorithms for SJF, Preemptive SJF (I really really hated this one, so be thankful your professor is only making you do the easy version), RR and FCFS. They were all pains in the ass. I used the list class from the stl to store my process class. I first initialized a list of processes as my test case. I basically used the same algorithm for all, but I had to make alterations to each simulation to accomadate. Just keep track of how much burst time is left on each one. For SJF use the first process as your first job, then search through the list to find the next shortest job and insert it after the job you just completed. You will understand the importance of keeping them in order later. For RR you will need to take preemption into consideration and this is where the function that returns a process in my process class is important. The process that it returns should be pushed onto the back of the list of processes.
Assuming that you were able to write the algorithms and they worked, you now have a list that has a ton of information in it. From this list you can figure out the overhead from the number of context switches in the cpu, the total burst time for the process set, the throughput, and the average wait and turnaround time. I will let you figure that out on your own.
There was one big thing that I wish I was able to do with this program and that was to output gannt charts to the results file. These lists are formatted so that it would be easy. I was strapped for time, and could not implement this feature.
Anyway good luck with this project. Spend an hour a day working on it long before it is due and you should be fine (I was a moron and started it 2 days before it was due).