📄 djf.txt
字号:
#include <graph.h>/*图形头文件*/
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
#include <math.h>/*数学,ABS(求绝对值函数)*/
#include <conio.h>/*接收键盘消息函数*/
#define ENTER 0x1c0d/*当接收到ENTER按键信息时进行输入任务操作*/
#define ESC 0x011b /*当接收到按键ESC信息时退出程序*/
#define A 2/*不同级别的任务的时间片*/
#define B 4
#define DELAY 1000
#define CHAOSHI 20
int i,j,k,key;/*几个全局变量*/
int min,sec,hour;/*设置时间时的三个变量*/
int min1,sec1,hour1;/*计算时间差时的三个变量*/
struct time t;/*时间参数,读取时间,时间记时。其格式为(t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund)*/
int h,z;/*移动图形时的参量*/
char sr1;int sr2;/*输入参数*/
struct node
{
char j;/*进程的级别*/
int h;/*如果画出图形来他的横坐标*/
int z;/*如果画出图形来他的纵坐标*/
int ys;/*图形的颜色*/
int t; /*任务的时间长度*/
int dd;/*等待的时间*/
int wz;/*任务队列中的位置*/
struct node *next;
};
typedef struct node *linklist;
linklist a,b,c;/*定义三个链表*/
shuadd(int,int,int,int,int,int);
gengdd(linklist l,int i,int dd)/*因为第二,三行要等待时间这个参数来确定是否要升级*/
{
int j=1;
linklist p=l->next;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
p->dd=p->dd+dd;/*时间加操作*/
}
gengt(linklist l,int i,int t)/*把链表l的第i个结点的时间刷新*/
{
int j=1;
linklist p=l->next;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
p->t=t;/*返回时间量*/
}
initlist(linklist *l)/*链表的初始化*/
{
*l=(linklist)malloc(sizeof(struct node));
if(!*l)
exit(0);
(*l)->next=0;
}
delete(linklist l)/*删除链表的第一个元素*/
{
linklist p=l,q;
if(!p->next)
return 0;
q=p->next;
p->next=q->next;
free(q);
/*这里之所以没有做把任务位置数ch减一的操作可以用ch-length()来判断*/
}
length(linklist l)/*图形(任务链表)的长度*/
{
int i=0;
linklist p=l->next;
while(p)
{
i++;
p=p->next;
}
return i;
}
Init() /*图形驱动*/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
initer()/*图形架够的生成*/
{
setcolor(RED);
settextstyle(1,0,4);
outtextxy(180,380,"CPU Scheduling :");
setcolor(YELLOW);
settextstyle(1,0,2);
outtextxy(280,420,"Multilevel Feedback");
outtextxy(385,440,"Quene scheduling");
setcolor(10);/*整个图形环境是绿色的基础*/
settextstyle(0,0,0);
rectangle(240,30,631,330);/*外面的大框图*/
line(240,90,500,90);/*第一条任务横线*/
/*rectangle(260,60,300,90);*//*第一条横线的左矩形*/
rectangle(460,60,500,90);/*第一条横线的右矩形*/
line(240,150,500,150);
line(240,210,500,210);
/*rectangle(260,180,300,210);*//*第二条横线的左矩形*/
rectangle(460,180,500,210);
line(240,270,500,270);
line(240,330,500,330);
/*rectangle(260,300,300,330);*//*第三条横线的左矩形*/
rectangle(460,300,500,330);
line(500,30,500,330);
rectangle(180,0,500,360);/*通道*/
rectangle(500,0,631,30);
rectangle(500,330,631,360);
/*outtextxy(515,331,"job:swapping..");
outtextxy(515,340,"cpu:running...");
outtextxy(515,349,"job:updating..");*/
}
famen(int n,int m,int w)/*右边阀门开关(第几个阀门,m=0开门,m=1关门)*/
{ if(m==0)
{ if(n==1)for(i=1;i<=29;i++)
{
setcolor(0);
line(500,31+30*w,500,30+i+30*w);
delay(DELAY);
}
if(n==2)for(i=1;i<=29;i++)
{
setcolor(0);
line(500,151+30*w,500,150+i+30*w);
delay(DELAY);
}
if(n==3)for(i=1;i<=29;i++)
{
setcolor(0);
line(500,271+30*w,500,270+i+30*w);
delay(DELAY);
}
}
if(m==1)
{ if(n==1)for(i=1;i<=30;i++)
{
setcolor(10);
line(500,31+30*w,500,30+i+30*w);
delay(DELAY);
}
if(n==2)for(i=1;i<=30;i++)
{
setcolor(10);
line(500,151+30*w,500,150+i+30*w);
delay(DELAY);
}
if(n==3)for(i=1;i<=30;i++)
{
setcolor(10);
line(500,271+30*w,500,270+i+30*w);
delay(DELAY);
}
}
}
famen1(int n,int m)/*m=1 关上 ;m=0 打开 ;n 代表第几个阀门*/
{
if(m==0)
{ if(n==1)for(i=1;i<=29;i++)
{
setcolor(0);
line(460,61,460,60+i);
delay(DELAY);
}
if(n==2)for(i=1;i<=29;i++)
{
setcolor(0);
line(460,181,460,180+i);
delay(DELAY);
}
if(n==3)for(i=1;i<=29;i++)
{
setcolor(0);
line(460,301,460,300+i);
delay(DELAY);
}
}
if(m==1)
{if(n==1)for(i=1;i<=27;i++)
{
setcolor(10);
line(460,61,460,61+i);
delay(DELAY);
}
if(n==2)for(i=1;i<=27;i++)
{
setcolor(10);
line(460,181,460,181+i);
delay(DELAY);
}
if(n==3)for(i=1;i<=27;i++)
{
setcolor(10);
line(460,301,460,301+i);
delay(DELAY);
}
}
}
xiaoying()/*任务完成后图形的消失*/
{ int i;
setcolor(0);
for(i=1;i<60;i++) line(500+i,31,500+i,329);
}
juxing(int x,int y)/*矩形的生成*/
{
rectangle(x-16,y-12,x+16,y+12);
}
tuyuan(int x,int y)/*椭圆的生成*/
{
ellipse(x,y,0,360,16,12);
}
lingxing(int x,int y)/*菱形的生成*/
{
line(x-16,y,x,y-12);
line(x,y-12,x+16,y);
line(x+16,y,x,y+12);
line(x,y+12,x-16,y);
}
over()/*图形的取消*/
{ cleardevice();
setcolor(RED);
settextstyle(3,0,5);
outtextxy(150,200,"PROGRAM IS OVER");
getch();
closegraph();}
shuaw(linklist l)/*刷新任务完成后的列表,即任务在链表中的位置*/
{ int i=1;
linklist p=l->next;
while(p)
{ p->wz=i;
i++;
/* if((p->j)=='c')printf("c zhong you %d,p->dd=%d\n",i-1,p->dd); */
p=p->next;
}
}
hmove(char n,int x0,int y0,int x1,int color)/*行移动--第几列,初始横坐标,初始纵坐标,目的横坐标,颜色*/
{
if(n=='a')for(i=1;i<=(x1-x0);i++)
{
setcolor(0);
lingxing(x0-1+i,y0);
setcolor(color);
lingxing(x0+i,y0);
delay(DELAY);
}
if(n=='b')for(i=1;i<=(x1-x0);i++)
{
setcolor(0);
tuyuan(x0-1+i,y0);
setcolor(color);
tuyuan(x0+i,y0);
delay(DELAY);
}
if(n=='c')for(i=1;i<=(x1-x0);i++)
{
setcolor(0);
juxing(x0-1+i,y0);
setcolor(color);
juxing(x0+i,y0);
delay(DELAY);
}
}
nhmove(char n,int x0,int y0,int x1,int color)/*行,从右到左移动*/
{
if(n=='a')for(i=1;i<=(x0-x1);i++)
{
setcolor(0);
lingxing(x0-i+1,y0);
setcolor(color);
lingxing(x0-i,y0);
delay(DELAY);
}
if(n=='b')for(i=1;i<=(x0-x1);i++)
{
setcolor(0);
tuyuan(x0-i+1,y0);
setcolor(color);
tuyuan(x0-i,y0);
delay(DELAY);
}
if(n=='c')for(i=1;i<=(x0-x1);i++)
{
setcolor(0);
juxing(x0-i+1,y0);
setcolor(color);
juxing(x0-i,y0);
delay(DELAY);
}
}
lmove(char n,int x0,int y0,int y1,int color)/*图形的纵坐标移动*/
{
if(n=='a')for(i=1;i<=(y1-y0);i++)
{
setcolor(0);
lingxing(x0,y0+i-1);
setcolor(color);
lingxing(x0,y0+i);
delay(DELAY);
}
if(n=='b')for(i=1;i<=(y1-y0);i++)
{
setcolor(0);
tuyuan(x0,y0+i-1);
setcolor(color);
tuyuan(x0,y0+i);
delay(DELAY);
}
if(n=='c')for(i=1;i<=(y1-y0);i++)
{
setcolor(0);
juxing(x0,y0+i-1);
setcolor(color);
juxing(x0,y0+i);
delay(DELAY);
}
}
nlmove(char n,int x0,int y0,int y1,int color)/*列,从下向上移动*/
{
if(n=='a')for(i=1;i<=(y0-y1);i++)
{
setcolor(0);
lingxing(x0,y0-i+1);
setcolor(color);
lingxing(x0,y0-i);
delay(DELAY);}
if(n=='b')for(i=1;i<=(y0-y1);i++)
{
setcolor(0);
tuyuan(x0,y0-i+1);
setcolor(color);
tuyuan(x0,y0-i);
delay(DELAY);}
if(n=='c')for(i=1;i<=(y0-y1);i++)
{
setcolor(0);
juxing(x0,y0-i+1);
setcolor(color);
juxing(x0,y0-i);
delay(DELAY);
}
}
cpu(int n)/*这片代码段最好直接写在程序里这样系统有最好的响应时间*/
{
if(n==1)
{ j=1;
while(!kbhit())
{for(i=1;i<=40;i++)
if(j%16!=0)
{
setcolor(j);
line(599+i,30,599+i,330);
}
if(j%16!=0)
sleep(1);
j++;
}
key=bioskey(0);
if(key==ENTER) return 1; }
if(n==0)
{for(i=1;i<=40;i++)
{
setcolor(0);
line(599+i,30,599+i,330);
}
}
}/*这段代码没有用上*/
insert(linklist l,char e,int m)/*链表的初始化并且把第一次的图形画出来*/
{ linklist p=l,s;
int j=1,j1=1,j2=1;
int h,z;
while(p->next)
{
p=p->next;
if(e=='a') j++; /*给任务个数记数*/
if(e=='b') j1++;
if(e=='c') j2++;
}
if(!p) return 0; /*如果任务还在执行那么他依然还在记数之列*/
if(j<=10&&j1<=10&&j2<=10)
{ if(e=='a'){
if(j<=5)
{
h=75;
z=(480-40*j);
}
else if(j>=6)
{
h=45;
z=(240+40*(j-5));
}
}/*只能接受最多10个进程*/
if(e=='b'){
if(j1<=5)
{
h=195;
z=(480-40*j1);
}
else if(j1>=6)
{
h=165;
z=(240+40*(j1-5));
}
}/*只能接受最多10个进程*/
if(e=='c'){
if(j2<=5)
{
h=315;
z=(480-40*j2);
}
else if(j2>=6)
{
h=285;
z=(240+40*(j2-5));
}
}/*只能接受最多10个进程*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -