⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os.cpp

📁 是一个操作系统的课程设计的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -