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

相性占いプログラム

N/A
N/A
Protected

Academic year: 2021

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

Copied!
9
0
0

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

全文

(1)

プログラムの概要

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

相性占いプログラム

VB① □ 単純変数の宣言(Private、Dim) □ 配列変数の宣言(Private) □ 標準コントロールの利用(Label、ComboBox、Command、Image、Frame 等) □ プロパティの値の取得と設定(Text、Caption 等) □ イベントの利用(Load、Click) □ 組込関数(型変換)の利用(Val、StrConv) □ 組込関数(文字列操作)の利用(Trim、Left、Right) □ 演算子(代入演算子、算術演算子、比較演算子、論理演算子、結合演算子) □ 制御構造構文(条件分岐、ループ処理) □ ファイル入出力(シーケンシャルファイルの読込) 今回の課題項目

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

今回の重点項目

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

(2)

■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 ラベル1 オブジェクト名 lblTitle Caption 血液・星占い相性プログラム Font MSゴシック,太字,24 ラベル2 オブジェクト名 lblExplain Caption 星座に依る相性は、ホロスコープ上の太陽の宮 のみで判断しますが、血液型と惑星の位置は、 或る種の密接な関係が有ると言われて居ます。 其処で星座と血液型に依り更に多くの因数か ら詳しい相性を判断して居ます。 Font MSゴシック,斜体,11 ラベル3 オブジェクト名 lblMan Caption、Font 男性: 誕生日(MSゴシック,太字,12) ラベル4 オブジェクト名 lblManBirth Caption、Font 生(MSゴシック,太字,12) ラベル5 オブジェクト名 lblManBlood Caption、Font 血液型(MSゴシック,太字,12) ラベル6 オブジェクト名 lblWoman Caption、Font 女性: 誕生日(MSゴシック,太字,12) ラベル7 オブジェクト名 lblWomanBirth Caption、Font 生(MSゴシック,太字,12) ラベル8 オブジェクト名 lblWomanBlood Caption、Font 血液型(MSゴシック,太字,12) ラベル1 ラベル2 上:ラベル3 下:ラベル6 フレーム1 コマンドボタン1 ラベル9 コマンドボタン2 フレーム2 コンボボックス1 コントロール配列 (0~1) 上:ラベル4 下:ラベル7 上:ラベル5 下:ラベル8 ラベル10 ラベル11 コンボボックス2 コントロール配列 (0~1) コンボボックス3 コントロール配列 (0~1) イメージ

(3)

コントロールの種類 プロパティ プロパティの設定値 ラベル9 オブジェクト名 lblMes1 Caption、Font 空白(MSゴシック,太字,12) ラベル10 オブジェクト名 lblMes2 Caption、Font 空白(MSゴシック,標準,10) ラベル11 オブジェクト名 lblMes3 Caption、Font 空白(MSゴシック,標準,10) フレーム1 オブジェクト名 fraMesA Caption、Font 相性(MSゴシック,標準,10) フレーム2 オブジェクト名 fraMesB Caption、Font アドバイス&ポイント(同上) コマンドボタン1 オブジェクト名 cmdStart Caption 、Font 占う(MSゴシック,太字,11) コマンドボタン2 オブジェクト名 cmdFinish Caption 、Font 終了(MSゴシック,太字,11) コンボボックス1 オブジェクト名 cmbMonth Text、Font 空白(MSゴシック,標準,9) List 1月~12月(改行付き) Index 0~1(コントロール配列) コンボボックス2 オブジェクト名 cmbDay Text、Font 空白(MSゴシック,標準,9) List 1日~31日(改行付き) Index 0~1(コントロール配列) コンボボックス3 オブジェクト名 cmbBlood Text、Font 空白(MSゴシック,標準,9) List A型,B型,AB型,O型(改行付き) Index 0~1(コントロール配列) イメージ オブジェクト名 imgAngel Picture angel.gif ラベル テキストを表示するコントロール。此のテキストは、ユーザーが直接入力したり変更したりす る事は出来ない。 フレーム 他のコントロールをグループ化するコントロール。通常、チェックボックスやオプションボタ ンと共に使用し、フレーム自体は、特定の機能を持たない。 コマンドボタン ユーザーが選択したコマンド(命令)や操作を実行するコントロール。OKボタンや実行ボタ ン等、処理の開始や中断・終了の合図に用いられ、最も良く利用されるコントロールです。 コンボボックス 選択肢の一覧を表示するコントロール。此の一覧より値を選択する事と、テキストボックスに 直接値を入力する事が出来る。 イメージ ビットマップ、アイコン、メタファイル、JPEGファイル、GIFファイル等の画像を表示 するコントロール。描画メソッドを用いて描画する事は出来ない。

(4)

■ プログラムリスト ■ Option Explicit ' フォームレベルでグローバルな変数の宣言 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 SystemDrive As String

' コマンドボタン(終了)がクリックされた時の処理 Private Sub cmdFinish_Click()

' プログラムをメモリから消去し終了する Unload Me

End End Sub

' コマンドボタン(占う)がクリックされた時の処理 Private Sub cmdStart_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 cmbMonth(I).Text = "" Then

cmbMonth(I).SetFocus: Beep: Exit Sub Else

M = Val(Trim$(StrConv(Left$(cmbMonth(I).Text, 2), vbNarrow))) End If

' 誕生日(日)を求める

If cmbDay(I).Text = "" Then

cmbDay(I).SetFocus: Beep: Exit Sub Else D = Val(Trim$(StrConv(Left$(cmbDay(I).Text, 2), vbNarrow))) End If 此処で宣言した変数は同じ フォーム内の総てのサブプ ロシージャで値の参照と設 定を行う事が出来る。 アプリケーションを終了す る場合、正しくプログラムを メモリから消去して終了す る事が望ましい。 此処で宣言した変数は宣言 したサブプロシージャ内で しか値の参照と設定を行う 事が出来ない。 此の場合のイコール(=)記 号は、代入演算子で有り、右 辺の値を左辺に代入する働 きをする。 此の場合のイコール(=)記 号は、比較演算子で有る。 A=B : AとBは等しい ダブルコーテーションの間 に何も記述せず2個連続し て記述すると、長さ0の文字 列(ヌルストリング)を意味 し、文字列の消去等に利用す る。

(5)

' 血液型を求める

If cmbBlood(I).Text = "" Then

cmbBlood(I).SetFocus: Beep: Exit Sub Else

