- 日時: 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)
上記プログラムの実行図(画像をクリックすると元のサイズで見られます。)
|