一、需求分析
我家领导认为,在是否嫁给我做老婆的问题上,应该有更加科学的决策模型。如果能够将每天的感情生活量化,且以时间为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、 女朋友一个。
请自行准备,暂不提供下载
下面主要讲述系统是如何从数据库中提取数据,然后生成图形报表的。(终于进入正题了。)
数据表结构:
用于封装每个分数的值对象如下:
生成图片的关键代码如下:
生成环比柱状图的相关内容,整理后放出。
jfreechart的绘图功能很强大,但是api的编写有些地方让人很不舒服,很多元素要定制不容易。如果有更好的api的话,我很愿意使用,当然,免费是个很重要的前提。
我家领导认为,在是否嫁给我做老婆的问题上,应该有更加科学的决策模型。如果能够将每天的感情生活量化,且以时间为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="http://www.itus.cnc://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;
}
//ok,测试一下
public static void main(string args[])
{
new drawpic().draw(2005,3);
}
} 生成环比柱状图的相关内容,整理后放出。
jfreechart的绘图功能很强大,但是api的编写有些地方让人很不舒服,很多元素要定制不容易。如果有更好的api的话,我很愿意使用,当然,免费是个很重要的前提。

闽公网安备 35060202000074号