⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 equipmentmanager.c

📁 这是一个操作系统的设备管理试验的源程序
💻 C
字号:
//操作系统上机作业    设备管理
//计算机0601  
#define false 0
#define true  1
#define n 3
#define m 9    
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
struct 
{
	char type[10];
	int count;
	int remain;
	int address;
}equip_type[n];
struct 
{
	int number;
	int status;
	int remain;
	char jobname[10];
	int lnumber;
}equipment[m];
allocate(char *job,char *type,int mm)
{
	int i,t;
	i=0;
	while(i<n&&strcmp(equip_type[i].type,type)!=0)
		i++;
	if(i>=n)
	{
		printf("无该类设备,设备分配请求失败");
		return(false);
	}
	if(equip_type[i].remain<1)
	{
		printf("该类设备数量不足,设备分配请求失败");
		return(false);
	}
	t=equip_type[i].address;
	while(!(equipment[t].status==1&&equipment[t].remain==0))
		t++;
	equip_type[i].remain--;
	equipment[t].remain=1;
	strcpy(equipment[t].jobname,job);
	equipment[t].lnumber=mm;
}
reclaim(char *job,char *type)
{
	int i,t,j,k,nn;
	i=0;
	while(i<n&&strcmp(equip_type[i].type,type)!=0)
		i++;
	if(i>=n)
	{
		printf("无该类设备,设备回收失败!");
	return(false);
    }
	t=equip_type[i].address;
	j=equip_type[i].count;
	k=0;
	nn=t+j;
	for(;t<nn;t++)
		if(strcmp(equipment[t].jobname,job)==0&&equipment[t].remain==1)
	{
		equipment[t].remain=0;
		//增加的部分
        strcpy(equipment[t].jobname,"null");
		equipment[t].lnumber=0;
		k++;
	}
	equip_type[i].remain=equip_type[i].remain+k;
	if(k==0)
		printf("作业没有使用该类设备!");
}
main()
{
	char job[10];
	int i,mm,a;
	char type[10];
	strcpy(equip_type[0].type,"input");
	equip_type[0].count=2;
	equip_type[0].remain=2;
	equip_type[0].address=0;
	strcpy(equip_type[1].type,"printer");
	equip_type[1].count=3;
	equip_type[1].remain=3;
	equip_type[1].address=2;
	strcpy(equip_type[2].type,"disk");
	equip_type[2].count=4;
	equip_type[2].remain=4;
	equip_type[2].address=5;
	for(i=0;i<10;i++)
	{
		equipment[i].number=i;
		equipment[i].status=1;
		equipment[i].remain=0;
	}
	while(1)
	{
		printf("0--退出,1--分配,2--回收,3--显示");
		printf("\n请选择功能项:");
		scanf("%d",&a);
		switch(a)
		{
			case 0:exit(0);
			case 1:printf("请输入作业名,作业所需设备类和设备相对号: ");
			scanf("%s%s%d",job,type,&mm);
			allocate(job,type,mm);
			   break;
			case 2:printf("请输入作业名和作业要归还的设备类型: ");
			scanf("%s%s",job,type);
			reclaim(job,type);
			break;
			case 3: printf("\n输出设备类表:\n");
			printf("设备类型   设备数量   空闲设备数量\n");
			for(i=0;i<n;i++)
			  printf("%8s%9d%8d\n",equip_type[i].type,equip_type[i].count,equip_type[i].remain);
			printf("---------------------------------\n");
			printf("输出设备表:\n");
			printf("绝对号 好/坏 已/未分配 占用作业名 相对号\n");
			for(i=0;i<m;i++)
				printf("%3d%7d%8d%10s%7d\n",equipment[i].number,equipment[i].status,equipment[i].remain,equipment[i].jobname,equipment[i].lnumber);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -