SCMのエミュレーション

戻る
まだ途中です。





::::::::::::::
Demander.java
::::::::::::::
/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/
public class Demander extends StockHolder {

    public Demander() {
        super();
    }


}
::::::::::::::
IDManager.java
::::::::::::::
/**
$Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/

public class IDManager {

    private static long serialNo = 0;
    private static IDManager uniqueInstance = null;

    /** シングルトンです */
    private IDManager() {}

    public static IDManager getInstance() {
        if ( uniqueInstance == null ) {
            uniqueInstance = new IDManager();
        }

        return uniqueInstance;
    }

    /** 次の連番を得る */
    public static synchronized long getSerialNo() {
        serialNo ++;
        return serialNo;
    }

}
::::::::::::::
Material.java
::::::::::::::
import java.util.*;

/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/

public abstract class Material {
    /** 識別番号 */
    protected long id;
    /** 原材料名 */
    protected String name = null;
    /** 属性 */
    protected Map attrMap;

    public Material( String name ) {
        id = IDManager.getSerialNo();
        this.name = name;

        attrMap = new HashMap();
        setAttributes();
    }

    /**
    * 原材料に応じた属性のキーをセットする
    */
    abstract protected void setAttributes();

    /**
    * 属性のマップを返す
    */
    protected Map getAttrMap() {
        return attrMap;
    }
}
::::::::::::::
MyPanel.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.geom.*;

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;

/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/

public class MyPanel extends JPanel {
    private final Color bgColor = Color.black;
    private Demander demander;
    private StockView demanderSV;

    private Supplier supplier;
    private StockView supplierSV;

    public MyPanel() {
        super();

        setLayout( null );

        // Demander
        demander = new Demander();

        demanderSV = new StockView();
        demanderSV.setLocation( 735 , 100 );
        demanderSV.setModel( demander.getStock() );
        this.add( demanderSV );

        // Supplier
        supplier = new Supplier();
        supplierSV = new StockView();
        supplierSV.setLocation( 20, 100 );
        supplierSV.setBackground( new Color( 0x99, 0x33, 0xff ) );
        supplierSV.setModel( supplier.getStock() );
        this.add( supplierSV );
    }

    public void paintComponent( Graphics g ) {

        int width = getWidth();
        int height = getHeight();

        g.setColor( bgColor );
        // 背景色でこのコンポーネントを全て塗りつぶす
        g.fillRect( 0 , 0 , width , height );

    }

}
::::::::::::::
Potato.java
::::::::::::::
/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/

public class Potato extends Material {

    public Potato() {
        super( "ポテト" );
    }

    protected void setAttributes() {
        attrMap.put( "サイズ", null );
        attrMap.put( "重量", null );
    }
}
::::::::::::::
SCMMain.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.geom.*;

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;

/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class SCMMain extends JFrame {

    public SCMMain () {
        super( "SCMエミュレーション" );

        try {
            UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
            SwingUtilities.updateComponentTreeUI( this );
        } catch ( Exception e ) {
            e.printStackTrace();
            System.exit( -1 );
        }

        setBounds( 0, 0, 960, 480 );

        // パネルをコンテナに配置
        MyPanel panel = new MyPanel();
        Container container = getContentPane();
        container.add( panel );

        setVisible( true );

        addWindowListener( new WindowAdapter() {
                               public void windowClosing( WindowEvent ev ) {
                                   dispose();
                                   System.exit( 0 );
                               }
                           }
                         );

    }

    private static void createAndShowGUI() {

        JFrame frame = new SCMMain();
    }

    public static void main( String[] args ) {
        javax.swing.SwingUtilities.invokeLater( new Runnable() {
                                                    public void run() {
                                                        createAndShowGUI();
                                                    }
                                                }
                                              );

    }

}


::::::::::::::
Salt.java
::::::::::::::
/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/

public class Salt extends Material {

    public Salt() {
        super( "塩" );
    }

    protected void setAttributes() {
        attrMap.put( "サイズ", null );
        attrMap.put( "重量", null );
    }
}

::::::::::::::
Stock.java
::::::::::::::
import java.util.*;

