• 検索結果がありません。

相性占いプログラム

N/A
N/A
Protected

Academic year: 2021

シェア "相性占いプログラム"

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラムの概要

画面上で、男女夫々れの誕生日の月日と血液型を コンボボックスより選択した後、占うボタンをク リックする。 相性とアドバイス&ポイントは、血液型と星座の 位置に依り、予め或る占術法に基づき作成された データをファイルより読み込んで配列に記憶させ、 誕生日と血液型に依り算出された評価値に該当す るデータを表示する。 猶、必要な入力が行われて居ない場合には、警告 音を鳴らして、該当入力部分に戻る物とする。 今回は、ファイルアクセスの基礎と成るシーケン シャルファイルの読込に付いて学習する。

相性占いプログラム

VB 2005 ① □ 単純変数の宣言(Private、Dim) □ 配列変数の宣言(Private) □ 標準コントロールの利用(Label、ComboBox、Button、Groupbox、Picturebox) □ プロパティの値の取得と設定(Text、StartupPath 等) □ イベントの利用(Load、Click) □ メソッドの利用(EndWith、Focus、Substring、Dispose) □ 組込関数の利用(Val、Trim、StrConv) □ 演算子(代入演算子、算術演算子、比較演算子、論理演算子、結合演算子)

□ 制御構造構文(条件分岐 If~End If、Select~End Select、ループ処理 For~Next) □ ファイル入出力(シーケンシャルファイルの読込、FileOpen、Input、FileClose)

今回の課題項目

□ Select 文に依る条件分岐(Select Case … Case … End Select) □ シーケンシャルファイルの読込(FileOpen、Input、FileClose)

今回の重点項目

□ 背景画やフォントを工夫してビジュアルな面を改良する。 □ 他の占い方法に依る独自のデーターファイルを作成する。

(2)

■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 フォーム Name uranai BackColor White FormBorderStyle FixedSingle Text 相性占いプログラム ラベル1 Name lblTitle Text 血液型・星座に依る相性占い Font HG 創英角ポップ体,標準,24 ラベル2 Name lblExplain AutoSize False Text 星座に依る相性は、ホロスコープ上の太陽の宮 のみで判断しますが、血液型と惑星の位置は、 或る種の密接な関係が有ると言われて居ます。 其処で星座と血液型に依り更に多くの因数か ら詳しい相性を判断して居ます。 Font MS明朝,標準,11 ラベル3 Name lblMan1 Text、Font 男性: 誕生日(MS明朝,太字,12) ラベル4 Name lblWoman1 Text、Font 女性: 誕生日(MS明朝,太字,12) ラベル5 Name lblMan2 Text、Font 生 血液型(MS明朝,太字,12) ラベル6 Name lblWoman2 Text、Font 生 血液型(MS明朝,太字,12) ラベル1 ラベル2 上:ラベル3 下:ラベル4 グループボックス1 ボタン1 ラベル7 上:コンボボックス1 下:コンボボックス2 上:ラベル5 下:ラベル6 ラベル8 ラベル9 ピクチャボックス 上:コンボボックス5 下:コンボボックス6 ボタン2 上:コンボボックス3 下:コンボボックス4 グループボックス2

(3)

