ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

iPodを入れる「ネクタイ」だって。。。

2006-12-25 23:50:45 | Weblog

ここ
【ネット限定】 ipocket アイポケット 四角ドット
http://www.belluna.net/sh/do/online/ProductDetailCmd?op=showDetailProductsDisplay&catalogCode=NEB0&productCode=02175&genreCode=0000

によると(以下斜体は、上記サイトより引用)

今大流行しているipodをネクタイの大剣の裏に携帯できるアイポケット。
ポケットには表面に透明なビニールになっています。
通勤途中、満員電車もバッグやポケットから取り出しにくい時が多いですが、
ネクタイの裏なら絶えず携帯したいビジネスマンにはピッタリの携帯場所ではないでしょうか。


上記のサイトに写真があるのですが。。
うーん、微妙。。。好きな人や、プレゼントには、アリかも。。

なお、

<対応機種>
i Pod nano,i Pod shuffle

価 格
6,825 円(本体 6,500 円)


だそうです。

P.Sなお、上記は、GIZMODOのこの記事を参考にしました。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

内部統制報告書と、ITにおける監査と、業務のまとめシート

2006-12-25 17:56:54 | Weblog

 今日、オープニングベルをみていたら、「内部統制報告書」の話がでてきてました。

 これは、J-SOX法において、内部統制の監査をする際、経営者サイドで作成する書類のようだ。
 くわしくは、ここ(PDF)
Ⅲ.財務報告に係る内部統制の監査(案)
http://www.fsa.go.jp/singi/singi_kigyou/siryou/naibu/20061106/01-03.pdf


 それによると、この、内部統制報告書を監査して、内部統制監査報告書を出すようだ。

 で、IT部分に関しても監査があるわけなんだが、問題は、15ページのc
(以下斜体は、上記資料から引用)

 評価対象となった業務処理統制に係る統制上の要点ごとに、一部の取引を抜き出し(サンプリング)、当該取引に係るシステムへの入力情報とシステムからの出力情報を比較し、予想していた出力情報が得られているかを、例えば、入力データに基づいて、検算を行うこと等により確認する。


 これ、業務の書き方によっては、結構わかんないかも。。。

 たとえば、UMLで書く場合、業務1つ1つに関しては、アクティビティ図で明らかになる。
 でも、ある業務1個をとってきて、この業務の入力は何で、出力は何ですか?と聞かれると、はっきりとは、答えられない場合がある。




 具体的に言うと、1つの売り上げデータをとりあげ、その売り上げデータの変遷をたとっていく、つまり、入力から、売り上げ計上されるまでの過程をたどるとした場合、このプロセスは、たどれる。アクティビティ図があるから。。

 でも、たとえば、売り上げのスタートラインとなる受注で、どのテーブルに、どのように書き出されていますか?
 というのは、たどれないかもしれない。アクティビティ図には、テーブルの書き出し内容まで書かれていない。なので、クラス図を解析することになるが、クラス図をみて、わかるかどうかは。。。さらに、書き出し先まで考えると、それは下流工程になってしまうし。。


 つまり、いいたいことは、UMLの場合、アクティビティ図からクラス図に簡単に機械的に落ちるわけでもなく、また、クラス入出力情報がアクティビティ図に反映されないので、業務の流れはアクティビティ図でわかっても、そこから、入出力まで、かんたんにチェックできるかというと。。??




そーすると、ウィリアムのいたずら提唱の、業務をまとめたシートみたいに、各アクティビティに関して、入出力を明確にし、それを、どんどん落として言って、最後には、そのアクティビティが1つのメソッドになるくらいまでにしていき、それを実装するという形にしたほうが、いいかもしれない。

 さっきの例だと、受注の入出力は分かるし、それに対応するプログラムをしりたければ、実装したメソッドに行き着くまで、子アクティビティをどんどん子供のほうに下りていけばいいことになる。




 まあ、ウィリアムのいたずら提唱のがいいか悪いかは別として、これ、まじ監査されると、入出力を明らかにするドキュメントが必要になってくるかもしれない。とくに、DBにどうやって格納しているかというドキュメントが。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

アプリゲットのスパイシーソフトが、オープンアプリの開発方法等説明会、だけどね(>_<!)

2006-12-25 16:33:59 | Weblog

 アプリゲットが、auのオープンアプリのゲームコンテストをやるそうな。

 ここ http://appget.com/contest/au2007/

 で、それに先立ち(以下斜体は上記サイトより引用)


アプリ開発のクリエータ様向けに、OAPの仕組みや、開発方法、移植方法などの説明を行うセミナーを開催いたします。


へ、(@_@!)
こりゃ、いかなきゃ!!


参加料は無料です。ふるってご参加ください。
■日時:2007年1月13日(土) 開場 14:00~ 開演 14:30~
■場所:ベルサール西新宿ホール(住友不動産西新宿公園3号館)
■アクセス:
東京都新宿区西新宿4-15-3 住友不動産西新宿公園3号館1F
(地図)
「都庁前」駅「A5出口」徒歩3分(大江戸線)
「西新宿五丁目」駅「A2出口」徒歩6分(大江戸線)
「新宿」駅「西口」徒歩15分(JR線他)
「新宿」駅「7番出口」徒歩10分(新宿線、京王新線)
■参加費:無料(事前登録制)
■定員:100名 (参加希望多数の場合は抽選とさせて頂きます)
■参加申込締切:2007年1月5日(金)メール必着


いくいくう!!と思って、
「説明会イベントに参加する!」
をクリックしたら。。。

なんか、作者登録している人でないと、だめみたい(>_<!)

作者登録って、なに。。。

なんか、だめぽそう。。。

うぇーん(>_<!)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PLCのレビューが載ってるんですけど、PLCって、勝ち組正社員サラリーマンのための商品なの?

2006-12-25 15:50:10 | Weblog

ここの記事
解禁された高速PLCでシアワセになれるか?――パナソニック「BL-PA100KT」 (1/2)
http://plusd.itmedia.co.jp/pcuser/articles/0612/25/news010.html


に、パナソニックが出したPLC、「BL-PA100KT」のレビューが載っているのですが。。

ウィリアムのいたずら、勘違いしてました。

てっきり、こいつに、ADSL回線をさして、モデムとおなじことをしてくれるのかと思ったら、
(以下斜体は上記ニュースより引用)

 BL-PA100KTは家庭内LANの配線のみを受け持つ製品なので、単体でインターネットに接続することはできない。インターネットに接続するためにはADSLやFTTHといった回線とブロードバンドモデムなどの機器が別途必要だ。また、ブロードバンドルータの機能も備えていない点に注意したい。電源の接続については、壁面のコンセントに直接接続することが推奨されており、たこ足配線は推奨されていない


あ、モデムは必要だし、壁面のコンセントから直接取らないといけないんだ。。
ウィリアムのいたずらの家は1間(ひとま=一部屋)です。

で、壁面のコンセントの近くにモデムがあります。。

えーっと、そうすると。。。。メリットないぞ(^^;)

あ、PLCって、勝ち組正社員サラリーマンなどが、2階建てで、いくつかの部屋があるときに
部屋の間や、1・2階間なんかで、LANを引くのにいいものなのか(^^;)

負け組みで、一間の人は、用のない商品なのかも。。。(^^;)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

仕様書からプログラムソースを生成する方法(Excelの仕様書編 その21:イベント追加 ソース)

2006-12-25 14:34:27 | ケータイ

BREWの画面部分のプログラムをExcelの仕様書から自動生成するという、シリーズ仕様書からプログラムソースを生成する方法の続きです。

 いま、、仕様書にイベントを追加しています。
 前回、その仕様書の様子を示しました。
 今回は、出力サンプルを示します。



■必要なファイル

 その前に、必要なファイルについてです。
今までどおり、
・アプリソースfukusu2.c
・アプリヘッダfukusu2.h
●画面ソースgamen1.c
●画面ヘッダgamen1.h
・共通領域ソースIKHMap.c
・共通領域ヘッダIKHMap.h
・バージョンヘッダversion.h
は、必要です。
そのうち、●をつけたものは、今回修正が入って変更があります。

さらに、イベントということで、
・イベント処理ソースIEventList.c
・イベント処理ヘッダIEventList.c
●画面用イベントソースgamen1event.c
●画面用イベントヘッダgamen1event.h
が必要です。

 ただし、イベント処理のIEventList.c、IEventList.hは、すでに、ここ
でソースを書いているので、今回、あたらに紹介するのは
(1)画面ソースgamen1.c(修正)
(2)画面ヘッダgamen1.h(修正)
(3)画面用イベントソースgamen1event.c(新規)
(4)画面用イベントヘッダgamen1event.h(新規)
となります。

 以下、順に示していきます。


■(1)画面ソースgamen1.c(修正)
イベント関係のところが追加となります。
イベント処理は、gamen1_HandleEventでいろいろかいてましたけど、
それをばっさり、IEVENTLIST_HandleEvenで処理することになります。

で、そのため、イベントをIEVENTLIST_Addを使って、initAppDataでセットします
また、領域をFreeAppDataで解放します。

その結果、ソースは、以下のとおりです(赤字は、修正箇所)
/*================================
FILE: gamen1.c
=================================*/
#define _GAMEN1_C

#include	"gamen1.h"
#include	"gamen1event.h"	//	追加:イベント処理

/*==================================*/
// 関数名:gamen1_HandleEvent	    //
// 内容 :イベント処理		    //
/*==================================*/
boolean gamen1_HandleEvent(fukusu2* poya, AEEEvent eCode,
                              uint16 wParam, uint32 dwParam)
{  
	gamen1	*pMe;

	//	チェック
	if ( poya	==	NULL )
		return FALSE;
	if ( 	( poya->gno	!=	1 ) ||
		 (poya->garea	==	NULL ))
		return FALSE;
	pMe	=	(gamen1 *)poya->garea;

	//	メニューイベント
	if ( pMe->pMenu1	!=	NULL )
	{
		if ( IMENUCTL_HandleEvent(pMe->pMenu1,eCode,
                              wParam,dwParam) == TRUE )
		{
			return	TRUE;
		}
	}

	//	追加:イベント処理
	return	IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);

}

