哪位朋友能够把下面的程序(模拟作业调度)补充完整呢?
#include<iostream.h>#include<process.h>
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
void why_fifs();
void why_sjf();
void why_hrn();
void why_priority();
void why_setup();
void why_readjob();
struct job
{ int jobnumber;
int waittimes; //等待时间
int needtimes; //需要运行时间
int priority; //静态优先级
job*prior;
job*next;
};
job*head;
void main()
{ char w_choice;
head=NULL;
while(1)
{ system("cls");
cout<<endl<<endl<<endl;
cout<<" 操作系统(实验一)--------作业调度模拟"<<endl;
cout<<endl<<" 设 置 作 业 队 列 -------------->1"<<endl;
cout<<endl<<" 先 来 先 服 务(FCFS)-------------->2"<<endl;
cout<<endl<<" 短 作 业 优 先(SJF) -------------->3"<<endl;
cout<<endl<<" 相 应 比 高 者 优 先(HRN)--------->4"<<endl;
cout<<endl<<" 优 先 级 法 -------------->5"<<endl;
cout<<endl<<" 退 出 -------------->6";
cout<<endl ;
cout<<endl<< " 请选择演示方式(1-5):";
cin>>w_choice;
cin.ignore(300,'\n');
switch(w_choice)
{
case'1':why_setup();break;
case'2':why_fifs();break;
case'3':why_sjf();break;
case'4':why_hrn();break;
case'5':why_priority();break;
case'6':exit(0);
default:break;
}
}
}
void why_readjob()
{ job*tp,*p;
FILE*fp;
system("cls");
fp=fopen("job","rb");
if(fp==NULL)
{ cout<<endl<<"open file error or file null"<<endl;
getchar();
return; }
else
{ if(tp=(job*)malloc(sizeof(job)))
{ fread(tp,sizeof(struct job),1,fp);
head=tp;
tp->prior=NULL;
tp->next =NULL; }
else
{ cout<<endl<<"out of memory"<<endl;
getch();
return; }
while(1)
{ if(feof(fp))
{ fclose(fp);
break; }
else
{ if(p=(job*)malloc(sizeof(job)))
{ fread(p,sizeof(struct job),1,fp);
tp->next=p;
p->prior=tp;
tp=tp->next;
tp->next=NULL; }
else
{ system("cls");
cout<<endl<<"out of memory! anykey exit"<<endl;
getch();
return; }
}
}
p=tp;
tp=tp->prior;
tp->next=NULL;
free(p);
}
}
void why_setup()
{ job *tp,*p;
FILE *fp;
int jobnumber,needtimes,priority;//作业号、运做时间、优先级
jobnumber=0;
system("cls");
cout<<endl<< " 该功能将重新生成作业队列文件,原来的数据将丢失(若不修改,直接按0退出)。"<<endl;
while(1)
{ cout<<endl<<" 请输入模拟的作业信息(运行时间为0保存退出)"<<endl;
cout<<endl<<" 作 业 号 "<<++jobnumber;
cout<<endl<<" 所运行时间:";
cin>>needtimes; //输入运行时间needtimes
cin.ignore(300,'\n');
//当needtimes=0时,结束作业的设置
//**********************************************************
if(needtimes==0)
{ if(head==NULL)return;
fp=fopen("job","wb"); //写文件
if(fp==NULL)
{ cout<<endl<<"error!!!can't open file 'job' with writen,please check it's attrib"<<endl;
return;
}
else
{ tp=head;
while(tp)
{ fwrite(tp,sizeof(struct job),1,fp);
tp=tp->next; }
fclose(fp);
return;
}
}
//设置作业的属性
//**********************************************************
cout<<" 优 先 级:";
cin>>priority; //输入优先级
cin.ignore(300,'\n');
p=( job *)malloc(sizeof(job));
if(p)
{ p->jobnumber =jobnumber;
p->waittimes =0;
p->needtimes =needtimes;
p->priority =priority;
if(jobnumber==1) //双链表表头结点
{ head=p;
tp=p;
tp->prior =NULL;
tp->next =NULL;
}
else //指针p指向新建立的结点,tp记录前一个结点
{ p->prior =tp;
tp->next =p;
tp=tp->next;
tp->next =NULL;
}
}
else
{
cout<<endl<<"out of memory! anykey exit"<<endl;
getch();
return;
}
//**********************************************************
}
}
//先来先服务(CFSF)
void why_fifs()
{
job *p,*tp;
float T,W;
int w_runtimes,w_jobs;//w_jobs为参与模拟的作业数
why_readjob(); //读入之前设置的作业及相关属性
system("cls");
cout<<endl<<"先来先服务(FIFS)算法按作业进入队列的先后次序进行调度"<<endl<<"(该程序为单道操作系统模拟):"<<endl;
cout<<endl<<"调度序列:"<<endl<<endl;
T=0;
W=0;
w_runtimes=0;
w_jobs=0;
p=head; //p指向1号作业
while(p)
{ T=T+p->needtimes+p->waittimes; //计算累加时间=操作时间+等待时间
W=W+(p->needtimes +p->waittimes)*1.0/p->needtimes; //带权周转时间
w_runtimes=p->needtimes; //作业操作时间=作业欲设需要时间
w_jobs++; //作业数量
cout<<" 作业 "<<p->jobnumber; //作业+编号
p=p->next;
tp=p;
while(tp)
{
tp->waittimes =tp->waittimes +w_runtimes;
tp=tp->next;
}
}
cout<<endl<<endl;
cout<<"作业平均周转时间为(取整数部分):"<<int(T/w_jobs)<<endl<<endl;
cout<<"作业带权周转时间为(取整数部分):"<<int(W/w_jobs)<<endl;
cout<<endl<<"anykey return"<<endl;
getch();
return;
}
void why_priority()
{
//优先级法
}
void why_hrn()
{
//响应比高者优先
}
void why_sjf()
{
//短作业优先算法
}