使用jfreechart制作图形报表
bromon原创 请尊重版权
一、需求分析
我家领导认为,在是否嫁给我做老婆的问题上,应该有更加科学的决策模型。如果能够将每天的感情生活量化,且以时间为x轴,生成数据报表,就可以为她的决策提供数据支持。秉着以领导意志为导向的基本原则,开发了本软件,为家庭信息化建设提供新的思路。
二、系统概述
本系统的基本功能是,接收用户每天的输入并保存,月/季度/年度末生成数据折线图、周期环比柱状图。由于投入资金有限(不让我往外掏钱就已经很不错了),所以本软件的1.0版采用单机应用程序,使用access数据库。如果市场推广情况良好,不排除推出大型frp软件(family resource project)的可能,届时将包含krm(kin relation manage,家族关系管理)、ha(house automatization,家庭自动化)等模块,利用强大的j2ee框架,为家庭信息化建设提供完整解决方案。
程序生成的目标图片效果如下:
三、系统要求
1、 开源工具包jfreechart-1.0.0-pre1.jar和它自己要使用的工具包jcommon-1.0.0-pre1.jar
下载地址:http://sourceforge.net/projects/jfreechart/
2、 女朋友一个。
请自行准备,暂不提供下载
下面主要讲述系统是如何从数据库中提取数据,然后生成图形报表的。(终于进入正题了。)
数据表结构:
curve_id 流水号 自动增长
curve_owner varchar(30) 区分是老公的数据还是老婆的数据
curve_cent double 当天分数
curve_year int 年
curve_month int 月
curve_day int 日
note text 备注
package org.bromon.fiona.curve.dao;
import java.util.*;
public class curvevo
{
private int year;
private int month;
private int day;
private double cent;
private string note;
private string owner;
//get/set方法
………….
}
package org.bromon.fiona.curve.util;
//一大堆import
public class drawpic
{
/**
*根据时间查询数据,将所得到的数据封装成timeseriescollection对象
*timeseriescollection是jfreechart中定义的类的对象
*本方法将被后面的draw方法调用
*@param int 要查询哪一年
*@param int 要查询哪一月
*@return timeseriescollection
*/
public timeseriescollection getdata(int year,int month)
{
//fiona的数据集合,其中存放的是上面定义过的curvevo值对象
//这些值对象的值来自于数据库,相关代码是最常见的jdbc内容,请自行完成
list dataoffiona=new arraylist();
//bromon的数据集合
list dataofbromon=new arraylist();
//构造要返回的对象
timeseriescollection result=new timeseriescollection();
//这两个对象,分别对应一条曲线,构造函数的参数,将显示在图片的下方
timeseries fiona=new timeseries("fiona");
timeseries bromon=new timeseries("bromon");
curvevo cv=null;
//遍历fiona的数据集,填充fiona对象
for(int i=0;i<dataoffiona.size();i++)
{
cv=(curvevo)dataoffiona.get(i);
fiona.add(new timeseriesdataitem(new day(cv.getday(),cv.getmonth(),cv.getyear()), new double(cv.getcent())));
}
result.addseries(fiona);
for(int i=0;i<dataofbromon.size();i++)
{
cv=(curvevo)dataofbromon.get(i);
bromon.add(new timeseriesdataitem(new day(cv.getday(),cv.getmonth(),cv.getyear()),new double(cv.getcent())));
}
result.addseries(bromon);
}
//生成图表的方法,图表数据来自上面的getdata方法
public string draw(int y,int m)
{
string result=null;
string title="bromon & fiona的爱情走势图";
string subtitle=y+"年"+m+"月";
string domain="时间";//x轴
string range="分值";//y轴
timeseriescollection data =this.getdata(y,m);
jfreechart chart =chartfactory.createtimeserieschart(title,domain,range,data,true,true,false);
texttitle subtitle =new texttitle(subtitle, new font("宋体", font.bold, 20));
chart.addsubtitle(subtitle);
chart.settitle(new texttitle(title, new font("宋体", font.italic, 20)));
chart.setbackgroundpaint(new gradientpaint(0, 0, color.white, 0, 1000, color.white));
c.settime(new date());
string filename="c:\\pics\\"+y+""+m+".jpg";//保存为位置
try
{
file f=new file("c:\\pics");
if(!f.exists())
{
f.mkdir();
}
chartutilities.savechartasjpeg(new file(filename), 100, chart, 1000, 600);//宽1000,高600
} catch (exception e)
{
e.printstacktrace();
}
result=filename;
return result;
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器