/*==================================*/
//関数名:gamen1_InitAppData	    //
//内容 :領域確保・描画	    //
/*==================================*/
boolean gamen1_InitAppData(fukusu2* poya)
{
	char		*fdata;
	gamen1		*pMe;
	AEERect		rect;
	AECHAR	*menubuf;
	char	*menuTitle;

	//==========================================//
	//	領域確保		            //
	//==========================================//
	pMe	=	(gamen1 *)MALLOC(sizeof(gamen1));
	if (pMe	==	NULL )
	{
		gamen1_FreeAppData(poya);
		return	FALSE;
	}
	//	アプリ領域へ設定
	poya->garea	=	(void *)pMe;
	poya->gno	=	1;

	pMe->pMenu1	=	NULL;
	pMe->pIDisplay	= poya->pIDisplay;
	pMe->pIShell	= poya->pIShell;

	//==========================================//
	//	追加:イベント処理		    //
	//==========================================//
	//	親領域の設定(イベント先で使う)
	pMe->poya	=	poya;

	//	イベント領域確保
	if ( (pMe->pElist = IEVENTLIST_Create() )	==	NULL )
	{
		return FALSE;
	}

	//	イベント設定
	IEVENTLIST_Add(pMe->Elist,pMe,IEVENTLIST_KIND_ECODE,
			EVT_APP_START,0,0,gamen1_STARTEvent);
	IEVENTLIST_Add(pMe->Elist,pMe,IEVENTLIST_KIND_WPARAM,
			EVT_COMMAND,2000,0,gamen1_EndEvent);

	//==========================//
	//	メニューの作成	    //
	//==========================//
	if	( ISHELL_CreateInstance( pMe->pIShell, 
		AEECLSID_MENUCTL, (void**)&pMe->pMenu1 ) != SUCCESS )
	{
		gamen1_FreeAppData(poya);
		return FALSE;
	}
	rect.x	=	1;
	rect.y	=	1;
	rect.dx	=	200;
	rect.dy	=	150;
	IMENUCTL_SetRect(pMe->pMenu1,&rect);

	//==========================//
	//	メニュー項目の表示  //
	//==========================//
	
	menuTitle = "開始";
	menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR));
	if ( menubuf	==	NULL )
	{
		gamen1_FreeAppData(poya);
		return FALSE;
	}
	MEMSET(menubuf,0,(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	STREXPAND(menuTitle,STRLEN(menuTitle),menubuf,
			(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	IMENUCTL_AddItem(pMe->pMenu1,NULL,NULL,1000,menubuf,NULL);
	FREEIF(menubuf);

	menuTitle = "終了";
	menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR));
	if ( menubuf	==	NULL )
	{
		gamen1_FreeAppData(poya);
		return FALSE;
	}
	MEMSET(menubuf,0,(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	STREXPAND(menuTitle,STRLEN(menuTitle),menubuf,
			(STRLEN(menuTitle)+1)*sizeof(AECHAR));
	IMENUCTL_AddItem(pMe->pMenu1,NULL,NULL,2000,menubuf,NULL);
	FREEIF(menubuf);

	gamen1_DispAppData(pMe);

	//	共通領域を設定
//	pMe->pMap	=	poya->pMap;

    return TRUE;
}

/*==================================*/
//関数名:gamen1_FreeAppData	    //
//内容 :領域のフリー		    //
/*==================================*/
void gamen1_FreeAppData(fukusu2* poya)
{
	gamen1	*pMe;
 
	// 対象かどうかチェック
	if ( poya->gno	!=	1 )
		return;
	if ( poya->garea	==	NULL )
		return;
	pMe	=	(gamen1 *)poya->garea;

	//	メニューフリー
	if ( pMe->pMenu1	!=	NULL )
	{
		IMENUCTL_Release(pMe->pMenu1);
		pMe->pMenu1	=	NULL;
	}

	//	追加:イベントフリー
	IEVENTLIST_Release(pMe->pElist);

	//	全体フリー
	FREEIF(pMe);

	//	親のエリアをクリア
	poya->garea	=	NULL;
}

/*==================================*/
//	関数名:gamen1_DispAppData  //
//	内容 :画面の初期表示	    //
/*==================================*/
boolean gamen1_DispAppData(gamen1* pMe)
{
	int	curpos,buhinpos;

	//	初期化
	curpos		=	0;
	buhinpos	=	0;

	//==================================//
	//	リドローする		    //
	//==================================//
	//	ここに、
	//	1.リドローと、
	//	2.次のフォーカス指示を書く
	//	テキストエリアのRedrawやUpdateする
	if ( pMe->pMenu1	!=	NULL )
	{
		//	リドロー
		IMENUCTL_Redraw(pMe->pMenu1);
//		カーソル番号pMe->curnoから、部品の番号(仕様書のA桁の
//	         No)に変換する。その番号をbuhinposだとすると
		if(buhinpos	==	0)
			IMENUCTL_SetActive(pMe->pMenu1,TRUE);
		else
			IMENUCTL_SetActive(pMe->pMenu1,FALSE);
	}

	return	TRUE;
}

(上記 < > ¥は、本当は半角です)



■(2)画面ヘッダgamen1.h(修正)

イベントを入れる領域と、親(アプリのポインタ)を入れておく
領域を新たに取ります。

ソースは、以下のとおりです(赤字は、修正箇所)
/*=====================================
FILE: gamen1.h
======================================*/
#ifndef _GAMEN1_H
#define	_GAMEN1_H
/*======================================
INCLUDES AND VARIABLE DEFINITIONS
==================================== */
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h" 

#include "AEEMenu.h"

#include "fukusu2.h"	//	アプリ画面

//==================================//
//	定数定義		  //
//==================================//
/*-------------------------------------------------------------------
Applet structure. All variables in here are reference via "pMe->"
-------------------------------------------------------------------*/
// create an applet structure that's passed around. All variables in
// here will be able to be referenced as static.
typedef struct _gamen1 {
	IDisplay      *pIDisplay;
	IShell        *pIShell;
	IMenuCtl	  *pMenu1;

	//	追加:イベント領域
	IEventList		*pElist;
	//	追加:親領域
	fukusu2			*poya;

} gamen1;

/*-----------------------------------------------------------
Function Prototypes
------------------------------------------------------------*/
#ifdef _GAMEN1_C
boolean gamen1_HandleEvent(fukusu2* poya,AEEEvent eCode, 
				uint16 wParam,uint32 dwParam);
boolean gamen1_InitAppData(fukusu2* poya);
void    gamen1_FreeAppData(fukusu2* poya);

//	画面表示
boolean gamen1_DispAppData(gamen1* pMe);

#else

extern boolean gamen1_HandleEvent(fukusu2* pMe,AEEEvent eCode,
				 uint16 wParam,uint32 dwParam);
extern boolean gamen1_InitAppData(fukusu2* pMe);
extern void    gamen1_FreeAppData(fukusu2* pMe);

//	画面表示
extern boolean gamen1_DispAppData(gamen1* pMe);

#endif
#endif

(上記 < > ¥は、本当は半角です)



■(3)画面用イベントソースgamen1event.c(新規)
イベントをやるプログラムです。今回は、終了のときプログラムを
終了するようにしてあります。
ソースは、以下のとおりです(全部新規追加です)
/*=====================================
FILE: event1Ctl.c
=====================================*/
#define	_EVENT1CTL_C

/*===================================
INCLUDES AND VARIABLE DEFINITIONS
=================================== */
#include "AEEModGen.h" 
#include "AEEAppGen.h"
#include "AEEShell.h" 
#include "gamen1.h"
#include "gamen1event.h"

//==========================================//
//	関数名:gamen1_EndEvent		  //
//	内容 :終了			  //
//==========================================//
boolean gamen1_EndEvent(void* pArg, AEEEvent eCode,
				 uint16 wParam, uint32 dwParam)
{
	gamen1 *pMe;
	if ( (pMe = (gamen1 *)pArg)	== NULL )
		return	FALSE;

	if ( pMe->poya	!=	NULL )
	{
		gamen1_FreeAppData(pMe->poya);
		pMe->poya->gno	=	-1;
	}
	return	TRUE;
}

//==========================================//
//	関数名:gamen1_STARTEvent	  //
//	内容 :開始			    //
//==========================================//
boolean gamen1_STARTEvent(void* pArg, AEEEvent eCode,
				 uint16 wParam, uint32 dwParam)
{
	return	TRUE;
}

(上記 < > ¥は、本当は半角です)



■(4)画面用イベントヘッダgamen1event.h(新規)
呼び出した関数の宣言をします。
ソースは、以下のとおりです(全部新規追加です)
/*==================================
INCLUDES AND VARIABLE DEFINITIONS
================================== */
#ifndef _GAMEN1EVENT_H
#define	_GAMEN1EVENT_H
#include "AEE.h"
#include "AEEShell.h"
#include "AEEStdLib.h" 

#ifdef _GAMEN1EVENT_C
boolean gamen1_STARTEvent(void* pMe, AEEEvent eCode, 
				uint16 wParam, uint32 dwParam);
boolean gamen1_EndEvent(void* pArg, AEEEvent eCode,
				uint16 wParam, uint32 dwParam);
#else
extern boolean gamen1_STARTEvent(void* pMe, AEEEvent eCode,
				uint16 wParam, uint32 dwParam);
extern boolean gamen1_EndEvent(void* pArg, AEEEvent eCode,
				uint16 wParam, uint32 dwParam);
#endif
#endif

(上記 < > ¥は、本当は半角です)




 ということで、今回はここまでです。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

海外郵便は、住所をQRコードで仕分けするとか、国別番号を導入するとかしてくれないかな。。

2006-12-25 12:49:40 | Weblog

ちょっと前の話だけど、コメントをはずしたので、炎上する心配がなくなったので
きょう、とりあげてみます。

ここの痛いニュース
私たちはロボットではない」…現職郵便局員が明かす『深夜勤』…東京新聞
http://blog.livedoor.jp/dqnplus/archives/878109.html


ここの意見、多くは郵便局は甘いとか、そういう意見しかなかったので、
違う立場からいうと、みんなから、たたかれそう・・・・
(なので、コメント欄があるときは、書かないでいました)




 でも、海外郵便を出すこともある、ウィリアムのいたずらの意見は、ちょっと違う。

 その元になっている東京新聞ニュース
現職郵便局員が明かす『深夜勤』
http://www.tokyo-np.co.jp/00/tokuho/20061217/mng_____tokuho__000.shtml

には、こうやって書いてある(以下斜体は上記ニュースより引用)

 国際郵便で、もし仕分けを間違え、別の国に運ばれてしまったら大変なことになる。とりわけ手書きのあて名には判読が難しいものもある。「一番眠い時間に体を休められない。もうろうとした頭で絶対にミスが許されない仕事に取り組まなければならないので激しいストレスになっている」


 そうなのよ、国際郵便って、英語で国名を書くから、紛らわしいんだけど、
 それを、意識もうろうとした中でやられたら。。
 ひえー(>_<!)

 送るほうとしたら(ウィリアムのいたずらの場合)、送っているのは、クリスマスカードとかなので)、時間かけてくれてかまわないから、間違いなく、仕分けしてほしいわけ。。

 そーすると。。。やっぱ、こんな、深夜労働なんていう、女工哀史的なことにたよらず、

 機械を導入して欲しいわけよ。。




 もし、海外郵便に、国別番号というのを導入すれば、郵便番号と同じ仕組みなので、おんなじように仕分けできると思うので、そーしていただきたい気がする。。

 そうすれば、郵便局の窓口でも、どこの国にだすか、一発でわかるし、仕分けも
間違えない(国別番号を間違えて書けば、間違うけど、それは書いた本人がわるい!ということで。。いいと思う)


 あと、国内は、郵便バーコードってあるけど、
 海外の場合は、。住所も書いた上で、住所をQRコードにしたものも、印刷して貼ってもいい(直接印刷してもいいし、QRコードを紙やシールにだして、それを貼っても可)ってして欲しい(これは国内でも導入していいと思うけど)。

 そして、それが貼ってある場合はQRコードにもとづき、迅速に処理すると。。
 もちろん、QRコードがはってあれば、仕分けを自動化してもいいけど、
 そこまで行かなくても、QRコードを読み取って、仕分けの箱の番号を表示するって言うようなiアプリ、BREWアプリを開発して、ケータイを使って仕分けしてもいいと思う。

 もちろん、QRコードが間違っていたら、間違って仕分けされても文句なし(^^;)
 で、国名だけ入っていればいいので、住所が入りきらなかったら、宛名や会社名、部署は、いれないでOK!(QRコード以外に、ちゃんと住所も併記されているので、そっちにちゃんと書けばOK!)

 さらに、窓口に出した場合は、ケータイなり、専用機でQRコードを読んで、「送りさきは、どこどこですね。120円です!」とか、ちゃんとQRコードを確認してくれて(なので間違いない)、それに応じて、料金も自動的に計算するアプリを開発すれば。。

 ってしてくれれば、仕分けも楽になると思うけどなあ。。

 QRコードでやると、早く配達してくれるとか、料金安くなるとかしないと、だめかなあ。。
 (もちろん逆に、QRコードはってないと、後回しに配達するとか、料金を上げるという手もあるけど。。)

 でも、もしそうなれば、これ、普及すると思うんだけど。。。

 システム的には、ケータイは、普通持ってる人、多いだろうし、
 アプリ開発が、そんなに難しいとも思えないし。。
 (数百万から1~2千万??。。。全国でやれば、元は取れるよね。。すぐに。。)
 
 QRコードの出力は、フリーでもでてるしい。。。




 労働強化して、郵便を危険にする前に、こーいう省力化について、考えたほうがいい(お客さんとしては安心)と思うんですけど、どーでしょう?郵便局さん(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Javaの画面表示-その5:JSPで表示、JavaBeanで処理(MVC版)(その2:ソース)

2006-12-25 02:39:49 | JavaとWeb

 シリーズJavaの画面表示のつづきです。前回、JSPで画面表示部分とコントローラー、Javaのクラスでモデルを担当して、MVCにするという話をかきました。

 で、その際に、必要なソースは、以下のとおり。

JSP
・index.jsp:View 初めの画面(修正)
・kekka.jsp:View 結果表示(修正)
・shori.jsp:コントローラー(新規)

JavaBean
・Shori1.java:モデル(今までのものと変わりません)

 Shori1.javaは、ここの「■Javaのソースコード Shori1.java」と同じ(修正はありません)ので、そちらを見てもらうこととして、今回は、のこりの上記3つのJSPのソースについて書きます。



■index.jsp:View 初めの画面のソース
 これは、呼び出し先が、kekka.jspからshori.jspにかわっただけで、基本的に変わりありません。
 ソースはこんな感じ(赤字は、修正したところ)
<html>
<head>
<%
//==============================================//
//	画面用の部分				//
//==============================================//

//	変数を受け取る
	String msg = request.getParameter("msg");
	if ( msg	==	null )
	{
		msg	=	"";
	}


//==============================================//
//	以下、画面表示				//
//==============================================//
%>
<title>早打ちの練習</title>
</head>
<body>
<h1><font color=red><%=msg%></font></h1>
<H1>早うちの練習</H1>
以下の文を打とう!<BR>
<B>This is a pen</B><BR>
<form method=get action="http://127.0.0.1:8080/test/jsp/shori.jsp">
<input type=text name=nyuryoku size=20><P>
<input type=submit name=do value=打ち終わった!><P>
</form>
</html>

(上記< > ¥は本当は半角です)



■kekka.jsp:View 結果表示のソース
 変数を受け取って、それを表示するだけになりました。
 ソースはこんな感じ(赤字は、修正したところ)
<html>
<head>
<title>早打ちの練習</title>
</head>
<body>
<%
//==============================================//
//	変数を受け取る
//==============================================//
	String ritu = request.getParameter("ritu");

//==============================================//
//	以下、画面表示				//
//==============================================//
%>
<H1>結果</H1>
正解率 = <%=ritu %><BR>
</html>

(上記< > ¥は本当は半角です)



■shori.jsp:コントローラーのソース

 新規作成です。
 変数を受け取り、JavaBeanを呼び出し、結果に応じた画面を表示します。
 ソースはこんな感じ
<html>
<head>
</head>
<body>
<%@ page language="java" import="pac1.*" %>
<jsp:useBean id="shori1" class="pac1.Shori1"/>
<%
//==============================================//
//	変数を受け取る
//==============================================//

	String nyuryoku = request.getParameter("nyuryoku");

//==============================================//
//	モデル部分の処理
//==============================================//
	String ritu = shori1.rituKeisan(nyuryoku);

//==============================================//
//	結果表示
//==============================================//
	if ( ritu.equals("NO DATA!")	==	true)
	{
		response.sendRedirect("http://127.0.0.1:8080/test/jsp/index.jsp?msg=INPUT_ERROR");
	}
	else
	{
		response.sendRedirect("http://127.0.0.1:8080/test/jsp/kekka.jsp?ritu=" + ritu);
	}

%>
</body>
</html>

(上記< > ¥は本当は半角です)




 今回はここまで。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする