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

📄 form1.cs

📁 模拟多批道处理程序C# 操作系统课程设计
💻 CS
📖 第 1 页 / 共 2 页
字号:
		{
			//检测
			if ( CheckTaskItem(txtAdd.Text) )
				lstTask.Items.Add(txtAdd.Text);
			getItemRunTime(txtAdd.Text);

		}
		#endregion

		# region 加载任务列表
		private void btnLoadTask_Click(object sender, System.EventArgs e)
		{
			ofiledlg.ShowDialog();
			if (File.Exists(ofiledlg.FileName))
			{
				try 
				{
					using (StreamReader sr = new StreamReader(ofiledlg.FileName)) 
					{
						String strTaskItem;
						if(sr.ReadLine() !="多批道处理作业调度模拟程序作业列表文件.") return;
						lstTask.Items.Clear();
						while ((strTaskItem = sr.ReadLine()) != null) 
						{
							lstTask.Items.Add(strTaskItem);
						}
						sr.Close();
					}
				}
				catch (Exception ee) 
				{
					Console.WriteLine("The file could not be read:");
					Console.WriteLine(ee.Message);
				}
			}
		}
		#endregion

		private void Form1_Load(object sender, System.EventArgs e)
		{

		}

		# region 返回任务列表 
		private void btnBack_Click(object sender, System.EventArgs e)
		{
			pnlResult.Visible=false;
			pnlTask.Visible=true;
		}
		#endregion

		# region 输出计算结果
		private void btnTextOut_Click(object sender, System.EventArgs e)
		{
			sfiledlg.ShowDialog();
			if(sfiledlg.FileName!="")
			{
				using (StreamWriter sw = new StreamWriter(sfiledlg.FileName)) 
				{
					sw.WriteLine("多批道处理模拟程序.");
					sw.WriteLine("");
					sw.WriteLine("作业列表:");
					for(int i=0 ; i<lstTask.Items.Count ; i++)
					{
						sw.WriteLine(lstTask.Items[i].ToString());
					}//for
					sw.WriteLine("");
					sw.WriteLine("运行结果:");
					sw.WriteLine(txtResult.Text);
					sw.Close();
				}//using
			}
		}
		#endregion

		#region 计算结果
		private void btnCompute_Click(object sender, System.EventArgs e)
		{	
			ArrayEarly();
			ComputeQueue();
			pnlTask.Visible=false;
			pnlResult.Visible=true;
		}
		#endregion

		# region 相关算法
		
		# region bool CheckTaskItem(string strItem) 检测作业合法性
		//主要检测有括号和":"以及名称
		private bool CheckTaskItem(string strItem)
		{
			//首先检测'(',')'和':'是否存在于这个字符串中 
			if(strItem.IndexOf("(")<=0 || strItem.IndexOf(")")<=0 || strItem.IndexOf(":")<=0)
				return false;
			//检测任务名称长度是否为0
			if(strItem.Substring(0,strItem.IndexOf("("))=="")
				return false;
			try
			{
				string strstarttime=strItem.Substring(strItem.IndexOf("(")+1,strItem.IndexOf(":")-strItem.IndexOf("(")-1);
				if(strstarttime.Length!=4) return false;
				//Console.WriteLine(strstarttime);
				int istarttimeh=Convert.ToInt32(strstarttime.Substring(0,2));
				if (istarttimeh>23 || istarttimeh<0) return false;
				//Console.WriteLine(istarttimeh);
				int istarttimem=Convert.ToInt32(strstarttime.Substring(2,2));
				if (istarttimem>59 || istarttimem<0) return false;
				//Console.WriteLine(istarttimem);
				int iruntime=Convert.ToInt32(strItem.Substring(strItem.IndexOf(":")+1,strItem.IndexOf(")")-strItem.IndexOf(":")-1));
				if (iruntime<0) return false;
				//Console.WriteLine(iruntime);
			}
			catch
			{
				return false;
			}

			//else
				return true;
		}

		#endregion

		#region int getItemStartTimeh(string strItem) 得到作业开始时间小时
		private int getItemStartTimeh(string strItem)
		{	
			int istartTimeh=Convert.ToInt32(strItem.Substring(strItem.IndexOf("(")+1,2));
			return istartTimeh;
		}
		#endregion

		#region int getItemStartTimem(string strItem) 得到作业开始时间分钟
		private int getItemStartTimem(string strItem)
		{	
			int istartTimem=Convert.ToInt32(strItem.Substring(strItem.IndexOf("(")+3,2));
			return  istartTimem;
		}
		#endregion

		#region int getItemRunTime(string strItem) 得到作业预计运行时间
		private int getItemRunTime(string strItem)
		{	
			int irunTime=Convert.ToInt32(strItem.Substring(strItem.IndexOf(":")+1,strItem.IndexOf(")")-strItem.IndexOf(":")-1));
			return  irunTime;
		}
		#endregion

		#region string getItemTitle(string strItem) 得到作业名称
		private string getItemTitle(string strItem)
		{
			if(CheckTaskItem(strItem))
				return strItem.Substring(0,strItem.IndexOf("("));
			else
				return "";
		}

		#endregion

		#region bool ArrayEarly() 作业按时间大小排序
		private bool ArrayEarly()
		{
			for ( int i=0; i<lstTask.Items.Count -1; i++)
			{
				for(int j=i +1 ; j<lstTask.Items.Count ; j++)
				{
					if(Compare(i,j)==1)
					{
						string strTemp=lstTask.Items[j].ToString();
						lstTask.Items[j]=lstTask.Items[i];
						lstTask.Items[i]=strTemp;
					}
					else if(Compare(i,j)==-1)
					{
						if(getItemRunTime(lstTask.Items[i].ToString())>getItemRunTime(lstTask.Items[j].ToString()))
						{
							string strTemp=lstTask.Items[j].ToString();
							lstTask.Items[j]=lstTask.Items[i];
							lstTask.Items[i]=strTemp;
						}
					}
				}
			}
			return true;
		}
			
		#endregion

		#region int Compare(int iWork1,int iWork2) 比较某两个作业提交时间那个短
		//0  iWork1 earlier
		//1  iWork2 earlier
		//-1 same
		private int Compare(int iWork1,int iWork2)
		{
			string strWork1=lstTask.Items[iWork1].ToString();
			string strWork2=lstTask.Items[iWork2].ToString();

			int istratTimeh1=getItemStartTimeh(strWork1);
			int istratTimeh2=getItemStartTimeh(strWork2);
			int istratTimem1=getItemStartTimem(strWork1);
			int istratTimem2=getItemStartTimem(strWork2);
			
			if(istratTimeh1<istratTimeh2)
				return 0;
			else if (istratTimeh1>istratTimeh2)
				return 1;
			else
			{
				if (istratTimem1<istratTimem2)
					return 0;
				else if(istratTimem1>istratTimem2)
					return 1;
				else
					return -1;
			}
			//return true;
		}

		#endregion

		#region void ComputeQueue() 开始计算

		private void ComputeQueue()
		{
			int [] startTimeh=new int[lstTask.Items.Count];
			int [] startTimem=new int[lstTask.Items.Count];
			int [] waitTime=new int[lstTask.Items.Count];
			int [] runTime=new int[lstTask.Items.Count];
			double  T=0;
			double  W=0;
			//double [] lright=new double[lstTask.Items.Count];

			//for(int i = 0 ; i < lstTask.Items.Count ; i++ )
			//	lright[i]=i;

			startTimeh[0]=getItemStartTimeh(lstTask.Items[0].ToString());
			startTimem[0]=getItemStartTimem(lstTask.Items[0].ToString());
			runTime[0]=getItemRunTime(lstTask.Items[0].ToString());
			waitTime[0]=0;
			T=runTime[0];
			W=1.0;
			for(int i=1 ; i<lstTask.Items.Count ; i++ )
			{
				startTimem[i]=startTimem[i-1] + runTime[i-1];
				//Console.WriteLine(startTimem[i] + "bad" + startTimem[i] % 60);
				startTimeh[i]=startTimeh[i-1] +  startTimem[i] / 60;
				startTimem[i]=startTimem[i] % 60;
				//Console.WriteLine(startTimem[i] + "badly");

				runTime[i]=getItemRunTime(lstTask.Items[i].ToString());

				waitTime[i]=waitTime[i-1] + runTime[i-1] ;
				
				if((startTimeh[i]-startTimeh[i-1])>0)
				{
					waitTime[i]=waitTime[i]+((startTimeh[i]-startTimeh[i-1])*60+getItemStartTimem(lstTask.Items[i].ToString())-getItemStartTimem(lstTask.Items[i-1].ToString()));
				
				}
				else
					waitTime[i]=waitTime[i]-(getItemStartTimem(lstTask.Items[i].ToString())-getItemStartTimem(lstTask.Items[i-1].ToString()));

				if(waitTime[i]<0)waitTime[i]=0;
				if (getItemStartTimeh(lstTask.Items[i].ToString())>startTimeh[i])
				{
					startTimeh[i]=getItemStartTimeh(lstTask.Items[i].ToString());
					startTimem[i]=getItemStartTimem(lstTask.Items[i].ToString());
					waitTime[i]=0;
				}
				else if(getItemStartTimeh(lstTask.Items[i].ToString())==startTimeh[i])
				{
					if(getItemStartTimem(lstTask.Items[i].ToString())>startTimem[i])
					{
						startTimem[i]=getItemStartTimem(lstTask.Items[i].ToString());
					}
					else
					{
						waitTime[i]=startTimem[i]-getItemStartTimem(lstTask.Items[i].ToString());

					}
					
				}
				T=T+runTime[i] + waitTime[i];
				W=W + Convert.ToDouble(runTime[i] + waitTime[i])/Convert.ToDouble(runTime[i]);
			}
			Console.WriteLine(T);
			T=T/Convert.ToDouble(lstTask.Items.Count);
			W=W/Convert.ToDouble(lstTask.Items.Count);
			txtResult.Text="名称|提交时间|执行时间|运行时间|等待时间\r\n";
			for(int j=0 ; j<lstTask.Items.Count ; j++ )
			{
				//lright[j]=(Convert.ToDouble(waitTime[j])+Convert.ToDouble(runTime[j]))/Convert.ToDouble(runTime[j]);//+ lright[j] 
				txtResult.AppendText( getItemTitle(lstTask.Items[j].ToString()) 
					+ "\t" + getItemStartTimeh(lstTask.Items[j].ToString()) + ":" 
					+ getItemStartTimem(lstTask.Items[j].ToString()) +  "\t" +startTimeh[j] + ":" 
					+ startTimem[j] + "\t"   + runTime[j]  + "\t "+ waitTime[j]  +  "\r\n");
			}
			txtResult.AppendText("平均周转时间:" + T.ToString() + "\r\n");
			txtResult.AppendText("平均带权周转时间:" + W.ToString() + "\r\n");
			
			
		}


		#endregion

		#region 平均周转时间
		
		double averageTime(int [] d,int n)
		{
			double daverage=0;
			for(int i=0 ; i < n ; i ++)
			{
				daverage=daverage+ Convert.ToDouble(d[i]);
			}
			daverage=daverage/Convert.ToDouble(n);
			return daverage;
		}

		#endregion

		#region 带权周转时间

		double averageTimeRight(int [] d , int [] dr ,int n)
		{
			double daverage=0;
			for(int i=0 ; i < n ; i ++)
			{
				daverage=daverage+ (Convert.ToDouble(d[i])+ Convert.ToDouble(dr[i]))/Convert.ToDouble(dr[i]);
			}
			daverage=daverage/Convert.ToDouble(n);
			return daverage;
		}

		#endregion

		#endregion




	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -