从你给的这些代码很难看出什么名堂来。

解决方案 »

  1.   

    import java.io.*;
    import java.sql.*;
    import java.awt.*;
    import java.util.Vector;
    import java.util.Date;
    import java.text.*;
    import javax.servlet.*;
    import javax.servlet.http.*;import Acme.JPM.Encoders.*;public class SwxxYl_sqcb extends HttpServlet {
    private Connection conn=null;
    private Statement stmt=null;
    private ResultSet result=null;
    private Vector ht=new Vector(),tt=new Vector();
    String driverName="sun.jdbc.odbc.JdbcOdbcDriver";
    String dburl="jdbc:odbc:book";
    String userName="sa";
    String passWord="";
    String sqlString=null;
    String dt=null;
    int czshu=0;//测站数
    Czgk[] csxx; //测站概况表
    int[] sjNew;
    float[] tjYuLiang;
    // int shijian[][];//时间
    // float yuliang[][];//雨量
    public void init(ServletConfig config)
    throws ServletException
    {
    super.init(config);
    }
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    throws ServletException,IOException
    {
    ServletOutputStream out=res.getOutputStream();
    Frame f=null;
    Graphics g=null;
    try {
    if(conn==null || conn.isClosed()) {
    userName=req.getParameter("userName");
    if(userName==null) userName="sa"; passWord=req.getParameter("passWord");
    if(passWord==null) passWord=""; createConn(driverName,dburl);
    }
    }catch (SQLException e) {
    e.printStackTrace();
    } tjgk();//统计概况表
    dt=req.getParameter("dt");//取起始时间
    if (!(dt.trim()).equalsIgnoreCase("null"))
    {
    System.out.println(dt);
    dt=dt.trim();
    }
    else
    {
    dt="2000-12-2 16:00:00";
    System.out.println(dt);
    }
    tjyl();//统计雨量表 String cznum=req.getParameter("cznum");//取测站编码
    if (cznum==null) cznum="1";
    createSql(cznum); try {
    f=new Frame();
    f.addNotify();
    Image img=f.createImage(600,350);
    g=img.getGraphics(); if (execQuery(sqlString)) {
    // g.setFont(new Font("serif",Font.ITALIC,32));
    drawXY(g);
    drawQx(g);
    }
    else {
    g.drawString("数据库创建失败!",200,150);
    } res.setContentType("image/gif");
    GifEncoder encoder=new GifEncoder(img,out);
    encoder.encode(); if (result!=null) result.close();
    if (stmt!=null) stmt.close();
    }
    catch(IOException e) {
    e.printStackTrace();
    }
    catch(SQLException e) {
    e.printStackTrace();
    }
    finally {
    if(g!=null) g.dispose();
    if(f!=null) f.removeNotify();
    if (csxx!=null) csxx=null;
    if (sjNew!=null) sjNew=null;
    if (tjYuLiang!=null) tjYuLiang=null;
    if(ht!=null) ht.removeAllElements();
    if(tt!=null) tt.removeAllElements();
    }
    }
    public void tjgk() {//统计概况表
    sqlString="select * from 测站概况表";
    if (execQuery(sqlString)) System.out.println("查询成功");
    try {
    result.last();
    //while(result.next()) czshu++;
    czshu=result.getRow();
    if (czshu >0) {
    csxx=new Czgk[czshu];
    for(int ii=0;ii<czshu;ii++)  csxx[ii]=new Czgk();
    // shijian=new int[czshu][];
    // yuliang=new float[czshu][];
    }
    System.out.println("" + czshu);
    int i=0;
    //result.close();
    //stmt.close();
    //if (execQuery(sqlString)) System.out.println("查询成功");
    result.beforeFirst();
    while(result.next()) {
    csxx[i].czbh=result.getString("测站编码");//
    csxx[i].kzmj=result.getFloat("控制面积");//
    System.out.println(csxx[i].czbh + "       " + csxx[i].kzmj);
    i++;
    }
    result.close();
    stmt.close();
    }
    catch(SQLException e) {
    e.printStackTrace();
    }
    } public void tjyl() { //统计雨量表
    for(int i=0;i<czshu;i++) {
    System.out.println(csxx[i].czbh + "       " + csxx[i].kzmj);
    createSql(csxx[i].czbh);
    execQuery(sqlString);
    try {
    result.last();
    int recshu=result.getRow();
    if (recshu >0) {
    csxx[i].shijian=new int[recshu];
    csxx[i].yuliang=new float[recshu];
    }
    /*else {//确保不是空指针
    csxx[i].shijian=new int[1];
    csxx[i].yuliang=new float[1];
    }*/
    if (recshu >0) {
    int j=0;
    result.first();
    do {
    csxx[i].shijian[j]=dstr(result.getString("时间"));
    csxx[i].yuliang[j]=result.getFloat("降雨量");
    System.out.println("" + csxx[i].shijian[j] + "       " + csxx[i].yuliang[j]);
    j++;
    } while(result.next());
    } result.close();
    stmt.close();
    }
    catch(SQLException e) {
    e.printStackTrace();
    }
    } } public void createSql(String cznum) {
    //int years,months,dates,hours;
    //日期格式
    SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //解析位置
    ParsePosition pos = new ParsePosition(0);
    //产生Date对象
    java.util.Date now = formatter.parse(dt, pos);
    //间隔1天生成另一Date对象
    long sj=now.getTime()+24*3600*1000;
    java.util.Date now1 = new java.util.Date(sj); //产生查询字符串
    sqlString="SELECT * FROM 时段为1小时降雨量表 where 时间 between '" +
    formatter.format(now)+ "' and '" + formatter.format(now1) + "'";
    sqlString=sqlString + "and 测站编码=" +cznum ; //System.out.println(sqlString);
    } public void drawXY(Graphics g) {//坐标
    g.drawRect(0,0,599,399);//原点:50,20,图像尺寸:600X400
    g.drawLine(50,300,580,300);//x
    g.drawLine(50,300,50,20);//y
    g.drawString("时间t(h)",530,315);
    g.drawString("降水量",5,35);
    g.drawString("P(mm)",5,50);
    //g.drawString(dt,130,100);
    //dt表示起始时间
    drawKD(g,24,dealstr(dt));
    }
    public int dealstr(String dt) {//返回小时数
    if (dt!=null) {
    SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    ParsePosition pos = new ParsePosition(0);
    java.util.Date currentTime_2 = formatter.parse(dt, pos);
    return currentTime_2.getHours();
    }
    return 8;
    }
    public void drawKD(Graphics g,int num,int dt) { //画刻度
    for(int i=1;i<num;i++)  { //x
    g.drawLine(50+i*20*(24/num),305,50+i*20*(24/num),295);
    g.drawString(Integer.toString((i+dt)%num==0?num:(i+dt)%num),50+i*20*(24/num)-3,318);
    } for(int i=1;i<=10;i++) { //y
    g.drawLine(45,300-i*24,55,300-i*24);
    g.drawString (Integer.toString(i*15),18,300-i*24+5);
    }
    }
    public int dstr(String s) { //处理当前时间与初始时间的差值
    SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    ParsePosition pos = new ParsePosition(0);
     //System.out.println(dt);
    Date currentTime_2 = formatter.parse(dt, pos); //初始时间 pos = new ParsePosition(0);
     //System.out.println(s);
    Date currentTime_3 = formatter.parse(s, pos); //当前时间
    long cha=currentTime_3.getTime()-currentTime_2.getTime();
    return (int)(cha/60000);//转成分钟 }
    public void drawQx(Graphics g) throws SQLException {
    getHt();//把时间和雨量存入vector中
    int size=tt.size();
    //把时间和雨量存入数组中
    int sjian[]=new int[size];
    float yliang[]=new float[size];
    //System.out.println("length:"+size); for(int i=0;i<size;i++) {
    sjian[i]=dstr((String)tt.elementAt(i));
    yliang[i]=Float.valueOf((String)ht.elementAt(i)).floatValue();
    } g.setColor(Color.blue);
    drawZft(g,sjian,yliang);//画直方图
    drawJsLjx(g,sjian,yliang);//雨量累计线
    shuzuConvert();
    g.setColor(Color.red);
    drawJsLjx(g,sjNew,tjYuLiang);//流域面降水累计线
    }
    public void shuzuConvert() {
    int sjlen=0;
    int sj[];
    //取时间长度
    // czshu=2;
    for(int i=0;i<czshu;i++) {
    if (csxx[i].shijian!=null) sjlen+=csxx[i].shijian.length;
    }
    System.out.println("sjlen:" + sjlen);
    //时间一维化
    sj=new int[sjlen];
    int sjCount=0;
    for(int i=0;i<czshu;i++) {
    //System.out.println("i=" + i + "   csxx[i]=" + csxx[i]);
    if ( csxx[i].shijian!=null )
    for(int j=0; j<csxx[i].shijian.length;j++) {
    //System.out.println("j=" + j);
    sj[sjCount++]=csxx[i].shijian[j];
    }
    }
    //排序
    int minValue=0;
    for(int i=0;i<sj.length;i++) {
    for(int j=i;j<sj.length;j++) {
    if (sj[i]>sj[j]) {
    minValue=sj[j];
    sj[j]=sj[i];
    sj[i]=minValue;
    }
    }
    }
    //去掉重复元素
    //统计不同元素的个数
    sjCount=sj.length;
    for(int i=1;i<sj.length;i++)
    if (sj[i]==sj[i-1]) sjCount--; sjNew=new int[sjCount];
    int cnt=1;
    for(int i=0;i<sj.length;i++) {
    if (i==0) {
    sjNew[i]=sj[i];
    cnt=1;
    }
    else {
    if (sj[i]!=sj[i-1]) sjNew[cnt++]=sj[i];
    }
    }
    System.out.println("sjNew.length="+sjNew.length);
    for(int i=0;i<sjNew.length;i++)
    System.out.println(""+sjNew[i]);
    //填充数据
    //初始化数据
    float[][] lsYuLiang;
    lsYuLiang = new float[czshu][];
    for(int i=0;i<czshu;i++) {
    lsYuLiang[i]=new float[sjNew.length];
    }
    for(int i=0;i<czshu;i++) {
    if (csxx[i].shijian!=null)
    for (int j=0;j<csxx[i].shijian.length;j++) {
    int col=chaZhi(csxx[i].shijian[j],sjNew);
    if (col!=-1)
    lsYuLiang[i][col]=csxx[i].yuliang[j];
    }
    }
    //求权值系数
    float[] qzxs=new float[czshu];
    float totalArea=0;
    for(int i=0;i<czshu;i++) totalArea+=csxx[i].kzmj;
    for(int i=0;i<czshu;i++) {
    qzxs[i]=csxx[i].kzmj/totalArea;
    System.out.println("qzxs["+i+"]="+qzxs[i]);
    }
    //统计雨量值
    tjYuLiang=new float[sjNew.length];
    for(int j=0;j<sjNew.length;j++) {
    for(int i=0;i<czshu;i++) tjYuLiang[j]+=lsYuLiang[i][j]*qzxs[i];
    }
    System.out.println();
    for(int i=0;i<tjYuLiang.length;i++) {
    System.out.println("tjYuLiang[" + i+"]="+tjYuLiang[i]);
    }
    }
    public int chaZhi(int x,int[] y) {
    for(int i=0;i<y.length;i++) {
    if (x==y[i]) return i;
    }
    return -1;
    }/* public void drawLyLjx(Graphics g) {//流域面降水累计线
    g.setColor(Color.red);
    }*/ public void drawZft(Graphics g,int[] sj,float[] yl) {//直方图
    int spx=0;
    System.out.println("length:"+sj.length);
    for(int i=0;i<sj.length;i++) {
    System.out.println(""+sj[i]+"  "+yl[i]);
    if (i==0) {
    Polygon p=new Polygon();
    p.addPoint(50,300);
    p.addPoint(50,300-(int)(yl[i]/15*24));
    p.addPoint(50+(int)(sj[i]/60.0*20.0),300-(int)(yl[i]/15*24));
    p.addPoint(50+(int)(sj[i]/60.0*20.0),300);
    p.addPoint(50,300);
    g.fillPolygon(p);
    spx=50+(int)(sj[i]/60.0*20.0);
    }
    else {
    Polygon p=new Polygon();
    if ((50+(int)(sj[i]/60.0*20.0)-spx) > 20) {
     spx=30+(int)(sj[i]/60.0*20.0);
    // System.out.println(""+sj[i]+":" + "true");
    } p.addPoint(spx,300);
    p.addPoint(spx,300-(int)(yl[i]/15*24));
    p.addPoint(50+(int)(sj[i]/60.0*20.0),300-(int)(yl[i]/15*24));
    p.addPoint(50+(int)(sj[i]/60.0*20.0),300);
    p.addPoint(spx,300);
    g.fillPolygon(p);
    spx=50+(int)(sj[i]/60.0*20.0);
    }
    }
    }
    public void drawJsLjx(Graphics g,int[] sj,float[] yl) {//雨量累计线
    float yulj=0;
    int spx=0;
    for(int i=0;i<sj.length;i++) {
    //System.out.println(""+sj[i]+"  "+yl[i]);
    if (i==0) {
    yulj+=yl[i];
    g.drawLine(50,300-(int)(yl[i]/15*24),50,300-(int)(yl[i]/15.0*24));
    spx=50+(int)(sj[i]/60.0*20.0);
    }
    else {
    yulj+=yl[i];
    if ((50+(int)(sj[i]/60.0*20.0)-spx) > 20) {
    g.drawLine(spx,300-(int)((yulj-yl[i])/15.0*24.0),
    30+(int)(sj[i]/60.0*20.0),300-(int)((yulj-yl[i])/15.0*24.0));
      spx=30+(int)(sj[i]/60.0*20.0);
    g.drawLine(spx,300-(int)((yulj-yl[i])/15.0*24.0),
    50+(int)(sj[i]/60.0*20.0),300-(int)(yulj/15.0*24.0));
    // System.out.println(""+sj[i]+":" + "true");
    }
    else {
    g.drawLine(spx,300-(int)((yulj-yl[i])/15.0*24.0),
    50+(int)(sj[i]/60.0*20.0),300-(int)(yulj/15.0*24.0));
    } spx=50+(int)(sj[i]/60.0*20.0);
    }
    }
    }
    public void getHt() throws SQLException {
    while(result.next()) {
    tt.addElement(result.getString("时间").toString());
    ht.addElement(String.valueOf( result.getFloat("降雨量")));
    }
    }
    private boolean execQuery(String sqlString) {//创建查询
    try {
    //stmt = conn.createStatement();
                stmt = conn.createStatement(
                            ResultSet.TYPE_SCROLL_INSENSITIVE,
                            ResultSet.CONCUR_READ_ONLY
                       ); result = stmt.executeQuery(sqlString);
    return true;
    } catch(SQLException e) {
    System.out.println(e.toString());
    return false;
    } }
    private void createConn(String driverName,String dbURL) {//建立连接
    try {
    Class.forName(driverName);
    conn=DriverManager.getConnection(dbURL,userName,passWord);
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    }
    catch(ClassNotFoundException e)
    {
    e.printStackTrace();
    }
    }
    public void destroy() {
    try {
    conn.close();
    }
    catch(Exception e) {
    System.out.println(e.toString());
    }
    }
    }class Czgk {
    String czbh;
    float kzmj;
    int[] shijian;
    float[] yuliang;
    }
    全部代码在此