📄 main.cpp
字号:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<ios>
#include<stdexcept>
#include"Process_info.h"
using namespace std;
bool compare_comingtime(const Process_info&,const Process_info&);
bool compare_priority(const Process_info&,const Process_info&);
double azz_time(vector<Process_info>&);
double adqzz_time(vector<Process_info>&);
vector<Process_info> hsh_xia;
int main()
{
Process_info record;
string::size_type maxlen=0;
cout<<"*****************"<<endl;
cout<<"欢迎您来到进程模拟程序"<<endl;
cout<<"*****************"<<endl;
cout<<endl;
cout<<endl;
cout<<"本程序用途:模拟.先来先服务调度算法.优先级调度算法 "<<endl;
cout<<endl;
cout<<"**********************************"<<endl;
cout<<endl;
cout<<"准备开始输入进程的相关信息"<<endl;
cout<<endl;
char ch;
do
{
record.read(cin,record);
maxlen=max(maxlen,record.name.size());
hsh_xia.push_back(record);
cin>>ch;
}while(ch=='p');
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"输入进程信息已结束"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<endl;
cout<<endl;
A:
cout<<"请输入需要使用的进程调度算法"<<endl;
cout<<"输入1为 先来先服务算法"<<endl;
cout<<"输入2为 优先级算法"<<endl;
char sfxz;
cin>>sfxz;
if(sfxz=='1')
{
sort(hsh_xia.begin(),hsh_xia.end(),compare_comingtime);
cout<<"#######################"<<endl;
cout<<"先来先服务进程调度算法";
cout<<"#######################"<<endl;
cout<<"机器中的进程队列为"<<endl;
for(vector<Process_info>::size_type i=0;i!=hsh_xia.size();++i)
{
cout<<"进程名"<<hsh_xia[i].name<<string(maxlen+1-hsh_xia[i].name.size(),' ')<<" ";
cout<<"进程使用时间"<<hsh_xia[i].usetime<<" ";
cout<<"进程进入时间"<<hsh_xia[i].comingtime<<" ";
cout<<"进程优先级"<<hsh_xia[i].priority<<" ";
cout<<endl;
}
cout<<"使用先来先服务算法进程执行的顺序"<<endl;
for(vector<Process_info>::size_type i=0;i!=hsh_xia.size();++i)
{
cout<<hsh_xia[i].name<<string(maxlen+1-hsh_xia[i].name.size(),' ');
cout<<"->";
}
cout<<"结束"<<endl;
cout<<endl;
cout<<"计算平均周转时间中......"<<endl;
cout<<"计算出的平均周转时间是:"<<azz_time(hsh_xia)<<endl;
cout<<"计算平均带权周转时间中......"<<endl;
cout<<"计算出的平均带权周转时间是:"<<adqzz_time(hsh_xia)<<endl;
cout<<endl;
goto A;
}
else if(sfxz=='2')
{
sort(hsh_xia.begin(),hsh_xia.end(),compare_priority);
cout<<"#######################"<<endl;
cout<<"优先级进程调度算法";
cout<<"#######################"<<endl;
cout<<"机器中的进程队列为"<<endl;
for(vector<Process_info>::size_type i=0;i!=hsh_xia.size();++i)
{
cout<<"进程名"<<hsh_xia[i].name<<string(maxlen+1-hsh_xia[i].name.size(),' ')<<" ";
cout<<"进程使用时间"<<hsh_xia[i].usetime<<" ";
cout<<"进程进入时间"<<hsh_xia[i].comingtime<<" ";
cout<<"进程优先级"<<hsh_xia[i].priority<<" ";
cout<<endl;
}
cout<<"使用优先级算法的执行顺序"<<endl;
for(vector<Process_info>::size_type i=0;i!=hsh_xia.size();++i)
{
cout<<hsh_xia[i].name<<string(maxlen+1-hsh_xia[i].name.size(),' ');
cout<<"->";
}
cout<<"结束"<<endl;
cout<<endl;
cout<<"计算平均周转时间中..."<<endl;
cout<<"计算出的周转时间是:"<<azz_time(hsh_xia)<<endl;
cout<<"计算平均带权周转时间中..."<<endl;
cout<<"计算出的平均带权周转时间是:"<<adqzz_time(hsh_xia)<<endl;
goto A;
}
else
{
cout<<"输入有误,请重新输入!"<<endl;
goto A;
}
return 0;
}
double azz_time(vector<Process_info>& xia_mi){
double x=0;
for(vector<Process_info>::size_type i=0;i<xia_mi.size ();i++)
{
if(i==0) {xia_mi[0].time =xia_mi[0].usetime ; x=x+xia_mi[0].usetime+ xia_mi[0].comingtime ;}
else
{
if(x<xia_mi[i].comingtime)
{xia_mi[i].time=xia_mi[i].usetime;
x=xia_mi[i].comingtime+xia_mi[i].usetime;
}
else{xia_mi[i].time=x+xia_mi[i].usetime-xia_mi[i].comingtime;x=x+xia_mi[i].usetime;}
xia_mi[i].time =x + xia_mi[i].usetime -xia_mi[i].comingtime ;x=x+xia_mi[i].usetime;}
}
x=0;
for(vector<Process_info>::size_type j=0;j<xia_mi.size ();j++)
x=x+xia_mi[j].time ;
return (x/xia_mi.size ());
}
double adqzz_time(vector<Process_info>& xia_mi){
double x=0;
for(vector<Process_info>::size_type j=0;j<xia_mi.size ();j++)
x=x+xia_mi[j].time/xia_mi[j].usetime ;
return (x/xia_mi.size ());
}
bool compare_comingtime(const Process_info& x,const Process_info& y)
{
return x.comingtime < y.comingtime;
}
bool compare_priority(const Process_info& x,const Process_info& y)
{
return x.priority > y.priority;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -