tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
電卓(未完成品) (VB.NET) ( No.0 )  [親スレッドへ]
日時: 2009/12/26 13:03
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[応用コード][][]                                               *
* キーワード:電卓,計算,基本コード,課題,プログラミング,ソフト                     *
***********************************************************************************
タイトル : 電卓のプログラムを見てください
記 事 No : 9560
投 稿 日 : 2009/11/07(Sat) 22:18
元質問者 : カズ  

簡単な計算のできるプログラムを作りました。今のプログラムをもっと簡単にしたいです。
いいプログラムあれば教えてください。環境はVB.NETです。
今回のは趣味で作っています。

--------------------------------------------------------------------------------
回 答 者 : 花ちゃん
動作確認:WindowsVista VB2005(EE) Framework2.0
この手のプログラムは、課題が殆どなので、敢えて中途半端の状態で掲載しておきます。
動作確認用や叩き台として使って下さい。(このまま提出すると罰点です。)
このコードについての質問はしないで下さい。後は、ご自分で考えて下さい。
別のサンプルの投稿は歓迎します。
--------------------------------------------------------------------------------

Public Class Form1

Private CommaON As Boolean = False  'カンマ(.)の入力済みフラグ
Private Subtotal As Double = 0      '小計
Private Total As Double = 0         '合計
Private btnSingnFrg As Boolean      '計算直後のフラグ
Private OldbtnSingn As String       '前回の記号キー

Private Sub btn0To9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles btn0.Click, btn1.Click, btn2.Click, btn3.Click, btn4.Click, _
            btn5.Click, btn6.Click, btn7.Click, btn8.Click, btn9.Click, btnComma.Click
'数字及びカンマのボタンを押した場合の処理
   'ボタンの表面の文字を取得
   Dim wk As String = CType(sender, Button).Text
   '下記の場合入力しない
   If Label1.Text = "0" And wk = "0" Or (CommaON = True And wk = ".") Then
      Exit Sub
   ElseIf Label1.Text = "0" Or btnSingnFrg = True Then
      '一番最初の入力及び計算直後の場合クリアする
      Label1.Text = ""
      btnSingnFrg = False  '文字列の連結中
   End If
   '入力されたキーをラベルに連結表示
   Label1.Text &= wk
   '一番最初にカンマが入力された場合先頭に0を付加する
   If Label1.Text = "." Then
      CommaON = True       '2個以上カンマが入力されないように監視する為の印
      Label1.Text = "0."
   End If
   '入力中の文字を数値として一時保存
   Subtotal = Double.Parse(Label1.Text)
End Sub

Private Sub btnSign_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                  Handles btnAsterisk.Click, btnC.Click, btnCE.Click, btnMinus.Click, _
                  btnPercent.Click, btnSlash.Click, btnEqual.Click, btnPlus.Click
'記号のボタンが押された場合の処理
   'ボタンの表面の文字を取得
   Dim wk As String = CType(sender, Button).Text

   If Total <> 0 And Subtotal = 0 Then
      OldbtnSingn = wk
      Exit Sub
   End If

   If (wk = "-" Or wk = "×" Or wk = "÷") And Total = 0 Then
      If Total = 0 And Subtotal <> 0 Then
         Total = Subtotal
      End If
      OldbtnSingn = wk
      Subtotal = 0
      btnSingnFrg = True
      Exit Sub
   End If

   Select Case wk
      Case "+"
         Label1.Text = (Total + Subtotal).ToString
      Case "-"
         Label1.Text = (Total - Subtotal).ToString
      Case "×"
         Label1.Text = (Total * Subtotal).ToString
      Case "÷"
         Label1.Text = (Total / Subtotal).ToString
      Case "C"

      Case "CE"

      Case "="
         Select Case OldbtnSingn
            Case "+"
               Label1.Text = (Total + Subtotal).ToString
            Case "-"
               Label1.Text = (Total - Subtotal).ToString
            Case "×"
               Label1.Text = (Total * Subtotal).ToString
            Case "÷"
               Label1.Text = (Total / Subtotal).ToString
         End Select
   End Select

   Total = Double.Parse(Label1.Text)
   CommaON = False
   Subtotal = 0
   btnSingnFrg = True
   OldbtnSingn = wk
End Sub
End Class

--------------------------------------------------------------------------------
たかが、電卓と侮っていたら、結構、色々と面倒な処理が多いですね。
普通の電卓と同じような動きをさせようと思うと、100 * = で 10000 と答えを
出さないといけないし、100 / 3 * 3 で 100 にしないといけないし、桁数の制限や
小数点以下の表示や桁区切り等々、下手に修正すると違う処に影響がでたりとか。
ScriptControl のような物を使用すればもう少し簡単に書く事が出来そうだが...。
興味のある方は、下記を覗いて見て下さい。

[文字列の計算式の計算結果を取得する] DOBON.NET さんのサイト内
http://dobon.net/vb/dotnet/programing/eval.html#section1
--------------------------------------------------------------------------------

 サンプルコードのダウンロード先
 http://hanatyan.sakura.ne.jp/freesoft/Calc.lzh (Calc.lzh 55.2KB)

  上記プログラムの実行図(画像をクリックすると元のサイズで見られます。)



 [スレッド一覧へ] [親スレッドへ]