实验六 设备管理

实验六 设备管理

【实验目的】
①理解设备管理的概念和任务。
②掌握独占设备的分配、回收等主要算法的原理并编程实现。

【实验内容】
在Windows系统中,编写程序实现对独占设备的分配与回收的模拟,该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。

【实验步骤】

1.1数据结构

#define NXT 3//假设系统有3类设备
#define MSB 7//假设系统有5个设备
struct {
	char type[10];//设备类名
	int count;//拥有设备数量
	int remain;//现存的可用设备数量
	int address;//该类设备在设备表中的起始地址
} equip_type[NXT]; //设备类表定义,假设系统有n个设备类型
struct {
	int number;//设备绝对号
	bool status;//设备状态可否使用
	bool IsRemain;//设备是否已分配
	char jobname[10];//占有设备的作业名称
	int lnumber;//设备相对号
} equipment[MSB]; //设备表定义,假设系统有m个设备

1.2程序流程

在这里插入图片描述

1.3试验代码

#include<stdio.h>
#include<string.h>
#define NXT 3//假设系统有3类设备
#define MSB 7//假设系统有5个设备
struct {
	char type[10];//设备类名
	int count;//拥有设备数量
	int remain;//现存的可用设备数量
	int address;//该类设备在设备表中的起始地址
} equip_type[NXT]; //设备类表定义,假设系统有n个设备类型

struct {
	int number;//设备绝对号
	bool status;//设备状态可否使用
	bool IsRemain;//设备是否已分配
	char jobname[10];//占有设备的作业名称
	int lnumber;//设备相对号
} equipment[MSB]; //设备表定义,假设系统有m个设备

void zyy()
{
		printf("\n***********|______________________________|***********");
		printf("\n***********|        实验六  设备管理      |***********");
		printf("\n***********|         创建人:夕草         |***********");
		printf("\n***********|         学号:210344444444  |***********");
		printf("\n***********|         时间:2021.12.4       |***********");
		printf("\n***********|______________________________|***********\n");
} 
//*********************************函数说明************************************
//设备分配函数
//*****************************************************************************
int allocate(char l[],char type[],int mm)//设备分配函数
{
	int i=0,t; /* 查询该类设备 */ 
	while(i<NXT&&strcmp(equip_type[i].type,type)!=0) 	i++; 
	if(i>=NXT) /* 没有找到该类设备 */ 
	{ 
		printf(" 无该类设备 ,设备分配失败 !"); 
		return(false);
	} 
	else {
		printf(" 存在该类设备! "); 
	}
	if(equip_type[i].remain<1) /* 所需设备现存可用台数不足 */ 
	{ 
		printf(" 该类设备不足,分配失败 !"); 
		return(false); 
	}	 
	else {
		printf(" 该类设备充足! "); 
	} 
	t=equip_type[i].address; /* 取出该类设备在设备表中的起始地址 */ 
	while(!(equipment[t].status==1 && equipment[t].IsRemain==0)) 
	t++; /* 填写作业名、 相对号, 状态改为已分配*/ 
	equip_type[i].remain--; 
	equipment[t].IsRemain = 1; 
	strcpy(equipment[t].jobname,l); 
	equipment[t].lnumber = mm; 
	printf(" 分配成功! "); 
}

//*****************函数说明************************************
//设备回收函数
//*****************************************************************************
int reclaim(char l[],char type[])//设备回收函数
{
	int i=0,t,j,k,z; 
	while(i<NXT&&strcmp(equip_type[i].type,type)!=0)	i++; 
	if(i>=NXT) /* 没有找到该类设备*/ 
	{ 
		printf(" 无该类设备 ,设备回收失败 !"); 
		return(false); 
	} 
	else	   printf(" 存在该类设备! "); 
	t = equip_type[i].address; /* 取出该类设备在设备表中的起始地址 */ 
	j = equip_type[i].count; /* 取出该类设备的数量 */ 
	k = 0; 
	z = t+j; 
	for(; t<z; t++) 
	if(strcmp(equipment[t].jobname,l)==0&&equipment[t].IsRemain == true) 
	{ 
		equipment[t].IsRemain = false; 
		k++; 
	} 
	equip_type[i].remain = equip_type[i].remain+k; 
	if(k==0) 
	{
		printf(" 工作台尚未使用这种设备类别! \n");
	}
		
	printf(" 回收成功! \n");
}

