【磁盘调度：】
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "fstream.h"
#include "math.h"
#include "iomanip.h"

const int Max=100;

struct node
    {
    int num;
    int finish;
    };

node queue[Max];//记录所有的磁道请求
int quantity;//当前划过的磁道请求总数
int current;//当前磁头的位置

void init()
{
for(int i=0;i<Max;i++)
    {
    queue[i].finish =0;
    queue[i].num =0;
    }
quantity=0;
current=100;
}
void reset()
{
for(int i=0;i<Max;i++)
    {
    queue[i].finish =0;
    }
}

void readData()
    {
    char name[20];
    printf("请输入文件名：");
    gets(name);

    ifstream inf(name,ios::nocreate);
if(inf==NULL)
{
    cout<<"文件无法打开！"<<endl;
    exit(0);//直接返回DOS，既返回所有的函数与RETURN区别
}
while(!inf.eof())
{
    inf>>queue[quantity++].num ;
}
cout<<"磁道申请流："<<endl;
 for(int i=0;i<quantity;i++)
cout<<setw(4)<<queue[i].num ;
cout<<endl;
cout<<"申请次数："<<quantity<<endl;
}

void FiFO()
        {
         int start=current;
         int total=0;//访问磁道总数
         int t=0;//访问相邻磁道跨越的磁道数
         reset();
         cout<<"FIFO 算法磁道申请流"<<endl;
         for(int i=0;i<quantity;i++)
         {
         cout<<setw(4)<<queue[i].num ;
         t=abs(queue[i].num -start);
         cout<<setw(5)<<t<<endl;
         total+=t;
         start=queue[i].num ;
         }
         cout<<"移动的总磁道数："<<total<<endl;
        }

void zdc()
{
    int start=current;
    int total=0;
    int t=0;
    reset();
    cout<<"最短磁道优先算法执行流"<<endl;
    for(int i=0;i<quantity;i++)
        {
        int k=0;
        while(queue[k].finish !=0)
          k++;//找第一个没被访问的1表示访问过0没有被访问
          for(int j=0;j<quantity;j++)
              {
                  if(queue[j].finish ==0 && abs(queue[j].num-start)<abs(queue[k].num -start))
                   k=j;
              }
        cout<<setw(5)<<queue[k].num;
        t=abs(queue[k].num -start);
        cout<<setw(5)<<t<<endl;
        total+=t;
        start=queue[k].num;
        queue[k].finish=1;

        }
    cout<<"移动的总磁道数："<<total<<endl;
}

void dt()
{
    int start=current;
    int t=0;
    int total=0;
    reset();
    cout<<"电梯调度算法（由外向内）"<<endl;
    for(int i=0;i<quantity;i++)
        {
         int k=-1;//最小的且同方向的且距离最小的
         int flag=1000;
         for(int j=0;j<quantity;j++)
             {
             if(queue[j].finish ==0 && queue[j].num >=start)//没访问且同方向
                 if(abs(queue[j].num -start<flag))
                 {
                     k=j;
                     flag=abs(queue[j].num -start);
                 }
              }
             if(k!=-1)//最小的已找到并输出
                     {
                       cout<<setw(5)<<queue[k].num;
                        t=abs(queue[k].num -start);
                        cout<<setw(5)<<t<<endl;
                        total+=t;
                        start=queue[k].num;
                        queue[k].finish=1;
                       }

            else//反方向
            {
            for(int j=0;j<quantity;j++)
            {
               if(queue[j].finish==0 && queue[j].num<start)
                 if(abs(queue[j].num-start)<flag)
                 {
                     k=j;
                     flag=abs(queue[j].num-start);
                 }
            }
            cout<<setw(5)<<queue[k].num;
            t=abs(queue[k].num -start);
            cout<<setw(5)<<t<<endl;
            total+=t;
            start=queue[k].num;
            queue[k].finish=1;

        }
    }
   cout<<"移动的总磁道数："<<total<<endl;
}

void main()
    {
        init();
        readData();
        cout<<"请输入磁头的当前位置"<<endl;
        cin>>current;
         FiFO();
         zdc();
         dt();

    }


【进程调度：】
#include"iostream.h"
#include"fstream.h"
#include"string.h"

const int Max=1000;
const int timer=10;
struct pcb
{
    char name[20]; //进程名
    int stau;      //状态
    int time;		//运行时间
    int privilege;  //优先数
    int wait;		//等待时间
    int finish;		//结束运行
};

pcb pcbs[Max];
int total=0;	//记录真正的数组

void initial()
{
    for(int i=0;i<Max;i++)
    {
        strcpy(pcbs[i].name,"");
        pcbs[i].finish=0;
        pcbs[i].privilege=0;
        pcbs[i].stau=0;
        pcbs[i].time=0;
        pcbs[i].wait=0;
    }
}

void readData()	//读入数据
{
    char name[20];
    cout<<"请输入进程文件名：";
    cin>>name;
    ifstream inf(name);
    while(!inf.eof())
    {
        inf>>pcbs[total].name;
        inf>>pcbs[total].stau;
        inf>>pcbs[total].time;
        inf>>pcbs[total].privilege;
        total++;
    }

    cout<<"初始数据是："<<endl;

    for(int i=0;i<total;i++)
    {
        cout<<pcbs[i].name<<" "<<pcbs[i].stau<<" "
            <<pcbs[i].time<<" "<<pcbs[i].privilege<<endl;
    }

}

void reset()
{
    for(int i=0;i<total;i++)
    {
        pcbs[i].wait=0;
        pcbs[i].finish=0;
    }
}

void FIFO()	//先进先出算法
{
    reset();
    cout<<"FIFO 算法执行流"<<endl;

    cout<<"进程名"<<"  "<<"等待时间"<<endl;
    for(int i=0;i<total;i++)
    {
        cout<<pcbs[i].name<<"  "<<pcbs[i].wait<<endl;

        for(int j=i+1;j<total;j++)
            pcbs[j].wait+=pcbs[i].time;
    }
    cout<<"总的等待时间:";
    int total_time=0;
    for(i=0;i<total;i++)
        total_time+=pcbs[i].wait;
    cout<<total_time<<endl;
    cout<<"平均等待时间:";
    cout<<float(total_time)/total;
    cout<<endl;

}

void prilege()//优先数调度
{
    reset();
    int time=0;
for(int i=0;i<total;i++)
    {
    int current=1000;
    int k=0;
    for(int j=0;j<total;j++)
    {
        if (pcbs[j].finish==0 && pcbs[j].privilege<current)
        {
            current=pcbs[j].privilege;
             k=j;
        }
    }
    pcbs[k].wait=time;
    cout<<pcbs[k].name<<" "<<pcbs[k].wait<<endl;
    pcbs[k].finish=1;
    time+=pcbs[k].time;
}
int total_time=0;
for(i=0;i<total;i++)
total_time+=pcbs[i].wait;
cout<<"总等待时间："<<total_time<<endl;
cout<<"平均等待时间："<<float(total_time)/total<<endl;
}

    void time()//时间片轮转

    {
        reset();
        int flag=1;
        int round=0;
        int t=0;
        int queue[Max];
        while(flag)
        {flag=0;

         int num=0;
         int k;
         for(int i=0;i<total;i++)
         {
             if(pcbs[i].finish==0)
             {
                 num++;
                 k=i;
             }
         }
         if(num>1)
         {
             flag=1;
             for(int j=0;j<total;j++)
             {
                 if(pcbs[j].finish==0)
                 {
                     queue[t]=j;
                     t++;
                     if(pcbs[j].time<=(1+round)*timer)
                         pcbs[j].finish=1;

                 }
             }
         }
            round++;
            if(num==1)
            {
                queue[t++]=k;
            }
              if(queue[t-1]==queue[t-2])
                  t--;
        }
          for(int i=0;i<t;i++)
              cout<<pcbs[queue[i]].name<<" ";
          cout<<endl;
          }

   void main()
   {
    initial();
    readData();
       while(true)
    {
        cout <<"1.FIFO算法"<<endl;
        cout <<"2. 优先数算法"<<endl;
        cout <<"3.时间片轮转算法"<<endl;
        cout <<"4.退出"<<endl;
        cout <<"请选择"<<endl;
        int op;
        cin >> op;
        switch(op)
        {
            case 1: FIFO();break;
            case 2: prilege();break;
            case 3: time();break;
            case 4: return;
        }
    }
}


【可变分区管理：】
#include"iostream.h"
#include "fstream.h"
#include"string.h"
#include"iomanip.h" //格式setw
#include"stdlib.h" //标准库exit

struct node
{
    int start;//起始地址
    int length;//长度
    char tag[20];//标志
};

