以下是在vc++6.0上编的代码 但运行后出现sy1.cpp(4) : fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory   意思是没找到'stdafx.h'这个头文件是吧 我在百度上搜索了一个解决办法 “打开菜单Project-> Setting-> C/C++,再选择Category-> Procomplied Hearders 选择No Using Procomplied Hearders” 我试了这个方法 不管用


这是一个进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用:
先进先出调度算法;
基于优先数的调度算法;
最短执行时间调度算法
确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:
当前执行进程;
就绪队列;
等待队列

我把编码贴在下面了 哪位高手帮我放在vc里调试一吧(另外运行的时候需要一个process.txt文件)  谁帮帮我呀 感激不尽!!

// sy1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
//#include<iostream.h>
#include<time.h>
#include<math.h>
#include<stdlib.h>
//#include "fstream.h"
//#include <iomanip.h>
#define Max 10
typedef struct process{
    char name[10];//进程名
    int NeedTime;//需要执行时间
    int OverTime;//已执行时间
    int Status;//进程状态,0表示等待,1表示就绪,2表示正在执行
    int priority; // 数字越小优先级越高
    struct process *next;//队列指针
}PCB;
typedef struct Queue{
PCB* head;
PCB* rear;
}Queue;
Queue ready,wait,run;//定义就绪队列、等待队列、运行队列
void Create(Queue &Q)//构造一个队列
{    Q.head=Q.rear=(PCB*)malloc(sizeof(PCB));
    if(!Q.head) exit(1);
    Q.rear->next=NULL;
}
void EnQueue(Queue &Q,PCB *s)//入队函数
{    
    s->next=NULL;
    Q.rear->next=s;
    Q.rear=s;
}
PCB* DeQueue(Queue &Q,PCB *s)//出队函数
{
    //if(Q.head==Q.rear) return 0;//此处不用判断,因为每次调用该函数前会判断
    s=Q.head->next;
    Q.head->next=s->next;
    if(Q.rear==s) Q.rear=Q.head;
    return s;
}
void Print(Queue wait,Queue ready,Queue run)
{
    PCB *p;
    cout<<setw(10)<<"Name"<<setw(12)<<"NeedTime"<<setw(12)<<"OverTime"<<setw(12)<<"Priority"<<setw(8)<<"Status"<<endl; 
    //输出各进程的信息及状态
    if(run.head!=run.rear)
    {        
            cout<<setw(10)<<run.rear->name<<setw(12)<<run.rear->NeedTime<<setw(12)<<run.rear->OverTime<<setw(12)<<run.rear->priority<<setw(8)<<run.rear->Status<<endl; 
    }
    for(p=ready.head;p!=ready.rear;) //输出就绪队列里的进程
    {        p=p->next;
            cout<<setw(10)<<p->name<<setw(12)<<p->NeedTime<<setw(12)<<p->OverTime<<setw(12)<<p->priority<<setw(8)<<p->Status<<endl; 
    }
    for(p=wait.head;p!=wait.rear;) //输出等待队列中的进程
    {        p=p->next;
            cout<<setw(10)<<p->name<<setw(12)<<p->NeedTime<<setw(12)<<p->OverTime<<setw(12)<<p->priority<<setw(8)<<p->Status<<endl; 
    }

}
void initial(Queue &wait,Queue &ready,ifstream Input)//进程初始化
{
    int i,j;
    wait.rear=wait.head;ready.rear=ready.head;//xiugai2
    for(i=1;i<=Max;i++)
    {
        PCB *s;
        s=(PCB *)malloc(sizeof(PCB));
        if(!s) exit(1);
        Input>>s->name>>s->NeedTime>>s->priority;
        s->OverTime=0;//已执行时间初始为0
        s->next=NULL;
    //    srand(time(NULL)); 
        j=rand()%2;     //产生一个0-1的随机数
        if(j==0)
        {
            EnQueue(wait,s);
            s->Status=0;
        }
        else 
        {EnQueue(ready,s);
        s->Status=1;
        }
    }
    cout<<"初始进程队列如下:"<<endl;
    Print(wait,ready,run);
}


