相性占いプログラム

Similar documents
相性占いプログラム

相性占いプログラム

ルーレットプログラム

何時何処で誰が

回文作成支援プログラム

ブロック パニック

万年暦プログラム

回文作成支援プログラム

回文作成支援プログラム

シーケンシャルファイルの操作

ブロック崩し風テニス

画像閲覧プログラム

ファイル操作

3D回転体プログラム

VB実用⑦ エクセル操作Ⅰ

回文作成支援プログラム

ICONファイルフォーマット

モグラ叩きプログラム

回文作成支援プログラム

インベーダープログラム

Userコントロール

占領双六ゲーム

グラフィックス

VB6互換のファイルの処理

VB.NET解説

画像閲覧プログラム

データアダプタ概要

チャットプログラム

正規表現応用

ファイル操作-インターネットキャッシュ

構造体

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

Microsoft Word - VB.doc

sinfI2005_VBA.doc

回文作成支援プログラム

PowerPoint プレゼンテーション

データベースⅠ

神経衰弱ゲーム

データベース1

マルチメディア・音声

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

草競馬プログラム

アプリケーション

ファイル操作-バイナリファイル

DAOの利用

PowerPoint プレゼンテーション

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

C 資料 電脳梁山泊烏賊塾 ファイルの入出力 C++ のバイナリファイル入出力 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する

プロセス間通信

Microsoft Word -

倉庫番

NotifyIconコントロール

ExcelVBA

データベース1

C#の基本

VB実用⑯ 印刷Ⅵ(Excel)

VFD256 サンプルプログラム

ListViewコントロール

通信対戦プログラム

万年暦プログラム

わにわにパニックプログラム

通信対戦プログラム

Prog2_12th

C 資料 電脳梁山泊烏賊塾 ファイルの入出力 C++ のファイル入出力 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 使用クラ

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

万年暦プログラム

Prog2_15th

※ ポイント ※

VB実用⑩ エクセル操作Ⅳ

ファイル監視

MS-ExcelVBA 基礎 (Visual Basic for Application)

プラグイン

データベース1

VB実用⑧ エクセル操作Ⅱ

ハッシュテーブル

データベースⅡ

テキストファイルの入出力1

何時何処で誰が

バスケットボール

Taro-ファイル処理(公開版).jtd

スロットプログラム

PowerPoint プレゼンテーション

スクールCOBOL2002

スライド 1

Microsoft PowerPoint - 第3回目.ppt [互換モード]

3D回転体プログラム

Section1_入力用テンプレートの作成

Microsoft PowerPoint - prog04.ppt

ドライブは安全運転で in 滋賀♪

CONTENTS マニュアルの表記... S01-02_01 1.DataNature Smart 全体概要図... S01-02_11 2. 基本操作... S01-02_ ジョブの作成... S01-02_21 加工条件設定... S01-02_21 Step1: 処理対象データの指

2006年10月5日(木)実施

パラパラ漫画

占領双六ゲーム

Java講座

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

PowerPoint プレゼンテーション

3D回転体プログラム

Taro-Basicの基礎・条件分岐(公


VB実用Ⅲ⑩ フリーデータベースⅡ

Transcription:

相性占いプログラム VB 2005 1 プログラムの概要 画面上で 男女夫々れの誕生日の月日と血液型をコンボボックスより選択した後 占うボタンをクリックする 相性とアドバイス & ポイントは 血液型と星座の位置に依り 予め或る占術法に基づき作成されたデータをファイルより読み込んで配列に記憶させ 誕生日と血液型に依り算出された評価値に該当するデータを表示する 猶 必要な入力が行われて居ない場合には 警告音を鳴らして 該当入力部分に戻る物とする 今回は ファイルアクセスの基礎と成るシーケンシャルファイルの読込に付いて学習する 今回の課題項目 単純変数の宣言 (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~) ファイル入出力 ( シーケンシャルファイルの読込 FileOpen Input FileClose) 今回の重点項目 Select 文に依る条件分岐 (Select Case Case End Select) シーケンシャルファイルの読込 (FileOpen Input FileClose) 今回の応用項目 背景画やフォントを工夫してビジュアルな面を改良する 他の占い方法に依る独自のデーターファイルを作成する -1-

オブジェクト プロパティ一覧 ラベル 1 上 : ラベル 3 下 : ラベル 4 上 : ラベル 5 下 : ラベル 6 ラベル 2 ピクチャボックス ラベル 7 ラベル 8 上 : コンボボックス 1 下 : コンボボックス 2 上 : コンボボックス 3 下 : コンボボックス 4 上 : コンボボックス 5 下 : コンボボックス 6 ボタン 1 ボタン 2 ラベル 9 グループボックス 1 コントロールの種類 プロパティ プロパティの設定値 フォーム 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) -2- グループボックス 2

