システム設計
1. 構造化システム設計
DFDからモジュール設計
2. プログラミング
HTML,VBScript,ASP,データベース
3. プログラミング作法
レイアウト,プログラム3構造
4. プログラミング補題(会員登録)
システム設計技法-受注処理のDFDを例に
ログイン
会員照合
会員番号商品選択
新在庫数受注処理のDFD
在庫数 2会員
商品ファイル
会員ファイル
在庫ファイル
エラー処理 会員番号, 会員名, 住所 エラーコード 会員 番号 会員名 住所 商品 番号 商品名 単価 画像・特徴 エラーコード 商品番号注文確定
受注ファイル
会員番号,会員名,住所,電話番号 商品番号,商品名,単価, 個数,請求金額,支払方法さらなる
プロセスの詳細化
商品 番号 会員番号, 会員名, 住所, 商品番号 個数会員
支払方法 支払処理構造化システム設計-モジュール設計
受注処理
ログイン
注文確定
支払処理
表示
詳細表示
購入
注文表示
確定
支払選択
会員:属性名 会員番号 会員名 住所 電話番号 商品:属性名 商品番号 商品名 単価 特徴 注文:属性名 受注番号 会員番号 支払方法 明細:属性名 受注番号 商品番号 個数 会員:属性名 会員番号 会員名 住所 電話番号 クレジット番号データベース
システムの詳細化
追加注文変更
削除・個数クレジット
番号入力
入力
認証
商品選択
モジュールのプログラム図示
ログイン
入力
認証
Begin
入力画面表示 会員番号入力 暗証番号入力 再発行処理 認証処理End
Begin
End
入力画面表示 会員番号入力 暗証番号 忘れた? 再発行処理 暗証番号入力 認証処理 暗証番号 忘れた?NO
YES
NO
YES
フローチャート
PAD(Program Analysis Diagram
別モジュール入力
認証
ログイン
<HTML> <HEAD> <TITLE>ログイン</TITLE> </HEAD> <BODY> <CENTER> ユーザIDとパスワードを入力してください.<FORMAction= "Ninsho.asp" Method="GET"> <TABLE Border="2">
<TR>
<TD>ユーザID</TD>
<TD><INPUT Type="TEXT" Name="UserID" ></TD> </TR>
<TR>
<TD>パスワード</TD>
<TD><INPUT Type="password" Name="UserPW"></TD> </TR>
</TABLE> <BR>
<INPUT TYPE="submit" value="ログイン"> <INPUT TYPE="reset " value="中止"> </FORM> </CENTER> </BODY> </HTML>
各自のPCの実験では
http://localhost/login.html
Login.html
ログインモジュールのプログラミング
プログラミングの基本を 理解しましょう。 ① データ入力フォーム ② プ ロ グ ラ ム の 3 構 造 連接、反復、条件 ③ データベース操作<%@ LANGUAGE="VBScript" %> <HTML> <HEAD> <TITLE>認証</TITLE> </HEAD> <BODY> <CENTER> <% '登録ユーザ Users=3 ‘登録会員数 User_ID=Array("yamada","suzuki","tanaka") User_PW=Array("taro", "ichiro", "masahiro") 'ログインデータ受信(From Login.html)
Custm_ID=Request("UserID") Custm_PW=Request("UserPW") '認証チェック
For i=0 to Users-1
If (User_ID(i)=Custm_ID) Then
If (User_PW(i)=Custm_PW) Then
Response.Write User_ID(i) & "さん<BR>" Response.Write "ログインしました<BR>" Exit For Else Response.Write "暗証番号が違います<BR>" Exit For End If End If Next If (i>Users-1) Then Response.Write "会員登録して下さい<BR> " End If %> </BODY> </HTML>
Ninsho.asp
DBを使わないログインモジュールのプログラミング
プログラムの3構造
( 連 接 , 反 復 , 分 岐 )
を理解しよう.
<%@ LANGUAGE="VBScript" %> <HTML> <HEAD> <TITLE>認証</TITLE> </HEAD> <BODY> <CENTER> <% 'ログインデータ受信(From LoginDB.html) Custm_ID=Request("UserID") Custm_PW=Request("UserPW") 'データベースプログラム Set DB=Server.CreateObject("ADODB.Connection") DB.Provider="Microsoft.ACE.OLEDB.12.0" DB.Open Server.MapPath("受注管理.accdb") Set RS=DB.Execute("Select * from 会員")
'認証チェック
Do Until (RS.EOF=True)
If (Custm_ID=RS.Fields("会員番号")) Then If (Custm_PW=RS.Fields("暗証番号")) Then
Response.Write RS.Fields("会員名")& "さん<BR>" Response.Write "ログインしました<BR>" Exit Do Else Response.Write "暗証番号が違います<BR>" Exit Do End If End If RS.MoveNext '次の会員レコードを検索 Loop If (RS.EOF=True) Then Response.Write "会員登録して下さい<BR> " End If RS.Close DB.Close %> </BODY> </HTML>
NinshoDB.asp
DBによるログインモジュールのプログラミング
http://localhost/loginDB.html
LoginDB.htmlを作っておく こと.変更箇所は Action=“NinshoDB.asp”<%@ LANGUAGE="VBScript" %> <HTML> <HEAD>省略</HEAD> <BODY> <CENTER> <% 'ログインデータ受信(From LoginDB.html) Custm_ID=Request("UserID") Custm_PW=Request("UserPW") 'データベースプログラム Set DB=Server.CreateObject("ADODB.Connection") DB.Provider="Microsoft.ACE.OLEDB.12.0" DB.Open Server.MapPath("受注管理.accdb") Set RS=DB.Execute("Select * from 会員")
'認証チェック
Do Until (RS.EOF=True)
If (Custm_ID=RS.Fields("会員番号")) Then If (Custm_PW=RS.Fields("暗証番号")) Then
Response.Write RS.Fields("会員名")& "さん<BR>" Response.Write "ログインしました<BR>"
Response.Write "<A Href=Order.asp?ID=" & Custm_ID & "&Name=" & RS.Fields("会員番号")
& "&Addrs=" & RS.Fields("住所") & ">注文画面へ</A>" Else Response.Write "暗証番号が違います<BR>" Exit Do End If End If RS.MoveNext '次の会員レコードを検索 Loop If (RS.EOF=True) Then Response.Write "会員登録して下さい<BR> " End If RS.Close DB.Close %> </BODY> </HTML>
NinshoDB.asp
ログインから次のモジュールに移行するプログラミング
http://localhost/loginDB.html
LoginDB.htmlを作っておく こと.変更箇所は Action=“NinshoDB.asp”プログラミング再考
1. モジュール設計:構造化システム設計=モジュール設計
① 1モジュールの命令数は60行以内が目安.
② モジュールの説明,入力データの説明,出力データの説明を書こう.
③ モジュールはさらに分割されることがある.これをサブモジュールと呼ぶ.
分割は7つ以内(fan out).
複数のモジュールから呼出されるモジュールもある.呼出しも7つ以内(fan in)
2. プログラミング作法
① わかりやすいこと:プログラムは引き継がれる.自分がわかれば「
いい」
はNG.
② 見やすいレイアウト:
処理の始まり(begin)と終わり(end)がわかるブロック構造を意識する.
→
字下げ
(indent)・
桁合わせ
を
タブキー
で行う.
③ 適切なコメント:そのブロックの処理内容を簡潔に説明.
④ 適切な
変数名
:c=a*bより,kingaku=tanka*kosuとする.
変数名の説明があると,さらによい.
⑤ プログラムは
石頭(CPU)
への作業命令:まずは紙と鉛筆で考えよう.
3. プログラムの構造は三つ
① 順接
② 反復
For Next, Do While( )…Loop, Do Until( )…Loop
③ 比較
If ( ) Then … Else … End If
4. プログラムは図示して考えよう
① フローチャート(Flow Chart)
② PAD(Program Analysis Dialog)
<HTML> <HEAD> <TITLE>ログイン</TITLE> </HEAD> <BODY> <CENTER> ユーザIDとパスワードを入力してください.
<FORM Action= "NinshoDB.asp" Method="GET"> <TABLE Border="2">
<TR>
<TD>ユーザID</TD>
<TD><INPUT Type="TEXT" Name="UserID" ></TD> </TR>
<TR>
<TD>パスワード</TD>
<TD><INPUT Type="password" Name="UserPW"></TD> </TR>
</TABLE> <BR>
<INPUT TYPE="submit" value="ログイン"> <INPUT TYPE="reset " value="中止">
<A Href="Custm.html">会員登録</A><BR> </FORM> </CENTER> </BODY> </HTML>
LoginDB.html
プログラミング補題
データベースに新規会員を登録するシステムを作り、SQLのInsertコマンドを理解する. 1. 新規会員登録リンクの書き方.→LoginDB.htmlの改変 2. 新規会員データの入力画面. →Custm.html 3. 会員テーブルへデータを追加するプログラム.→Insert_Custm.asp ヒント:リンク表示「会員登録」はボタン形式や画像 にすることもできる。画像は準備しておくこと。 ボタン→<INPUT TYPE="button" value="会員登録"> 画 像→<IMG SRC="会員登録.JPG"><HTML> <HEAD> <TITLE>会員登録画面</TITLE> </HEAD> <BODY> <CENTER> 会員データを入力してください.
<FORM Action="Insert_Custm.asp" Method="GET"> <TABLE Border="2">
<TR>
<TD>ユーザID(半角英数字10桁以内)</TD> <TD><INPUT Type="TEXT" Name="UserID"></TD> </TR>
<TR>
<TD>パスワード(半角英数字10桁以内)</TD> <TD><INPUT Type="TEXT" Name="UserPW"></TD> </TR>
<TR>
<TD>会員名</TD>
<TD><INPUT Type="TEXT" Name="UserName"></TD> </TR>
</TABLE> <BR>
<INPUT TYPE="submit" value="登録"> <INPUT TYPE="reset" value="中止"> </FORM> </CENTER> </BODY> </HTML>
Custm.html
新規会員データの入力画面
Insert_Custm.asp
新規会員データの追加(挿入)
<%@ LANGUAGE="VBScript" %> <HTML> <HEAD> <TITLE>会員登録</TITLE> </HEAD> <BODY> <CENTER> <%On Error Resume Next 'エラー発生時の対処 '会員データ受信(From Custm.html) Custm_ID=Request("UserID") Custm_PW=Request("UserPW") Custm_NM=Request("UserName") 'データベースオープン Set DB=Server.CreateObject("ADODB.Connection") DB.Provider="Microsoft.ACE.OLEDB.12.0" DB.Open Server.MapPath("受注管理.accdb") ‘データベース追加のためのSQL作成 SQLs="INSERT INTO 会員(会員番号,会員名,暗証番号)"
SQLs=SQLs& " VALUES('" & Custm_ID & "','" & Custm_NM & "','" & Custm_PW & "')" DB.Execute(SQLs)
'動作チェック
If (DB.Errors.Count=0) Then
Response.Write Custm_NM & "さんを登録しました.<BR>" Else
Response.Write "エラーが発生しました.<BR>"
Response.Write "エラーコード:" & DB.Errors(0).Description & "<BR>" End If DB.Close %> </BODY> </HTML> INSERTコマンド: INSERT INTO 会員(会員番号,会員名,暗証番号) 半角空白 VALUES(‘aoki’ , ‘青木大介’ , ‘hikone777’) TEXTデータはアポス トロフィで囲む 追加
INSERTコマンドは,ConnectionオブジェクトのExecuteメソッドで実行します.Insertコマン ドの書式を理解してください。 【重要】Webシステムのようにインターネットからデータベースを利用するユーザに対して、 データベースのセキュリティが強化されました。通常は読み取り(SELECT)しか許可されてい ません。レコードの追加(INSERT)や更新(UPDATE)、削除(DELETE)を実行するためにはセ キュリティプロパティを変更する必要があります。 【方法】データベースファイルを右クリックして、プロパティ→セキュリティタブ→インター ネットゲストアカウントをフルコントロールにする。 INSERTコマンドの書式
INSERT INTO テーブル名 (フィールド名1, … ,フィールド名n) VALUES (値1 , … , 値n) フィールド名とValuesの値とは対応していること.
例.Insert Into 会員(会員番号,会員名) VALUES(31000, ‘菅野美穂’)" 文字列は必ずシングルクォーテーションで囲む. ※文字列の中に半角シングルクォーテーションやダブルクォーテーションがあると文字列がそこで分割されるので注意。 INSERTコマンドの実行 DB.Execute INSERTコマンド エラーの確認 IF (DB.Errors.Count=0) Then エラーなし Else エラーあり エラー情報は「DB.Errors(0).Description」で確認可能 End If
INSERTコマンド解説
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