#include
#include
#include
#include
#include
const int MAX_P=20;
const int MAXA=10; //定义A类资源的数量
const int MAXB=5;
const int MAXC=7;
typedef struct node
{ int a;
int b;
int c;
int remain_a;
int remain_b;
int remain_c;
}bank;
typedef struct node1
{ char name[20];
int a;
int b;
int c;
int need_a;
int need_b;
int need_c;
}process;
bank banker;
process processes[MAX_P];
int quantity;
//初始化函数
void initial()
{ int i;
banker.a=MAXA;
banker.b=MAXB;
banker.c=MAXC;
banker.remain_a=MAXA;
banker.remain_b=MAXB;
banker.remain_c=MAXC;
for(i=0;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;
}
}
//新加作业
void add()
{ char name[20];
int flag=0;
int t;
int need_a,need_b,need_c;
int i;
cout<
cin>>name;
for(i=0;i
flag=1;
break;
}
}
if(flag)
{ cout<<"错误,作业已存在"<
{ cout<<"本作业所需A类资源:";
cin>>need_a;
cout<<"本作业所需B类资源:";
cin>>need_b;
cout<<"本作业所需C类资源:";
cin>>need_c;
t=1;
cout<
{ cout<<"错误,所需A类资源大于银行家所剩A类资源"<
}
if(need_b>banker.remain_b)
{ cout<<"错误,所需B类资源大于银行家所剩B类资源"<
}
if(need_c>banker.remain_c)
{ cout<<"错误,所需C类资源大于银行家所剩C类资源"<
}
if(t)
{ 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<<"新加作业成功"<
else
{ cout<<"新加作业失败"<
}
//为作业申请资源
void bid()
{ char name[20];
int i,p;
int a,b,c;
int flag;
cout<
cin>>name;
p=-1;
for(i=0;i
{ p=i;
break;
}
}
if(p!=-1)
{ cout<<"该作业要申请A类资源数量:";
cin>>a;
cout<<"该作业要申请B类资源数量:";
cin>>b;
cout<<"该作业要申请C类资源数量:";
cin>>c;
flag=1;
if((a>banker.remain_a)||(a>processes[p].need_a-processes[p].a))
{ cout<<"错误,所申请A类资源大于银行家所剩A类资源或该进程还需数量"<
}
if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b))
{ cout<<"错误,所申请B类资源大于银行家所剩B类资源或该进程还需数量"<
}
if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c))
{ cout<<"错误,所申请C类资源大于银行家所剩C类资源或该进程还需数量"<
}
if(flag)
{ banker.remain_a-=a;
banker.remain_b-=b;
banker.remain_c-=c;
processes[p].a+=a;
processes[p].b+=b;
processes[p].c+=c;
cout<<"为作业申请资源成功"<
else
{ cout<<"为作业申请资源失败"<
else
{ cout<<"该作业不存在"<
//撤消作业
void finished()
{ char name[20];
int i,p;
cout<
cin>>name;
p=-1;
for(i=0;i
{ p=i;
break;
}
}
if(p!=-1)
{ banker.remain_a+=processes[p].a;
banker.remain_b+=processes[p].b;
banker.remain_c+=processes[p].c;
for(i=p;i
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;
quantity--;
cout<<"撤消作业成功"<
else
{ cout<<"撤消作业失败"<
//查看资源情况
void view()
{ int i;
cout<
cout<
{ for(i=0;i
}
else
{ cout<<"当前没有作业"<
//显示版权信息函数
void version()
{ cout<
void main()
{ int chioce;
int flag=1;
initial();
version();
while(flag)
{ cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<
cin>>chioce;
switch(chioce)
{ case 1:
add();
break;
case 2:
bid();
break;
case 3:
finished();
break;
case 4:
view();
break;
case 0:
flag=0;
break;
default:
cout<<"选择错误"<
}
}