`
hunix
  • 浏览: 21789 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

银行家算法源码

阅读更多
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<iomanip>
#include<conio.h>

using namespace std;

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<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<<"请输入新加作业名:";
cin>>name;

for(i=0;i<quantity;i++){
if(!strcmp(processes[i].name,name)){
flag=1;
break;
}
}

if(flag){
cout<<"错误,作业已存在"<<endl;
}
else{
cout<<"本作业所需A类资源:";
cin>>need_a;
cout<<"本作业所需B类资源:";
cin>>need_b;
cout<<"本作业所需C类资源:";
cin>>need_c;

t=1;
cout<<need_a<<banker.remain_a;
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){
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<<"新加作业成功"<<endl;
}
else{
cout<<"新加作业失败"<<endl;
}
}
}

//为作业申请资源
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;
}
}
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+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;

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 version()
{
cout<<endl<<endl;

cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃        银 行 家 算 法         ┃"<<endl;
cout<<" ┠———————————————————————┨"<<endl;
cout<<" ┃   (c)All Right Reserved Neo       ┃"<<endl;
cout<<" ┃      sony006@163.com          ┃"<<endl;
cout<<" ┃     version 2004 build 1122      ┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<endl<<endl;
}

int main(void)
{
int chioce;
int flag=1;


initial();

version();

while(flag){
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"1.新加作业 2.为作业申请资源 3.撤消作业"<<endl;
cout<<"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;
}
}
return 0;
分享到:
评论

相关推荐

    操作系统 课程设计 C++ 银行家算法 源代码

    操作系统 课程设计 C++ 银行家算法 源代码,写实验报告必备良品,代码无错,直接运行VC

    操作系统银行家算法源码

    广工,操作系统实验,银行家算法,源码 2 实验要求 1. 假定系统有3类资源A(10个)、B(15个)、C(12个),系有5个进程并发执行,进程调度采用时间片轮转调度算法。 2. 每个进程由一个进程控制块( PCB)表示,进程...

    银行家算法 详细java源代码

    这是关于操作系统的银行家算法的一个java程序

    银行家算法源码.txt

    银行家算法源码,C++

    银行家算法 安全性算法 C++源代码

    银行家算法 安全性算法 C++ 源代码 操作系统实验

    基于C语言实现银行家算法源码.zip

    银行家算法基于C语言实现银行家算法源码.zip

    银行家算法 含(源代码&执行文件&实验报告)

    在提供的压缩包中,`银行家算法.cpp`应是C++语言实现的源代码,它可能包含了上述算法的逻辑。`银行家算法.doc`可能是实验报告,详细解释了算法的运行过程、结果分析以及可能遇到的问题。而`银行家算法.exe`则是编译...

    银行家算法源码(C)(C++)

    在`银行家算法源码(C)(C++).doc`文档中,可能包含了算法的详细描述,设计思路,以及源码的逐行注释,帮助理解每一步操作的意义。 总结来说,银行家算法通过预先规划和动态调整,有效地防止了系统死锁的发生。通过...

    模拟银行家算法 源代码

    **模拟银行家算法详解** 模拟银行家算法是操作系统领域中一种经典的资源分配策略,由艾兹格·迪杰斯特拉提出,主要用于预防死锁。它通过预分配资源并进行安全性检查,确保系统不会进入无法恢复的死锁状态。在银行家...

    银行家算法C语言源代码

    本文将深入探讨银行家算法的基本原理,并结合C语言源代码,解析其在实际操作中的应用。 银行家算法的核心思想是预防性策略,它通过预先分析系统资源的动态分配,以确保系统在任何时候都能满足所有进程的安全需求。...

    基于java实现银行家算法的源码资料.zip

    银行家算法基于java实现银行家算法的源码资料.zip银行家算法基于java实现银行家算法的源码资料.zip银行家算法基于java实现银行家算法的源码资料.zip银行家算法基于java实现银行家算法的源码资料.zip银行家算法基于...

    操作系统银行家算法源代码.doc

    本文将深入探讨银行家算法的基本原理,并结合给出的Java源代码进行解析。 **一、银行家算法原理** 在银行家算法中,系统有多个进程和多种资源。每个进程对每种资源都有一个最大需求量(Max),表示该进程可能需要...

    java实现银行家算法(GUI界面)A+报告

    1. 主要函数的核心代码:银行家算法的主要函数包括客户申请贷款、银行家分配贷款、客户使用贷款、银行家回收贷款等函数。 2. 各模块间的调用关系:银行家算法的各模块之间需要调用,以便实现银行家算法的功能。 四...

    操作系统银行家算法 实验报告+源代码

    操作系统中的银行家算法是一种著名的资源分配策略,用于避免系统的死锁状态。该算法由艾兹格·迪杰斯特拉在1965年提出,旨在确保系统的安全性,即确保系统能够满足所有进程的需求,而不会陷入无法继续执行的状态。在...

    银行家算法c++源代码

    银行家算法c++源代码

    银行家算法C++实现(源代码)

    银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行...

    银行家算法源程序(包含C语言+C++两种代码)

    银行家算法是操作系统中一种经典的资源分配策略,用于预防死锁的发生。该算法由艾兹格·迪杰斯特拉在1965年提出,它的核心思想是在系统中分配资源时进行安全性检查,确保系统不会进入无法恢复的死锁状态。下面我们将...

    操作系统银行家算法 js网页实现

    操作系统中的银行家算法是一种著名的资源分配策略,用于...在压缩包中的"bank"文件可能是实现银行家算法的JS源代码文件,打开后可以查看具体的实现细节和注释,这对于深入理解和实践操作系统中的银行家算法非常有帮助。

    银行家算法C++源代码

    银行家算法是操作系统中一种著名的资源分配策略,用于预防死锁的发生。它的核心思想是预先分配一部分资源,然后在运行过程中动态地分配剩余资源,确保系统不会进入无法恢复的死锁状态。本项目提供了银行家算法的C++...

Global site tag (gtag.js) - Google Analytics