📄 monthdao.java
字号:
package com.dao;
import java.awt.*;
import javax.imageio.*;
import java.awt.image.*;
import java.sql.*;
import com.domain.MonthForm;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
public class MonthDao {
private JDBConnection connection = null;
public MonthDao() {
connection = new JDBConnection();
this.connection.creatConnection(); //利用构造方法调用类中的对象对数据库创建连接
}
public int rate(int month, int number) {
int rate = 0;
rate = month * 400 / number;
return rate;
}
//计算所有的月份流量的和
public int sum(int year) {
int number = 0;
String sql = "select sum(one+two+three+four+five+six+seven+eight+nine+ten+eleven+twleve) as number from tb_month where years='" +
year + "'";
ResultSet rs = connection.executeQuery(sql);
try {
while (rs.next()) {
number = rs.getInt("number");
}
} catch (SQLException ex) {
}
return number;
}
//查询所有的纪录
public List showMonth(int year) {
List list = new ArrayList();
MonthForm form = null;
String sql = null;
if (year < 2000) {
sql = "select * from tb_month order by years";
} else {
sql = "select * from tb_month where years=" + year + "";
}
ResultSet rs = connection.executeQuery(sql);
try {
while (rs.next()) {
form = new MonthForm();
form.setYear(rs.getInt(1));
list.add(form);
}
} catch (SQLException ex) {
}
connection.closeConnection();
return list;
}
public void draw(int year,HttpServletResponse response) {
// 清空缓冲区
response.reset();
// 注意这里的MIME类型,设置返回客户端的响应数据内容类型为图象,格式为png
response.setContentType("image/png");
// 创建一个 600X400 的图像
int width = 600, height = 400;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 创建Java2D对象,Java2D即对二维图表的支持
Graphics2D g2d = image.createGraphics();
//设置背景色并填充
g2d.setPaint(Color.WHITE);
g2d.fillRect(0, 0, width, height);
//设置图框色并填充
g2d.setPaint(Color.ORANGE);
g2d.fillRoundRect(0, 0, width, height, 50, 50);
//设置绘图区颜色并填充
g2d.setPaint(Color.WHITE);
g2d.fillRect(60, 80, 480, 260);
//定义标题
g2d.setColor(Color.RED); //设置字体颜色
g2d.setFont(new Font("华文隶书", Font.BOLD, 25)); //设置字体及大小
g2d.drawString(year + "年每个月占全年网站流量统计", 80, 60); //设置文字内容及输出位置
// 创建虚线笔划,设置线条颜色
float[] dashes = {3.f};
BasicStroke bs = new BasicStroke(1.0f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10, dashes, 0);
g2d.setStroke(bs);
g2d.setPaint(Color.BLACK);
//绘制标准线
int x = 100;
for (int i = 0; i < 11; i++) {
g2d.drawLine(x, 80, x, 340);
x = x + 40;
}
int y = 106;
for (int i = 0; i < 9; i++) {
g2d.drawLine(60, y, 540, y);
y = y + 26;
}
//绘制坐标轴文字
g2d.setColor(Color.BLACK); //设置字体颜色
g2d.setFont(new Font("华文隶书", Font.BOLD, 10)); //设置字体及大小
//x轴
String[] n = {" 一月", " 二月", " 三月", " 四月", " 五月", " 六月", " 七月",
" 八月", " 九月", " 十月", "十一月", "十二月"};
x = 66;
for (int i = 0; i < 12; i++) {
g2d.drawString(n[i], x, 350); //设置文字内容及输出位置
x = x + 40;
}
//y轴
String[] m = {"100%", " 90%", " 80%", " 70%", " 60%", " 50%", " 40%", " 30%",
" 20%", " 10%", " 0%"};
y = 83;
for (int i = 0; i < 11; i++) {
g2d.drawString(m[i], 32, y); //设置文字内容及输出位置
y = y + 26;
}
/*=================================================================*/
int[] jsp = new int[12];
int number = this.sum(year); //计算全年的总和
String sql = "select * from tb_month where years='" + year + "'";
ResultSet rs = connection.executeQuery(sql);
try {
while (rs.next()) {
jsp[0] = rs.getInt(2) * 100 / number;
jsp[1] = rs.getInt(3) * 100 / number;
jsp[2] = rs.getInt(4) * 100 / number;
jsp[3] = rs.getInt(5) * 100 / number;
jsp[4] = rs.getInt(6) * 100 / number;
jsp[5] = rs.getInt(7) * 100 / number;
jsp[6] = rs.getInt(8) * 100 / number;
jsp[7] = rs.getInt(9) * 100 / number;
jsp[8] = rs.getInt(10) * 100 / number;
jsp[9] = rs.getInt(11) * 100 / number;
jsp[10] = rs.getInt(12) * 100 / number;
jsp[11] = rs.getInt(13) * 100 / number;
}
} catch (SQLException ex1) {
}
g2d.setPaint(Color.GREEN);
x = 70;
for (int i = 0; i < 12; i++) {
g2d.fillRect(x, 340 - jsp[i] * 26 / 10, 20, jsp[i] * 26 / 10);
x = x + 40;
}
// 部署图形
g2d.dispose();
// 利用ImageIO类的write方法对图像进行编码,生成png格式的图象
ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
ImageIO.write(image, "PNG", sos);
sos.close();
} catch (Exception ex) {
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -