#include <iostream>
#include <vector>
#include <queue>
#include <string>
using namespace std;
struct Process {
string name;//进程名称
double arrrive;//进程到达时间
double run;//进程预估执行时间
int priority;//进程的优先级
bool perform;//标识进程是否已经被执行,已经被执行标志为true,否则为false
double start;//进程开始执行的时间
double complete;//进程完成的时间
double turnover;//进程的周转时间
double Wturnover;//进程的带权周转时间
double hasRun;//已经执行的时间,在时间片轮转法中会用到
};
double time;//记录当前的时间
void Print(Process *p, int n);//打印结果
void SortByArrive(Process *&process, int n);//冒泡排序函数,按照提交时间先后进行排序
void SortByArriveAndLength(Process *&process, int n);//按照作业提交时间以及长短进行综合排序
void SortByArriveAndPriority(Process *&process, int n);//按照作业提交时间以及优先级综合排序
double avgTurnover(Process *process, int n);//求平均周转时间
double avgWTurnover(Process *process, int n);//求平均带权周转时间
void FCFS(Process *process,Process *p,int n);//先来先服务法
void SJF(Process *process,Process *p,int n);//最短作业优先法
void HRN(Process *process,Process *p, int n);//最高响应比优先法
void RR(Process *process,Process *p, int n);//时间片轮转法
void Priority(Process *process,Process *p, int n);//优先级法
int main()
{
int n;
cout << "请输入将要进行调度的进程的个数:" << endl;
cin >> n;
Process *process = new Process[n];//存放输入进程的信息
Process *p = new Process[n];//按输出顺序存放进程信息
cout << "请依次输入每一个进程的信息,每个进程的信息包括进程名、到达时间、预估运行时间以及优先数(规定优先数越小优先级越高):" << endl;
for (int i = 0; i < n; i++)
{
cin >> process[i].name;
cin >> process[i].arrrive >> process[i].run;
cin >> process[i].priority;
process[i].perform = false;
process[i].hasRun = 0;
}
int select;
do {
cout << "-----------------------------------------" << endl;
cout << "请选择要进行进程调度的方式:" << endl;
cout << "1.先来先服务(FCFS)\n2.短进程优先\n3.最高响应比优先\n4.时间片轮转\n5.优先级法\n0.退出\n";
cout << "------------------------------------------" << endl;
cin >> select;
switch (select) {
case 1:
FCFS(process,p, n);
break;
case 2:
SJF(process,p, n);
break;