📄 waterstatus.cs
字号:
for(i=0;i<WATERPOLNUM;i++)//找出对该方面的污染贡献最大的污染物
{
if(tmpmax<=WaterPolWeight[i])
{
tmpmax=WaterPolWeight[i];
maxindex=i;
}
}
switch(maxindex)
{
case 0:WaterMainPol="化学需氧量 ";break;
case 1:WaterMainPol="氟化物 ";break;
case 2:WaterMainPol="氰化物 ";break;
case 3:WaterMainPol="总汞 ";break;
case 4:WaterMainPol="总砷 ";break;
case 5:WaterMainPol="总铅 ";break;
case 6:WaterMainPol="总镉 ";break;
case 7:WaterMainPol="六价铬 ";break;
case 8:WaterMainPol="石油类 ";break;
}
for(i=0;i<WATERPOLNUM;i++)//找出对该方面的污染贡献最大的污染物
{
if(i!=maxindex)
{
if( (WaterPolWeight[maxindex]-WaterPolWeight[i])<=0.0001 )
{
switch(i)
{
case 0:WaterMainPol=WaterMainPol+"化学需氧量 ";break;
case 1:WaterMainPol=WaterMainPol+"氟化物 ";break;
case 2:WaterMainPol=WaterMainPol+"氰化物 ";break;
case 3:WaterMainPol=WaterMainPol+"总汞 ";break;
case 4:WaterMainPol=WaterMainPol+"总砷 ";break;
case 5:WaterMainPol=WaterMainPol+"总铅 ";break;
case 6:WaterMainPol=WaterMainPol+"总镉 ";break;
case 7:WaterMainPol=WaterMainPol+"六价铬 ";break;
case 8:WaterMainPol=WaterMainPol+"石油类 ";break;
}
}
}
}
}
private void GetSingleResult()//计算大气,地表水,海水,噪声这四个方面每方面的污染情况评估结果
{//WATERPOLNUM:该方面(大气,地表水,海水,噪声)的污染物种类的数目 WaterPolWeight:该方面的各种污染物的归一化权值
//RMatrixWater:该方面的各种污染物关于五个污染等级的隶属度 BWater:该方面的污染情况评价结果
//WaterPolGrade:污染的级别(第一级 清洁,第二级 尚清洁,第三级 轻污染,第四级 中污染,第五级 重污染)
int i,j,maxindex;bool morethanone;
double [] temp;
double tmpmax,sum;
temp=new double [MAXPOLNUM];
sum=0.0;
for(j=0;j<POLGRADENUM;j++)//计算 B = A 。 R
{ // 污染情况的评价结果 污染物的归一化权值矩阵 污染物的隶属度矩阵
for(i=0;i<WATERPOLNUM;i++)//计算方法:采用 n算子 和 v算子 进行复合运算
{//求出两个数当中的较小者,即,两个数进行"n"模糊运算 AnB=min(A,B)
temp[i]=WaterPolWeight[i]<RMatrixWater[i,j]?WaterPolWeight[i]:RMatrixWater[i,j];
}
tmpmax=temp[0];
for(i=0;i<WATERPOLNUM;i++)
{//求出几个数当中的较大者,即,几个数进行"v"模糊运算 AvBvCv...vG=max(A,B,C,...,G)
if(tmpmax<=temp[i])tmpmax=temp[i];
}
BWater[j]=tmpmax;
sum=sum+tmpmax;
}
if(sum==0.0){ WaterPolGrade="第一级--清洁";return;}
for(j=0;j<POLGRADENUM;j++)BWater[j]=BWater[j]/sum;//归一化
tmpmax=BWater[0];maxindex=0;
for(j=0;j<POLGRADENUM;j++)//求出 B污染情况的评价结果 的5个分量中的最大值
{
if(tmpmax<=BWater[j])
{
tmpmax=BWater[j];
maxindex=j;
}
}
morethanone=false;
for(j=0;j<POLGRADENUM;j++)//检查 B污染情况的评价结果 的其它分量中是否有哪个分量 与 B污染情况的评价结果 的 最大分量 特别接近
{
if(j!=maxindex)
{
if( (tmpmax-BWater[j])<=0.0001 )morethanone=true;
}
}
if(morethanone==true)//B污染情况的评价结果 的其它分量中有某个分量 与 B污染情况的评价结果 的 最大分量 特别接近 就要重新计算 B污染情况的评价结果
{
sum=0.0;
for(j=0;j<POLGRADENUM;j++)//计算 B = A 。 R
{ // 污染情况的评价结果 污染物的归一化权值矩阵 污染物的隶属度矩阵
for(i=0;i<WATERPOLNUM;i++)//计算方法:采用 .算子 和 v算子 进行运算
{//求出两个数的点积
temp[i]=WaterPolWeight[i]*RMatrixWater[i,j];
}
tmpmax=temp[0];
for(i=0;i<WATERPOLNUM;i++)
{//求出几个数当中的较大者,即,几个数进行"v"模糊运算 AvBvCv...vG=max(A,B,C,...,G)
if(tmpmax<=temp[i])tmpmax=temp[i];
}
BWater[j]=tmpmax;
sum=sum+tmpmax;
}
if(sum==0.0){ WaterPolGrade="第一级--清洁";return;}
for(j=0;j<POLGRADENUM;j++)BWater[j]=BWater[j]/sum;//归一化
tmpmax=BWater[0];maxindex=0;
for(j=0;j<POLGRADENUM;j++)//求出 B污染情况的评价结果 的5个分量中的最大值
{
if(tmpmax<=BWater[j])
{
tmpmax=BWater[j];
maxindex=j;
}
}
}
switch(maxindex)
{
case 0 : WaterPolGrade="第一级--清洁";break;
case 1 : WaterPolGrade="第二级--尚清洁";break;
case 2 : WaterPolGrade="第三级--轻污染";break;
case 3 : WaterPolGrade="第四级--中污染";break;
case 4 : WaterPolGrade="第五级--重污染";break;
}
}
private void GetWaterStatus()
{
int i,j;
GetRelative();
GetWeight();
GetSingleResult();
/*Console.Write("R地表水:\n");
for(i=0;i<WATERPOLNUM;i++)
{
for(j=0;j<POLGRADENUM;j++)Console.Write(RMatrixWater[i,j]+" ");
Console.Write("\n");
}
Console.Write("\nA地表水=(");
for(i=0;i<WATERPOLNUM;i++)Console.Write(WaterPolWeight[i]+" ");
Console.Write(")\n");
Console.Write("\nB地表水=(");
for(i=0;i<POLGRADENUM;i++)Console.Write(BWater[i]+" ");
Console.Write(")\n");
Console.Write("\n地表水的污染等级:"+WaterPolGrade+"\n");
Console.Write("对地表水污染贡献最大的污染物:"+WaterMainPol+"\n");*/
//Console.ReadLine();
}
private void SaveResult(int MyIndex,OleDbConnection Myconnection)
{
string sql;
sql="insert into waterpolresult values('"+PlaceID[MyIndex]+"','" + WaterPolGrade+"','"+WaterMainPol+"','"+WaterPol+"');";
OleDbCommand command = new OleDbCommand(sql,Myconnection);
command.ExecuteNonQuery();
}
public void GetPolStatus()
{
int i,j;string connectstring,sql;OleDbConnection connection;
InitializePara();
connectstring=@"Data Source=d:\environment.mdb;"+"Provider=Microsoft.Jet.OLEDB.4.0;";
connection=new OleDbConnection(connectstring);
try
{
connection.Open();
sql="delete * from waterpolresult";
OleDbCommand command = new OleDbCommand(sql,connection);
command.ExecuteNonQuery();
for(i=0;i<RECORDNUM;i++)
{
for(j=0;j<WATERPOLNUM;j++)WaterPolValue[j]=WaterRecord[i,j];
GetWaterStatus();
SaveResult(i,connection);
}
connection.Close();
}
catch(OleDbException e)
{
Console.WriteLine("An error occured!");
Console.WriteLine("Your error message is"+e.Message);
Console.ReadLine();
}
catch(SystemException e)
{
Console.WriteLine("An error occured!");
Console.WriteLine("Your error message is"+e.Message);
Console.ReadLine();
}
catch(Exception e)
{
Console.WriteLine("An error occured!");
Console.WriteLine("Your error message is"+e.Message);
Console.ReadLine();
}
}
public static void Main()
{
WaterStatus waterstatus=new WaterStatus();
waterstatus.GetPolStatus();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -