一需求分析
我家领导认为在是否嫁给我做老婆的问题上应该有更加科学的决策模型如果能够将每天的感情生活量化且以时间为X轴生成数据报表就可以为她的决策提供数据支持秉着以领导意志为导向的基本原则开发了本软件为家庭信息化建设提供新的思路
二系统概述
本系统的基本功能是接收用户每天的输入并保存月/季度/年度末生成数据折线图周期环比柱状图由于投入资金有限(不让我往外掏钱就已经很不错了)所以本软件的版采用单机应用程序使用Access数据库如果市场推广情况良好不排除推出大型FRP软件(Family Resource Project)的可能届时将包含KRM(Kin Relation Manage家族关系管理)HA(House Automatization家庭自动化)等模块利用强大的JEE框架为家庭信息化建设提供完整解决方案
程序生成的目标图片效果如下
三系统要求
开源工具包jfreechartprejar和它自己要使用的工具包jcommonprejar
下载地址
女朋友一个
请自行准备暂不提供下载
下面主要讲述系统是如何从数据库中提取数据然后生成图形报表的(终于进入正题了)
数据表结构
用于封装每个分数的值对象如下
package orgbromonfionacurvedao;
import javautil*;
public class CurveVo
{
private int year;
private int month;
private int day;
private double cent;
private String note;
private String owner;
//get/set方法
…………
}
生成图片的关键代码如下
package orgbromonfionacurveutil;
//一大堆import
public class DrawPic
{
/**
*根据时间查询数据将所得到的数据封装成TimeSeriesCollection对象
*TimeSeriesCollection是JfreeChart中定义的类的对象
*本方法将被后面的draw方法调用
*@param int 要查询哪一年
*@param int 要查询哪一月
*@return TimeSeriesCollection
*/
public TimeSeriesCollection getData(int yearint 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=;i<dataOfFionasize();i++)
{
cv=(CurveVo)dataOfFionaget(i);
fionaadd(new TimeSeriesDataItem(new Day(cvgetDay()cvgetMonth()cvgetYear()) new Double(cvgetCent())));
}
resultaddSeries(fiona);
for(int i=;i<dataOfBromonsize();i++)
{
cv=(CurveVo)dataOfBromonget(i);
bromonadd(new TimeSeriesDataItem(new Day(cvgetDay()cvgetMonth()cvgetYear())new Double(cvgetCent())));
}
resultaddSeries(bromon);
}
//生成图表的方法图表数据来自上面的getData方法
public String draw(int yint m)
{
String result=null;
String title=Bromon & Fiona的爱情走势图;
String subTitle=y+年+m+月;
String domain=时间;//x轴
String range=分值;//y轴
TimeSeriesCollection data =thisgetData(ym);
JFreeChart chart =ChartFactorycreateTimeSeriesChart(titledomainrangedatatruetruefalse);
TextTitle subtitle =new TextTitle(subTitle new Font(宋体 FontBOLD ));
chartaddSubtitle(subtitle);
chartsetTitle(new TextTitle(title new Font(宋体 FontITALIC )));
chartsetBackgroundPaint(new GradientPaint( Colorwhite Colorwhite));
csetTime(new Date());
String fileName=c:\\pics\\+y++m+jpg;//保存为位置
try
{
File f=new File(c:\\pics);
if(!fexists())
{
fmkdir();
}
ChartUtilitiessaveChartAsJPEG(new File(fileName) chart );//宽高
} catch (Exception e)
{
eprintStackTrace();
}
result=fileName;
return result;
}
//ok测试一下
public static void main(String args[])
{
new DrawPic()draw();
}
}
生成环比柱状图的相关内容整理后放出
JfreeChart的绘图功能很强大但是API的编写有些地方让人很不舒服很多元素要定制不容易如果有更好的API的话我很愿意使用当然免费是个很重要的前提