📄 yhj.java
字号:
import java.util.*;
import java.io.*;
class list
{
public int maxa,maxb,maxc;
public int remainda,remaindb,remaindc;
}
class node
{
String name=null;
int ALa,ALb,ALc;
int needa,needb,needc;
}
public class YHJ
{
public static list banker=new list();
public static node processes[]=new node[10];
int quantity,number=0; //jinchenggeshu
int A,B,C;
public static int MAX_A=10,MAX_B=6,MAX_C=7;
public static void main(String []args)
{
for(int j=0;j<10;j++)
processes[j]=new node();
int i;
YHJ yhl=new YHJ();
banker.maxa=MAX_A;
banker.maxb=MAX_B;
banker.maxc=MAX_C;
banker.remainda=MAX_A;
banker.remaindb=MAX_B;
banker.remaindc=MAX_C;
for(i=0;i<10;i++)
{
processes[i].name="";
processes[i].ALa=0;
processes[i].ALb=0;
processes[i].ALc=0;
processes[i].needa=0;
processes[i].needb=0;
processes[i].needc=0;
}
System.out.println("*************************************");
System.out.println("* 1--添加新作业 *");
System.out.println("* 2--为作业分配资源 *");
System.out.println("* 3--撤销作业 *");
System.out.println("* 4--查看资源分配情况 *");
System.out.println("* 0--退出 *");
System.out.println("*************************************");
System.out.print("Please choose: ");
Scanner in = new Scanner(System.in);
int choose = in.nextInt();
while(choose!=0)
{
switch(choose)
{
case 1:yhl.add();break;
case 2:yhl.please();break;
case 3:yhl.finished();break;
case 4:yhl.view();break;
}
System.out.println("*************************************");
System.out.println("* 1--添加新作业 *");
System.out.println("* 2--为作业分配资源 *");
System.out.println("* 3--撤销作业 *");
System.out.println("* 4--查看资源分配情况 *");
System.out.println("* 0--退出 *");
System.out.println("*************************************");
System.out.print("Please choose: ");
choose = in.nextInt();
}
}
public boolean safe()
{
int count=0;
int Work[]=new int[3];
int Finish[]=new int[5];
int i,j,k=0;
Work[0]=banker.remainda;
Work[1]=banker.remaindb;
Work[2]=banker.remaindc;
for(i=0;i<number;i++)
{
Finish[i]=0;
}
i=0;
while(i<number)
{
if(Finish[i]==0 && Work[0]>=processes[i].needa && Work[1]>=processes[i].needb && Work[2]>=processes[i].needc)
{
Work[0]+=processes[i].ALa;
Work[1]+=processes[i].ALb;
Work[2]+=processes[i].ALc;
Finish[i]=1;
count++;
i=0;
continue;
}
i++;
}
if(count<number)
{
return false;
}
else
{
return true;
}
}
public void add()
{
String name;
boolean flag=false,t=false;
int need_a,need_b,need_c;
int i;
System.out.println("新加进程");
System.out.println("请输入新加进程名:");
Scanner in=new Scanner(System.in);
name=in.next();
number++;
for(i=0;i<quantity;i++)
{
if(processes[i].name.equals(name))
{
flag=true;
break;
}
}
if(flag)
{
System.out.println("进程已存在");
}
else
{
System.out.println("本进程所需A类资源:");
need_a=in.nextInt();
System.out.println("本进程所需B类资源:");
need_b=in.nextInt(); ;
System.out.println("本进程所需C类资源:");
need_c=in.nextInt();
t=true;
//System.out.println(need_a+" "+banker.remainda);
if(need_a>banker.remainda)
{
System.out.println("错误,所需A类资源大于银行家所剩A类资源");
t=false;
}
if(need_b>banker.remaindb)
{
System.out.println("错误,所需B类资源大于银行家所剩B类资源");
t=false;
}
if(need_c>banker.remaindc)
{
System.out.println("错误,所需C类资源大于银行家所剩C类资源");
t=false;
}
if(t)
{
processes[quantity].name=name;
processes[quantity].needa=need_a;
processes[quantity].needb=need_b;
processes[quantity].needc=need_c;
quantity++;
System.out.println(name+"进程添加成功");
}
else
{
System.out.println("新加进程失败");
}
}
}
//为进程申请资源
void please()
{
String name;
int i,p,finishcnt=0,count=0;
boolean flag=false;
System.out.println();
System.out.println("为进程申请资源");
System.out.println("要申请资源的进程名:");
Scanner in=new Scanner(System.in);
name=in.next();
p=-1;
for(i=0;i<quantity;i++){
if(processes[i].name.equals(name))
{
p=i;
break;
}
}
if(p!=-1)
{
System.out.println("该进程要申请A类资源数量:");
A=in.nextInt();
System.out.println("该进程要申请B类资源数量:");
B=in.nextInt();
System.out.println("该进程要申请C类资源数量:");
C=in.nextInt();
if((A>banker.remainda)||(A>processes[p].needa))
{
System.out.println("错误,所申请A类资源大于银行家所剩A类资源或该进程还需数量");
flag=false;
}
if((B>banker.remaindb)||(B>processes[p].needb))
{
System.out.println("错误,所申请B类资源大于银行家所剩B类资源或该进程还需数量");
flag=false;
}
if((C>banker.remaindc)||(C>processes[p].needc))
{
System.out.println("错误,所申请C类资源大于银行家所剩C类资源或该进程还需数量");
flag=false;
}
banker.remainda-=A;
banker.remaindb-=B;
banker.remaindc-=C;
processes[p].ALa+=A;
processes[p].ALb+=B;
processes[p].ALc+=C;
processes[i].needa-=A;
processes[i].needb-=B;
processes[i].needc-=C;
flag=safe();
if(flag)
{
System.out.println("为进程申请资源成功");
}
else
{
banker.remainda+=A;
banker.remaindb+=B;
banker.remaindc+=C;
processes[p].ALa-=A;
processes[p].ALb-=B;
processes[p].ALc-=C;
processes[i].needa+=A;
processes[i].needb+=B;
processes[i].needc+=C;
System.out.println("为进程申请资源失败");
}
}
else
{
System.out.println("该进程不存在");
}
}
//撤消进程
public void finished()
{
String name;
int i,p;
System.out.println();
System.out.println("撤销进程");
System.out.println("要撤消进程名:");
Scanner in=new Scanner(System.in);
name=in.next();
p=-1;
for(i=0;i<quantity;i++)
{
if(processes[i].name.equals(name))
{
p=i;
break;
}
}
if(p!=-1)
{
banker.remainda+=processes[p].ALa;
banker.remaindb+=processes[p].ALb;
banker.remaindc+=processes[p].ALc;
for(i=p;i<quantity-1;i++)
{
processes[i].name=processes[i+1].name;
processes[i].ALa=processes[i+1].ALa;
processes[i].ALb=processes[i+1].ALb;
processes[i].ALc=processes[i+1].ALc;
processes[i].needa=processes[i+1].needa;
processes[i].needb=processes[i+1].needb;
processes[i].needc=processes[i+1].needc;
}
processes[quantity-1].name="";
processes[quantity-1].ALa=0;
processes[quantity-1].ALb=0;
processes[quantity-1].ALc=0;
processes[quantity-1].needa=0;
processes[quantity-1].needb=0;
processes[quantity-1].needc=0;
quantity--;
System.out.println("撤消进程成功");
}
else
{
System.out.println("撤消进程失败");
}
}
//查看资源情况
void view()
{
int i;
System.out.println();
System.out.println("查看资源情况");
System.out.println("\t"+"总共资源"+"\t"+"剩余资源");
System.out.println("A类:"+"\t"+banker.maxa+"\t\t"+banker.remainda);
System.out.println("B类:"+"\t"+banker.maxb+"\t\t"+banker.remaindb);
System.out.println("C类:"+"\t"+banker.maxc+"\t\t"+banker.remaindc);
System.out.println();
System.out.println("\t"+"占用资源"+"\t"+"所需资源");
if(quantity>0)
{
for(i=0;i<quantity;i++)
{
System.out.println("进程:"+processes[i].name);
System.out.println("A类:"+"\t"+processes[i].ALa+"\t\t"+processes[i].needa);
System.out.println("B类:"+"\t"+processes[i].ALb+"\t\t"+processes[i].needb);
System.out.println("C类:"+"\t"+processes[i].ALc+"\t\t"+processes[i].needc);
System.out.println();
}
}
else
{
System.out.println("当前没有进程");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -