shebeiguanli.cpp
来自「设备管理是模拟系统的设备分配问题」· C++ 代码 · 共 593 行
CPP
593 行
#include<iostream.h>
#include<stdlib.h>
struct sdt
{
char name;
char type;
struct dct *dct;
struct sdt *next;
};
sdt *sdthead=(struct sdt *)malloc(sizeof(sdt));
sdt *sdtr;
struct dct
{
char name;
char type;
int busy;
struct coct *coct;
struct dctblock *dctblock;
struct dct *next;
};
dct *dcthead=(struct dct *)malloc(sizeof(dct));
dct *dctr;
struct coct
{
char name;
int busy;
struct chct *chct;
struct coctblock *coctblock;
struct coct *next;
};
coct *cocthead=(struct coct *)malloc(sizeof(coct));
coct *coctr;
struct chct
{
char name;
int busy;
struct chctblock *chctblock;
struct chct *next;
};
chct *chcthead=(struct chct *)malloc(sizeof(chct));
struct dctblock
{char name;
char jm;
struct dctblock *next;
};
dctblock *dbhead=NULL;
dctblock *dbr;
struct coctblock
{char name;
char jm;
struct coctblock *next;
};
coctblock *cobhead=NULL;
coctblock *cobr;
struct chctblock
{char name;
char jm;
struct chctblock *next;
};
chctblock *chbhead=NULL;
chctblock *chbr;
void jiansdt(int ss) //////建立SDT表
{
int ssgg=ss;
char ming,lei;
sdt *s;
sdtr=sdthead;
while(ssgg>0)
{
s=(struct sdt *)malloc(sizeof(sdt));
cout<<"请输入设备名"<<endl;
cin>>ming;
s->name=ming;
cout<<"请输入设备类型"<<endl;
cin>>lei;
s->type=lei;
sdtr->next=s;
sdtr=s;
ssgg--;
}
sdtr->next=NULL;
}
void jiandct(int ss) //////建立DCT表
{
int ssgg=ss;
char ming,lei;
dct *s;
dctr=dcthead;
while(ssgg>0)
{
s=(struct dct *)malloc(sizeof(dct));
cout<<"请输入设备名"<<endl;
cin>>ming;
s->name=ming;
cout<<"请输入设备类型"<<endl;
cin>>lei;
s->type=lei;
s->busy=0;
dctr->next=s;
dctr=s;
ssgg--;
}
dctr->next=NULL;
}
void jiancoct(int ss) ///////建立COCT表
{
int ssgg=ss;
char ming;
coct *s;
coctr=cocthead;
while(ssgg>0)
{
s=(struct coct *)malloc(sizeof(coct));
cout<<"请输入控制器名"<<endl;
cin>>ming;
s->name=ming;
s->busy=0;
coctr->next=s;
coctr=s;
ssgg--;
}
coctr->next=NULL;
}
void jianchct(int ss) ///////建立CHCT表
{
int ssgg=ss;
char ming;
chct *s,*chctr;
chctr=chcthead;
while(ssgg>0)
{
s=(struct chct *)malloc(sizeof(chct));
cout<<"请输入通道名"<<endl;
cin>>ming;
s->name=ming;
s->busy=0;
chctr->next=s;
chctr=s;
ssgg--;
}
chctr->next=NULL;
}
void duiying() //////////对应三个表之间的关系
{
char m1;
sdt *chasdt=sdthead->next;
dct *chadct=dcthead->next;
coct *chacoct=cocthead->next;
chct *chachct=chcthead->next;
cout<<"下面开始对应连接设备:"<<endl;
while(chasdt!=NULL)
{
cout<<"请为设备"<<chasdt->name<<"指定dct"<<endl;
while(chadct!=NULL)
{if(chadct->name!=chasdt->name)chadct=chadct->next;
else if(chadct->name==chasdt->name)
{
chasdt->dct=chadct;
break;
}
}
chasdt=chasdt->next;
}
chadct=dcthead->next;
while(chadct!=NULL)
{
cout<<"请为设备"<<chadct->name<<"指定coct"<<endl;
cout<<"现有coct:"<<endl;
chacoct=cocthead->next;
while(chacoct!=NULL)
{
cout<<chacoct->name<<" ";
chacoct=chacoct->next;
}
chacoct=cocthead->next;
cout<<"请输入你想指定的COCT名:"<<endl;
cin>>m1;
while(chacoct!=NULL)
{if(chacoct->name!=m1)chacoct=chacoct->next;
else if(chacoct->name==m1)
{
chadct->coct=chacoct;
break;
}
}
chadct=chadct->next;
}
chacoct=cocthead->next;
while(chacoct!=NULL)
{
cout<<"请为通道"<<chacoct->name<<"指定chct"<<endl;
cout<<"现有chct:"<<endl;
chachct=chcthead->next;
while(chachct!=NULL)
{
cout<<chachct->name<<" ";
chachct=chachct->next;
}
chachct=chcthead->next;
cout<<"请输入你想指定的CHCT名:"<<endl;
cin>>m1;
while(chachct!=NULL)
{if(chachct->name!=m1)chachct=chachct->next;
else if(chachct->name==m1)
{
chacoct->chct=chachct;
break;
}
}
chacoct=chacoct->next;
}
}
void xianshi() /////////显示状态
{
sdt *kan=sdthead->next;
chctblock *kk1=chbhead;
coctblock *kk2=cobhead;
dctblock *kk3=dbhead;
while(kan!=NULL)
{
cout<<"设备:"<<kan->name;
if(kan->dct!=NULL)cout<<"所在DCT"<<kan->dct->name<<"类型"<<kan->dct->type<<"状态"<<kan->dct->busy;
if(kan->dct->coct!=NULL)cout<<"所连接的COCT"<<kan->dct->coct->name<<"状态"<<kan->dct->coct->busy;
if(kan->dct->coct->chct!=NULL)cout<<"所连接的CHCT"<<kan->dct->coct->chct->name<<"状态"<<kan->dct->coct->chct->busy<<endl;
kan=kan->next;
}
while(kk1!=NULL)
{cout<<"进程"<<kk1->jm<<"由于没有通道而被阻塞!"<<endl;
kk1=kk1->next;
}
while(kk2!=NULL)
{cout<<"进程"<<kk2->jm<<"由于没有控制器而被阻塞!"<<endl;
kk2=kk2->next;
}
while(kk3!=NULL)
{cout<<"进程"<<kk3->jm<<"由于没有设备而被阻塞!"<<endl;
kk3=kk3->next;
}
}
void chushihua() //////初始化函数
{ int sg,kg,tg;
cout<<"下面将开始初始化设备:"<<endl;
cout<<"请输入设备的个数:"<<endl;
cin>>sg;
jiansdt(sg);
cout<<"sdt建立完毕"<<endl;
jiandct(sg);
cout<<"dct建立完毕"<<endl;
cout<<"请输入控制器的个数:"<<endl;
cin>>kg;
jiancoct(kg);
cout<<"coct建立完毕"<<endl;
cout<<"请输入通道的个数:"<<endl;
cin>>tg;
jianchct(tg);
cout<<"chct建立完毕"<<endl;
cout<<"现在将建立它们之间的具体对应关系:"<<endl;
duiying();
cout<<"恭喜你初始化设备完成结果如下:"<<endl;
xianshi();
}
void tianjia() /////添加设备函数
{
sdt *jiasdt;
dct *jiadct;
coct *jiacoct;
char m2,m3,m4,m5,l2,pd;
jiasdt=(struct sdt *)malloc(sizeof(sdt));
jiadct=(struct dct *)malloc(sizeof(dct));
cout<<"下面将要添加新的设备!!!"<<endl;
cout<<"请输入你要添加的设备的名称"<<endl;
cin>>m2;
jiasdt->name=m2;
sdtr->next=jiasdt;
sdtr=jiasdt;
sdtr->next=NULL;
jiadct->name=m2;
dctr->next=jiadct;
dctr=jiadct;
dctr->next=NULL;
cout<<"请输入新增设备的类型"<<endl;
cin>>l2;
jiasdt->type=l2;
jiadct->type=l2;
jiasdt->dct=jiadct;
jiadct->busy=0;
cout<<"请问是否要建立新的COCT"<<endl;
cout<<"若想新建请按Y;不新建请按N"<<endl;
cin>>pd;
if(pd=='n'||pd=='N')
{
cout<<"请从现有的COCT中选择你要连接的:"<<endl;
coct *cha=cocthead->next;
while(cha!=NULL)
{cout<<cha->name<<" ";
cha=cha->next;
}
cout<<"请选择"<<endl;
cin>>m3;
cha=cocthead->next;
while(cha!=NULL)
{if(cha->name!=m3)cha=cha->next;
else if(cha->name==m3)break;
}
jiadct->coct=cha;
}
else if(pd=='y'||pd=='Y')
{
jiacoct=(struct coct *)malloc(sizeof(coct));
coctr->next=jiacoct;
coctr=jiacoct;
coctr->next=NULL;
cout<<"请输入新建的COCT的名字"<<endl;
cin>>m4;
jiacoct->name=m4;
jiacoct->busy=0;
jiadct->coct=jiacoct;
cout<<"请为新建的COCT选择连接的通道"<<endl;
chct *cha=chcthead->next;
while(cha!=NULL)
{cout<<cha->name<<" ";
cha=cha->next;
}
cout<<"请选择"<<endl;
cin>>m5;
cha=chcthead->next;
while(cha!=NULL)
{if(cha->name!=m5)cha=cha->next;
else if(cha->name==m5)break;
}
jiacoct->chct=cha;
}
}
void shenqing() ///////申请设备函数
{ dct *cha1=dcthead->next;
dct *zhao1=dcthead->next;
char mm1;
char jj1;
cout<<"下面即将开始设备申请:"<<endl;
cout<<"现有设备如下:"<<endl;
while(cha1!=NULL)
{cout<<cha1->name<<" ";
cha1=cha1->next;
}
cout<<"请输入你想申请的设备名:"<<endl;
cin>>mm1;
cout<<"请输入进程编号:"<<endl;
cin>>jj1;
while(zhao1!=NULL)
{if(zhao1->name!=mm1)zhao1=zhao1->next;
else if(zhao1->name==mm1)break;
}
if(zhao1->busy==0)
{if(zhao1->coct->busy==0)
{if(zhao1->coct->chct->busy==0)
{cout<<"进程编号"<<jj1<<"该设备成功申请!!!"<<endl;
zhao1->busy=1;
zhao1->coct->busy=1;
zhao1->coct->chct->busy=1;
zhao1->coct->chct->chctblock=NULL;
zhao1->dctblock=NULL;
zhao1->coct->coctblock=NULL;
}
else if(zhao1->coct->chct->busy==1)
{
cout<<"该设备所用的通道被占用"<<endl;
zhao1->busy=1;
zhao1->coct->busy=1;
chctblock *ss;
ss=(struct chctblock *)malloc(sizeof(chctblock));
ss->name=mm1;
ss->jm=jj1;
ss->next=chbhead;
chbhead=ss;
zhao1->coct->chct->chctblock=ss;
zhao1->dctblock=NULL;
zhao1->coct->coctblock=NULL;
}
}
else if(zhao1->coct->busy==1)
{
cout<<"该设备所连的控制器被占用!!"<<endl;
zhao1->busy=1;
coctblock *ss;
ss=(struct coctblock *)malloc(sizeof(coctblock));
ss->name=mm1;
ss->jm=jj1;
ss->next=cobhead;
cobhead=ss;
zhao1->coct->coctblock=ss;
zhao1->dctblock=NULL;
}
}
else if(zhao1->busy==1)
{cout<<"该设备被占用:"<<endl;
dctblock *ss;
ss=(struct dctblock *)malloc(sizeof(dctblock));
ss->name=mm1;
ss->jm=jj1;
ss->next=dbhead;
dbhead=ss;
zhao1->dctblock=ss;
}
}
void help() //////帮助函数
{
cout<<"欢迎使用该设备管理演示系统!!!"<<endl;
cout<<"初始化设备请按:C"<<endl;
cout<<"添加新设备请按:A"<<endl;
cout<<"删除设备请按:D"<<endl;
cout<<"申请设备请按:S"<<endl;
cout<<"释放设备请按:H"<<endl;
cout<<"察看状态请按:K"<<endl;
cout<<"察看帮助请按:B"<<endl;
cout<<"退出程序请按:Q"<<endl;
}
void shanchu() //////删除函数
{
sdt *sz1=sdthead->next;
sdt *sc1=sdthead->next;
sdt *sq1=sdthead->next;
dct *sz2=dcthead->next;
dct *sc2=dcthead->next;
dct *sq2=dcthead->next;
char sm;
cout<<"下面即将开始删除设备!!!"<<endl;
cout<<"现有设备如下:"<<endl;
while(sz1!=NULL)
{cout<<sz1->name<<" ";
sz1=sz1->next;
}
cout<<"请输入你想删除的设备名:"<<endl;
cin>>sm;
while(sc1!=NULL)
{if(sc1->name!=sm)sc1=sc1->next;
else if(sc1->name==sm)break;
}
while(sc2!=NULL)
{if(sc2->name!=sm)sc2=sc2->next;
else if(sc2->name==sm)break;
}
if(sc2->busy==1)cout<<"抱歉,该设备正被某些程序所用,无法删除!"<<endl;
else if(sc2->busy==0)
{if(sc2==dcthead->next)
{dcthead->next=sc2->next;
free(sc2);
sdthead->next=sc1->next;
free(sc1);
cout<<"设备"<<sm<<"已经删除!"<<endl;
}
else
{
while(sq1!=NULL)
{if(sq1->next->name!=sm)sq1=sq1->next;
else if(sq1->next->name==sm)break;
}
while(sq2!=NULL)
{if(sq2->next->name!=sm)sq2=sq2->next;
else if(sq2->next->name==sm)break;
}
sq1->next=sc1->next;
free(sc1);
sq2->next=sc2->next;
free(sc2);
cout<<"设备"<<sm<<"已经删除!"<<endl;
}
}
}
void huishou()///// ///////设备回收释放
{
char hsm;
dct *zsy=dcthead->next;
dct *csy=dcthead->next;
cout<<"下面即将开始回收设备!!!"<<endl;
cout<<"正被使用的设备如下:"<<endl;
while(zsy!=NULL)
{if(zsy->busy==1)cout<<zsy->name<<" ";
zsy=zsy->next;
}
cout<<endl;
cout<<"请输入你想要回收的设备名:"<<endl;
cin>>hsm;
while(csy!=NULL)
{if(csy->name!=hsm)csy=csy->next;
else if(csy->name==hsm)break;
}
if(csy->coct->chct->chctblock==NULL)csy->coct->chct->busy=0;
else if(csy->coct->chct->chctblock!=NULL)
{
cout<<"进程"<<csy->coct->chct->chctblock->jm<<"申请的设备"<<csy->coct->chct->chctblock->name<<"成功"<<endl;
chbhead=chbhead->next;
csy->coct->chct->chctblock=chbhead;//
}
if(csy->coct->coctblock==NULL)csy->coct->busy=0;
else if(csy->coct->coctblock!=NULL&&csy->coct->chct->busy==0)
{
cout<<"进程"<<csy->coct->coctblock->jm<<"申请的设备"<<csy->coct->coctblock->name<<"成功"<<endl;
cobhead=cobhead->next;
csy->coct->coctblock=cobhead;//
csy->coct->chct->busy=1;
}
else if(csy->coct->coctblock!=NULL&&csy->coct->chct->busy==1)
{
chctblock *ss=(struct chctblock *)malloc(sizeof(chctblock));
ss->jm=csy->coct->coctblock->jm;
ss->name=csy->coct->coctblock->name;
ss->next=chbhead;
chbhead=ss;
csy->coct->chct->chctblock=chbhead;
cobhead=cobhead->next;
csy->coct->coctblock=cobhead;//
}
if(csy->dctblock==NULL)csy->busy=0;
else if(csy->dctblock!=NULL&&csy->coct->busy==0)
{if(csy->coct->chct->busy==0)
{
cout<<"进程"<<csy->dctblock->jm<<"申请的设备"<<csy->dctblock->name<<"成功"<<endl;
dbhead=dbhead->next;
csy->dctblock=dbhead;//
}
else if(csy->coct->chct->busy==1)
{
csy->coct->busy=1;
chctblock *ss=(struct chctblock *)malloc(sizeof(chctblock));
ss->jm=csy->dctblock->jm;
ss->name=csy->dctblock->name;
ss->next=chbhead;
chbhead=ss;
csy->coct->chct->chctblock=chbhead;
dbhead=dbhead->next;
csy->dctblock=dbhead;//
}
}
else if(csy->dctblock!=NULL&&csy->coct->busy==1)
{
coctblock *ss=(struct coctblock *)malloc(sizeof(coctblock));
ss->jm=csy->dctblock->jm;
ss->name=csy->dctblock->name;
ss->next=cobhead;
cobhead=ss;
dbhead=dbhead->next;
csy->coct->coctblock=cobhead;
csy->dctblock=dbhead;//
}
}
void main() //////主函数
{ char a;
help();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
while(a!='q'||a!='Q')
{
if(a=='c'||a=='C')
{
chushihua();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
else if(a=='a'||a=='A')
{
tianjia();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
else if(a=='d'||a=='D')
{ shanchu();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
else if(a=='S'||a=='s')
{ shenqing();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
else if(a=='h'||a=='H')
{ huishou();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
else if(a=='k'||a=='K')
{
xianshi();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
else if(a=='b'||a=='B')
{
help();
cout<<"请选择你要的命令:"<<endl;
cin>>a;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?