📄 2.cpp
字号:
#include <iostream.h>
#include "stdlib.h"
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
typedef struct
{
linklist *front,*rear;
}linkqueue;
linkqueue *a;
linklist *b,*c;
int count=10;
int f=0;
void show1()
{
cout<<" *********************"<<endl;
cout<<" 进 程 管 理 系 统 "<<endl;
cout<<" ********************* --20064486--张旭--"<<endl;
}
void show2()
{
cout<<" ----------------------------------------------------------------"<<endl;
cout<<" ★ 您可以使用的命令有: ★"<<endl;
cout<<" ★ ----------------------- ★"<<endl;
cout<<" ★ c:创建进程 b:阻塞进程 ★"<<endl;
cout<<" ★ t:时间片到 w:唤醒进程 ★"<<endl;
cout<<" ★ e:结束进程 s:显示进程 ★"<<endl;
cout<<" ★ h:显示命令表 q:退出系统 ★"<<endl;
cout<<" ★ ★"<<endl;
cout<<" ----------------------------------------------------------------"<<endl;
}
void progress()
{
if(c->next!=NULL)
{
if(b->next==NULL)
{
if(a->front->next==NULL)
{
cout<<endl;
cout<<"已创建的进程已经全部进入阻塞态,系统处于死机状态!"<<endl;
cout<<endl;
cout<<"请重新创建进程或唤醒进程!"<<endl;
}
else if(a->front->next==a->rear)
{
a->rear=a->front;
b->next=a->front->next;
a->front->next=a->front->next->next;
b->next->next=NULL;
}
else
{
b->next=a->front->next;
a->front->next=a->front->next->next;
b->next->next=NULL;
}
}
}
else
{
if(b->next==NULL)
{
if(a->front==a->rear)
{
cout<<endl;
cout<<"目前系统中已无进程!"<<endl;
}
else if(a->front->next==a->rear)
{
a->rear=a->front;
b->next=a->front->next;
a->front->next=a->front->next->next;
b->next->next=NULL;
}
else
{
b->next=a->front->next;
a->front->next=a->front->next->next;
b->next->next=NULL;
}
}
}
}
void creat()
{
linklist *p;
char i;
if(count==0)//查看是否有空白的pcb
{
cout<<"已经没有空间了,请输入其它命令,创建失败!"<<endl;
}
else
{
cout<<"请输入要创建进程的名称:";
l1: cin>>i;
p=a->front->next;
while(p!=NULL) //查看要创建的进程是否已经存在 ,1在就绪态队列中找。
{
if(p->data==i)
{
cout<<"您要创建的进程已存在!请重新输入!"<<endl;
goto l1;
}
p=p->next;
}
p=b->next;
while(p!=NULL)//2 在执行态队列中查找。
{
if(p->data==i)
{
cout<<"您要创建的进程已存在!请重新输入!"<<endl;
goto l1;
}
p=p->next;
}
p=c->next;
while(p!=NULL) //3 在阻塞态队列中查找。
{
if(p->data==i)
{
cout<<"您要创建的进程已存在!请重新输入!"<<endl;
goto l1;
}
p=p->next;
}
a->rear->next=(linklist *)malloc(sizeof(linklist));//尾插法入队
a->rear=a->rear->next;
a->rear->data=i;
a->rear->next=NULL;
cout<<"进程创建成功!"<<endl;
count--;
progress();//查看执行队列是否为空,为空则调入新进程
}
}
void show(linklist *head)//显示链表中的进程
{
linklist *p;
p=head;
while(p!=NULL)
{
cout<<" "<<p->data;
p=p->next;
}
cout<<endl;
}
void timeup()//进程时间片到
{
linklist *p;
if(b->next==NULL)
{
cout<<"没有处于执行态的进程,无法执行时间片到命令,请输入其他命令!"<<endl;
}
else
{
p=b->next;
b->next=NULL;
a->rear->next=p;
a->rear=p;
cout<<p->data<<"时间片到"<<endl;
progress();
}
}
void brock()
{
if(b->next==NULL)
{
cout<<"没有处于执行态的进程,无法阻塞进程,请输入其他命令!"<<endl;
}
else
{
linklist *p;
p=b->next;
b->next=NULL;
p->next=c->next;
c->next=p;
cout<<p->data<<"进程已经被阻塞"<<endl;
}
progress();
}
void wakeup()
{
linklist *p,*p1;
char i;
int flag=0;
if(c->next==NULL)
{
cout<<"暂无阻塞态进程,无法唤醒进程,请输入其他命令!"<<endl;
}
else
{
cout<<"以下为所有处于阻塞态的进程:"<<endl;
show(c->next);
cout<<"请选择要唤醒的进程名称:";
l2: cin>>i;
p1=c;
p=c->next;
while(p!=NULL)
{
if(p->data==i)
{
flag=1;
p1->next=p->next;
a->rear->next=p;//尾插法入队
a->rear=p;
p->next=NULL;
cout<<endl;
cout<<p->data<<"进程已经被唤醒!"<<endl;
p=NULL;
}
else
{
p1=p;
p=p->next;
}
}
if(flag!=1)
{
cout<<"您要唤醒的进程不存在!请重新选择!"<<endl;
goto l2;
}
}
progress();
}
void end()
{
if(b->next==NULL)
{
cout<<"没有处于执行态的进程,无法结束进程,请输入其他命令!"<<endl;
}
else
{
cout<<b->next->data<<"已经被终止"<<endl;
b->next=NULL;
}
progress();
}
void main()
{
a=(linkqueue *)malloc(sizeof(linkqueue));
a->rear=(linklist *)malloc(sizeof(linklist));
a->rear->data=NULL;
a->front=a->rear;
a->rear->next=NULL;
b=(linklist *)malloc(sizeof(linklist));
c=(linklist *)malloc(sizeof(linklist));
b->next=NULL;
c->next=NULL;
cout<<"系统正在检查木马病毒......请等待......"<<endl;
int times;
times=40;
for(int i=0;i<times;i++)
{
if(i%2==0)
cout<<"\b\b\b\b\b\b"<<" "<<"\b\b\b\b\b\b";
else
cout<<"........";
for(int j=0;j<50;j++)
for(int k=0;k<500;k++)
cout<<' '<<'\b';
}
cout<<"未发现木马病毒及其衍生物!"<<endl;
cout<<"现在是否运行程序?(是-1,否-0)"<<endl;
int ab;
cin>>ab;
if(ab==0)
{
cout<<"期待你下次使用本程序..."<<endl;
cout<<"------------------------"<<endl;
cout<<endl;
exit(0);
}
char x;
show1();
cout<<endl;
cout<<endl;
show2();
while(1)
{
cout<<endl;
cout<<endl;
cout<<"请输入你要执行的命令:"<<endl;
cin>>x;
cout<<endl;
switch(x)
{
case 'c':
{
creat();
break;
}
case 'b':
{
brock();
break;
}
case 't':
{
timeup();
break;
}
case 'w':
{
wakeup();
break;
}
case 'e':
{
end();
break;
}
case 'h':
{
show2();
break;
}
case 'q':
{
cout<<"__________________________"<<endl;
cout<<"欢迎下次继续使用本程序!!!"<<endl;
cout<<"__________________________"<<endl;
cout<<endl;
exit(0);
break;
}
case 's':
{
cout<<"以下为进程状态表:"<<endl;
cout<<endl;
cout<<"就绪态进程:";
show(a->front->next);
cout<<"执行态进程:";
show(b->next);
cout<<"阻塞态进程:";
show(c->next);
break;
}
default:
{
cout<<"您输入的命令不正确,请重新输入!"<<endl;
cout<<endl;
cout<<" 以下为可供选择的命令:"<<endl;
show2();
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -