中原工学院信息商务学院 操作系统课程设计报告 do//查找要删除的与输入进程名相同的进程 {cin>>Nam;
for(i=0;i { Avaliable[i]= Avaliable[i]+Allocation[i][m];//将删除的进程已分配的资源存入可 用资源中去 } for(j=i;j {Max[j][m]=Max[j+1][m]; Allocation[j][m]= Allocation[j+1][m]; Need[j][m]= Need[j+1][m];} } M=M-1;showdata();safe(); } void changeresources()//修改资源函数 { cout<<\\cout<<\\cout<<\\cout<<\\cout<<\\cout<<\系统目前可用的资源[Avaliable]:\ for(int i=0;i - 21 - ┏━━━━━━━━━━━━━━━━━━━━━━━┓ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ ┃ 修改资源数量,并检测安全性 ┃ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ ┗━━━━━━━━━━━━━━━━━━━━━━━┛ 中原工学院信息商务学院 操作系统课程设计报告 void addprocess()//添加进程 { int flag=M; M=M+1; cout<<\\cout<<\\cout<<\\cout<<\\cout<<\┗━━━━━━━━━━━━━━━━━━━━━━━┛ \cout<<\请输入该进程的最大需求量[Max]\{cout< for(int k=0;k void version() //显屏函数 { cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\┏━━━━━━━━━━━━━━━━━━━━━━━┓\┃ 欢迎进入银行家算法系统 ┃\┠───────────────────────┨\┃ 1:初始化资源种类和大小、进程,并检测安全性┃\┠───────────────────────┨\┃ 2: 请求分配资源,并检测安全性 ┃\┠───────────────────────┨\┃ 3: 删除资源,并检测安全性 ┃\┠───────────────────────┨\┃ 4:增加资源,并检测安全性 ┃\┠───────────────────────┨\┃ 5: 修改资源,并检测安全性 ┃\┠───────────────────────┨\┃ 6: 增加进程,并检测安全性 ┃\┠───────────────────────┨\┃ 7: 删除进程,并检测安全性 ┃\┠───────────────────────┨\ - 22 - ┏━━━━━━━━━━━━━━━━━━━━━━━┓ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ ┃ 添加进程,并检测安全性 ┃ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ 中原工学院信息商务学院 操作系统课程设计报告 cout<<\┃ 0: 退出系统系统 ┃\cout<<\┗━━━━━━━━━━━━━━━━━━━━━━━┛\cout< void init()//初始化进程,分配资源 并检测安全性 {int i,j,number,m,n,flag;char Name; cout<<\┏━━━━━━━━━━━━━━━━━━━━━━━┓ \cout<<\┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ \cout<<\\cout<<\\cout<<\┗━━━━━━━━━━━━━━━━━━━━━━━┛ \cout<<\请首先输入系统可供资源种类的数量:\cin>>n; N=n; for(i=0;i flag=0; cout<<\请输入各进程已分配的资源量(\矩阵)[Allocation]:\for(i=0;i cin>>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j]; } if(flag) cout<<\已分配的资源大于最大需求量,请重新输入!\\n\} - 23 - ┃ 初始化资源种类和大小、进程 ,并检测安 ┃ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ 中原工学院信息商务学院 操作系统课程设计报告 while(flag); showdata();//显示各种资源 safe();//用银行家算法判定系统是否安全 } char *get_password(const char *prompt) { static char buffer[128]; int i = 0; char letter=NULL; printf( prompt ); // 最多可输入 127 个字符,最后一个留个'\\0' while ((i<127) && (letter!='\\r')) { letter = getch(); // 当前输入的字符为退格'\\b' if ( letter==BACKSPACE) { // buffer 中有字符存在 if(i>0) { // 缓冲区中字符退一个 buffer[--i] = NULL;// 当前光标正等着你输入一个字符,而你却按下了 退格键, 屏幕上字符也应该退一个,这里相当于 putchar( '\\b' ); // 这样就将光标退到了上一个字符的位置, putchar(BACKSPACE); // 这里光标在要删除的字符上面闪烁,输出一个空格就将'*'号换掉了 putchar(' '); // 因为你的空格操作导致光标又跳到了下一个字符位置,所以还需要退 一次,以使光标在正确位置显示 putchar(BACKSPACE); } else { putchar(7);} } else if ( letter != '\\r' ) {buffer[ i++ ] = letter;putchar( '*' );} } buffer[i] = '\\0'; return buffer;// 加上字符串结束标志,在 C++编译器下这上语句 是错的, buffer = NULL; 可以这样处理 } void mima( ) {char *password; cout<<\┏━━━━━━━━━━━━━━━━━━━━━━━┓ - 24 - 中原工学院信息商务学院 操作系统课程设计报告 \cout<<\┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ \ cout<<\┃ 请输入密码,您最多可以输入三次 ┃ \ cout<<\┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ \ cout<<\┗━━━━━━━━━━━━━━━━━━━━━━━┛ \ for(int i=1;i<=3;i++) { cout<<\您第\次\password = get_password( \输入密码:\if((i!=3)&&strcmp( password, { cout< cout<< \您的密码有误,请重新输入密码!\continue; } else if((i==3)&&strcmp( password, \{ cout< {printf( \你的密码正确,欢迎进入银行家算法系 统!\\n\ } } void main()//主{ system(\ mima( );//密SLEEP(); int choice; while(choice) { version(); cout<<\*\cout<<\请选择功能号(0-7):\cin>>choice; system(\switch(choice) { case 1: init();break; case 2: share();break; case 3: delresources();break; - 25 - 函码\);break;}数b\数 函 中原工学院信息商务学院 操作系统课程设计报告 case 4: addresources();break; case 5: changeresources();break; case 6: addprocess();break; case 7: delprocess();break; case 0: cout< cout<<\┏━━━━━━━━━━━━━━━━━━━━━━━┓ \cout<<\\cout<<\\cout<<\\cout<<\\ cout< }}} ┗━━━━━━━━━━━━━━━━━━━━━━━┛ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ ┃ 谢谢使用银行家算法 ┃ ┃☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆┃ 六、 参考资料 计算机操作系统(第二版);汤小丹,梁红冰,哲凤屏,汤子瀛;西 安电子科技大学出版社。 数据结构(c 语言版);严蔚敏,吴伟民;清华大学出版社。 C 程序设计教程;谭浩强;清华大学出版社。 - 26 -