- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
-
-
-
-
-
-
-
-
- namespace 计算器
- {
-
-
-
- public partial class Window1 : Window
- {
- private decimal m_dInput = 0;
- private int m_iPlaces = 0;
- private bool m_bIsFloat = false;
- private bool m_bNewInt = false;
- private bool m_bNewFloat = false;
- private Counter m_ctrCounter = new Counter();
- private AboutBox1 m_abtAboutBox;
-
- public Window1()
- {
- InitializeComponent();
- updateInput();
- }
-
-
- private void updateInput()
- {
-
- if (m_bIsFloat)
- while (m_dInput.ToString().LastIndexOf('0') == m_dInput.ToString().Length - 1 && m_dInput != 0)
- m_dInput = Convert.ToDecimal(m_dInput.ToString().Substring(0, m_dInput.ToString().Length - 1));
-
-
- if (m_dInput.ToString().Contains("."))
- result.Text = m_dInput.ToString();
- else
- result.Text = m_dInput.ToString() + ".";
- }
-
- #region 数字单击事件
-
- private void number_Click(object sender, RoutedEventArgs e)
- {
- newNumber();
-
- int inputNumber = Convert.ToInt32(sender.ToString().Substring(32, 1));
- try
- {
- if (m_dInput >= 0)
- {
- if (m_bIsFloat)
- m_dInput += (decimal)Math.Pow(10, -++m_iPlaces) * inputNumber;
- else
- m_dInput = m_dInput * 10 + inputNumber;
- }
- else
- {
- if (m_bIsFloat)
- m_dInput -= (decimal)Math.Pow(10, -++m_iPlaces) * inputNumber;
- else
- m_dInput = m_dInput * 10 - inputNumber;
- }
- }
- catch (OverflowException)
- {
- MessageBox.Show("输入的数超过范围,请重新输入", "错误");
- buttonCE_Click(sender, e);
- }
- updateInput();
- }
-
-
- private void number0_Click(object sender, RoutedEventArgs e)
- {
- if (m_bNewInt)
- {
- m_dInput = 0;
- m_iPlaces = 0;
- if (m_bNewFloat)
- {
- m_bIsFloat = true;
- m_bNewFloat = false;
- result.Text = "0.";
- }
- else
- m_bIsFloat = false;
- m_bNewInt = false;
- }
- try
- {
- if (m_bIsFloat)
- {
- ++m_iPlaces;
- result.Text += "0";
- }
- else
- {
- m_dInput *= 10;
- updateInput();
- }
- }
- catch (OverflowException)
- {
- MessageBox.Show("输入的数超过范围,请重新输入", "错误");
- buttonCE_Click(sender, e);
- }
- }
-
- #endregion
-
-
- private void newNumber()
- {
- if (m_bNewInt)
- {
- m_dInput = 0;
- m_iPlaces = 0;
- if (m_bNewFloat)
- m_bNewFloat = false;
- else
- m_bIsFloat = false;
- m_bNewInt = false;
- }
- }
-
- #region 操作按钮的单击事件
-
-
- private void buttonCE_Click(object sender, RoutedEventArgs e)
- {
- m_bIsFloat = false;
- m_bNewFloat = false;
- m_bNewInt = false;
- m_dInput = 0;
- m_iPlaces = 0;
- updateInput();
- }
-
-
- private void buttonBackspace_Click(object sender, RoutedEventArgs e)
- {
-
- m_bNewInt = false;
-
-
- if (m_bIsFloat)
- --m_iPlaces;
-
- if (m_dInput.ToString().Length == 1)
- {
- if (m_bIsFloat)
- {
- if (m_iPlaces == -1)
- {
- m_bIsFloat = false;
- m_iPlaces = 0;
- }
- else
- {
- result.Text = result.Text.Substring(0, result.Text.Length - 1);
- m_dInput = Convert.ToDecimal(result.Text);
- return;
- }
- }
- else
- m_dInput = 0;
- }
- else
- {
- if (m_bIsFloat)
- {
- if (m_iPlaces == -1)
- {
- m_bIsFloat = false;
- m_iPlaces = 0;
- }
- else
- {
- result.Text = result.Text.Substring(0, result.Text.Length - 1);
- m_dInput = Convert.ToDecimal(result.Text);
- return;
- }
- }
- else
- m_dInput = Convert.ToDecimal(m_dInput.ToString().Substring(0, m_dInput.ToString().Length - 1));
- }
- updateInput();
- }
-
-
- private void minus_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = -m_dInput;
- updateInput();
- }
-
-
- private void dot_Click(object sender, RoutedEventArgs e)
- {
- if (m_bNewInt)
- m_bNewFloat = true;
- m_bIsFloat = true;
- }
-
-
- private void buttonC_Click(object sender, RoutedEventArgs e)
- {
- m_ctrCounter.Clear();
- buttonCE_Click(sender, e);
- }
-
-
- private void operatorSqrt_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = (decimal)Math.Sqrt((double)m_dInput);
- updateInput();
- m_bNewInt = true;
- }
-
-
- private void operatorDivide_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = m_ctrCounter.Calculate(m_dInput, Counter.Operators.Divide);
- updateInput();
- m_bNewInt = true;
- }
-
-
- private void operatorMultiply_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = m_ctrCounter.Calculate(m_dInput, Counter.Operators.Multiply);
- updateInput();
- m_bNewInt = true;
- }
-
-
- private void operatorSubtract_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = m_ctrCounter.Calculate(m_dInput, Counter.Operators.Subtract);
- updateInput();
- m_bNewInt = true;
- }
-
-
- private void operatorAdd_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = m_ctrCounter.Calculate(m_dInput, Counter.Operators.Add);
- updateInput();
- m_bNewInt = true;
- }
-
-
- private void operatorReciprocal_Click(object sender, RoutedEventArgs e)
- {
- if (m_dInput == 0)
- {
- MessageBox.Show("操作有误","错误");
- buttonC_Click(sender, e);
- return;
- }
-
- if (m_dInput.ToString().Contains('.'))
- {
- m_dInput = 1 / m_dInput;
- Counter.ChangeToInteger(ref m_dInput);
- }
- else
- m_dInput = 1 / m_dInput;
- updateInput();
- m_bNewInt = true;
- }
-
-
- private void operatorAssign_Click(object sender, RoutedEventArgs e)
- {
- m_dInput = m_ctrCounter.Calculate(m_dInput, Counter.Operators.Assign);
- updateInput();
- m_bNewInt = true;
- }
-
- #endregion
-
-
- private void openAboutBox(object sender, RoutedEventArgs e)
- {
- m_abtAboutBox = new AboutBox1();
- m_abtAboutBox.ShowDialog();
- }
- }
- }
计算器类
主程序界面:

关于对话框:

|