const max_job=1000;
node frees[max_job];//空闲区分配表
int free_quantity;//空闲区大小
node occupys[max_job];//已分配区分配表
int occupys_quantity;//已分配大小

//初始化函数
void inital()
{
    for(int i=0;i<max_job;i++)
    {
        frees[i].start=-1;
        frees[i].length =0;
        strcpy(frees[i].tag,"free");//标志为"free"
        occupys[i].start=-1;
        occupys[i].length=0;
        strcpy(occupys[i].tag,"");
    }
    free_quantity=0;
    occupys_quantity=0;
}
//读数据文件
void read_data()
{
    char ifile[20];
    char c;
    cout<<"请输入空闲区文件:"<<endl;
    cin>>ifile;
    ifstream inf(ifile,ios::nocreate);

    if(!inf)
    {
        cout<<"无法打开该文件，请检查后在试"<<endl;
        exit(0);
    }
    while(!inf.eof())
    {
        inf>>frees[free_quantity].start;
        inf>>c;
        inf>>frees[free_quantity].length;
        free_quantity++;
    }
}

void view()
{
    cout<<endl<<"当前空闲区表"<<endl<<endl;
    cout<<"起始地址   长度    状态"<<endl;
    for(int i=0;i<free_quantity;i++)
    {
        cout<<frees[i].start<<setw(10)<<frees[i].length <<setw(10)
            <<frees[i].tag<<endl;
    }

    if(occupys_quantity>0)
    {
        cout<<endl<<endl<<"当前已分配表"<<endl;
        cout<<endl<<"起始地址   长度    占用作业名"<<endl;
        for(int i=0;i<occupys_quantity;i++)
        {
            cout<<occupys[i].start<<setw(11)<<occupys[i].length <<setw(12)
                <<occupys[i].tag<<endl;
        }
    }
    else
        cout<<endl<<"当前内存中没有作业"<<endl;
}
//最先适用分配算法
void  earliest()
{
    char job_name[20];
    int job_length;
    cout<<endl<<"最先适用分配算法"<<endl;
    cout<<endl<<"请输入新申请的作业名称和大小："<<endl;
    cin>>job_name>>job_length;
    int flag=0;
    for(int i=0;i<free_quantity;i++)
    {
        if(frees[i].length>=job_length)
        {
            flag=1;
            break;
        }
    }
    if(!flag)
        cout<<endl<<"sorry,当前没有足够的空间，请稍侯在试"<<endl;
    else
    {
        occupys[occupys_quantity].start=frees[i].start;
        occupys[occupys_quantity].length=job_length;
        strcpy(occupys[occupys_quantity].tag,job_name);
        occupys_quantity++;
        if(frees[i].length>job_length)
        {
            frees[i].start+=job_length;
            frees[i].length-=job_length;
        }
        else
        {
            for(int j=i;j<free_quantity-1;j++)
                frees[j]=frees[j+1];
            free_quantity--;
        }
        cout<<endl<<"内存分配成功"<<endl;
    }
}

//最优分配算法
void excellent()
{
    char job_name[20];
    int job_length;
    cout<<endl<<"最优适用分配算法"<<endl;
    cout<<endl<<"请输入新申请的作业名称和大小："<<endl;
    cin>>job_name>>job_length;
    int flag=0;
    for(int i=0;i<free_quantity;i++)
    {
        if(frees[i].length>=job_length)
        {
            flag=1;
            break;
        }
    }
    if(!flag)
        cout<<endl<<"sorry,当前没有足够的空间，请稍侯在试"<<endl;
    else
    {
        for(int j=0;j<free_quantity;j++)
        {
            if(frees[j].length>=job_length && frees[j].length<frees[i].length)
                i=j;
        }
        occupys[occupys_quantity].start=frees[i].start;
        occupys[occupys_quantity].length=job_length;
        strcpy(occupys[occupys_quantity].tag,job_name);
        occupys_quantity++;
        if(frees[i].length>job_length)
        {
            frees[i].start+=job_length;
            frees[i].length-=job_length;
        }
        else
        {
            for(int j=i;j<free_quantity-1;j++)
                frees[j]=frees[j+1];
            free_quantity--;
        }
        cout<<endl<<"内存分配成功"<<endl;
    }

}

//最坏分配算法
void worst()
{
    char job_name[20];
    int job_length;
    cout<<endl<<"最坏适用分配算法"<<endl;
    cout<<endl<<"请输入新申请的作业名称和大小："<<endl;
    cin>>job_name>>job_length;
    int flag=0;
    for(int i=0;i<free_quantity;i++)
    {
        if(frees[i].length>=job_length)
        {
            flag=1;
            break;
        }
    }
    if(!flag)
        cout<<endl<<"sorry,当前没有足够的空间，请稍侯在试"<<endl;
    else
    {
        for(int j=0;j<free_quantity;j++)
        {
            if(frees[j].length>=job_length && frees[j].length>frees[i].length)
                i=j;
        }
        occupys[occupys_quantity].start=frees[i].start;
        occupys[occupys_quantity].length=job_length;
        strcpy(occupys[occupys_quantity].tag,job_name);
        occupys_quantity++;
        if(frees[i].length>job_length)
        {
            frees[i].start+=job_length;
            frees[i].length-=job_length;
        }
        else
        {
            for(int j=i;j<free_quantity-1;j++)
                frees[j]=frees[j+1];
            free_quantity--;
        }
        cout<<endl<<"内存分配成功"<<endl;
    }
}

//排序算法
void sort()
{
    int k;
    for(int i=0;i<free_quantity-1;i++)
    {
        k=i;
        for(int j=i+1;j<free_quantity;j++)
            if(frees[j].start<frees[k].start)
                k=j;
        if(k!=i)
        {
            frees[free_quantity]=frees[k];
            frees[k]=frees[i];
            frees[i]=frees[free_quantity];
        }
    }
}
//撤消作业
void finished()
{
    char job_name[20];
    int start;
    int length;
    int flag;
    int p;
    cout<<"请输入要撤消的作业名："<<endl;
    cin>>job_name;
    for(int i=0;i<occupys_quantity;i++)
    {
        if(!strcmp(occupys[i].tag,job_name))
        {
            start=occupys[i].start;
            length=occupys[i].length;
            flag=i;
            break;
        }
    }
    if(i>=occupys_quantity)
        cout<<endl<<"没有这个作业名！"<<endl;
    else
    {
        p=0;
        for(i=0;i<free_quantity;i++)
        {
            if(frees[i].start+frees[i].length==start)
            {
                if(((i+1)<free_quantity) && (frees[i+1].start==start+length))
                {
                    frees[i].length=frees[i].length+length+frees[i+1].length;
                    for(int j=i+1;j<free_quantity-1;j++)
                        frees[j]=frees[j+1];
                    free_quantity--;
                    p=1;
                }
                else
                {
                    frees[i].length+=length;
                    p=1;
                }
            }
            else
            {
                if(frees[i].start==start+length)
                {
                    frees[i].start=start;
                    frees[i].length+=length;
                    p=1;
                }
            }
        }
        if(p==0)
        {
            frees[free_quantity].start=start;
            frees[free_quantity].length=length;
            free_quantity++;
            sort();
        }

        for(i=flag;i<occupys_quantity-1;i++)
        {
            occupys[i]=occupys[i+1];
        }
        occupys_quantity--;
    }
}

void main()
{
    inital();
    read_data();
    while(true)
    {
        cout<<endl;
        cout<<"1. 最先适应分配算法"<<endl;
        cout<<"2. 最优适应分配算法"<<endl;
        cout<<"3. 最坏适应分配算法"<<endl;
        cout<<"4. 撤消作业"<<endl;
        cout<<"5. 显示函数"<<endl;
         cout<<"6. 退出"<<endl;
         cout<<"请选择："<<endl;
         int op;
         cin>>op;

        switch(op)
        {
        case 1:
            earliest();
            break;
        case 2:
            excellent();
            break;
        case 3:
            worst();
            break;
        case 4:
            finished();
            break;
        case 5:
            view();
            break;
        default:
            return;
        }
    }
}


【文件系统：】
#include"stdio.h"
#include"iostream.h"
#include"string.h"
#include"stdlib.h"
#include"iomanip.h"
#include"fstream.h"

struct dirnode
{
    char name[20];
    int type;
    dirnode *next;
    dirnode *sub;
    dirnode *father;
    int size;
};

dirnode *workDir; //当前目录
dirnode root;
char path[100]; //当前目录信息

void initial() //创建根目录
{
    strcpy(root.name,"root:");
    root.father=NULL;
    root.next=NULL;
    root.size=0;
    root.sub=NULL;
    root.type=0;
    workDir=&root;
    strcpy(path,"root:");
}