int main() {
	zyy(); 
	char job[10];
	int i, mm, choose;
	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, "camera");
	equip_type[2].count = 4;
	equip_type[2].remain = 4;
	equip_type[2].address = 5;
	for (i = 0; i < 7; i++) 
	{
		equipment[i].number = i;
		equipment[i].status = 1;
		equipment[i].IsRemain = false;
	}
	while (1){
		printf("\n0---退出,1---分配,2---回收,3---显示");
		printf("\n请选择功能项:");
		scanf("%d", &choose);
		switch (choose) {
			case 0:
				return 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");
				printf("-----------------------------------------------------------------\n");
				printf("***** 设备类型\t 拥有设备数量\t可分配设备数量\t起始地址    *****\n");
				for (i = 0; i < NXT; i++)
				{
					printf("*****%10s\t%10d\t%10d   %10d\t    *****\n", equip_type[i].type, equip_type[i].count,equip_type[i].remain,equip_type[i].address);
				}
					
				printf("----------------------------------------------------------------- \n");
				printf("输出设备表:\n");
				printf("-------------------------------------------------------------------------------------\n");
		        printf("*****  绝对号\t  设备状态\t  是否分配\t    占用作业名\t\t相对号  *****\n");
				for (i = 0; i < MSB; i++) {
				printf("*****%3d\t%7d\t  \t%8d\t%10s\t\t %d\t*****\n", equipment[i].number, equipment[i].status,
				       equipment[i].IsRemain, equipment[i].jobname, equipment[i].lnumber);//
				}
				printf("-------------------------------------------------------------------------------------\n");
				break;
			default:
				return 0;
		}
	}
}

1.4试验结果
分配功能与查询
分配功能与查询

回收功能回收功能

【实验体会总结】
本次实验拟在模仿设备管理,各i/o设备在操作系统中如何实现调用与分配,此次实验让我更深层测的明白的此操作的过程。关于代码方面这次使用的数据结构都是使用的数组,也算是加强了对数组的认识。

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、项目概述 实验设备管理系统是为实验室管理人员提供便利的设备管理服务的一款系统。该系统可以对实验室内的设备进行登记、查询、借用、归还等操作,同时还可以对实验设备进行分类、统计等管理。 二、系统功能 1.设备管理:对实验设备进行登记、查询、借用、归还等操作。 2.分类管理:对实验设备进行分类管理,方便查找和统计。 3.统计分析:对实验设备进行统计分析,提供报表输出功能,方便管理人员进行决策。 4.权限管理:根据不同用户的权限,设置不同的操作权限,保证系统的安全性。 三、系统设计 1.系统架构 实验设备管理系统采用C/S架构,即客户端/服务器架构。客户端采用浏览器作为界面,通过HTTP协议与服务器进行通信,服务器采用Tomcat作为Web容器,通过JDBC连接数据库进行数据存储和处理。 2.数据库设计 系统采用关系型数据库MySQL进行数据存储,数据库设计如下: 设备表(device): 设备编号(device_id) 主键 设备名称(device_name) 设备型号(device_model) 设备类别(device_type) 设备状态(device_status) 设备描述(device_description) 设备借用记录表(borrow_record): 记录编号(record_id) 主键 设备编号(device_id) 借用人员编号(borrower_id) 借用时间(borrow_time) 归还时间(return_time) 3.系统模块设计 (1) 登录模块 用户通过输入用户名和密码登录系统,系统对用户身份进行验证,验证通过后进入系统主界面。 (2) 设备管理模块 该模块包括设备登记、设备查询、设备借用、设备归还等功能。用户可以通过该模块对实验室内的设备进行管理。 (3) 分类管理模块 该模块对实验设备进行分类管理,包括对设备类别、设备型号等进行分类管理。 (4) 统计分析模块 该模块对实验设备进行统计分析,提供报表输出功能,方便管理人员进行决策。 (5) 权限管理模块 该模块根据不同用户的权限,设置不同的操作权限,保证系统的安全性。 四、系统实现 系统采用Java语言进行开发,采用MVC设计模式,使用Spring MVC框架进行开发。前端界面采用HTML、CSS、JavaScript等技术,使用Bootstrap框架进行开发。数据库采用MySQL进行存储和管理。系统部署在Tomcat服务器上。 五、系统测试 系统测试主要包括功能测试、性能测试、安全测试等方面。对于系统的各个模块进行全面测试,确保系统的有效性、稳定性和安全性。同时对系统进行压力测试,测试系统的负载能力和性能表现。 六、总结 实验设备管理系统是一款为实验室管理人员提供便利的设备管理服务的系统。通过对系统的设计和实现,可以提高实验设备管理的效率和准确性,实现对实验设备的全面管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值