void FCFS(Queue &wait,Queue &ready,Queue &run)//先进先出调度算法
{    PCB *p;
    if(ready.head==ready.rear&&wait.head!=wait.rear)//如果初始的就绪队列为空等待队列不空,则将等待队列的第一个进程转换到就绪队列中
    {        p=DeQueue(wait,p);
            EnQueue(ready,p);
            p->Status=1;
    }
    for(;ready.head!=ready.rear;)  //每次循环从就绪队列中选择一个进程执行
    {
        p=DeQueue(ready,p);
        EnQueue(run,p);
        run.rear->Status=2;
        
        for(int i=1;i<=run.rear->NeedTime;i++)
        {//进程在CPU上执行,每循环一次假设已执行了1ms    
            run.rear->OverTime=i;
            cout<<"当前各进程状态:"<<endl;
            Print(wait,ready,run);
        }
        //进程结束,收回内存
        p=DeQueue(run,p);
        free(p);

        if(wait.head!=wait.rear)
            {p=DeQueue(wait,p);
            EnQueue(ready,p);
            p->Status=1;    
            }
    }
    cout<<"所有进程执行结束!"<<endl;
}
void Priority(Queue wait,Queue ready,Queue run)//基于优先数的调度算法
{
    int i,m,n;
    PCB *p,*q;
    if(ready.head==ready.rear&&wait.head!=wait.rear)//如果初始的就绪队列为空,则将等待队列的第一个进程转换到就绪队列中
    {        p=DeQueue(wait,p);
            EnQueue(ready,p);
            p->Status=1;}
    
    for(;ready.head->next!=NULL;)  //每次循环从就绪队列中选择一个进程执行
    {
        if(ready.head->next==ready.rear)//如果就绪队列中只有一个进程,则每次就绪队列中都只有一个进程,则同先进先出算法
        {
            p=DeQueue(ready,p);
            EnQueue(run,p);
            run.rear->Status=2;

            for(i=1;i<=run.rear->NeedTime;i++)
            {//进程在CPU上执行,每循环一次假设已执行了1ms    
                run.rear->OverTime=i;
                cout<<"当前各进程状态:"<<endl;
                Print(wait,ready,run);
            }
            //进程结束,收回内存
            p=DeQueue(run,p);
            free(p);

            if(wait.head!=wait.rear)
                {p=DeQueue(wait,p);
                EnQueue(ready,p);
                p->Status=1;    
                }
        }
        else
        {
            for(n=i=1,p=ready.head->next,m=p->priority;p!=ready.rear;i++)
            {//遍历就绪队列,找到具有最小优先数的进程
                //n=i;
                p=p->next;
                if(m>p->priority)
                {
                    m=p->priority;//m记录最小的优先数
                    n=i+1;  //n记录具有最小优先数的进程在链队中的逻辑位置(第几个)
                }
            }
            if(n==1)
            {//如果优先级最高的是第一个,则直接就绪队列第一个进程出队
                p=DeQueue(ready,p);
                EnQueue(run,p);
                run.rear->Status=2;
            }
            else
            {
                for(i=1,q=ready.head;i<n;i++)
                {//找到就绪队列中第n-1个进程的地址
                    q=q->next;
                }
                p=q->next; //p表示就绪队列中的第n个进程的地址
                q->next=p->next;
                if(p==ready.rear)//如果p是最后一个元素
                {ready.rear=q;}
                EnQueue(run,p);
                run.rear->Status=2;
            }

            for(i=1;i<=run.rear->NeedTime;i++)
            {//进程在CPU上执行,每循环一次假设已执行时间+1ms    
                run.rear->OverTime=i;
                cout<<"当前各进程状态:"<<endl;
                Print(wait,ready,run);
            }
            //进程结束,收回内存
            p=DeQueue(run,p);
            free(p);
    
            if(wait.head!=wait.rear)
                {p=DeQueue(wait,p);
                EnQueue(ready,p);
                p->Status=1;    
                }
        }
    }
    cout<<"所有进程执行结束!"<<endl;
}
void Shortage(Queue wait,Queue ready,Queue run)//最短执行时间调度算法
{
    int i,m,n;
    PCB *p,*q;
    if(ready.head==ready.rear&&wait.head!=wait.rear)//如果初始的就绪队列为空,且等待队列不空,则将等待队列的第一个进程转换到就绪队列中
    {        p=DeQueue(wait,p);
            EnQueue(ready,p);
            p->Status=1;}
    
    for(;ready.head!=ready.rear;)  //每次循环从就绪队列中选择一个进程执行
    {
        if(ready.head->next==ready.rear)//如果就绪队列中只有一个进程,则以后的每次就绪队列中都只有一个进程,则同先进先出算法
        {
            p=DeQueue(ready,p);
            EnQueue(run,p);
            run.rear->Status=2;

            for(i=1;i<=run.rear->NeedTime;i++)
            {//进程在CPU上执行,每循环一次假设已执行了1ms    
                run.rear->OverTime=i;
                cout<<"当前各进程状态:"<<endl;
                Print(wait,ready,run);
            }
            //进程结束,收回内存
            p=DeQueue(run,p);
            free(p);

            if(wait.head!=wait.rear)
                {p=DeQueue(wait,p);
                EnQueue(ready,p);
                p->Status=1;    
                }
        }
        else
        {
            for(n=i=1,p=ready.head->next,m=p->NeedTime;p!=ready.rear;i++)//xiugai1
            {//遍历就绪队列,找到所需执行时间最短的进程
                //n=i;
                p=p->next;
                if(m>p->NeedTime)
                {
                    m=p->NeedTime;//m记录最短的执行时间
                    n=i+1;  //n记录具有最短执行时间的进程在链队中的逻辑位置(第几个)
                }
            }
            if(n==1)
            {//如果执行时间最短的是第一个,则就绪队列第一个进程出队
                p=DeQueue(ready,p);
                EnQueue(run,p);
                run.rear->Status=2;
            }
            else
            {
                for(i=1,q=ready.head;i<n;i++)
                {//找到就绪队列中第n-1个进程的地址
                    q=q->next;
                }
                p=q->next; //p表示就绪队列中的第n个进程的地址
                q->next=p->next;    //p->next=NULL;
                if(p==ready.rear)//如果p是最后一个元素
                {ready.rear=q;}
                EnQueue(run,p);
                run.rear->Status=2;
            }

            for(i=1;i<=run.rear->NeedTime;i++)
            {//进程在CPU上执行,每循环一次假设已执行时间+1ms    
                run.rear->OverTime=i;
                cout<<"当前各进程状态:"<<endl;
                Print(wait,ready,run);
            }
            //进程结束,收回内存
            p=DeQueue(run,p);
            free(p);
    
            if(wait.head!=wait.rear)
                {p=DeQueue(wait,p);
                EnQueue(ready,p);
                p->Status=1;    
                }
        }
    }
    cout<<"所有进程执行结束!"<<endl;
}

void main()
{
    char choose[20]; //接收输入的选择,便于判断是否输错
    char c;
    c='Y';
    Create(ready);Create(wait);Create(run);//创建初始三个队列
    for(;c=='Y'||c=='y';)
    {    
        system("cls");
        ifstream Input("process.txt"); 
        initial(wait,ready,Input);

        cout<<"您可用以下三种算法调度进程:"<<endl;
        cout<<"1.先进先出调度算法"<<endl;
         cout<<"2.基于优先数的调度算法"<<endl;
         cout<<"3.最短执行时间调度算法"<<endl;
        cout<<"请选择:";
        cin>>choose;
        switch(choose[0])
        {case '1':FCFS(wait,ready,run);break;
        case '2':Priority(wait,ready,run);break;
        case '3':Shortage(wait,ready,run);break;
        default:cout<<"输入错误!";break;
        }
        Input.close(); 
        cout<<"继续操作?Y or N";
        cin>>c;

    }

    //程序结束前,释放所有队列所占的空间
    free(ready.head);free(wait.head);
    free(run.head);
    return;
}