📄 os.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "iostream.h"
#define getjcb(type) (type*)malloc(sizeof(type))
#define NULL 0
struct jcb
{char name[10]; // 作业名
char state; // 作业状态
int ts; // 提交时间
float super; // 优先权
int tb; // 开始运行时间
int tc; // 完成时间
float ti; // 周转时间
float wi; // 带权周转时间
int ntime; // 作业所需运行时间
struct jcb *link; // 结构体指针
} *p,*q,*head=NULL;
typedef struct jcb JCB;
int n=0,time_1=0;float eti,ewi,eti_1,ewi_2,eti_3,ewi_4,eti_5,ewi_6,eti_7,ewi_8;
/////////////////////////////////////////////////////////////////////////////////
void sort();
void last();
void super(int m);
void initial();
void whole();
void pringt_sel(int m);
void fileinput();
void main_sel(int m);
void fileway(int m);
void main_sjf(int m);
void main_hrn(int m);
void main_fcfs(int m);
void running(JCB *p,int m);
void print(JCB *pr,int m);
void face_main();
void face_TS1();
void face_TS2();
void face_TS3();
/////////////////////////////////////////////////////////////////////////////////
void main(int m)
{
main_sel(m);
}
/////////////////////////////////////////////////////////////////////////////////
void main_sel(int m)
{
face_main();
printf("\n请选择你需要的服务:");
scanf("%d",&m);
switch(m)
{
case 1: main_fcfs(m);break;
case 2: main_sjf(m);break;
case 3: main_hrn(m);break;
case 4: main_hrn(m);break;
case 5: pringt_sel(m);break;
case 0: break;
default:printf("\n错误!你只能选择0-3这4个数字中的一个。\n"); main_sel(m);
}
}
/////////////////////////////////////////////////////////////////////////////////
void fileway(int m)
{int a;
face_TS1();
scanf("%d",&a);
switch(a)
{
case 1:fileinput();break;
case 2:initial(); break;
case 0:face_main(); main_sel(m);
default:printf("\n错误!你只能选择1-2这3个数字中的一个。\n");fileway(m);
}
}
/////////////////////////////////////////////////////////////////////////////////
void sort()
{
JCB *first, *second;
int insert=0;
if((head==NULL)||((p->ts)<(head->ts)))
{
p->link=head;
head=p;
}
else
{
first=head;
second=first->link;
while(second!=NULL)
{
if((p->ts)<(second->ts))
{
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
/////////////////////////////////////////////////////////////////////////////////
void initial()
{
int i;
printf("\n请输入作业控制块的数量\n");
scanf("%d",&n);
face_TS2();
printf("\n名称 提交时间 运行时间 优先权\n");
for(i=0;i<n;i++)
{
p=getjcb(JCB);
scanf("%s\t%d\t%d\t%f",&p->name,&p->ts,&p->ntime,&p->super);
p->state='W';
p->link=NULL;
sort();
}
}
/////////////////////////////////////////////////////////////////////////////////
void fileinput()
{
FILE *fp;int i;
if((fp=fopen("os2.txt","r"))==NULL)
printf("打开错误!请将os2.txt和可执行文件放在一起");
fscanf(fp,"%d\n",&n);
for(i=0;i<n;i++)
{
p=getjcb(JCB);
fscanf(fp,"%s%d%d%f",&p->name,&p->ts,&p->ntime,&p->super);
p->state='W';
p->link=NULL;
sort();
}
fclose(fp);
}
/////////////////////////////////////////////////////////////////////////////////
void print(JCB *pr,int m)
{
JCB *p;
printf("\ntime=%d:\n",time_1);
if(m==3||m==4)
{ printf(" *************************** \n");
printf("*---*--*--*--*--*--*--*---** 昨天今天明天制作 **---*--*--*--*--*--*--*---*\n");
printf("* *************************** *\n");
printf("* *\n");
printf("*----------------------------------欢迎使用!----------------------------------*\n");
printf("\n名称 状态 提交时间 运行时间 优先级 开始时间 完成时间 周转时间 带权周转时间");
printf(" %s %4c %8d %9d %8.2f %7d %9d %11.2f %10.2f\n",
pr->name,pr->state,pr->ts,pr->ntime,pr->super,pr->tb,pr->tc,pr->ti,pr->wi);
}
else
{ printf(" *************************** \n");
printf("*---*--*--*--*--*--*--*---** 昨天今天明天制作 **---*--*--*--*--*--*--*---*\n");
printf("* *************************** *\n");
printf("* *\n");
printf("*----------------------------------欢迎使用!----------------------------------*\n");
printf("\n名称 状态 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间");
printf(" %s %5c %9d %10d %10d %9d %11.2f %12.2f\n",
pr->name,pr->state,pr->ts,pr->ntime,pr->tb,pr->tc,pr->ti,pr->wi);
}
p=head;
while(p!=NULL)
{
if(p->state=='W')
{
if(m==3||m==4)
{
printf(" %s %4c %8d %9d %8.2f\n",
p->name,p->state,p->ts,p->ntime,p->super);
}
else
{
printf(" %s %5c %9d %10d\n",
p->name,p->state,p->ts,p->ntime);
}
}
p=p->link;
}
p=head;
while(p!=NULL)
{
if(p->state=='F')
{
if(m==3||m==4)
{
printf(" %s %4c %8d %9d %8.2f %7d %9d %11.2f %10.2f\n",
p->name,p->state,p->ts,p->ntime,p->super,p->tb,p->tc,p->ti,p->wi);
}
else
{
printf(" %s %5c %9d %10d %10d %9d %11.2f %12.2f\n",
p->name,p->state,p->ts,p->ntime,p->tb,p->tc,p->ti,p->wi);
}
}
p=p->link;
}
printf("*******************************************************************************\n");
}
/////////////////////////////////////////////////////////////////////////////////
void super(int m)
{
JCB *padv;
padv=head;
if(m==3)
{while(padv!=NULL)
{if(padv->state=='W')
{
padv->super=(float)(time_1-padv->ts+padv->ntime)/padv->ntime;
printf("\n%f\n",padv->super);
getch();
//padv=padv->link;
} padv=padv->link;
}
}
if(m==4) padv->super=head->super;
}
/////////////////////////////////////////////////////////////////////////////////
void running(JCB *p,int m)
{
p->tb=time_1;
p->state='R';
p->tc=p->tb+p->ntime;
p->ti=(float)(p->tc-p->ts);
p->wi=(float)(p->ti/p->ntime);
eti+=p->ti;
ewi+=p->wi;
print(p,m);
time_1+=p->ntime;
p->state='F';
printf("\n%s 已经完成!请按任意键继续。\n\n\n\n",p->name);
getch();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -