#include<stdio.h>
#define N 10
typedef struct process
{
char name;
int arrive;
int prio;
int needTime;
char state;
}Process;
Process a[N];
void input(Process a[],int n){
int i;
for(i=0;i<n;i++)
{
printf("请输入%d个进程的进程名:",i+1);
scanf("%c",&a[i].name);
printf("请输入%d个进程的优先级:",i+1);
scanf("%d",&a[i].prio);
printf("请输入%d个进程的到达时间:",i+1);
scanf("%d",&a[i].arrive);
printf("请输入%d个进程的需要时间:",i+1);
scanf("%d",&a[i].needTime);
a[i].state='r';
getchar();
printf(" ");
}
}
void sort(Process a[],int n)
{
int i,j;
Process temp;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
if(a[j].prio>a[i].prio)
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
if(a[j].prio==a[i].prio)
{
if(a[j].arrive<a[i].arrive)
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
}
void output(Process a[],int n)
{
int i;
printf("进程排序结果: ");
printf("******************************** ");
printf("进程名 优先级 到达 需要 ");
for(i=0;i<n;i++)
printf("%c %d %d %d %c ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime,a[i].state);
printf("******************************** ");
}
void running(Process a[],int n)
{
int i;
for(i=0;i<n;i++)
{
while(a[i].needTime!=0)
{
printf("按任意键继续 ");
fflush(stdin);
getchar();
a[i].needTime=a[i].needTime-1;
a[i].prio=a[i].prio-1;
if(a[i].needTime==0)
{
a[i].state='f';
}
printf("现在执行的进程信息: ");
printf("进程名 优先级 需要 ");
printf("%c %d %d %c ",a[i].name,a[i].prio,a[i].needTime,a[i].state);
printf("******************************** ");
sort(a,n);
output(a,n);
}
}
}
main()
{
int n;
printf("你想输入多少个进程:");
scanf("%d",&n);
getchar();
input(a,n);
sort(a,n);
running(a,n);
}