void CD(char dirName[])
{
    dirnode *p;
    int flag=0;
    p=workDir->sub;
    if(p==NULL)
    {
        cout<<"错误.\""<<dirName<<"\"子目录不存在"<<endl;
    }
    else
    {
        while(p)
        {
            if(p->type==0)
            {
                if(strcmp(p->name,dirName)==0)
                {
                    flag=1;
                    break;
                }
            }
            p=p->next;
        }
        if(flag==1)
        {
            workDir=p;
            strcat(path,"\\");
            strcat(path,p->name);
            cout<<"工作目录已进入\""<<dirName<<"\""<<endl;
        }
        else
            cout<<"错误.\""<<dirName<<"\"子目录不存在"<<endl;
    }
}

void CD()
{
    char *s=NULL,*q=NULL;
    if(workDir->father!=NULL)
    {
        workDir=workDir->father;
        s=strchr(path,'\\');
        while(s!=NULL)
        {
            q=s+1;
            s=strchr(q,'\\');
        }
        *(q-1)='\0';
    }
}

void CREATE(char fileName[],int fileSize)
{
    dirnode *p,*q;
    int flag=0;
    p=new dirnode;
    p->father=workDir;
    strcpy(p->name,fileName);
    p->next=NULL;
    p->size=fileSize;
    p->sub=NULL;
    p->type=1;
    q=workDir->sub;
    if(q==NULL)
    {
        workDir->sub=p;
        cout<<"\""<<fileName<<"文件创建成功"<<endl;
    }
    else
    {
        while(q)
        {
            if(q->type==1)
            {
                if(strcmp(q->name,fileName)==0)
                {
                    flag=1;
                    cout<<"错误.\""<<fileName<<"文件名已存在"<<endl;
                }
            }
            q=q->next;
        }
        if(flag==0)
        {
            q=workDir->sub;
            while(q->next!=NULL)
                q=q->next;
            q->next=p;
            cout<<"\""<<fileName<<"\"文件创建成功"<<endl;
        }
    }
}

void DEL(char fileName[])
{
    dirnode *p,*q;
    int flag;
    p=workDir->sub;
    if(p==NULL)
        cout<<"错误.\""<<fileName<<"文件不存在"<<endl;
    else
    {
        while(p)
        {
            if(p->type==1)
            {
                if(strcmp(p->name,fileName)==0)
                {
                    flag=1;
                    break;
                }
            }
            p=p->next;
        }
        if(flag==1)
        {
            if(p==workDir->sub)
                workDir->sub=p->next;
            else
            {
                q=workDir->sub;
                while(q->next!=p)
                    q=q->next;
                q->next=p->next;
            }
            delete p;
            cout<<"\""<<fileName<<"\"文件已删除"<<endl;
        }
        else
            cout<<"错误.\""<<fileName<<"文件不存在"<<endl;
    }
}

void dir()
{
    dirnode *p;
    p=workDir->sub;
    while(p)
    {
        if(p->type==0)
            cout<<setw(12)<<p->name<<setw(14)<<"DIR"<<endl;
        else
            cout<<setw(12)<<p->name<<setw(14)<<"FILE"<<setw(10)<<p->size<<endl;
        p=p->next;
    }
}

void dir(dirnode *p)
{
    while(p)
    {
        if(p->type==0)
            cout<<setw(12)<<p->name<<setw(14)<<"DIR"<<endl;
        else
            cout<<setw(12)<<p->name<<setw(14)<<"FILE"<<setw(10)<<p->size<<endl;
        p=p->next;
    }

}

void dirs(dirnode *p,char str[])
{
    char newstr[100];
    dirnode *q;
    cout<<str<<"下一级目录及文件"<<endl;
    dir(p);
    q=p;
    if(q->sub!=NULL)
    {
        strcpy(newstr,"");
        strcat(newstr,str);
        strcat(newstr,"\\");
        strcat(newstr,q->name);
        dirs(q->sub,newstr);
    }
    q=p;
    while(q->next!=NULL)
    {
        if(q->next->sub!=NULL)
        {
            strcpy(newstr,"");
            strcat(newstr,str);
            strcat(newstr,"\\");
            strcat(newstr,q->next->name);
            dirs(q->next->sub,newstr);
        }
        q=q->next;
    }

}

void LSALL()
{
    dirnode *p;
    p=root.sub;
    dirs(p,"root");
}

void MD(char dirName[])
{
    dirnode *p,*q;
    int flag=0;
    p=new dirnode;
    p->father=workDir;
    strcpy(p->name,dirName);
    p->next=NULL;
    p->size=0;
    p->sub=NULL;
    p->type=0;
    q=workDir->sub;
    if(q==NULL)
    {
        workDir->sub=p;
        cout<<"\""<<dirName<<"\"子目录创建成功"<<endl;
    }
    else
    {
        while(q)
        {
            if(q->type==0)
            {
                if(strcmp(q->name,dirName)==0)
                {
                    flag=1;
                    cout<<"\""<<dirName<<"\"子目录已存在"<<endl;
                    break;
                }
            }
            q=q->next;
        }
        if(flag==0)
        {
            q=workDir->sub;
            while(q->next!=NULL)
                q=q->next;
            q->next=p;
            cout<<"\""<<dirName<<"\"子目录创建成功"<<endl;
        }
    }
}

void RD(char dirName[])
{
    dirnode *p,*q;
    int flag=0;
    p=workDir->sub;
    if(p==NULL)
        cout<<"错误.\""<<dirName<<"\"子目录不存在"<<endl;
    else
    {
        while(p)
        {
            if(p->type==0)
            {
                if(strcmp(p->name,dirName)==0)
                {
                    flag=1;
                    break;
                }
            }
            p=p->next;
        }
        if(flag==1)
        {
            if(p->sub!=NULL)
            {
                cout<<"该目录非空，是否删除(Y/N)";
                char s;
                cin>>s;
                if(s!='Y' && s!='y')
                    return;
            }

            if(workDir->sub==p)
            {
                workDir->sub=p->next;
            }
            else
            {
                q=workDir->sub;
                while(q->next!=p)
                    q=q->next;
                q->next=p->next;
                delete p;
            }
            cout<<"\""<<dirName<<"\"目录已删除"<<endl;
        }
        else
            cout<<"错误.\""<<dirName<<"\"子目录不存在"<<endl;

    }
}

void readData()
{
    ifstream inf("f1.txt");
    char comm[20];
    char name[20];
    int l;
    while(!inf.eof())
    {
        inf>>comm;
        if(strcmp(comm,"md")==0||strcmp(comm,"MD")==0)
        {
            inf>>name;
            MD(name);
        }
        if(strcmp(comm,"create")==0||strcmp(comm,"CREATE")==0)
        {
            inf>>name;
            inf>>l;
            CREATE(name,l);
        }
    }
}

void main()
{
    initial();
    readData();
    system("cls");
    while(true)
    {
        system("cls");
        cout<<endl<<"\t\t\t    模拟文件管理系统"<<endl<<endl;
        char str[50];
        char name[50];
        char command[50];
        int comm=0;
        int len;
        char *s=NULL,*s1=NULL;
        cout<<endl;
        cout<<"CD     改变目录"<<endl;
        cout<<"CREATE 创建文件"<<endl;
        cout<<"MD     创建目录"<<endl;
        cout<<"RD     删除目录"<<endl;
        cout<<"DEL    删除文件"<<endl;
        cout<<"DIR    显示当前目录下的目录及文件"<<endl;
        cout<<"LSALL  显示所有目录及文件"<<endl;
        cout<<endl;
        printf("%s\\",path);
        gets(str);
        len=strlen(str);
        if(len==0)
            strcpy(command,"error");
        else
        {
            s=strchr(str,' ');
            if(s!=NULL)
            {
                *s='\0';
                strcpy(name,s+1);
            }
            strcpy(command,str);

            if(strcmp(command,"cd")==0 || strcmp(command,"CD")==0)
                comm=1;
            if(strcmp(command,"cd..")==0 || strcmp(command,"CD..")==0)
                comm=11;
            if(strcmp(command,"create")==0 || strcmp(command,"CREATE")==0)
                comm=2;
            if(strcmp(command,"md")==0 || strcmp(command,"MD")==0)
                comm=3;
            if(strcmp(command,"rd")==0 || strcmp(command,"RD")==0)
                comm=4;
            if(strcmp(command,"del")==0 || strcmp(command,"DEL")==0)
                comm=5;
            if(strcmp(command,"lsall")==0 || strcmp(command,"LSALL")==0)
                comm=6;
            if(strcmp(command,"exit")==0 || strcmp(command,"EXIT")==0)
                comm=7;
            if(strcmp(command,"dir")==0 || strcmp(command,"DIR")==0)
                comm=8;
            int flag=0;
            int f=0;
            switch(comm)
            {
            case 1:

                while(s==NULL && flag==0)
                {
                    printf("%7c",'\\');
                    gets(name);
                    if(strlen(name)!=0)
                        flag=1;
                    f++;
                    if(f>4)break;
                }
                if(f<=4)
                    CD(name);break;
            case 11:
                CD();break;
            case 2:
                s1=strchr(s+1,' ');
                if(s1!=NULL)
                {
                    *s1='\0';
                    len=atoi(s1+1);
                }
                else
                {
                    cout<<"请输入文件长度"<<endl;
                    break;
                }
                strcpy(name,s+1);
                CREATE(name,len);break;
            case 3:
                MD(name);break;
            case 4:
                RD(name);break;
            case 5:
                DEL(name);break;
            case 6:
                LSALL();break;
            case 8:
                dir();break;
            case 7:
                return;
            default:cout<<"命令错误"<<endl;
            }
            printf("按任意键继续...");
            getchar();
        }
    }
}


【分页管理：】
#include"iostream.h"
#include"fstream.h"
#include"string.h"
#include"iomanip.h"
#include"stdlib.h"
#include"stdio.h"
#include"conio.h" //getch()

const int pages=256;//内存被划分成的块数
const int word=32;//字长
const int word_num=pages/word;//32位字长的字的个数

struct node
{
    char name[20];//作业名
    int num;//需要的页数
    int nums[pages];//内存页号(0-255)
    node * next;
};

node *head=0;
int table[word_num][word];
int free_number;

//初始化
void initial()
{
    for(int i=0;i<word_num;i++)
        for(int j=0;j<word;j++)
            table[i][j]=0;
    head=new node;
    strcpy(head->name,"null");
    head->num=0;
    head->next=NULL;
    for(i=0;i<pages;i++)
        head->nums[i]=0;
}

//读入位示图
void readData()
{
    char file_name[20];
    cout<<"请输入位示图文件名"<<endl;
    cin>>file_name;
    ifstream inf(file_name);
    for(int i=0;i<word_num;i++)
        for(int j=0;j<word;j++)
        {
            inf>>table[i][j];
            if(table[i][j]==0)
                free_number++;
        }
        cout<<"系统当前位示图为"<<endl;
        for(i=0;i<word_num;i++)
        {
            for(int j=0;j<word;j++)
                cout<<setw(2)<<table[i][j];
            cout<<endl;
        }
        cout<<"系统当前空闲总页数为："<<free_number<<endl;
}

//添加作业
void add()
{
    char name[20];
    int num;
    node *p;
    cout<<"请输入新增的文件名及页数："<<endl;
    cin>>name>>num;
    if(num>free_number)
        cout<<"没有足够的剩闲页，请稍侯再式"<<endl;
    else
    {
        free_number-=num;
        p=new node;
        strcpy(p->name,name);
        p->num=num;
        int total=0;
        for(int i=0;i<word_num;i++)
            for(int j=0;j<word;j++)
            {
                if(table[i][j]==0 && total<num)
                {
                    table[i][j]=1;
                    p->nums[total]=i*word+j;
                    total++;
                }
            }
        p->next=head->next;
        head->next=p;
        cout<<"作业分配成功"<<endl;
    }
}

//显示当前位示图
void view_table()
{
    cout<<endl<<"当前位示图"<<endl;
    for(int i=0;i<word_num;i++)
        {
            for(int j=0;j<word;j++)
                cout<<setw(2)<<table[i][j];
            cout<<endl;
        }
    cout<<"系统当前空闲总页数为："<<free_number<<endl;
}

//显示当前位页表
void show_page()
{
    node *p=head->next;
    if(p==NULL)
        cout<<endl<<"当前没有用户作业"<<endl;
    else
    {
        cout<<endl<<"当前的用户作业页表情况"<<endl;
        while(p!=NULL)
        {
            cout<<"作业名："<<p->name<<"    所用块数:"<<p->num<<endl<<endl;
            cout<<"本作业所占的块的序列是:"<<endl;
            for(int i=0;i<p->num;i++)
            {
                if(i%10==0)
                    cout<<endl;
                cout<<setw(4)<<p->nums[i];
            }
            cout<<endl;
            p=p->next;
        }
    }
}

//完成作业的函数
void finish()
{
    char name[20];
    node *p,*q;
    cout<<"请输入完成的作业名："<<endl;
    cin>>name;
    p=head->next;
    q=head;
    while(p!=NULL)
    {
        if(strcmp(p->name,name))
        {
            q=p;
            p=p->next;
        }
        else
            break;
    }
    if(p!=NULL)
    {
        for(int i=0;i<p->num;i++)
        {
            table[p->nums[i]/word][p->nums[i]%word]=0;
        }
        free_number+=p->num;
        q->next=p->next;
        cout<<p->name<<" 作业已删除！"<<endl;
        delete p;
    }
    else
        cout<<"系统中没有该文件名"<<endl;

}
void main()
{
    initial();
    readData();
    cout<<endl<<endl<<endl;
    printf("按任意键继续...");
    getchar();
    while(true)
    {
        system("cls");
        cout<<"\t\t\t 欢迎使用页面管理系统\n"<<endl;
        cout<<endl;
        cout<<"1. 加入新作业"<<endl;
        cout<<"2. 完成作业"<<endl;
        cout<<"3. 显示当前位示图"<<endl;
        cout<<"4. 显示当前所有作业页表"<<endl;
        cout<<"5. 退出"<<endl;
        cout<<"请选择："<<endl;
        int op;
        cin>>op;

        switch(op)
        {
        case 1:
            add();
            break;
        case 2:
            finish();
            break;
        case 3:
            view_table();
            break;
        case 4:
            show_page();
            break;
        case 5:
            return;
        }
        cout<<endl<<endl<<endl;
        printf("按任意键继续...");
        getch();
    }
}


【作业调度：】
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <fstream.h>
#include <stdio.h>
#include <iomanip.h>//setw()

struct node
{
    char name[20];
    int reach;//进入时间
    int hour;
        int minte;
    int need;
    int priviage;//优先数
    int wait;//周转时间
    int finish;//完成时间
    int start;
    float excellent;//响应时间比
};

const int Max = 100;
struct node Job[Max];
int quantity;//作业数
void init()
{
    for(int i=0; i<Max; i++)
    {
        strcpy(Job[i].name,"");
        Job[i].reach = 0;
        Job[i].hour = 0;
        Job[i].minte = 0;
        Job[i].need = 0;
        Job[i].priviage=0;
        Job[i].excellent = 0;
        Job[i].finish = 0;
        Job[i].start = 0;
        Job[i].wait=0;
    }
    quantity = 0;
};

void reset()
{
    for(int i=0; i<Max; i++)
    {
        Job[i].excellent = 0;
        Job[i].finish = 0;
        Job[i].start = 0;
        Job[i].wait = 0;

    }
};

void readData()
{
    char name[20];
    printf("请输入文件名:");
    gets(name);
    ifstream inf(name,ios::nocreate);//文件指针指向文件开头。
                                     //属性ios::nocreate限制系统自动建立不存在的文件
    if (inf == NULL) //等于!inf;
    {
        cout << "文件无法打开,请检查." << endl;
        exit(0);//stdlib.h
    }
    while(!inf.eof())
    {
        inf >> Job[quantity].name;
        inf >> Job[quantity].reach;
        Job[quantity].hour = Job[quantity].reach/100;
        Job[quantity].minte = Job[quantity].reach%100;
        inf >> Job[quantity].need;
        inf >> Job[quantity].priviage;
        quantity++;
    }
    cout << "读入的数据是：" << endl;
    cout << "作业名称	进入时间	运行时间	优先数" <<endl;
    for(int i=0; i<quantity; i++)
    {
        cout << setw(6) << Job[i].name << setw(15) << Job[i].reach << setw(15) << Job[i].need <<
            setw(15) << Job[i].priviage << setw(13) << endl;
    }
};

