?? waterstatus.cs
字號:
namespace WaterStatus
{
using System;
using System.Data;
using System.Data.OleDb;
class WaterStatus
{
private const int WATERPOLNUM=9; //地表水污染物的種類數目 DO,COD,BOD5,NO2-N,石油類這五種
private const int MAXPOLNUM=9; //定義大氣,地表水,海水,噪聲這四個方面當中每一方面污染物種類數目的最大值
private const int POLGRADENUM=5; //污染劃分的等級數
private const int MAXRECORDNUM=800;
private int RECORDNUM=0;
//private OleDbConnection Myconnection;
private int [] PlaceID;//這個數組存放的是表格中存放的各個采樣地點的ID
private double [,] WaterRecord;//這個數組存放的是表格中存放的各個地區地表水污染物的測量值
private double [,] RMatrixWater;//這個數組存放的是地表水污染物的測量值 關于 五個污染等級 的隸屬度
//其中,數組的第一維~第五維存放的分別是 DO,COD,BOD5,NO2-N,石油類這五種污染物關于五個污染等級的隸屬度
private double [,] WaterPolStandard={ {15,15,20,30,40},
{1.0,1.0,1.0,1.5,1.5},
{0.005,0.05,0.2,0.2,0.2},
{0.00005,0.00005,0.0001,0.001,0.001},
{0.05,0.05,0.05,0.1,0.1},
{0.01,0.05,0.05,0.05,0.1},
{0.001,0.005,0.005,0.005,0.01},
{0.01,0.05,0.05,0.05,0.1},
{0.05,0.05,0.05,0.5,1.0} };
//這個數組的第一維~第五維存放的分別是DO,COD,BOD5,NO2-N,石油類這五種地表水污染物的 五個污染等級 的劃分標準
private double [] WaterPolValue;//這個數組存放的是五種地表水污染物的測量值
private double [] WaterPolWeight;//這個數組存放的是五種地表水污染物的歸一化權值
private double [] BWater;//這個數組存放的是對地表水污染情況的評估結果
private string WaterPolGrade;//地表水的污染等級
private string WaterMainPol;//地表水的主要污染物
private string WaterPol;//地表水的超標污染物
private void InitializePara()
{
int i,j,MinPolID=21,MaxPolID=29;
string connectstring,sql;
RMatrixWater=new double [WATERPOLNUM,POLGRADENUM];
//WaterPolStandard=new double [WATERPOLNUM,POLGRADENUM];
WaterPolValue=new double [WATERPOLNUM];
WaterPolWeight=new double [WATERPOLNUM];
BWater=new double [POLGRADENUM];
PlaceID=new int [MAXRECORDNUM];//這個數組存放的是表格中存放的各個采樣地點的ID
WaterRecord=new double [MAXRECORDNUM,WATERPOLNUM];
connectstring=@"Data Source=d:\environment.mdb;"+"Provider=Microsoft.Jet.OLEDB.4.0;";
OleDbConnection connection=new OleDbConnection(connectstring);
try
{
connection.Open();
//Console.WriteLine("Connection Established");
sql="select FirstGrade,SecondGrade,ThirdGrade,FourthGrade,FifthGrade from waterpolstandard where PollutantID<="+MaxPolID+" and PollutantID>="+MinPolID+" order by PollutantID";
OleDbCommand command = new OleDbCommand(sql,connection);
OleDbDataReader datareader=command.ExecuteReader();
//Console.WriteLine("\n\n");
i=0;
while(datareader.Read())
{
for(j=0;j<POLGRADENUM;j++)WaterPolStandard[i,j]=(double)datareader[j];
i++;
}
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();
}
try
{
connection.Open();
//Console.WriteLine("Connection Established");
sql="select ID,化學需氧量,氟化物,氰化物,總汞,總砷,總鉛,總鎘,六價鉻,石油類 from water order by ID";
OleDbCommand command = new OleDbCommand(sql,connection);
OleDbDataReader datareader=command.ExecuteReader();
//Console.WriteLine("\n\n");
i=0;
while(datareader.Read())
{
PlaceID[i]=(int)datareader[0];
for(j=0;j<WATERPOLNUM;j++)WaterRecord[i,j]=(double)datareader[j+1];
i++;
}
RECORDNUM=i;
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();
}
/*for(i=0;i<WATERPOLNUM;i++)
{
for(j=0;j<POLGRADENUM;j++)Console.Write(WaterPolStandard[i,j]+" ");
Console.Write("\n");
}*/
}
private void GetRelative()//計算某一方面(大氣,地表水,海水,噪聲)的每種污染物的測量值 對于 五個污染級別 的 隸屬度
{//WATERPOLNUM:該方面(大氣,地表水,海水,噪聲)的污染物種類的數目 WaterPolValue:該方面的各種污染物的測量值
//WaterPolStandard:該方面的各種污染物的五個污染等級的劃分標準 RMatrixWater:該方面的各種污染物關于五個污染等級的隸屬度
//kindofpol:污染的類型(大氣,地表水,海水,噪聲)
int i,j;
for(i=0;i<WATERPOLNUM;i++)//計算該方面的幾種污染物的測量值 對于 五個污染級別 的 隸屬度 在取區間的時候,取的都是左閉右開的區間,形如: a <= x < b
for(j=0;j<POLGRADENUM;j++)
{
if(j==0)//計算該方面的幾種污染物的測量值 對于 污染級別第1級 的 隸屬度
{
if(WaterPolValue[i]>=WaterPolStandard[i,j+1])RMatrixWater[i,j]=0;
else
if(WaterPolValue[i]<WaterPolStandard[i,j])RMatrixWater[i,j]=1;
else RMatrixWater[i,j]=(WaterPolStandard[i,j+1]-WaterPolValue[i])/(WaterPolStandard[i,j+1]-WaterPolStandard[i,j]);
}
else
if(j==POLGRADENUM-1)//計算該方面的幾種污染物的測量值 對于 污染級別第5級 的 隸屬度
{
if(WaterPolValue[i]>=WaterPolStandard[i,j])RMatrixWater[i,j]=1;
else
if(WaterPolValue[i]<WaterPolStandard[i,j-1])RMatrixWater[i,j]=0;
else RMatrixWater[i,j]=(WaterPolValue[i]-WaterPolStandard[i,j-1])/(WaterPolStandard[i,j]-WaterPolStandard[i,j-1]);
}//計算該方面的幾種污染物的測量值 對于 污染級別第2,3,4級 的 隸屬度
else
{
if( (WaterPolValue[i]>=WaterPolStandard[i,j+1])||(WaterPolValue[i]<WaterPolStandard[i,j-1]) )RMatrixWater[i,j]=0;
else
if( (WaterPolValue[i]>=WaterPolStandard[i,j-1])&&(WaterPolValue[i]<WaterPolStandard[i,j]) )RMatrixWater[i,j]=(WaterPolValue[i]-WaterPolStandard[i,j-1])/(WaterPolStandard[i,j]-WaterPolStandard[i,j-1]);
else RMatrixWater[i,j]=(WaterPolStandard[i,j+1]-WaterPolValue[i])/(WaterPolStandard[i,j+1]-WaterPolStandard[i,j]);
}
}
}
private void GetWeight()//計算該方面每種污染物的歸一化權值
{//WATERPOLNUM:該方面(大氣,地表水,海水,噪聲)的污染物種類的數目 PolValue:該方面的各種污染物的測量值
//PolWeight:該方面的各種污染物的歸一化權值
//PolStandard:該方面的各種污染物的五個污染等級的劃分標準 kindofpol:污染的類型(大氣,地表水,海水,噪聲)
int i,j,maxindex,pollutantnum=0,tmp;
double sum,tmpmax;int [] pollutant;
sum=0.0;pollutant=new int [WATERPOLNUM];
for(i=0;i<WATERPOLNUM;i++)//計算該方面各種污染物的權值 此后,數組PolValue存放的就是該方面的各種污染物的權值
{
WaterPolWeight[i]=WaterPolValue[i]/WaterPolStandard[i,2];//計算其他因子的權值
sum=sum+WaterPolWeight[i];
if(WaterPolValue[i]>=WaterPolStandard[i,2])//將含量超標的地表水污染物的序號記錄在pollutant數組當中,pollutantnum記錄的是含量超標的地表水污染物的數目
{
pollutant[pollutantnum]=i;
pollutantnum++;
}
}
if(sum==0.0){WaterMainPol="沒有明顯的污染物";WaterPol="沒有明顯的污染物";return;}
for(i=0;i<WATERPOLNUM;i++)WaterPolWeight[i]=WaterPolWeight[i]/sum;//對該方面各種污染物的權值進行歸一化
if(pollutantnum==0){WaterMainPol="沒有明顯的污染物";WaterPol="沒有明顯的污染物";return;}
for(i=0;i<pollutantnum;i++)//根據權值對超標的污染物進行排序
{
for(j=0;j<pollutantnum-i;j++)
{
if(WaterPolWeight[pollutant[j]]<=WaterPolWeight[pollutant[j+1]])
{
tmp=pollutant[j];
pollutant[j]=pollutant[j+1];
pollutant[j+1]=tmp;
}
}
}
WaterPol="";
for(i=0;i<pollutantnum;i++)
{
switch(pollutant[i])
{
case 0:WaterPol=WaterPol+"化學需氧量 ";break;
case 1:WaterPol=WaterPol+"氟化物 ";break;
case 2:WaterPol=WaterPol+"氰化物 ";break;
case 3:WaterPol=WaterPol+"總汞 ";break;
case 4:WaterPol=WaterPol+"總砷 ";break;
case 5:WaterPol=WaterPol+"總鉛 ";break;
case 6:WaterPol=WaterPol+"總鎘 ";break;
case 7:WaterPol=WaterPol+"六價鉻 ";break;
case 8:WaterPol=WaterPol+"石油類 ";break;
}
}
tmpmax=WaterPolWeight[0];maxindex=0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -