Computer Number Control (CNC) milling and lathe machines are widely used in manufacturing due to their flexibility in producing parts with a wide variety of geometries. Each flexible machine has a tool magazine capable of holding a set of tools. As machining requirements for each job change, tools can be removed and different ones can be inserted so that the next job can be processed. The existing literature on the job scheduling and the tool loading can be divided into four main areas. The first area is the tool loading for a pre-specified job sequence where the objective is to determine the optimal tool loading by minimizing the number of tool switching. In addition to tool loading, the second area also focuses on sequencing the jobs too; however, the objective is the same as the first one. Rather than to minimizing the number to tool switching, the focal point of the third area has been shifted to minimizing the makespan in presence of multiple process plans. However, the main assumption is that the magazine can hold all tools needed to process all jobs and tool switching is not required. The fourth area considers the geometric and mechanical properties of the tool, assuming a tool switching may be required due to tool life. The job scheduling and the tool loading literatures do not consider multiple process plans or tool life into their problem. Therefore, the first part of this thesis provides a Dynamic Programming method to determine the optimal makespan for a pre-specified sequence of jobs, assuming tool switching may required due to multiple process plans, the capacity of the tool magazine and due to the tool life. In the second part, the assumption for fixed job sequence is relaxed and a heuristic approach is used to first sequence the jobs and then Dynamic Programming is applied to find the optimal makespan for that particular job sequence.