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

📄 dbscandraw.jsp

📁 数据挖掘,聚类分析,DBSCAN JAVA的实现,
💻 JSP
字号:
<%@ page contentType="image/jpeg; charset=gb2312" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.awt.image.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> DBSCAN算法实现 </TITLE>
<META NAME="Author" CONTENT="方泽明@hubu.edu.cn">
<META NAME="Keywords" CONTENT="dbscan算法">
<META NAME="Description" CONTENT="本程序将实现dbscan算法.该算法依次考察每个对象在半径e内的对象的个数,并将数目大于最少数目MinPts的对象称为核心对象,将核心对象半径e内的所有对象作为一个簇.">
</HEAD>
<BODY>
<% //定义全局变量
   String Pronum=request.getParameter("MaxPronum");    //记录的属性个数
   String Objnum=request.getParameter("MaxObjnum");    //记录的个数
   String stre=request.getParameter("e");              //半径的大小
   String strMinPts=request.getParameter("MinPts");
   Integer MaxPronum=Integer.parseInt(Pronum);
   Integer MaxObjnum=Integer.parseInt(Objnum);
   Integer e=Integer.parseInt(stre);
   Integer MinPts=Integer.parseInt(strMinPts);
%>
<%
//连接数据库
String driverName="com.mysql.jdbc.Driver";//驱动程序名
String userName="fangzm";          //数据库用户名
String userPasswd="fang";          //密码
String dbName="transaction";       //数据库名
String tableName="dbscan";         //表名
String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
//获得数据结果集
String sql="SELECT * FROM "+tableName;
ResultSet rs = statement.executeQuery(sql);

int []kind=new int[MaxObjnum+1];    //标记每一个记录是否是核心对象(值与下标相等),是否已被处理(初始值为0,否则值为所属类别编号)
int color=0;//簇的个数,每个簇对应一种颜色
int []colorkind=new int[MaxObjnum+1]; 
for(int i=0;i<=MaxObjnum;i++)
    kind[i]=0;
for(int i=1;i<=MaxObjnum;i++)
{
	if(kind[i]==0)
	{
		int []recond=new int[MaxPronum]; //当前记录的属性值
		int []temp=new int[MaxPronum];   //临时存入用于计算的记录的属性值
		int near=0;                      //当前记录半径e内的记录数目
		int []nearid=new int[MaxObjnum];    //当前记录半径e内的记录id
		rs.absolute(i);
		for(int j=0;j<MaxPronum;j++)    
			recond[j]=rs.getInt(j+2);
		rs.beforeFirst();                //扫描数据库;
		while(rs.next())
		{
			if(kind[rs.getInt(1)]==0)       //只考虑未处理过的记录
			{
				for(int j=0;j<MaxPronum;j++)
					temp[j]=rs.getInt(j+2);
				int E=0;
				for(int j=0;j<MaxPronum;j++)  //计算两个记录之前的距离的平方
					E+=Math.pow(recond[j]-temp[j],MaxPronum);
				if(E<Math.pow(e,MaxPronum))
					nearid[near++]=rs.getInt(1); 
			}
		}
		if(near>=MinPts)                 //若为核心对象
		{
			int j=0;
			color++;
			while(nearid[j]!=0)
			{
				kind[nearid[j]]=i;
				colorkind[nearid[j]]=color;
				j++;
			}
		}
	}
}
// Create image
int width=800, height=800;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// Get drawing context  
Graphics g = image.getGraphics();
// Fill background
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
for(int i=1;i<=MaxObjnum;i++)
{
	rs.absolute(i);
	int []recond=new int[2];
	for(int j=0;j<2;j++)    
			recond[j]=rs.getInt(j+2)*10;
	if(kind[i]==i)
	{
		g.setColor(Color.red);
		g.drawRect(recond[0]-5,recond[1]-5,10,10);
		g.fillRect(recond[0]-5,recond[1]-5,10,10);
		g.drawOval(recond[0]-e*10,recond[1]-e*10,e*20,e*20);
	}
	else
	{
		if(colorkind[i]==1)
			g.setColor(Color.black);
		else if(colorkind[i]==2)
			g.setColor(Color.blue);
		else if(colorkind[i]==3)
			g.setColor(Color.cyan);
		else if(colorkind[i]==4)
			g.setColor(Color.gray);
		else if(colorkind[i]==5)
			g.setColor(Color.green);
		else if(colorkind[i]==6)
			g.setColor(Color.magenta);
		else if(colorkind[i]==7)
			g.setColor(Color.pink);
		else g.setColor(Color.yellow);
		g.drawRect(recond[0]-5,recond[1]-5,10,10);
		g.fillRect(recond[0]-5,recond[1]-5,10,10);
	}

}
// Dispose context
g.dispose();
// Send back image
ServletOutputStream sos = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
encoder.encode(image);
rs.close();
statement.close();
connection.close();
%>
</BODY>
</HTML>

⌨️ 快捷键说明

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