The problem of generating a train schedule for a single-track railway system is addressed in this paper. A three stage scheduling is proposed to reduce the total train tardiness. We derived an appropriate job-shop scheduling algorithm called DR-algorithm. In the first stage, by determining appropriate weights of the dispatching rules, a pre-schedule is constructed. In the second stage, on the basis of the pre-schedule, the departure times of the trains are modified to reduce the number of conflicts in using railway sections by different trains. In the third stage, a train speed control helps the scheduler to change the trains’ speeds in order to reduce the train tardiness and to reach other objectives. The factual train schedule is based on the modified train speeds and on the modified departure times of the trains. The experimental running of the DR-algorithm on the benchmark instances showed this algorithm can solve train scheduling problems in a close to optimal way. In particular, the total train tardiness was reduced about 20% due to controlling train speeds and the departure times of the trains.