void FIFO()
{
    reset();
    int current_hour = Job[0].hour;
    int current_minte = Job[0].minte;
    int end_time;//结束的时间
    int end_hour;
    int end_minte;
    int total=0;
    cout << "FIFO算法" << endl;
    cout << "作业名		进入时间	开始时间	结束时间	周转时间" <<endl;
    for (int i=0; i<quantity; i++)
    {
        if (Job[i].reach>end_time)//有可能有问题，有可能作业没有来。
        {
            current_hour = Job[i].hour;
            current_minte = Job[i].minte;
        }
        end_hour = (current_minte+Job[i].need)/60 + current_hour;//分+运行的分后除60再加小时
        end_minte = (current_minte+Job[i].need)%60;
        end_time = end_hour*100+end_minte;
        Job[i].wait = (end_hour - Job[i].hour)*60 + end_minte - Job[i].minte;
        cout << setw(5) << Job[i].name << setw(15) << Job[i].reach << setw(15)
            << current_hour*100+current_minte
            << setw(15) << end_time << setw(15) << Job[i].wait << setw(15) <<endl;
        total+=Job[i].wait;//整个周转时间
        current_hour = end_hour;
        current_minte = end_minte;
    }
    cout << "总的周转时间" << total << endl;
    cout << "平均中转时间" << (float)total/quantity << endl;

};
void Priviate()//优先数

{

    reset();
    int current_hour = Job[0].hour;
    int current_minte = Job[0].minte;
    int end_time;//结束的时间
    int end_hour;
    int end_minte;
    int total=0;
    cout << "优先数算法" << endl;
    cout << "作业名		进入时间	开始时间	结束时间	周转时间" <<endl;
    int p = 0;
    for (int i=0; i<quantity; i++)
    {
        if (Job[p].reach>end_time)//有可能有问题，有可能作业没有来。
        {
            current_hour = Job[p].hour;
            current_minte = Job[p].minte;
        }
        end_hour = (current_minte+Job[p].need)/60 + current_hour;//分+运行的分后除60再加小时
        end_minte = (current_minte+Job[p].need)%60;
        end_time = end_hour*100+end_minte;
        Job[p].wait = (end_hour - Job[p].hour)*60 + end_minte - Job[p].minte;
        cout << setw(5) << Job[p].name << setw(15) << Job[p].reach << setw(15)
            << current_hour*100+current_minte
            << setw(15) << end_time << setw(15) << Job[p].wait << setw(15) <<endl;
        total+=Job[p].wait;//整个周转时间
        //与FIFO区别，加上的部分
        Job[p].finish = 1;
        p=0;
        while (Job[p].finish !=0)//进程访问状态=被访问过
            p++;
        for(int j=0; j<quantity; j++)
        {
            //p是没有访问的，结束时间到达的，并且是最小的
            if(Job[j].finish == 0 && Job[j].reach<end_time && Job[j].priviage<Job[p].priviage)
                p = j;
        }

        current_hour = end_hour;
        current_minte = end_minte;
    }
    cout << "总的周转时间" << total << endl;
    cout << "平均中转时间" << (float)total/quantity << endl;
};

void Pri()//短作业优先

{

    reset();
    int current_hour = Job[0].hour;
    int current_minte = Job[0].minte;
    int end_time;//结束的时间
    int end_hour;
    int end_minte;
    int total=0;
    cout << "优先数算法" << endl;
    cout << "作业名		进入时间	开始时间	结束时间	周转时间" <<endl;
    int p = 0;
    for (int i=0; i<quantity; i++)
    {
        if (Job[p].reach>end_time)//有可能有问题，有可能作业没有来。
        {
            current_hour = Job[p].hour;
            current_minte = Job[p].minte;
        }
        end_hour = (current_minte+Job[p].need)/60 + current_hour;//分+运行的分后除60再加小时
        end_minte = (current_minte+Job[p].need)%60;
        end_time = end_hour*100+end_minte;
        Job[p].wait = (end_hour - Job[p].hour)*60 + end_minte - Job[p].minte;
        cout << setw(5) << Job[p].name << setw(15) << Job[p].reach << setw(15)
            << current_hour*100+current_minte
            << setw(15) << end_time << setw(15) << Job[p].wait << setw(15) <<endl;
        total+=Job[p].wait;//整个周转时间

        Job[p].finish = 1;
        p=0;
        while (Job[p].finish !=0)
            p++;

        for(int j=0; j<quantity; j++)
        {
            //p是没有访问的，结束时间到达的，并且是运行时间最短的

            if(Job[j].finish == 0 && Job[j].reach<end_time && Job[j].need<Job[p].need)
                        p = j;

        }

        current_hour = end_hour;
        current_minte = end_minte;
    }
    cout << "总的周转时间" << total << endl;
    cout << "平均中转时间" << (float)total/quantity << endl;
};

void Excellent()//最高响应比优先

{

    reset();
    int current_hour = Job[0].hour;
    int current_minte = Job[0].minte;
    int end_time;//结束的时间
    int end_hour;
    int end_minte;
    int total=0;
    cout << "优先数算法" << endl;
    cout << "作业名		进入时间	开始时间	结束时间	周转时间" <<endl;
    int p = 0;
    for (int i=0; i<quantity; i++)
    {
        if (Job[p].reach>end_time)//有可能有问题，有可能作业没有来。
        {
            current_hour = Job[p].hour;
            current_minte = Job[p].minte;
        }
        end_hour = (current_minte+Job[p].need)/60 + current_hour;//分+运行的分后除60再加小时
        end_minte = (current_minte+Job[p].need)%60;
        end_time = end_hour*100+end_minte;
        Job[p].wait = (end_hour - Job[p].hour)*60 + end_minte - Job[p].minte;
        cout << setw(5) << Job[p].name << setw(15) << Job[p].reach << setw(15)
            << current_hour*100+current_minte
            << setw(15) << end_time << setw(15) << Job[p].wait << setw(15) <<endl;
        total+=Job[p].wait;//整个周转时间
        //增加的部份
        Job[p].finish = 1;
        for (int k=0; k<quantity; k++)
        {
            if (Job[k].finish == 0 && Job[k].reach< end_time)
                Job[k].excellent = float(end_time-Job[k].reach)/Job[k].need;
        }

        p=0;
            while (Job[p].finish !=0)
            p++;

        for(int j=0; j<quantity; j++)
        {
            //p是没有访问的，结束时间到达的，

            if(Job[j].finish == 0 && Job[j].reach<end_time && Job[j].excellent>Job[p].excellent)
                        p = j;

        }

        current_hour = end_hour;
        current_minte = end_minte;
    }
    cout << "总的周转时间" << total << endl;
    cout << "平均中转时间" << (float)total/quantity << endl;
};
void main()
{
    init();
    readData();
    FIFO();
    Priviate();
    Pri();
    Excellent();
}


【银行家算法：】
#include"iostream.h"
#include"iomanip.h"
#include"fstream.h"
#include"stdio.h"
#include"string.h"

const int MAXP=20;
const int MAXA=10;
const int MAXB=5;
const int MAXC=7;

struct bank
{
    int a,b,c;
    int remain_a,remain_b,remain_c;
};
struct process
{
    char name[20];
    int a,b,c;
    int need_a,need_b,need_c;
};
bank banker;
process processes[MAXP];
int quantity=0;

void initial()
{
    banker.a=MAXA;
    banker.b=MAXB;
    banker.c=MAXC;
    banker.remain_a=MAXA;
    banker.remain_b=MAXB;
    banker.remain_c=MAXC;
    for(int i=0;i<MAXP;i++)
    {
        processes[i].a=0;
        processes[i].b=0;
        processes[i].c=0;
        processes[i].need_a=0;
        processes[i].need_b=0;
        processes[i].need_c=0;
        strcpy(processes[i].name,"");
    }
    quantity=0;
}

void add()
{
    char name[20];
    cout<<"请输入新用户名：";
    cin>>name;
    int flag=0,t,need_a,need_b,need_c;
    for(int i=0;i<quantity;i++)
    {
        if(strcmp(processes[i].name,name)==0)
        {
            flag=1;
            break;
        }
    }
    if(flag==1)
        cout<<"错误。用户名已存在"<<endl;
    else
    {
        cout<<"需要A类资源:";
        cin>>need_a;
        cout<<"需要B类资源:";
        cin>>need_b;
        cout<<"需要C类资源:";
        cin>>need_c;
        t=1;
        if(need_a>banker.remain_a)
        {
            cout<<"错误。所需要A类资源大于银行家所剩余的A类资源"<<endl;
            t=0;
        }
        if(need_b>banker.remain_b)
        {
            cout<<"错误。所需要B类资源大于银行家所剩余的B类资源"<<endl;
            t=0;
        }
        if(need_c>banker.remain_c)
        {
            cout<<"错误。所需要C类资源大于银行家所剩余的C类资源"<<endl;
            t=0;
        }
        if(t==1)
        {
            strcpy(processes[quantity].name,name);
            processes[quantity].need_a=need_a;
            processes[quantity].need_b=need_b;
            processes[quantity].need_c=need_c;
            quantity++;
            cout<<name<<" 用户添加成功！"<<endl;
        }
        else
            cout<<"添加失败！"<<endl;
    }
}