/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/
public class Stock {

    /**
    * 製品毎の在庫数量
    */
    private Map<String, Integer> mMap;
    public Stock() {
        if ( mMap == null ) {
            mMap = new HashMap();
        }
    }

    public void input( String mName, int qty ) {

        if ( mMap.get( mName ) == null || mMap.get( mName ) == 0 ) {
            mMap.put( mName , qty );
        } else {
            int currentQty = mMap.get( mName );
            mMap.put( mName, currentQty + qty );
        }
    }

    public int getQty( String mName ) {
        return mMap.get( mName );
    }

    public void output( String mName, int qty ) throws Exception {
        if ( mMap.get( mName ) == null ) {
            throw new Exception( "在庫がしません" );
        }
        if ( mMap.get( mName ) == 0 ) {
            throw new Exception( "在庫が空です" );
        }
        if ( mMap.get( mName ) < qty ) {
            throw new Exception( "在庫引き当てできません" );
        }

        input( mName, qty * ( -1 ) );
    }

    public Map getMaterialMap() {
        return mMap;
    }

    public static void main( String[] args ) {

        String pdName = "ProductA";

        Stock stock = new Stock();
        stock.input( pdName, 10 );
        System.out.println( stock.getQty( pdName ) );

        stock.input( pdName, 5 );
        System.out.println( stock.getQty( pdName ) );

        try {
            stock.output( pdName, 9 );
            System.out.println( stock.getQty( pdName ) );

            stock.output( pdName, 7 );
            System.out.println( stock.getQty( pdName ) );
        } catch ( Exception e ) {
            e.printStackTrace();
        }

    }

}
::::::::::::::
StockHolder.java
::::::::::::::
/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/
public class StockHolder {

    protected Stock stock;

    public StockHolder() {
        stock = new Stock();
    }

    protected Stock getStock() {
        return stock;
    }


}
::::::::::::::
StockManager.java
::::::::::::::
import java.util.*;

/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/

public class StockManager {

    public static void input( Stock stock, String mName, int qty ) {
        stock.input( mName, qty );
    }
    public static void output( Stock stock, String mName, int qty ) throws Exception {
        stock.output( mName, qty );
    }

    public static Map getMaterialMap( Stock stock ) {
        return stock.getMaterialMap();
    }

    public static void dumpMaterialMap( Stock stock ) {
        Map mMap = stock.getMaterialMap();
        Iterator iterator = mMap.keySet().iterator();
        while ( iterator.hasNext() ) {
            String mName = ( String ) iterator.next();
            int qty = ( Integer ) mMap.get( mName );

            System.out.printf( "%s : %2d\n", mName, qty );
        }
    }

    public static void main( String[] args ) {

        Demander demander = new Demander();
        StockManager.input( demander.getStock(), "アイテムA", 10 );
        StockManager.input( demander.getStock(), "アイテムB", 5 );

        StockManager.dumpMaterialMap( demander.getStock() );
    }
}
::::::::::::::
StockView.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;
import java.awt.dnd.*;
import java.awt.geom.*;

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.border.*;

/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
* Stockの状態を可視化するクラス
*/

public class StockView extends JPanel {

    private Stock stock;
    private int width = 200;
    private int height = 200;

    public StockView() {
        setSize( new Dimension( width, height ) );
    }
    public StockView( Stock stock ) {
        this.stock = stock;
        setSize( new Dimension( width, height ) );
    }

    public void setModel( Stock stock ) {
        this.stock = stock;
        repaint();
    }

    public void paintComponent( Graphics g ) {
        int width = getWidth();
        int height = getHeight();

        if ( getBackground() == null ) {
            g.setColor( Color.cyan );
        } else {
            g.setColor( getBackground() );
        }

        // 背景色でこのコンポーネントを全て塗りつぶす
        g.fillRect( 0 , 0 , width , height );

    }
}
::::::::::::::
Supplier.java
::::::::::::::
/**
* $Id: SCM-Emu.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
*/
public class Supplier extends StockHolder {

    public Supplier() {
        super();
    }


}


戻る

inserted by FC2 system