// Note:Your choice is C++ IDE
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
const int MAX_P=20;
const int MAXA=10;
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<MAX_P;i++){
		strcpy(processes[i].name,"");
		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<<endl;
	cout<<"新加作业"<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"please input your new task name:";
	cin>>name;
	for(i=0;i<quantity;i++)
	{
		if(!strcmp(processes[i].name,name)){
			flag=1;
			break;
		}
	}
	if(flag){
		cout<<"error,resistent"<<endl;
	}
	else{
		cout<<"need A resource";
		cin>>need_a;
		cout<<"need B resource:";
		cin>>need_b;
		cout<<"need C resource:";
		cin>>need_c;
		t=1;
		cout<<need_a<<banker.remain_a;
		if(need_a>banker.remain_a){
			cout<<"error, need A >banker own"<<endl;
			t=0;
		}
		if(need_b>banker.remain_b){
			cout<<"error, need B >banker own"<<endl;
			t=0;
		}
		if(need_c>banker.remain_c){
			cout<<"error, need C >banker own"<<endl;
			t=0;
		}
		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<<"xin jia zuo ye cheng gong "<<endl;
		}
		else{
			cout<<"task adding fails"<<endl;
		}
	}
}
/* ask for task resource*/
void bid()
{
	char name[20];
	int i,p;
	int a,b,c;
	int flag;
	cout<<endl<<"为作业申请资源"<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"要申请的资源的作业名:";
	cin>>name;
	p=-1;
	for(i=0;i<quantity;i++){
		if(!strcmp(processes[i].name,name)){
			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类资源或者该进程还需数量"<<endl;
			flag=0;
			if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){
			cout<<"错误,所申请B类资源大于银行家所剩余B类资源或者该进程还需数量"<<endl;
			flag=0;
			if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){
			cout<<"错误,所申请C类资源大于银行家所剩余C类资源或者该进程还需数量"<<endl;
			flag=0;
			}
			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<<"为作业申请资源失败 "<<endl;
			}
			}
			else{
				cout<<"改作业不存在"<<endl;
			}
		}
	}
}
		
		void finished()
		{
			char name[20];
			int i,p;
			cout<<endl<<"撤销作业"<<endl;
			cout<<"-----------------------------"<<endl;
			cout<<"要撤销作业名";
			cin>>name;
			p=-1;
			for(i=0;i<quantity;i++){
				if(!strcmp(processes[i].name,name)){
					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<quantity-1;i++){
					processes[i]=processes[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<<"撤销作业成功"<<endl;
			}
			else{
				cout<<"撤销失败"<<endl;
			}
		}
		
		void view()
		{
			int i;
			cout<<endl<<"查看资源情况"<<endl;
			cout<<"--------------------------------"<<endl;
			cout<<"银行家所剩余资源(剩余资源/总共资源)"<<endl;

			cout<<"A类资源:"<<banker.remain_a<<"/"<<banker.a;

			cout<<"B类资源:"<<banker.remain_b<<"/"<<banker.b;

			cout<<"C类资源:"<<banker.remain_c<<"/"<<banker.c;

			cout<<endl<<endl<<"作业占用情况"<<endl<<endl;
			if(quantity>0){
				for(i=0;i<quantity;i++){
					cout<<"作业名:"<<processes[i].name<<endl;
					cout<<"A"<<processes[i].a<<"/"<<processes[i].need_a;
					cout<<"B"<<processes[i].b<<"/"<<processes[i].need_b;
					cout<<"C"<<processes[i].c<<"/"<<processes[i].need_c;
					cout<<endl;
				}
			}
			else{
				cout<<"当前没有作业"<<endl;
			}
		}
		
		void main(){
			//系统设置
			system("title C语言关机程序");//设置cmd窗口标题 
			system("mode con cols=66lines=20");//窗口宽度高度 
			system("color 0B"); 
			system("date /T"); 
			system("TIME /T"); 
			int chioce;
			int flag=1;
			initial();
			while(flag){
				cout<<"----------------------------------------------------------------"<<endl;
				cout<<"1.新加作业 2.为作业申请资源 3.撤销作业 4.查看资源情况 0.退出系统"<<endl;
				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<<"选择错误"<<endl<<endl;
				}
			}
		}


// Note:Your choice is C++ IDE
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
const int MAX_P=20;
const int MAXA=10;
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<MAX_P;i++){
		strcpy(processes[i].name,"");
		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<<endl;
	cout<<"新加作业"<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"please input your new task name:";
	cin>>name;
	for(i=0;i<quantity;i++)
	{
		if(!strcmp(processes[i].name,name)){
			flag=1;
			break;
		}
	}
	if(flag){
		cout<<"error,resistent"<<endl;
	}
	else{
		cout<<"need A resource";
		cin>>need_a;
		cout<<"need B resource:";
		cin>>need_b;
		cout<<"need C resource:";
		cin>>need_c;
		t=1;
		cout<<need_a<<banker.remain_a;
		if(need_a>banker.remain_a){
			cout<<"error, need A >banker own"<<endl;
			t=0;
		}
		if(need_b>banker.remain_b){
			cout<<"error, need B >banker own"<<endl;
			t=0;
		}
		if(need_c>banker.remain_c){
			cout<<"error, need C >banker own"<<endl;
			t=0;
		}
		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<<"xin jia zuo ye cheng gong "<<endl;
		}
		else{
			cout<<"task adding fails"<<endl;
		}
	}
}
/* ask for task resource*/
void bid()
{
	char name[20];
	int i,p;
	int a,b,c;
	int flag;
	cout<<endl<<"为作业申请资源"<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"要申请的资源的作业名:";
	cin>>name;
	p=-1;
	for(i=0;i<quantity;i++){
		if(!strcmp(processes[i].name,name)){
			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类资源或者该进程还需数量"<<endl;
			flag=0;
			if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){
			cout<<"错误,所申请B类资源大于银行家所剩余B类资源或者该进程还需数量"<<endl;
			flag=0;
			if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){
			cout<<"错误,所申请C类资源大于银行家所剩余C类资源或者该进程还需数量"<<endl;
			flag=0;
			}
			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<<"为作业申请资源失败 "<<endl;
			}
			}
			else{
				cout<<"改作业不存在"<<endl;
			}
		}
	}
}
		
		void finished()
		{
			char name[20];
			int i,p;
			cout<<endl<<"撤销作业"<<endl;
			cout<<"-----------------------------"<<endl;
			cout<<"要撤销作业名";
			cin>>name;
			p=-1;
			for(i=0;i<quantity;i++){
				if(!strcmp(processes[i].name,name)){
					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<quantity-1;i++){
					processes[i]=processes[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<<"撤销作业成功"<<endl;
			}
			else{
				cout<<"撤销失败"<<endl;
			}
		}
		
		void view()
		{
			int i;
			cout<<endl<<"查看资源情况"<<endl;
			cout<<"--------------------------------"<<endl;
			cout<<"银行家所剩余资源(剩余资源/总共资源)"<<endl;

			cout<<"A类资源:"<<banker.remain_a<<"/"<<banker.a;

			cout<<"B类资源:"<<banker.remain_b<<"/"<<banker.b;

			cout<<"C类资源:"<<banker.remain_c<<"/"<<banker.c;

			cout<<endl<<endl<<"作业占用情况"<<endl<<endl;
			if(quantity>0){
				for(i=0;i<quantity;i++){
					cout<<"作业名:"<<processes[i].name<<endl;
					cout<<"A"<<processes[i].a<<"/"<<processes[i].need_a;
					cout<<"B"<<processes[i].b<<"/"<<processes[i].need_b;
					cout<<"C"<<processes[i].c<<"/"<<processes[i].need_c;
					cout<<endl;
				}
			}
			else{
				cout<<"当前没有作业"<<endl;
			}
		}
		
		void main(){
			//系统设置
			system("title C语言关机程序");//设置cmd窗口标题 
			system("mode con cols=66lines=20");//窗口宽度高度 
			system("color 0B"); 
			system("date /T"); 
			system("TIME /T"); 
			int chioce;
			int flag=1;
			initial();
			while(flag){
				cout<<"----------------------------------------------------------------"<<endl;
				cout<<"1.新加作业 2.为作业申请资源 3.撤销作业 4.查看资源情况 0.退出系统"<<endl;
				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<<"选择错误"<<endl<<endl;
				}
			}
		}


// Note:Your choice is C++ IDE
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
const int MAX_P=20;
const int MAXA=10;
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<MAX_P;i++){
		strcpy(processes[i].name,"");
		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<<endl;
	cout<<"新加作业"<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"please input your new task name:";
	cin>>name;
	for(i=0;i<quantity;i++)
	{
		if(!strcmp(processes[i].name,name)){
			flag=1;
			break;
		}
	}
	if(flag){
		cout<<"error,resistent"<<endl;
	}
	else{
		cout<<"need A resource";
		cin>>need_a;
		cout<<"need B resource:";
		cin>>need_b;
		cout<<"need C resource:";
		cin>>need_c;
		t=1;
		cout<<need_a<<banker.remain_a;
		if(need_a>banker.remain_a){
			cout<<"error, need A >banker own"<<endl;
			t=0;
		}
		if(need_b>banker.remain_b){
			cout<<"error, need B >banker own"<<endl;
			t=0;
		}
		if(need_c>banker.remain_c){
			cout<<"error, need C >banker own"<<endl;
			t=0;
		}
		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<<"xin jia zuo ye cheng gong "<<endl;
		}
		else{
			cout<<"task adding fails"<<endl;
		}
	}
}
/* ask for task resource*/
void bid()
{
	char name[20];
	int i,p;
	int a,b,c;
	int flag;
	cout<<endl<<"为作业申请资源"<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"要申请的资源的作业名:";
	cin>>name;
	p=-1;
	for(i=0;i<quantity;i++){
		if(!strcmp(processes[i].name,name)){
			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类资源或者该进程还需数量"<<endl;
			flag=0;
			if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){
			cout<<"错误,所申请B类资源大于银行家所剩余B类资源或者该进程还需数量"<<endl;
			flag=0;
			if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){
			cout<<"错误,所申请C类资源大于银行家所剩余C类资源或者该进程还需数量"<<endl;
			flag=0;
			}
			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<<"为作业申请资源失败 "<<endl;
			}
			}
			else{
				cout<<"改作业不存在"<<endl;
			}
		}
	}
}
		
		void finished()
		{
			char name[20];
			int i,p;
			cout<<endl<<"撤销作业"<<endl;
			cout<<"-----------------------------"<<endl;
			cout<<"要撤销作业名";
			cin>>name;
			p=-1;
			for(i=0;i<quantity;i++){
				if(!strcmp(processes[i].name,name)){
					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<quantity-1;i++){
					processes[i]=processes[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<<"撤销作业成功"<<endl;
			}
			else{
				cout<<"撤销失败"<<endl;
			}
		}
		
		void view()
		{
			int i;
			cout<<endl<<"查看资源情况"<<endl;
			cout<<"--------------------------------"<<endl;
			cout<<"银行家所剩余资源(剩余资源/总共资源)"<<endl;

			cout<<"A类资源:"<<banker.remain_a<<"/"<<banker.a;

			cout<<"B类资源:"<<banker.remain_b<<"/"<<banker.b;

			cout<<"C类资源:"<<banker.remain_c<<"/"<<banker.c;

			cout<<endl<<endl<<"作业占用情况"<<endl<<endl;
			if(quantity>0){
				for(i=0;i<quantity;i++){
					cout<<"作业名:"<<processes[i].name<<endl;
					cout<<"A"<<processes[i].a<<"/"<<processes[i].need_a;
					cout<<"B"<<processes[i].b<<"/"<<processes[i].need_b;
					cout<<"C"<<processes[i].c<<"/"<<processes[i].need_c;
					cout<<endl;
				}
			}
			else{
				cout<<"当前没有作业"<<endl;
			}
		}
		
		void main(){
			//系统设置
			system("title C语言关机程序");//设置cmd窗口标题 
			system("mode con cols=66lines=20");//窗口宽度高度 
			system("color 0B"); 
			system("date /T"); 
			system("TIME /T"); 
			int chioce;
			int flag=1;
			initial();
			while(flag){
				cout<<"----------------------------------------------------------------"<<endl;
				cout<<"1.新加作业 2.为作业申请资源 3.撤销作业 4.查看资源情况 0.退出系统"<<endl;
				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<<"选择错误"<<endl<<endl;
				}
			}
		}