コントロールの種類 プロパティ プロパティの設定値 コンボボックス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) の様に 描画メソッドを用いて描画する事や 内部に他のコントロールを配置してコンテナと仕て使用する事は出来ない -3-

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

FileOpen( 1, SD & "uranai4.dat", OpenMode.Input ) For I = 1 To 7 Input( 1, M1( I ) ) FileOpen( 1, SD & "uranai5.dat", OpenMode.Input ) For I = 1 To 7 Input( 1, M2( I ) ) FileOpen( 1, SD & "uranai6.dat", OpenMode.Input ) For I = 1 To 7 Input( 1, M3( I ) ) ' コントロールを Object 配列に格納 ( コントロール配列化 ) cbomonth( 0 ) = cbomonthm cbomonth( 1 ) = cbomonthw cboday( 0 ) = cbodaym cboday( 1 ) = cbodayw cboblood( 0 ) = cbobloodm cboblood( 1 ) = cbobloodw End Sub ファイルの読込は FileOpen : ファイルを開く Input : データを読む FileClose : ファイルを閉じるの手順で行う 亦 一連のデータは 通常配列変数に読み込む ファイルに記録されて居るデータの個数が 予め判明して居る場合は For ~ 文で 総てのデータを読み込む事が出来る.NET 以降では 従来の様にデザイン時にコントロール配列を配置する事が出来ない 其の為 コントロールを配列と仕て使用する為には コントロール型の配列に コントロールのインスタンスを代入する必要が有る ' ボタン ( 占う ) がクリックされた時の処理 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 ダブルコーテーションの間に何も記述せず 2 個連続して記述すると 長さ 0 の文字列 ( ヌルストリング ) を意味し 文字列の消去等に利用する 此の行のイコール (=) 記号は 比較演算子で有る A=B : AとBは等しい 此の行のイコール (=) 記号は 代入演算子で有り 右辺の値を左辺に代入する働きをする 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 Substring は 文字列から部分文字列を切り出すメソッドで有る -5-

' 血液型の取得 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 If S >= 1222 Then ST( I ) = B ' 評価値に基づきメッセージの表示 N = PT( ST( 0 ), ST( 1 ) ) lblmes1.text = M1( N ) lblmes2.text = M2( N ) lblmes3.text = M3( N ) End Sub 1 個の式の値を複数の値と比較する条件が多数有る場合は Select 文を使用すると 効率的で 読み易いコードを記述する事が出来る 該当式には コンボボックスの Items プロパティに記述した通りの文字列を指定し無いと正しく判断され無い 此のループ処理ではカウンター J の値を 1 から 12 に 1 宛変化させて 迄の処理を繰り返し行う 条件判定に 比較演算子と論理演算子を使用して居る A >= B : AはB 以上 A <B : AはBより小さい A And B : AかつBの場合 ' ボタン ( 終了 ) がクリックされた時の処理 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 や ひらがな / カタカナ 等の相互変換を行う事が出来る -6-

VB 2005 1 VB 2005 基礎 Ⅱ noa 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 から始まるインデックスで指定する 亦 引数の文字数を省略した場合は インデックス以降の末尾迄の総ての文字列が切り出される -7-

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

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