⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xssbanker.cpp

📁 内附文档
💻 CPP
字号:
// XssBanker.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
int Available[50],Allocation[100][100],Max[100][100];//已有资源量
int Need[100][100],Request[40],Work[50],Finish[100],p[100];//需求
int i,j,n,m,l=0,flag=0;//定义全局变量
void safe()
{ 
 for (i=0; i<n;i++)
  {
   if (Finish[i]==0)
   {
    flag=0;
    for (j=0; j<m; j++)
    {
     if (Work[j]>=Need[i][j])
      flag=flag+1;
    }
  
    if(flag==m)
    {
     p[l]=i; 
     Finish[i]=1;
     for (j=0; j<m;j++)
     {
      Work[j]=Work[j]+Allocation[i][j];
     }
     l=l+1;
     i= -1;
    }
   }
   i++;
  }
}

int main()
{cout<<"                          模拟银行家算法                 "<<endl; 
 cout<<"                                                         "<<endl; 
 cout<<"                            许世生                       "<<endl; 
 cout<<endl<<endl<<endl;
 int k=0,r=0;
 char b;
 cout<<"输入进程的数量: ";//从此开始输入有关数据
    cin>>n;
    cout<<"输入资源种类数: ";
 cin>>m;
 cout<<"输入各种资源可利用的数量Available["<<m<<"]: "<<endl;
    for (j=0; j<m; j++)
 {
  cin>>Available[j];
  Work[j]=Available[j];          //初始化Work[j]
 }
 //system("cls");
 cout<<"\n请输入各进程当前已分配的资源数量Allocation["<<n<<"]["<<m<<"]: "<<endl;
 cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl;
 for (i=0; i<n; i++)
 {
  for (j=0; j<m; j++)
  {
   cin>>Allocation[i][j];
  }
  /*if(Available[j]<Allocation[i][j])
   {
    cout<<"您输入的已分配的资源量大于资源总量!!请重新输入!!"<<endl;
   }*/
  Finish[i]=0;//初始化Finish[i]
  //break;
 }
 cout<<"\n输入各进程对各类资源的最大需求数Max["<<n<<"]["<<m<<"]: "<<endl;
    cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl;
 for (i=0; i<n; i++)
 {
  for (j=0; j<m; j++)
  {
   cin>>Max[i][j];
   Need[i][j] = Max[i][j]-Allocation[i][j];
  }
 }

 //判断当前状态的安全性
 safe();
 if (l<n)
 {

  cout<<"\n当前状态不安全!!!!!"<<endl;
  return 0;
 }
 else
 { int i;
  l=0;
  cout<<"\n安全的状态!!!"<<endl;
  cout<<"安全序列为:   ";
 // if(i==0)
 // {
   //cout<<"进程(0)"<<endl;
   //Finish[i]=0;
 // }
  for (i=0; i<n; i++)
  {
   cout<<"进程"<<"("<<p[i]<<")"<<"==>>";
   Finish[i]=0;
   
   
  }
  cout<<endl;
 }
 //system("cls");
    do
 {
  //输入请求
  cout<<"\n请输入申请资源的进程编号: "<<endl;
  cin>>k;
  if(k>n-1)
  {
  cout<<"您输入了错误的进程号,请检查!!"<<endl;
  break;
  }
  cout<<"\n请输入申请各类资源的数量: "<<endl;
  for (j=0; j<m; j++)
  {
   cout<<"进程"<<k<<"["<<j<<"]:";
   cin>>Request[j]; 
  }

  //判断输入的情况
  for (j=0; j<m; j++)
  {
   if (Request[j] > Need[k][j])
   {
    system("cls");
       cout<<"出错!申请大于需要量~~"<<endl;
       return 0;
   }
  }
  for (j=0; j<m; j++)
  {
   if (Request[j]>Available[j])
   {
    //system("cls");
    cout<<"根本没那么多资源,请仔细检查!!!"<<endl;
    return 0;
   }
  }

  //改变Avilable、Allocation、Need的值
  for (j=0; j<m; j++)
  {
   Available[j] = Available[j]-Request[j];
   Allocation[k][j] = Allocation[k][j]+Request[j];
   Need[k][j] = Need[k][j]-Request[j];
   Work[j] = Available[j];
  }

  //判断当前状态的安全性
  safe();
  if (l<n)
  {
   l=0;
   cout<<"\n当前状态不安全!!!!!!";
   //恢复数据 
   for (j=0; j<m; j++)
   {
    Available[j] = Available[j]+Request[j];
    Allocation[k][j] = Allocation[k][j]-Request[j];
    Need[k][j] = Need[k][j]+Request[j];
    Work[j] = Available[j];
   }
   for (i=0; i<n; i++)
    Finish[i]=0;
  }
  else
  { system("cls");
   l=0;
   cout<<"\n申请资源成功!!!"<<endl;
   cout<<"\n安全的状态!!!"<<endl;
      cout<<"安全序列为:   ";
   for (i=0; i<n; i++)
   {
    cout<<"进程"<<"("<<p[i]<<")"<<"==>>";
    Finish[i]=0;
   }
   cout<<endl;
  }

        //显示输入各数组的值
  cout<<"\n当前状态:"<<endl;
     cout<<"资源量[m]:"<<endl;
        for (j=0; j<m; j++)
  {
   cout<<Available[j]<<"    ";
  }
     cout<<endl;
     cout<<"\n已分配资源[n][m]:"<<endl;
     for (i=0; i<n; i++)
  {
   for (j=0; j<m; j++)
   {
    cout<<Allocation[i][j]<<"    "; 
   }
      cout<<endl;
  }
     cout<<"\n最大需求[n][m]:"<<endl;
     for (i=0; i<n; i++)
  {
   for (j=0; j<m; j++)
   {
    cout<<Max[i][j]<<"    ";
   }
      cout<<endl;
  }
  //system("cls");
  cout<<"\n要继续申请资源,请按'y'或'Y',否则按'n'或'N'"<<endl;
  cin>>b;
  if(b=='y'||b=='Y')
  {
   r=1;
   //输入请求
      cout<<"\n请输入申请资源的进程编号(0,1…,n-1):"<<endl;
      cin>>k;
   if(k>n-1)
    {
     cout<<"您输入了错误的进程号,请检查!!"<<endl;
     break;
    }
      cout<<"\n请输入申请各类资源的数量:"<<endl;
      for (j=0; j<m; j++)
   {
       cout<<"进程"<<k<<"["<<j<<"]:";
    cin>>Request[j];
   }
  }
  else
  r=0;
  system("cls");
 cout<<"           ----------------------------------------------------"<<endl;
 cout<<"           ||                                                            ||"<<endl;
 cout<<"           ||                                                            ||"<<endl; 
 cout<<"           ||                  欢迎再次使用!!!                     ||"<<endl; 
 cout<<"           ||                       Welcome Back!!!           ||"<<endl; 
 cout<<"           ||                                                             ||"<<endl; 
 cout<<"           ----------------------------------------------------"<<endl; 
 }while (r==1);
 
 return 0;
}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -