一个关于用JAVA实现生产数据分析的想法及实现

一、项目简介

本项目是一个挖掘行业的ERP系统的子模块,实现其生产调度方面的管理。

二、生产数据分析系统的整体需求

1、  用户分为三个层次(根据其组织结构)集团公司、指挥部、厂矿。

           各个层次的用户分析的数据不同,厂矿、指挥部、集团公司依次是汇总关系。

2、  生产数据分析的类别:各层次用户的总产量、总产量的子类别产量。

3、  生产数据分析的阀值:年、月、日

4、  要求产生的图表及分析形式:各阀值的产量走势图、柱状图

5、  要求根据鼠标的实时移动动态产生阀值的日期、计划产量、实际产量、超欠量[部门根据用户确定]

三、资源及环境情况

数据库服务器IBMP670、应用服务器SUME650、应用程序服务器TOMCAT5(调试)、WebSphere  ORACLE9I

分析系统所需要的数据已经由其他系统产生。

四、生产数据分析系统的运行模式

JAVA桌面程序、JWS部署、以原来的数据库连接池连接数据库获得数据

五、实现的构想

   

注释:为了充分利用原来的资源,不进行单独写对数据库的操作,而是利用JAVA客户端程序与一SERVLET进行通讯,而此SERVLET可以充分利用原来开发的操作数据库的类库。

六、JavaClient的实现

 

系统界面基础类

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BaseWindow extends JFrame implements MouseMotionListener{
 BaseWindow () {
  /**
   *增加鼠标移动监听
   */
   addMouseMotionListener(this);
  /**
   *把屏幕的构件显示形式为WINDOW模式
   */
   String UIlaf = UIManager.getSystemLookAndFeelClassName();
   try {
    UIManager.setLookAndFeel(UIlaf);
  }catch(Exception e) {
   System.out.println("不能改变构件显示模式。错误:"+e.getMessage());
  }
  /**
   *设置如果用户强行退出系统时,系统的动作
   */
   this.setDefaultCloseOperation(EXIT_ON_CLOSE);
   /**
    *设置系统的显示模式为800*600 16 等
    */
    GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice device = environment.getDefaultScreenDevice();
    DisplayMode displayMode = new DisplayMode(1024,768,32,75);
    /**
     *设置系统为全屏幕方式
     */
     this.setUndecorated(true);
     device.setFullScreenWindow(this);
     device.setDisplayMode(displayMode);
  }
  public void mouseDragged(MouseEvent e) {
                       mouseMoved(e);
                 }
         public void mouseMoved(MouseEvent e) {   
               
          }
 }
   

               

 系统主界面类

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.Calendar;

public class AnalysisMainWindow extends BaseWindow {
 public static void main(String[] args) {
  AnalysisMainWindow AMW = new AnalysisMainWindow();
  AMW.run();
 }
 /**************************************************************************************************
  *下面定义的变量主要是为了描绘系统主界面用
  *
  **************************************************************************************************/
  int heightY;
  int widthX;
  int heightY1;
  int heightY2;
  int heightY3;
  int heightY4;
  int heightY5;
  /*************************************************************************************************
   *系统中涉及到构件
  **************************************************************************************************/
  Choice  departmentGJ;
  Choice  fxlbGJ;
  Choice  fxfzGJ;
  TextField fxyearGJ;
  Label MousePositionX;
  Label MousePositionY;
  Label NowDate;//显示系统现在日期
  Label NowTime;//显示系统现在时间
  Label UserName;//显示用户得名字
  Button ExitSys;//退出系统
  /*************************************************************************************************
  *事件完成标志
  **************************************************************************************************/
  boolean prepareParameterFinished = false;
  boolean drawSysMainFrameFinished = false;
  boolean getDataFinished = false;
  String waitingFlag ="正在准备提取数据...";
  String waitingFlagTemp ="正在准备提取数据...";
 
 /**
   *取的生产数据并且把他进行存储
   */
 SCQuantity SCData = new SCQuantity();
 SaveSCQuantity SaveSCData = new SaveSCQuantity();
 /**
  *系统运行的主要方法
  */
 public void run() {
  //调用初始化变量方法
                //准备屏幕系统参数  
  waitingFlag = "正在准备屏幕参数,请等待...";
  repaint();
  prepareFrameParameter();
  //获取生产数据
  waitingFlag = "正在获取数据库数据,请等待...";
  repaint();
  SCData.getSCData();
  getDataFinished = true;
  
  //数据处理完毕
  waitingFlag = "";
  repaint();
  
  //注册构件
  processEvent();

  /**
   *显示对话框,让用户进行登陆
   */
  // Login();
   /**
    *取的生产方面的数据
    */
   
 }
 public void prepareFrameParameter() {
  //把变量进行付值
  setBackground(Color.black);
  widthX = getWidth()-10;
  heightY = getHeight()-10;
  heightY1 = Math.round(heightY/10);
  heightY2 = Math.round(heightY*3/10);
  heightY3 = Math.round(heightY-heightY*3/10-heightY*2/20-heightY/10);
  heightY4 = Math.round(heightY/20);
  heightY5 = Math.round(heightY/20);
  try {
   Thread.sleep(1500);
  }catch(Exception e) {
  }
  prepareParameterFinished = true; 
 }
 //画系统的主框架
 public void drawSysMainFrame(Graphics g) {
  g.setColor(Color.red);
  //画总体矩形
  g.drawLine(5,5,widthX+5,5);
  g.drawLine(5,5,5,heightY+5);
  g.drawLine(5,heightY+5,widthX+5,heightY+5);
                g.drawLine(widthX+5,5,widthX+5,heightY+5);
                //画第一条分割线及系统表标
                g.drawLine(5,5+heightY1,widthX+5,5+heightY1);
                g.setColor(Color.white);
                g.setFont(new Font("宋体", Font.PLAIN, 28));
                g.drawString("宁夏煤业集团公司生产数据分析系统",305,50);
                //画第二条分割线
                g.setColor(Color.red);
                g.drawLine(5,5+heightY1+heightY2,Math.round((5+widthX)*9/10),5+heightY1+heightY2);
                //画第三条分割线
                g.setFont(new Font("宋体",Font.PLAIN,18));
                g.drawLine(5,5+heightY1+heightY2+heightY3,5+widthX,5+heightY1+heightY2+heightY3);
                g.drawString("部门:",8,5+heightY1+heightY2+heightY3+23);
                g.drawString("分析类别:",150,5+heightY1+heightY2+heightY3+23);
                g.drawString("分析阀值:",330,5+heightY1+heightY2+heightY3+23);
                g.drawString("分析年份:",470,5+heightY1+heightY2+heightY3+23);
                g.drawLine(639,5+heightY1+heightY2+heightY3,639,5+heightY1+heightY2+heightY3+heightY4);
                g.drawString("日期:",642,5+heightY1+heightY2+heightY3+23);
                g.drawString("用户:",790,5+heightY1+heightY2+heightY3+23);
                g.drawLine(Math.round((5+widthX)*9/10),5+heightY1+heightY2+heightY3,Math.round((5+widthX)*9/10),5+heightY1+heightY2+heightY3+heightY4);
                //画第四条分割线
                g.drawLine(5,5+heightY1+heightY2+heightY3+heightY4,5+widthX,5+heightY1+heightY2+heightY3+heightY4);
                //显示供应商名字及版权信息
                g.setColor(Color.white);
                g.setFont(new Font("宋体",Font.PLAIN,15));
                g.drawString("软件开发商:希望软件有限责任公司 CopyRight AllRightServer 2004 版权所有 ",8,5+heightY1+heightY2+heightY3+heightY4+23);
                //画右边的侧线
                g.setColor(Color.red);
                g.drawLine(Math.round((5+widthX)*9/10),5+heightY1,Math.round((5+widthX)*9/10),5+heightY1+heightY2+heightY3);
                //画实时数据
                g.setColor(Color.green);
                g.drawString("分析类别",Math.round((5+widthX)*9/10)+14,5+heightY1+30);
                g.drawString("分析部门",Math.round((5+widthX)*9/10)+14,5+heightY1+95);
                g.drawString("分析日期",Math.round((5+widthX)*9/10)+14,5+heightY1+160);
                g.drawString("计划产量",Math.round((5+widthX)*9/10)+14,5+heightY1+235);
                g.drawString("实际产量",Math.round((5+widthX)*9/10)+14,5+heightY1+300);
                g.drawString("超欠产量",Math.round((5+widthX)*9/10)+14,5+heightY1+365);
                g.drawString("同期产量",Math.round((5+widthX)*9/10)+14,5+heightY1+430);
                g.drawString("同 期 比",Math.round((5+widthX)*9/10)+14,5+heightY1+500);
                g.setColor(Color.red);
                g.drawLine((Math.round((5+widthX)*9/10)),5+heightY1+555,5+widthX,5+heightY1+555);
 }
 //消息处理函数
 public void processEvent() {
  /**
   *分析的部门
   */
  departmentGJ = new Choice();
  departmentGJ.addItem("集团公司");
  departmentGJ.addItem("指挥部");
  //departmentGJ.setEditable(false);
  departmentGJ.reshape(53,5+heightY1+heightY2+heightY3+8,80,20);
  this.getContentPane().add(departmentGJ);
  
  /**
   *分析类别
   */
  fxlbGJ = new Choice();
  fxlbGJ.addItem("原煤产量");
  fxlbGJ.addItem("回采产量");
  fxlbGJ.addItem("掘进进尺");
  fxlbGJ.addItem("开拓进尺");
  fxlbGJ.reshape(230,5+heightY1+heightY2+heightY3+8,80,20);
  this.getContentPane().add(fxlbGJ);
  
  /**
   *分析阀值
   */
   fxfzGJ = new Choice();
   fxfzGJ.add("年");
   fxfzGJ.add("月");
   fxfzGJ.add("日");
   fxfzGJ.reshape(410,5+heightY1+heightY2+heightY3+8,40,20);
   this.getContentPane().add(fxfzGJ);
   /**
    *分析年份
    */
    fxyearGJ = new TextField();
    fxyearGJ.reshape(550,5+heightY1+heightY2+heightY3+8,80,20);
    this.getContentPane().add(fxyearGJ);
   
     /**
      *使内容窗格透明
      */
      if(getContentPane() instanceof JComponent) {
       ((JComponent)getContentPane()).setOpaque(true);
      }
     /**
     *显示现在的日期与时间
     */
     NowDate = new Label();
     this.getContentPane().add(NowDate);
     NowDate.setBackground(getBackground());
     NowDate.setForeground(Color.yellow);
     NowDate.reshape(690,5+heightY1+heightY2+heightY3+8,95,20);
     NowDate.setText(NowDate().toString().substring(0,4)+"年"+NowDate().toString().substring(5,7)+"月"+NowDate().toString().substring(8,10)+"日");  
   /**
    *显示用户得名字
    */
    UserName = new Label();
    UserName.reshape(840,5+heightY1+heightY2+heightY3+8,75,20);
    UserName.setForeground(Color.yellow);
    UserName.setBackground(Color.black);
    this.getContentPane().add(UserName);
    UserName.setText("测试用户");
    /**
     *退出系统
     */
     ExitSys = new Button("退出系统");
     ExitSys.reshape(Math.round((5+widthX)*9/10)+3,5+heightY1+heightY2+heightY3+4,96,32);
     this.getContentPane().add(ExitSys);
     ExitSys.addActionListener(new ActionListener()
                                 {
                                   public void actionPerformed(ActionEvent e) {
                                    if((e.getActionCommand()).equals("退出系统")) {
                                     System.exit(0);
                                    }
                                  }
                                  });
    /**
     *初始化鼠标及产量标签
     */                             
     MousePositionX = new Label();
     MousePositionY = new Label();
     MousePositionX.setBackground(getBackground());
     MousePositionY.setBackground(getBackground());
     MousePositionX.setForeground(Color.white);
     MousePositionY.setForeground(Color.white);
     MousePositionX.reshape((Math.round((5+widthX)*9/10))+10,5+heightY1+555+5,80,20);
     MousePositionY.reshape((Math.round((5+widthX)*9/10))+10,5+heightY1+555+25,80,20);
     this.getContentPane().add(MousePositionX);
     this.getContentPane().add(MousePositionY);
     MousePositionX.setText("X:");
     MousePositionY.setText("Y:");
    
 }
 public void paint(Graphics g) {
  //等待信息的显示
                g.setFont(new Font("宋体", Font.PLAIN, 18));
  g.setColor(getBackground());
  g.drawString(waitingFlagTemp,200,50);
  g.setColor(Color.white);
  g.drawString(waitingFlag,200,50);
  waitingFlagTemp = waitingFlag;
                //显示系统主框架
  if(prepareParameterFinished&&getDataFinished) {
   drawSysMainFrame(g);
  }
   
  
 }
//===================================================砸项函数======================================================
      /**
 获得当日的日期(本机)
 */
 public java.sql.Date NowDate() {
  Calendar cal = Calendar.getInstance();
  java.util.Date UtilDate = cal.getTime();
  long NowTime = UtilDate.getTime();
  java.sql.Date NowDate = new java.sql.Date(NowTime);
  return NowDate;
 }
//===================================================鼠标移动事件==================================================
public void mouseMoved(MouseEvent e) {
      MousePositionX.setText("X: "+e.getX());
      MousePositionY.setText("Y: "+e.getY());                
          }  
 
 
}
 


//连接SERVLET的类,在这里我们先什么都不做
public class SCQuantity {
 public void getSCData() {
  try {
   Thread.sleep(1000);
  }catch(Exception e) {}
 }
}
//存储缓冲数据的类,在这里先什么都不做

 

public class SaveSCQuantity {
}

其他类库整理中。。。

你可能感兴趣的:(J2EE企业级开发,JAVA网络开发,JAVA综合)