コントロールの種類 プロパティ プロパティの設定値 コンボボックス1、2 Name cmbMonthM、cmbMonthW Text、Font 空白(MS明朝,標準,9) Items 1月~12月(改行付き、全角、桁揃え) コンボボックス3、4 Name cmbDayM、cmbDayW Text、Font 空白(MS明朝,標準,9) Items 1日~31日(改行付き、全角、桁揃え) コンボボックス5、6 Name cmbBloodM、cmbBloodW Text、Font 空白(MS明朝,標準,9) Items A型,B型,AB型,O型(改行付き、全角) ボタン1 Name btnStart Text 、Font 占う(MS明朝,太字,11) ボタン2 Name btnFinish Text 、Font 終了(MS明朝,太字,11) グループボックス1 Name grpMesA Text、Font 相性(MS明朝,標準,10) ラベル7 Name lblMes1 Text、Font、AutoSize 空白(MS明朝,太字,12)、False ラベル8 Name lblMes2 Text、Font、AutoSize 空白(MS明朝,標準,10)、False グループボックス2 Name grpMesB Text、Font アドバイス&ポイント(同上) ラベル9 Name lblMes3 Text、Font、AutoSize 空白(MS明朝,標準,10)、False ピクチャボックス Name picAngel BackColor Transparent Picture angel.gif ラベル テキストを表示するコントロール。此のテキストは、ユーザーが直接入力したり変更したりす る事は出来ない。 グループボックス 他のコントロールをグループ化する為のコンテナと成るコントロールで有る。通常は、機能別 にフォームを細分化する為に使用する。パネルと同じ様な目的で使用するが、パネルとは異な り、キャプションを表示する事が出来る。 ボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OK ボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用されるコントロールで有る。 コンボボックス 選択肢の一覧を表示するコントロール。此の一覧より値を選択する事と、テキストボックスに 直接値を入力する事が出来る。 ピクチャボックス ビットマップ、アイコン、メタファイル、JPEG ファイル、GIF ファイル等の画像を表示す るコントロール。従来のバージョン(VB 6.0)の様に、描画メソッドを用いて描画する事や、 内部に他のコントロールを配置してコンテナと仕て使用する事は出来ない。

(4)

■ プログラムリスト ■

Public Class uranai

' フォームレベルでグローバルな変数の宣言 Private PT(47, 47) As Integer Private MD(12) As Integer Private CN(12) As Integer Private ST(1) As Integer Private M1(7) As String Private M2(7) As String Private M3(7) As String Private SD As String Private cboMonth(1) As ComboBox Private cboDay(1) As ComboBox Private cboBlood(1) As ComboBox ' フォームが読み込まれた時の処理

