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();
}
}
戻る