void bid()
{
    char name[20];
    cout<<"请输入申请资源的用户名：";
    cin>>name;
    int flag=-1;
    for(int i=0;i<quantity;i++)
    {
        if(strcmp(processes[i].name,name)==0)
        {
            flag=i;
            break;
        }
    }
    if(flag==-1)
        cout<<"没有 "<<name<<" 用户"<<endl;
    else
    {
        int a,b,c;
        int t=1;
        cout<<"该用户申请A类资源的数量：";
        cin>>a;
        cout<<"该用户申请B类资源的数量：";
        cin>>b;
        cout<<"该用户申请C类资源的数量：";
        cin>>c;
        if(a>banker.remain_a|| a>processes[flag].need_a-processes[flag].a)
        {
            cout<<"错误。所需要A类资源大于银行家所剩余的A类资源或者大于还需要的数量"<<endl;
            t=0;
        }
        if(b>banker.remain_b|| b>processes[flag].need_b-processes[flag].b)
        {
            cout<<"错误。所需要B类资源大于银行家所剩余的B类资源或者大于还需要的数量"<<endl;
            t=0;
        }
        if(c>banker.remain_c|| c>processes[flag].need_c-processes[flag].c)
        {
            cout<<"错误。所需要C类资源大于银行家所剩余的C类资源或者大于还需要的数量"<<endl;
            t=0;
        }
        if(t==1)
        {
            banker.remain_a-=a;
            banker.remain_b-=b;
            banker.remain_c-=c;
            processes[flag].a+=a;
            processes[flag].b+=b;
            processes[flag].c+=c;
            cout<<name<<" 申请资源成功！"<<endl;
        }
        else
            cout<<name<<" 申请资源失败！"<<endl;
    }
}

void finish()
{
    char name[20];
    cout<<"请输入要撤消的用户名：";
    cin>>name;
    int flag=-1;
    for(int i=0;i<quantity;i++)
    {
        if(strcmp(processes[i].name,name)==0)
        {
            flag=i;
            break;
        }
    }
    if(flag==-1)
        cout<<"没有该用户"<<endl;
    else
    {
        banker.remain_a+=processes[flag].need_a;
        banker.remain_b+=processes[flag].need_b;
        banker.remain_c+=processes[flag].need_c;

        for(i=flag;i<quantity-1;i++)
            processes[flag]=processes[flag+1];
        strcpy(processes[quantity-1].name,"");
        processes[quantity-1].a=0;
        processes[quantity-1].b=0;
        processes[quantity-1].c=0;
        processes[quantity-1].need_a=0;
        processes[quantity-1].need_b=0;
        processes[quantity-1].need_c=0;
        cout<<name<<" 用户已被撤消"<<endl;
        quantity--;
    }
}

void view()
{
    cout<<endl;
    cout<<"银行家剩余所剩资源"<<endl;
    cout<<"       剩余资源    总共资源 "<<endl;
    cout<<"A类:"<<setw(7)<<banker.remain_a<<setw(12)<<banker.a<<endl;
    cout<<"B类:"<<setw(7)<<banker.remain_b<<setw(12)<<banker.b<<endl;
    cout<<"C类:"<<setw(7)<<banker.remain_c<<setw(12)<<banker.c<<endl;
    if(quantity>0)
    {
        cout<<endl<<"用户占用资源"<<endl;
        cout<<"       已占用资源  所需要资源"<<endl;
        for(int i=0;i<quantity;i++)
        {
            cout<<"用户名："<<processes[i].name<<endl;
            cout<<"A类:"<<setw(7)<<processes[i].a<<setw(12)<<processes[i].need_a<<endl;
            cout<<"B类:"<<setw(7)<<processes[i].b<<setw(12)<<processes[i].need_b<<endl;
            cout<<"C类:"<<setw(7)<<processes[i].c<<setw(12)<<processes[i].need_c<<endl;
        }
    }
    else
        cout<<"当前没有作业"<<endl;
    cout<<endl;
}

void main()
{
    initial();
    while(true)
    {
        cout<<"1.添加用户"<<endl;
        cout<<"2.申请资源"<<endl;
        cout<<"3.撤消用户"<<endl;
        cout<<"4.查看资源"<<endl;
        cout<<"5.退出"<<endl<<endl;
        cout<<"请选择：";
        int op;
        cin>>op;
        switch(op)
        {
        case 1:
            add();
            break;
        case 2:
            bid();
            break;
        case 3:
            finish();
            break;
        case 4:
            view();
            break;
        case 5:
            return;
        }

        cout<<endl;
    }
}


【虚拟存储管理方案：】
#include"iostream.h"
#include"string.h"
#include"fstream.h"
#include"iomanip.h"

const int page_number=3;
const int max_num=1000;

struct node
{
    int load;
    int hit;
};
node page[page_number];
int queue[max_num];
int total;
void inital()
{
    for(int i=0;i<page_number;i++)
    {
        page[i].load=-1;
        page[i].hit=0;
    }
    for(i=0;i<max_num;i++)
        queue[i]=-1;
    total=0;
}

void init()
{
    for(int i=0;i<page_number;i++)
    {
        page[i].load=-1;
        page[i].hit=0;
    }
}

void read_data()
{
    char file_name[20];
    cout<<"请输入文件名"<<endl;
    cin>>file_name;
    ifstream inf(file_name);
    while(!inf.eof())
    {
        inf>>queue[total];
        total++;
    }
    cout<<"读入的数据为："<<endl;
    for(int i=0;i<total;i++)
        cout<<setw(2)<<queue[i];
    cout<<endl;
}

//FIFO算法

void FIFO()
{
    init();
    int p=0,absence=0;
    int flag=0;
    cout<<endl<<"FIFO 调度算法页面调出流"<<endl;
    for(int i=0;i<total;i++)
    {
        flag=0;
        for(int j=0;j<page_number;j++)
        {
            if(queue[i]==page[j].load)
            {
                flag=1;
                cout<<setw(2)<<'*';
            }
        }
        if(flag==0)
        {
            if(absence>=page_number)
            {
                cout<<setw(2)<<page[p].load;
            }
            page[p].load=queue[i];
            p++;
            p=p%page_number;
            absence++;
        }
    }
    cout<<endl<<"缺页次数为："<<absence<<endl;
}

//最近最少使用调度算法
void LRU()
{
    init();
    int absence=0;
    for(int i=0;i<page_number;i++)
    {
        page[i].load=queue[i];
        absence++;
    }
    cout<<endl<<"LRU 调度算法页面调出流"<<endl;
    int flag;
    for(i=page_number;i<total;i++)
    {
        flag=-1;
        for(int j=0;j<page_number;j++)
        {
            if(page[j].load==queue[i])
                flag=j;
        }
        if(flag==-1)
        {
            cout<<setw(2)<<page[0].load;
            for(j=0;j<page_number-1;j++)
            {
                page[j]=page[j+1];
            }
            page[page_number-1].load=queue[i];
            absence++;
        }
        else
        {
            page[total]=page[flag];
            for(j=flag;j<page_number-1;j++)
                page[j]=page[j+1];
            page[page_number-1]=page[total];
        }
    }
    cout<<endl<<"缺页次数为："<<absence<<endl;

}

//最近最不常用调度算法
void LFU()
{
    init();
    int absence=0;
    for(int i=0;i<page_number;i++)
    {
        page[i].load=queue[i];
        absence++;
    }
    cout<<endl<<"LFU 调度算法页面调出流"<<endl;
    int flag;
    for(i=page_number;i<total;i++)
    {
        flag=-1;
        for(int j=0;j<page_number;j++)
        {
            if(page[j].load==queue[i])
            {
                flag=1;
                page[j].hit++;
            }
        }
        if(flag==-1)
        {
            int p=0;
            for(j=0;j<page_number;j++)
                if(page[p].hit>page[j].hit)
                    p=j;
            cout<<setw(2)<<page[p].load;
            page[p].load=queue[i];
            for(j=0;j<page_number;j++)
                page[j].hit=0;
            absence++;
        }
    }
    cout<<endl<<"缺页次数为："<<absence<<endl;
}

