どうも!リョクちゃです。
新年あけましておめでとうございます。
今年もよろしくお願いします。
変わらずにVB.Netの個人的学習記事を書きつづっていこうと思います。
さて、今回は2000年以降のある西暦の干支を計算する、
アプリケーションを作成してみたので紹介していきます。
ちなみに前回はこちらです。
目次
準備編
今回作成するWindowsフォームアプリケーションについて、
各章立てて触れていきます。
準備編:フォームの作成
以下のフォームを作成します。
各①~⑥のコントロールについては、以下の表になります。
No | アイテム | コントロール名 |
---|---|---|
1 | Label | Label1 |
2 | TextBox | TextBox1 |
3 | Label | Label2 |
4 | Label | Label3 |
5 | Button | Button1 |
6 | PictureBox | PictureBox1 |
準備編:干支イラストの準備
今回PictureBox1に表示する干支の画像を、
下記サイトからダウンロードし使用させていただきました。
※ゆりゆりのゆりさん、ありがとうございます。
ダウンロードした画像をそれぞれデスクトップ上の
任意に作成したフォルダに保存しています。
※ユーザ名には自身のPC端末のユーザ名が割り当てられます。
OSによっては異なるかと思います。
実行環境
筆者の実行環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。
アプリケーションの目的
TextBox1に2000年以降の西暦を入力し、Button1を押すことで
入力された西暦の干支を算出し、求まった干支をLabel3に表示するとともに
PictureBox1にLabel3に表示された干支の画像が表示できることを目的とします。
プログラム編
定数宣言
2000年より前の西暦は対象外なので、あらかじめ数値を宣言します。
1 2 3 4 |
''' <summary> ''' 2000年より前の計算をしないのであらかじめ数値を定数として宣言 ''' </summary> Private Const TARGET_YEAR As Integer = 2000 |
干支の画像が保存されているフォルダの場所を定数として宣言します。
1 2 3 4 |
''' <summary> ''' 干支の画像を格納するフォルダパスを宣言 ''' </summary> Private Const ETO_PICTURE_DIR As String = "C:\Users\ユーザ名\Desktop\Eto" |
※ユーザ名は各自の端末のユーザ名になります。
干支の計算
干支の計算については、2000年以降の場合は以下の式で算出することができます。
- 干支 = 入力された西暦 – 2000
- = 1で求まった値 + 5
- = 2で求まった値 / 12
- = 3の余り
が答えになります。
求まった答えを以下の表に当てはめてあげることで、
その西暦の干支がわかります。
あまり | 干支 |
---|---|
1 | ねずみ(子) |
2 | うし(丑) |
3 | とら(寅) |
4 | うさぎ(卯) |
5 | たつ(辰) |
6 | へび(巳) |
7 | うま(午) |
8 | ひつじ(未) |
9 | さる(申) |
10 | とり(酉) |
11 | いぬ(戌) |
12 | いのしし(亥) |
例えば、2015年の干支を知りたい場合、
干支 = 2015 – 2000
= 15 + 5
= 20 / 12
= 8(あまり)
表を参考に、求まった値は8なので、”未”年になります。
この計算をプログラムにてコードで書くと、以下のようになります。
干支の計算:あまりを干支に変換
このままでは求まった値が何の干支なのかプログラムではわからないので、
値を干支に変換する関数を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
''' <summary> ''' 算出されたあまりから干支を取得 ''' </summary> ''' <param name="eto"></param> ''' <returns></returns> Private Function GetEto(ByVal eto As Integer) As String Select Case eto Case 1 : Return "Nezumi" Case 2 : Return "Ushi" Case 3 : Return "Tora" Case 4 : Return "Usagi" Case 5 : Return "Tatsu" Case 6 : Return "Hebi" Case 7 : Return "Uma" Case 8 : Return "Hitsuji" Case 9 : Return "Saru" Case 10 : Return "Tori" Case 11 : Return "Inu" Case 12 : Return "Inoshishi" Case Else : Return "" End Select End Function |
これとは別に、ローマ字表記を日本語表記に変換する関数も作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
''' <summary> ''' 干支の名前を表示用に変換し、結果を返す ''' </summary> ''' <param name="eto"></param> ''' <returns></returns> Private Function ConvertDispNameEto(ByVal eto As String) As String Select Case eto Case "Nezumi" : Return "子" Case "Ushi" : Return "丑" Case "Tora" : Return "寅" Case "Usagi" : Return "卯" Case "Tatsu" : Return "辰" Case "Hebi" : Return "巳" Case "Uma" : Return "午" Case "Hitsuji" : Return "未" Case "Saru" : Return "申" Case "Tori" : Return "酉" Case "Inu" : Return "戌" Case "Inoshishi" : Return "亥" Case Else : Return "" End Select End Function |
計算ボタン押下後の処理
入力値がない場合は処理をしないようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
''' <summary> ''' 計算ボタン押下後 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 入力値が空白でないかチェック ' 空白なら処理をしない ' 2000年より前でも処理をしない If Me.TextBox1.Text <> "" And CInt(Me.TextBox1.Text) >= TARGET_YEAR Then End If End Sub |
入力値がある場合、以下の流れで処理を進めていきます。
- 干支画像ファイルのパスを取得
- 入力された西暦から干支を計算
- 2で求まった値からローマ字表記の干支に変換
- 結果をLabel3に表示
- PictureBox1にLabel3に表示されている干支の画像を表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
''' <summary> ''' 計算ボタン押下後 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 入力値が空白でないかチェック ' 空白なら処理をしない ' 2000年より前でも処理をしない If Me.TextBox1.Text <> "" And CInt(Me.TextBox1.Text) >= TARGET_YEAR Then ' 干支画像の取得 Dim files As String() = System.IO.Directory.GetFiles(ETO_PICTURE_DIR) ' 入力された西暦から干支を計算 Dim eto As Integer = ((CInt(Me.TextBox1.Text) - TARGET_YEAR) + 5) Mod 12 Dim resEto As String = GetEto(eto) ' 結果をLabelに表示 Me.Label3.Text = ConvertDispNameEto(resEto) ' 干支の画像を表示 ' PicturaBox1に表示される画像サイズを変更 → Zoom PictureBox1.SizeMode = PictureBoxSizeMode.Zoom PictureBox1.Image = System.Drawing.Image.FromFile(ETO_PICTURE_DIR + "\" + resEto + ".png") End If End Sub |
実行編
それでは実行をしていきます。
プログラム起動時
西暦を入力
干支を計算ボタンを押下後
ちなみに2021年で実行すると……
言わずもがなですが…丑になります。
まとめ
今回、入力された年の干支を教えてくれるアプリケーションを作成し、
その年の干支の算出方法や表示の仕方などを解説していきました。
読者の方の何らかの参考になれば嬉しいです。
今年もこんな感じで作ったプログラムや学んだことを紹介していきます。
最後までご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。