Private Sub uranai_Load( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Load

Dim I As Integer Dim J As Integer ' 起動パスの取得

SD = Application.StartupPath : If Not SD.EndsWith("¥") Then SD &= "¥" ' ファイルよりデータを配列に読込

FileOpen( 1, SD & "uranai1.dat", OpenMode.Input ) For I = 0 To 47 For J = 0 To 47 Input( 1, PT( I, J ) ) Next Next FileClose( 1 )

FileOpen( 1, SD & "uranai2.dat", OpenMode.Input ) For I = 1 To 12

Input( 1, MD( I ) ) Next

FileClose( 1 )

FileOpen( 1, SD & "uranai3.dat", OpenMode.Input ) For I = 0 To 12 Input( 1, CN( I ) ) Next FileClose( 1 ) Application の StartupPath プロ パティには、起動したアプリケー ションのパスが格納されて居る。 注意!! データファイルuranai1~6.dat は、製作中は、当該プロジェクトの bin/Debug フォルダに、亦、コ ンパイル後の実行中は、EXE ファイルと同じフォルダに、格納して置く事。 此処で宣言した変数は同じフォー ム内の総てのサブプロシージャで 値の参照と設定を行う事が出来 る。 Object 型も、基本的な型と同様に 変数や配列のデータ型と仕て指定 する事が出来る。 EndsWith は、文字列の末尾の文 字を調査するメソッドで有る。 Not は否定を意味し、論理式が真 の時は偽に、偽の時は真に成る。 ループ処理のFor 文が入れ子に成 って居る。此の様な状態をネステ ィングと言う。 此のループ処理ではカウンターI の値を1 から 12 に 1 宛変化させ てNext 迄の処理を繰り返し行う。 文字列の結合には、通常、アンパ サント(&)が使用されるが、従 来の様にプラス(+)も使用する 事が出来る。

(5)

FileOpen( 1, SD & "uranai4.dat", OpenMode.Input ) For I = 1 To 7

Input( 1, M1( I ) ) Next

FileClose( 1 )

FileOpen( 1, SD & "uranai5.dat", OpenMode.Input ) For I = 1 To 7

Input( 1, M2( I ) ) Next

FileClose( 1 )

FileOpen( 1, SD & "uranai6.dat", OpenMode.Input ) For I = 1 To 7 Input( 1, M3( I ) ) Next FileClose( 1 ) ' コントロールを Object 配列に格納(コントロール配列化) cboMonth( 0 ) = cboMonthM cboMonth( 1 ) = cboMonthW cboDay( 0 ) = cboDayM cboDay( 1 ) = cboDayW cboBlood( 0 ) = cboBloodM cboBlood( 1 ) = cboBloodW End Sub ' ボタン(占う)がクリックされた時の処理

Private Sub btnStart_Click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles btnStart.Click Dim I As Integer Dim J As Integer Dim M As Integer Dim D As Integer Dim B As Integer Dim S As Integer Dim N As Integer Dim T As String ' 男女夫々れの評価値の算出 For I = 0 To 1 ' 誕生日(月)の取得

If cboMonth( I ).Text = "" Then

cboMonth( I ).Focus( ) : Beep( ) : Exit Sub Else

M = Val( Trim( StrConv( cboMonth( I ).Text.Substring( 0, 2 ), VbStrConv.Narrow ) ) ) End If

' 誕生日(日)の取得

If cboDay(I).Text = "" Then

cboDay( I ).Focus( ) : Beep( ) : Exit Sub Else

D = Val( Trim( StrConv( cboDay( I ).Text.Substring( 0, 2 ), VbStrConv.Narrow ) ) ) End If ダブルコーテーションの間に何も 記述せず2個連続して記述する と、長さ0の文字列(ヌルストリ ング)を意味し、文字列の消去等 に利用する。 ファイルの読込は、 FileOpen : ファイルを開く Input : データを読む FileClose : ファイルを閉じる の手順で行う。 亦、一連のデータは、通常配列変 数に読み込む。 ファイルに記録されて居るデータ の個数が、予め判明して居る場合 は、For ~ Next 文で、総てのデ ータを読み込む事が出来る。 .NET 以降では、従来の様にデザ イン時にコントロール配列を配置 する事が出来ない。 其の為、コントロールを配列と仕 て使用する為には、コントロール 型の配列に、コントロールのイン スタンスを代入する必要が有る。 此の行のイコール(=)記号は、 代入演算子で有り、右辺の値を左 辺に代入する働きをする。 此の行のイコール(=)記号は、 比較演算子で有る。 A=B : AとBは等しい Substring は、文字列から部分文 字列を切り出すメソッドで有る。

(6)

' 血液型の取得

If cboBlood(I).Text = "" Then

cboBlood( I ).Focus( ) : Beep( ) : Exit Sub Else

Select Case cboBlood( I ).Text Case "A型" B = 0 Case "O型" B = 1 Case "B型" B = 2 Case "AB型" B = 3 End Select End If ' 評価値の算出 S = M * 100 + D For J = 1 To 12 If S >= CN( J – 1 ) And S < CN( J ) Then ST( I ) = ( J – 1 ) * 4 + B End If Next If S >= 1222 Then ST( I ) = B Next ' 評価値に基づきメッセージの表示 N = PT( ST( 0 ), ST( 1 ) ) lblMes1.Text = M1( N ) lblMes2.Text = M2( N ) lblMes3.Text = M3( N ) End Sub ' ボタン(終了)がクリックされた時の処理

Private Sub btnFinish_Click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles btnFinish.Click Me.Dispose( ) End End Sub End Class 表示を整形する便利な関数StrConv:文字列を変換する関数 此処では、全角文字を半角文字に変換して居るが、他にも、StrConv 関数では、『大文字/小文字』 や『Unicode/Shift JIS』や『ひらがな/カタカナ』等の相互変換を行う事が出来る。 アプリケーションを終了する場 合、正しくプログラムをメモリか ら消去して終了する事が望まし い。 1個の式の値を複数の値と比較す る条件が多数有る場合は、Select 文を使用すると、効率的で、読み 易いコードを記述する事が出来 る。 該当式には、コンボボックスの Items プロパティに記述した通り の文字列を指定し無いと正しく判 断され無い。 条件判定に、比較演算子と論理演 算子を使用して居る。 A >= B : AはB以上 A <B : AはBより小さい A And B : AかつBの場合 此のループ処理ではカウンターJ の値を1 から 12 に 1 宛変化させ て、Next 迄の処理を繰り返し行 う。

(7)

SELECT 文に依る条件分岐 (再掲) 評価式の値に従い、複数のステートメントブロックの中の孰れかを実行するステートメント Select Case 評価式 Case 該当式1 評価式が該当式1に該当する場合の処理 Case 該当式2 評価式が該当式2に該当する場合の処理 … Case Else 上記孰れの該当式にも該当しない場合の処理 End Select 評価式の値に従い、複数のステートメントブロックの中の孰れかを実行する。Select 文では 評価式が1回だけ評価され、其の値と各Case 節の値が比較され、一致した場合、其の Case 節に対応するステートメントブロックが実行される。 該当式には、1個以上の値リストを指定する。複数の値を指定する場合には、値をカンマ(,)で区切 る。亦、キーワードIs と To を使用する事も出来る。 評価式が複数の該当式と一致した場合には、最初に一致したCase 節のステートメントブロックが実行 される。亦、孰れの該当式とも一致しない場合は、Else Case 節(省略可能)が実行される。 Trim 関数に依る余分なスペースの削除 (再掲) 指定した文字列から前後のスペースを削除した文字列を返す関数 Trim(文字列) 引数で与えられた文字列の先頭と末尾のスペース(全角と半角)を取り除く。 引数の文字列には、文字列、又は、文字列を格納した変数を指定し、必ず指定する。 Substring メソッドに依る文字列の操作 (再掲) 部分文字列を取得するメソッド Object.Substring(開始位置, 文字数) Object で表わされる文字列の開始位置から指定した文字数丈切り出した文字列を返す。 引数の開始位置には、開始位置のインデックスを指定し、省略する事は出来ない。 引数の文字数には、切り取る文字数を指定し、省略可能で有る。 引数の開始位置は、0から始まるインデックスで指定する。亦、引数の文字数を省略した場合は、イン デックス以降の末尾迄の総ての文字列が切り出される。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説

(8)

FileOpen 関数に依るファイルのオープン(シーケンシャルアクセス) 入出力を行う為にファイルを開く関数 Open( ファイル番号, ファイル名, モード ) ファイルを開いてファイルへのアクセス(入出力)が出来る様にする。 入出力処理を行う為には、其の対象と成るファイルを開く必要が有る。FileOpen 関数はファイルに入 出力の為のバッファを割り当て、バッファに対するアクセス モードを決定する。 引数のファイル番号には、其の時点でユニークなファイル番号を指定し、省略する事は出来ない。 引数のファイル名には、オープンするファイル名を指定し、省略する事は出来ない。 引数のモードには、シーケンシャルアクセスでは、下記のOpenMode 列挙型の孰れかを指定する。 1.OpenMode.Input : 入力モード(ファイルからデータを読み込む) 2.OpenMode.Output : 出力モード(ファイルにデータを書き込む/上書きする) 3.OpenMode.Append : 出力モード(ファイルにデータを書き込む/追加する) ファイル番号には、ファイルハンドラと成る1~511 の範囲の整数値を指定する。FreeFile 関数を使用 すると、次に使用可能なファイル番号を取得する事が出来る。 ファイル名には、ドライブ名やディレクトリ名(フォルダ名)を含める事が出来る。猶、VB エディタ 上でも正しく動作させる為に、ドライブ名からのフルパスで指定する事が望ましい。 Input 関数に依るデータの読込(シーケンシャルファイル) シーケンシャル入力モードで開いたファイルよりデータを読み込む関数 Input( ファイル番号, 変数名 ) シーケンシャルファイルよりデータを読み込んで変数に格納する。 引数のファイル番号には、入力用と仕てオープンした時に使用したファイル番号を指定する。 引数の変数名には、読み込んだデータを格納する変数の名前を指定する。 猶、VB6 の様に、変数名をカンマ(,)で区切り、複数指定する事は出来ない。 ファイル内のデータ項目の順番は、引数で指定した変数の順番と一致して居る必要が有る。亦、ファイ ル内の各データ項目のデータ型は、対応する変数のデータ型と一致して居なければ成らない。通常、フ ァイルからデータを読み込む場合、文字列データは文字列型、数値データは数値データ型として格納さ れるが、変数が数値データ型で読み込むデータが数値データ型で無い場合、変数には0が代入される。 データを入力して居る時に、ファイルの末尾に達すると、EOF 関数の値が真(True)に設定されるの で、読み込み位置がファイルの末尾に達したか何うかを確かめる事が出来る。猶、ファイルの末尾に達 した後、入力を行うと、入力が終了し、エラーが発生する。 シーケンシャルファイル内の各データは、カンマ、又は、改行を区切り記号(デリミタ)として区切ら 機 能 書 式 解 説 機 能 書 式 解 説

(9)

FileClose 関数に依るファイルのクローズ ファイルを閉じるステートメント FileClose( ファイル番号 ) ファイル番号に対応するファイルを閉じる。 引数のファイル番号には、オープンした時に使用したファイル番号を指定する。 複数のファイルを開いて居る場合には、カンマで区切り、複数指定する事も出来る。亦、ファイル番号 を省略した時には、其の時点で開いて居る総てのファイルを閉じる。 Close ステートメントでファイルを閉じると、其のファイルに割り当てられて居たファイル番号は解放 され、再び使用する事が出来る様に成る。 シーケンシャル出力モード(Output 又は Append)で開いたファイルを閉じた時、出力バッファに残 存して居るデータは、其のファイルに対するオペレーティングシステムバッファに書き込まれ、閉じた ファイルが使用して居たバッファ領域は総て解放される。 機 能 書 式 解 説 ファイルの入出力 データをファイルから読み込んだり、ファイルに書き込む時は、対象に成るファイルをオープン してから処理を行い、其の後、ファイルをクローズすると言う手順が必要と成る。オープンした ファイルには、ファイル番号を付けて管理する。 シーケンシャルファイル データがファイルに書き込まれた順に保存されて居るファイルで、原則として先頭から順番に読 み書きする必要が有り、データの一部を変更する事は出来ない。 シーケンシャルファイル読込の処理手順

FileOpen( 1, “squid.dat”, OpenMode.Input )

Input( 1, D1 ) Input( 1, D2 ) Input( 1, D3 ) Input( 1, D4 ) FileClose( 1 )

aa,bb↲

cc,dd↲

squid.dat squid.dat Open aa が D1 に読み込まれる bb が D2 に読み込まれる cc が D3 に読み込まれる dd が D4 に読み込まれる 入力モードでファイルを開く 総てのデータを読み込んだ時点でEOF(1)が True に成る

参照

関連したドキュメント

生殖毒性分類根拠 NITEのGHS分類に基づく。 特定標的臓器毒性 特定標的臓器毒性単回ばく露 単回ばく露 単回ばく露分類根拠

語基の種類、標準語語幹 a語幹 o語幹 u語幹 si語幹 独立語基(基本形,推量形1) ex ・1 ▼▲ ・1 ▽△

デスクトップまたはスタートボタンの“プログラム”に 標準宅地鑑定評価システム 2023 のショートカ

画像の参照時に ACDSee Pro によってファイルがカタログ化され、ファイル プロパティと メタデータが自動的に ACDSee

指標名 指標説明 現 状 目標値 備 考.

業種 事業場規模 機械設備・有害物質の種 類起因物 災害の種類事故の型 建設業のみ 工事の種類 災害の種類 被害者数 発生要因物 発生要因人

目標 目標/ 目標 目標 / / /指標( 指標( 指標(KPI 指標( KPI KPI KPI)、実施スケジュール )、実施スケジュール )、実施スケジュール )、実施スケジュールの の の の設定

2:入口灯など必要最小限の箇所が点灯 1:2に加え、一部照明設備が点灯 0:ほとんどの照明設備が点灯