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

📄 main.cpp

📁 计算机操作系统课程设计
💻 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 + -