Select Case cmbBlood(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 Next J If S >= 1222 Then ST(I) = B Next I ' 評価値に基づきメッセージを表示する N = PT(ST(0), ST(1)) lblMes1.Caption = M1(N) lblMes2.Caption = M2(N) lblMes3.Caption = M3(N) End Sub ' フォームが読み込まれた時の処理 Private Sub Form_Load()

' サブプロシージャレベルでローカルな変数を宣言する Dim I As Integer Dim J As Integer ' 起動パスを求める SystemDrive = App.Path

If Not Right$(SystemDrive, 1) = "¥" Then SystemDrive = SystemDrive + "¥"

' ファイルよりデータを配列に読み込む

Open SystemDrive + "uranai1.dat" For Input As #1 For I = 0 To 47 For J = 0 To 47 Input #1, PT(I, J) Next J Next I Close #1 条件判定に、比較演算子と論 理演算子を使用して居る。 A >= B : AはB以上 A <B : AはBより小さい A And B : AかつBの場合 此のループ処理ではカウン ターJの値を1から12に 1ずつ変化させて、Next 迄の処理を繰り返し行う。 1個の式の値を複数の値と 比較する条件が多数有る場 合は、Select文を使用 すると、効率的で、読み易い コードを記述する事が出来 る。 此処で宣言した変数は宣言 したサブプロシージャ内で しか値の参照と設定を行う 事が出来ない。 App.Pathには、起動 したアプリケーションのパ スが格納されて居る。 ループ処理のFor文が入 れ子に成って居る。此の様な 状態をネスティングと言う。 Notは否定を意味し、論理 式が真の場合は偽に、偽の場 合は真に成る。 該当式には、コンボボックス の List プロパティに記述し た通りの文字列を指定し無 いと正しく判断され無い。

(6)

Open SystemDrive + "uranai2.dat" For Input As #1 For I = 1 To 12

Input #1, MD(I) Next I

Close #1

Open SystemDrive + "uranai3.dat" For Input As #1 For I = 0 To 12

Input #1, CN(I) Next I

Close #1

Open SystemDrive + "uranai4.dat" For Input As #1 For I = 1 To 7

Input #1, M1(I) Next I

Close #1

Open SystemDrive + "uranai5.dat" For Input As #1 For I = 1 To 7

Input #1, M2(I) Next I

Close #1

Open SystemDrive + "uranai6.dat" For Input As #1 For I = 1 To 7 Input #1, M3(I) Next I Close #1 End Sub 算術演算子 比較演算子 論理演算子 1.^ 冪乗 1.= 等しい 1.Not 否定 2.- 負数 2.<> 等しくない 2.And 論理積 3.*、/ 乗算と除算 3.< より小さい 3.Or 論理和 4.¥ 整数除算 4.> より大きい 4.Xor 排他的論理和 5.Mod 剰余 5.<= 以下 5.Eqv 同値 6.+、- 加算と減算 6.>= 以上 6.Imp 包合 算術演算子と論理演算子では、複数の演算子が使用されて居る場合には、頭に付けた番号の順序で 演算が行われる(上に書かれて居る演算子程優先順位が高い)。 表示を整形する便利な関数 1.StrConv :文字列を変換する関数 亦、StrConv 関数では、『大文字/小文字』や『全角/半角』や『ひらがな/カタカナ』等の相互 変換を行う事が出来る。 此のループ処理ではカウン ターIの値を1から12に 1ずつ変化させて、Next 迄の処理を繰り返し行う。 文字列の結合には、通常、ア ンパサント(&)が使用され るが、従来の様にプラス(+) も使用する事が出来る。 ファイルの読込は、 Open : ファイルを開く Input : データを読む Close : ファイルを閉じる の手順で行う。 亦、一連のデータは、通常配 列変数に読み込む。

(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(引数) 引数で与えられた文字列の先頭と末尾のスペース(全角と半角)を取り除く。 Left関数に依る文字列の切取 指定した文字列の左端から指定した文字数分の文字列を返す関数 Left(引数1, 引数2) 引数1の文字列の左端から引数2の文字数だけ文字列を切り取る。 Right関数に依る文字列の切取 指定した文字列の右端から指定した文字数分の文字列を返す関数 Right(引数1, 引数2) 引数1の文字列の右端から引数2の文字数だけ文字列を切り取る。 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説

(8)

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

(9)

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

Open “squid.dat” For Input As #1

Input #1, D1 Input #1, D2 Input #1, D3 Input #1, D4 Close #1

aa,bb↲

cc,dd↲

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

参照

関連したドキュメント

タンク・容器の種類 容量 数量 化学物質名称

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

設備種目 機器及び設備名称 メンテナンス内容 協定書回数

目名 科名 種名 学名.. 目名 科名

② 入力にあたっては、氏名カナ(半角、姓と名の間も半角で1マス空け) 、氏名漢 字(全角、姓と名の間も全角で1マス空け)、生年月日(大正は

−参加者51名(NPO法人 32名、税理士 16名、その他 3名).

①生活介護 定員 60 名 ②施設入所支援 定員 40 名 ③短期入所 定員10名 ④グループホーム 定員10名 ⑤GH 併設短期入所 定員3名. サービス 定員 延 べ 利

印刷物の VOC排出 抑制設計 + 環境ラベル 印刷物調達の