//第二次机会算法
void second()
{
    init();
    int absence=0;
    for(int i=0;i<page_number;i++)
    {
        page[i].load=queue[i];
        absence++;
    }
    cout<<endl<<"第二次机会调度算法页面调出流"<<endl;
    int flag;
    for(i=page_number;i<total;i++)
    {
        flag=-1;
        for(int j=0;j<page_number;j++)
        {
            if(page[j].load==queue[i])
            {
                flag=1;
                page[j].hit=1;
            }
        }
        if(flag==-1)
        {
            int w=0;
            while(w==0)
            {
                if(page[0].hit==0)
                {
                    cout<<setw(2)<<page[0].load;
                    for(j=0;j<page_number-1;j++)
                        page[j]=page[j+1];
                    page[page_number-1].load=queue[i];
                    page[page_number-1].hit=0;
                    w=1;
                }
                else
                {
                    page[total]=page[0];
                    for(j=0;j<page_number-1;j++)
                    {
                        page[j]=page[j+1];
                    }
                    page[page_number-1]=page[total];
                    page[page_number-1].hit=0;
                }
            }
            absence++;
        }
    }
    cout<<endl<<"缺页次数为："<<absence<<endl;

}

void main()
{
    inital();
    read_data();

    while(true)
    {
        cout<<endl;
        cout<<"1.FIFO"<<endl;
        cout<<"2.LRU"<<endl;
        cout<<"3.LFU"<<endl;
        cout<<"4.Second"<<endl;
        cout<<"4.end"<<endl;
        cout<<"请选择"<<endl;
        int op;
        cin>>op;
        switch(op)
        {
        case 1:
            FIFO();
            break;
        case 2:
            LRU();
            break;
        case 3:
            LFU();
            break;
        case 4:
            second();
            break;
        case 5:
            return;
        }
    }
}


/*模拟死锁检测算法

1． 输入：

“资源分配表”文件，每一行包含资源编号、进程编号两项（均用整数表示，并用空格分隔开），记录资源分配给了哪个进程。

“进程等待表”文件，每一行包含进程编号、资源编号两项（均用整数表示，并用空格分隔开），记录进程正在等待哪个资源。

下面是一个示例：

资源分配表：

1 1

2 2

3 3

进程等待表：

1 2

2 3

3 1

2． 处理要求：

程序运行时，首先提示“请输入资源分配表文件的文件名：”；再提示“请输入进程等待表文件的文件名：”。

输入两个文件名后，程序将读入两个文件中的有关数据，并按照死锁检测算法进行检测。

3． 输出要求：

第一行输出检测结果：有死锁 或 无死锁。

第二行输出进程循环等待队列，即进程编号（如果有死锁）。

4． 文件名约定

提交的源程序名字：sourceXXX.c或者sourceXXX.cpp（依据所用语言确定）

输入文件名字：可由用户指定

结果输出到resultXXX.txt中

其中：XXX为账号。

5． 死锁检测算法：当任一进程Pj申请一个已被其他进程占用的资源ri时，进行死锁检测。检测算法通过反复查找进程等待表和资源分配表，来确定进程Pj对资源ri的请求是否导致形成环路，若是，便确定出现死锁。

6． 测试说明：测试教师将事先准备好一组文件（格式为*.txt），从中为每个程序随机指定一至三个作为输入文件（被测试者需从键盘输入指定文件的文件名），并查看程序输出结果。

***********************************************************************************************/

/*writer:何良坤 傅仁军(仅供参考)如你有好的看法和建议,欢迎与本人探讨.furenjun@sohu.com*/

#include<iostream.h>

#include<string.h>

#include<stdio.h>

#include<stdlib.h>

#include<iomanip.h>

typedef struct {

int proc;

int resource;

}node;

node allocate[10];

node request[10];

int readrfile(){

char name[20];

FILE *fp;

int m,i,j;

cout<<"请输入资源分配表文件名(alloc.txt):";

//cin>>name;

cout<<endl;

if((fp=fopen("test.txt","r+"))==NULL){

cout<<"文件不能打开1!!!";exit(0);

}

i=0;

while(!feof(fp)){

fscanf(fp,"%d",&m);

allocate[i].resource=m;

fscanf(fp,"%d",&m);

allocate[i].proc=m;

i++;

}

cout<<"资源编号"<<setw(10)<<"进程编号"<<endl;

for(j=0;j<i;j++){

cout<<setw(4)<<allocate[j].resource<<setw(12)<<allocate[j].proc<<endl;

}

fclose(fp);

return i;

}

int readqfile(){

char name[20];

FILE *fp;

int m,i,j;

cout<<"请输入资源等待表文件名(req.txt):";

//cin>>name;

cout<<endl;

//if((fp=fopen(name,"r+"))==NULL){

if((fp=fopen("waitfor.txt","r+"))==NULL){

cout<<"文件不能打开!!!";exit(0);

}

i=0;

while(!feof(fp)){

fscanf(fp,"%d",&m);

request[i].proc=m;

fscanf(fp,"%d",&m);

request[i].resource=m;

i++;

}

cout<<"进程编号"<<setw(10)<<"资源编号"<<endl;

for(j=0;j<i;j++){

cout<<setw(4)<<request[j].proc<<setw(12)<<request[j].resource<<endl;

}

fclose(fp);

return i;

}

int lockcheck(node alloc[],node req[],int totalnum,int temp)

{

//cout<<"temp"<<temp<<endl;

int i,j,k,x,w,a[20],z;

j=0; k=0;

a[k++]=req[temp].proc;

int t;

t=temp;

for(i=0;i<=temp;i++) //注意此处的变量要进行保存;

{

for(z=0;z<totalnum;z++)

{

if((req[t].resource==alloc[z].resource)) //如果资源号相等则将其对应进程号存入数组.

{ //t为temp的变量,它是一个变化的量.

a[k++]=alloc[z].proc;

//cout<<"ok1"<<endl;

j=z;

break;//修改下面要用到的请求资源号下标

}

}

int flag=0; //在此处设标记是防止下面出现不能修改t 的值的情况,否则下一次循环将继续使用未改变的t值,从而出错.

for(w=0;w<=temp;w++) //每次对资源等待表的检测次数为进入资源等待表的进程数量.

{

if((alloc[j].proc ==req[w].proc )) //如果资源分配表中的资源号等于进程等待表

//中资源号,则其相应的进程号进入进程队列.

{

{

flag=1;

t=w; //修改t所指示的下标值.

break;

}

}

}

if(flag==0)

break;

}

int flag=0,k2=0;

x=a[0];

for( i=1;i<k;i++) //检测进程队列中是否存在环

{

flag=0;

if(x==a[i])

{

flag=1;

k2=i;

break;

}

}

if(flag==1)

{

cout<<" 此进程队列有死锁!"<<endl;

}

if(flag==0)

{

cout<<" 没死锁!"<<endl;

}

//将结果写入文件:

FILE *fp;

if((fp=fopen("result.txt","ab+"))==NULL)

{

cout<<"soory! can not open file! "<<endl;

exit(0);

}

char c='\n';

fputc(c,fp);

char s[20]=" the number\n";

fputs(s,fp);

// cout<<endl<<"k="<<k<<endl;

cout<<" 该进程队列为:"<<endl;

for(i=0;i<=k2;i++)

{

cout<<setw(6)<<a[i];

fprintf(fp,"%5d",a[i]);

}

fprintf(fp,"%c",'\n');

fclose(fp) ;

return 0;

}

void main(){

int n;

n=readrfile();

cout<<endl<<n<<endl;

int m=readqfile();

cout<<endl<<m<<endl;

for(int i=0;i<m;i++)

{

cout<<endl<<" 第"<<i+1<<"个请求出现时";

lockcheck ( allocate,request,m,i);

}

cout<<endl;

return ;

}


【 UNIX系统文件管理：】
#include"iostream.h"
#include"fstream.h"
#include "stdio.h"
#include"stdlib.h"
#include"string.h"
#include"iomanip.h"

const int Max_group=10;
const int Max_job=100;

struct group  //定义空闲块
{
    int quantity;
    int cell[Max_group];
    group *next;
};

struct job //定义作业
{
    int quantity;
    char name[20];
    int cell[Max_job];
    job *next;
};

group *ghead;
job *jhead;

void init_group()//初始化组
{
    ghead=new group;
    ghead->quantity =0;
    for(int i=0;i<Max_group;i++)
        ghead->cell[i]=-1;
    ghead->next=NULL;

}
void init_job()  //初始化作业
{
    jhead=new job;
    jhead->quantity =0;
    strcpy(jhead->name,"");
    for(int i=0;i<Max_job;i++)
        jhead->cell[i]=-1;
    jhead->next=NULL;

}
int total=0;
void readData()//读文件
{

    char name[20];
    printf("请输入 文件名");
    gets(name);
    ifstream inf(name,ios::nocreate);
    if(inf==NULL)//或者用(!inf)表示文件为空
    {
        cout<<"文件打开失败"<<endl;
        exit(0);
    }
    while(!inf.eof())//这里是读文件，就是没到文件的末尾
    {
        if(ghead->quantity<Max_group)
        {
            inf>>ghead->cell[ghead->quantity++];
        }
        else
        {
            group *p=new group;
            p->quantity =0;
            for(int i=0;i<Max_group;i++)
               p->cell[i]=-1;
            p->next=NULL;
            p->next=ghead;
            ghead=p;
            inf>>ghead->cell[ghead->quantity++];
        }

        total++;
    }
    cout<<"空闲数 : "<<total<<endl;
}

void view_z()//显示专用块
{
    cout<<"显示专用块数据"<<endl;
    for(int i=0;i<ghead->quantity;i++)
        cout<<setw(4)<<ghead->cell[i];
    cout<<endl;
}

void view()//显示全部的空闲块
{
    cout<<"显示全部空闲块"<<endl;
    group *p;
    p=ghead;
    while(p!=NULL)
    {
        for(int i=0;i<p->quantity;i++)
             cout<<setw(4)<<p->cell[i];
        cout<<endl;
        p=p->next;

    }

}

void bit() //申请作业，分配所需作业的块，申请几次就在mian()里调用几次
{
    char name[20];
    int num;
    cout<<"请输入作业名称及作业所需块数"<<endl;
    cin>>name>>num;

    if(num>total)
    {
        cout<<"没有足够的空闲区"<<endl;
        return;
    }
    else
    {
        job *p=new job;
        p->quantity =0;
        strcpy(p->name,name);
        for(int i=0;i<Max_job;i++)
            p->cell[i]=-1;
        p->next=jhead->next;
        jhead->next=p;
        for(i=0;i<num;i++)
        {
            if(ghead->quantity>1)
            {
                p->cell[p->quantity++]=ghead->cell[--ghead->quantity];
            }
            else
            {
                p->cell[p->quantity++]=ghead->cell[0];
                group *q=ghead;
                ghead=ghead->next;
                delete q;
            }
        }
    }
}

void view_job()//显示作业
{
    job *p=jhead->next;
    while(p!=NULL)
    {
        cout<<"作业名称："<<p->name<<endl;
        cout<<"所站用的区域"<<endl;
        for(int i=0;i<p->quantity;i++)
            cout<<setw(4)<<p->cell[i];
        cout<<endl;
        p=p->next;
    }
}

void finish()//撤消作业，释放空间
{
    cout<<"请输入作业名称"<<endl;
    char name[20];
    cin>>name;
    job *p,*q=jhead;
    p=jhead->next;

    while(p!=NULL && strcmp(p->name,name)!=0)
    {
        q=p;
        p=p->next;
    }
    if(p==NULL)
        cout<<"没有该作业"<<endl;
    else
    {
        cout<<endl<<p->quantity<<endl;
        while(p->quantity>0)
        {
            if(ghead->quantity<Max_group)
            {
                ghead->cell[ghead->quantity++]=p->cell[--p->quantity];
            }
            else
            {
                group *q=new group;
                q->quantity =0;
                for(int i=0;i<Max_group;i++)
                   q->cell[i]=-1;
                q->next=ghead;
                ghead=q;
                ghead->cell[ghead->quantity++]=p->cell[--p->quantity];
            }
        }
        q->next=p->next;
        delete p;
    }

}
void main()
{
    init_group();
    init_job();
    readData();
    while(true)
    {
        cout<<"1. 申请作业"<<endl;
        cout<<"2. 显示专用块"<<endl;
        cout<<"3. 显示全部空闲块"<<endl;
        cout<<"4. 显示作业"<<endl;
        cout<<"5. 撤消作业"<<endl;
        cout<<"6. 退出"<<endl;
        int op;
        cout<<"请选择"<<endl;
        cin>>op;
        switch(op)
        {
        case 1:
            bit();
            break;
        case 2:
            view_z();
            break;
        case 3:
            view();
            break;
        case 4:
            view_job();
            break;
        case 5:
            finish();
            break;
        case 6:
            return;
        default :
            cout<<"操作错误！请重试"<<endl;
        }
    }
}


主要特性

  • 自动从Html文件、文本文件、Microsoft Word 文件和 Adobe Acrobat 文件创建CHM文件。
  • 通过导入文件夹和全部子文件夹生成CHM文件。
  • 直接打开并保存 Microsoft HTML Help Workshop 项目（.hhp文件）。
  • 直接编辑 .htm 或 .html 文件。
  • 从网页标题、文件名或指定行的文字自动生成目录和索引项目标题。
  • 反编译单个CHM文件或批量反编译多个CHM文件。

发送反馈意见

©版权所有 2004 - 2006 Dawningsoft 公司。保留所有权利。


FoxWolf制作.
感谢中软沈老师，最爱听您的课了！
2006-11-02


#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "fstream.h"
#include "math.h"
#include "iomanip.h"

const int Max=100;

struct node
    {
    int num;
    int finish;
    };

node queue[Max];//记录所有的磁道请求
int quantity;//当前划过的磁道请求总数
int current;//当前磁头的位置

void init()
{
for(int i=0;i<Max;i++)
    {
    queue[i].finish =0;
    queue[i].num =0;
    }
quantity=0;
current=100;
}
void reset()
{
for(int i=0;i<Max;i++)
    {
    queue[i].finish =0;
    }
}

void readData()
    {
    char name[20];
    printf("请输入文件名：");
    gets(name);

    ifstream inf(name,ios::nocreate);
if(inf==NULL)
{
    cout<<"文件无法打开！"<<endl;
    exit(0);//直接返回DOS，既返回所有的函数与RETURN区别
}
while(!inf.eof())
{
    inf>>queue[quantity++].num ;
}
cout<<"磁道申请流："<<endl;
 for(int i=0;i<quantity;i++)
cout<<setw(4)<<queue[i].num ;
cout<<endl;
cout<<"申请次数："<<quantity<<endl;
}

void FiFO()
        {
         int start=current;
         int total=0;//访问磁道总数
         int t=0;//访问相邻磁道跨越的磁道数
         reset();
         cout<<"FIFO 算法磁道申请流"<<endl;
         for(int i=0;i<quantity;i++)
         {
         cout<<setw(4)<<queue[i].num ;
         t=abs(queue[i].num -start);
         cout<<setw(5)<<t<<endl;
         total+=t;
         start=queue[i].num ;
         }
         cout<<"移动的总磁道数："<<total<<endl;
        }

void zdc()
{
    int start=current;
    int total=0;
    int t=0;
    reset();
    cout<<"最短磁道优先算法执行流"<<endl;
    for(int i=0;i<quantity;i++)
        {
        int k=0;
        while(queue[k].finish !=0)
          k++;//找第一个没被访问的1表示访问过0没有被访问
          for(int j=0;j<quantity;j++)
              {
                  if(queue[j].finish ==0 && abs(queue[j].num-start)<abs(queue[k].num -start))
                   k=j;
              }
        cout<<setw(5)<<queue[k].num;
        t=abs(queue[k].num -start);
        cout<<setw(5)<<t<<endl;
        total+=t;
        start=queue[k].num;
        queue[k].finish=1;

        }
    cout<<"移动的总磁道数："<<total<<endl;
}

void dt()
{
    int start=current;
    int t=0;
    int total=0;
    reset();
    cout<<"电梯调度算法（由外向内）"<<endl;
    for(int i=0;i<quantity;i++)
        {
         int k=-1;//最小的且同方向的且距离最小的
         int flag=1000;
         for(int j=0;j<quantity;j++)
             {
             if(queue[j].finish ==0 && queue[j].num >=start)//没访问且同方向
                 if(abs(queue[j].num -start<flag))
                 {
                     k=j;
                     flag=abs(queue[j].num -start);
                 }
              }
             if(k!=-1)//最小的已找到并输出
                     {
                       cout<<setw(5)<<queue[k].num;
                        t=abs(queue[k].num -start);
                        cout<<setw(5)<<t<<endl;
                        total+=t;
                        start=queue[k].num;
                        queue[k].finish=1;
                       }

            else//反方向
            {
            for(int j=0;j<quantity;j++)
            {
               if(queue[j].finish==0 && queue[j].num<start)
                 if(abs(queue[j].num-start)<flag)
                 {
                     k=j;
                     flag=abs(queue[j].num-start);
                 }
            }
            cout<<setw(5)<<queue[k].num;
            t=abs(queue[k].num -start);
            cout<<setw(5)<<t<<endl;
            total+=t;
            start=queue[k].num;
            queue[k].finish=1;

        }
    }
   cout<<"移动的总磁道数："<<total<<endl;
}

void main()
    {
        init();
        readData();
        cout<<"请输入磁头的当前位置"<<endl;
        cin>>current;
         FiFO();
         zdc();
         dt();

    }