とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

ひとりでんたく。- Visual Basic で電卓つく~る。その8 - の時の Calculator クラス。

このコードはまだ作りかけのものです。※ 見ると目から汗がでてくるのは気のせいではありません。

Namespace Torikobito.WankumaFestival.No1


    Public Class Calculator

        Public Sub New()
            Me.Initialize()
        End Sub

        Public Sub Initialize()
            Me.DisplayText = "0"             Me._memo = Decimal.Zero             Me._operation = ArithmeticOperation.None             Me._nextInputIsNew = True
        End Sub

        Private _displayText As String
        Public Property DisplayText() As String             Get                 Return _displayText             End Get             Private Set(ByVal value As String)                 _displayText = value             End Set         End Property

        Private Shared ReadOnly _validInputNumbers As Decimal() = {1D, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9D, 0D}
        Public Shared ReadOnly Property ValidInputNumbers() As System.Collections.ObjectModel.ReadOnlyCollection(Of Decimal)             Get                 Return New System.Collections.ObjectModel.ReadOnlyCollection(Of Decimal)(Calculator._validInputNumbers)             End Get         End Property

        Public Sub InputNumber(ByVal number As Decimal)
            ' 入力しちゃらめぇなのを入力したらなんにもしないの。             If Not Calculator.ValidInputNumbers.Contains(number) Then
                Exit Sub
            End If
            ' 中の人専用。(DisplayText を直接ゴソゴソしてるの見てたらなんかむかついたので。)             Dim newText As String
            ' 新しい入力なら "0" で             ' 前の入力の続きなら前の入力をセット。             ' ついでに次回の入力は新しい入力じゃないよ~♪ってことで。             If Me._nextInputIsNew Then
                newText = "0"                 Me._nextInputIsNew = False
            Else
                newText = Me.DisplayText
            End If
            ' newText が、             ' 0 のときは入力された数字に置き換えるの。             ' 0 じゃないときは入力された数字をつなげるの。             If newText = "0" Then
                newText = number.ToString
            Else
                newText &= number.ToString
            End If
            ' できあがったのが Decimal に変換できるときだけOKってことにしとこう。             ' でもなんかこれ・・・気持ち悪い。             Dim parseValue As Decimal
            If Decimal.TryParse(newText, parseValue) Then
                Me.DisplayText = newText
            End If
        End Sub

        Public Enum ArithmeticOperation
            None             Addition             Subtraction             Multiplication             Division
        End Enum

        Private _memo As Decimal         Private _operation As Calculator.ArithmeticOperation         Private _nextInputIsNew As Boolean

        Public Sub SetArithmeticOperation(ByVal op As Calculator.ArithmeticOperation)
            ' 計算しちゃえ!             Me.Calculate()
            ' 今の値と、演算子を覚えておいて・・・             Me._memo = Decimal.Parse(Me.DisplayText)             Me._operation = op
            ' 次の入力は新しい入力ですからねー♪             Me._nextInputIsNew = True
        End Sub

        Public Sub EndCalculation()
            Me.Calculate()
            ' 過去の清算はしないとね。(おしまいの部分。)             Me._memo = Decimal.Zero             Me._operation = ArithmeticOperation.None             Me._nextInputIsNew = True
        End Sub

        Private Sub Calculate() ' TODO: 例外処理とか。
            Dim current As Decimal = Decimal.Parse(Me.DisplayText)
            Dim calcResult As Decimal
            ' 四則演算でごにょごにょごにょ・・・             Select Case Me._operation
                Case ArithmeticOperation.Addition
                    calcResult = Decimal.Add(Me._memo, current)
                Case ArithmeticOperation.Subtraction
                    calcResult = Decimal.Subtract(Me._memo, current)
                Case ArithmeticOperation.Multiplication
                    calcResult = Decimal.Multiply(Me._memo, current)
                Case ArithmeticOperation.Division
                    calcResult = Decimal.Divide(Me._memo, current)
                Case Else
                    Exit Sub
            End Select
            ' 計算結果をよっこらせっと。             Me.DisplayText = calcResult.ToString
        End Sub

        Public Sub SetDecimalPoint()
            ' すでに小数点があったらなんにもしないの。             If Me.DisplayText.Contains("."Then
                Exit Sub
            End If
            Me.DisplayText &= "."
        End Sub

        Public Sub Negate()
            Dim newText As String = Me.DisplayText
            ' "0" って・・・。             If newText = "0" Then
                Exit Sub
            End If
            ' "-" があったら消す、なかったらつける。             If newText.Contains("-"Then
                newText = newText.Replace("-"String.Empty)
            Else
                newText = "-" & newText
            End If
            ' できあがったのが Decimal に変換できるときだけOKってことにしとこう。             ' でもなんかこれ・・・気持ち悪い。             Dim parseValue As Decimal
            If Decimal.TryParse(newText, parseValue) Then
                Me.DisplayText = newText
            End If
        End Sub

        Public Sub Clear()
            Me.DisplayText = "0"             Me._memo = Decimal.Zero             Me._operation = ArithmeticOperation.None             Me._nextInputIsNew = True
        End Sub

    End Class

End Namespace

どんだけぇ~!

投稿日時 : 2007年7月6日 18:30

Feedback

# ひとりでんたく。- Visual Basic で電卓つく~る。その9 - 2007/07/06 18:48 とりこびと ぶろぐ。

ひとりでんたく。- Visual Basic で電卓つく~る。その9 -

# ANQFFsqllIy 2021/07/03 2:32 https://amzn.to/365xyVY

I was suggested this blog by my cousin. I am not sure whether this post is written by him as nobody else know such detailed about my difficulty. You are wonderful! Thanks!

タイトル
名前
Url
コメント