using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace caculator
{
public partial class caculator1 : Form
{
String op1,op2; //定义两个操作数
bool DecimalFlag; //标识小数点是否存在
int NumOps; //记录操作数个数
String LastInput; //指示上一次按键事件的类型
int OpFlag; //指示将要进行的操作类型
bool OperaterFlag; //指示是否已经进行过操作
String TempReadout;
public caculator1()
{
InitializeComponent();//初始化界面控件
}
private void caculator1_Load(object sender, EventArgs e) //对变量进行初始化赋值
{
DecimalFlag = false; //小数点标志赋为false
OperaterFlag = false; //尚未进行过操作
NumOps = 0; //操作数个数为
LastInput = "NONE";
OpFlag = 0;
ReadOut.Text = "0."; //文本框中初始值为“.”
}
public void calculate(int MyNumber) //接收操作数
{
if (!OperaterFlag) //判断是否点击过操作符,初始值为false 如果没有点击操作符
{
if (DecimalFlag) //判断是否点击过小数点,初始值为false 如果已经点击过小数点
{
ReadOut.Text = ReadOut.Text + MyNumber; //直接把点击的数字加在框中现有数据的后面 小数点后点击的数字直接追加
}
else //未曾点击过小数点则进行如下操作
{
if (ReadOut.Text == "0.")
{
ReadOut.Text = MyNumber + "."; //如果输入框中此时为“0.”,则在输入数字的后面加上小数点,如此时输入,则显示“.”
}
Else
{
ReadOut.Text = ReadOut.Text.Substring(0, ReadOut.Text.Length - 1) + MyNumber + "."; //框中数据后面加上小数点
}
}
}
else
{
ReadOut.Text = MyNumber + "."; //点击过操作符之后,输入的数字后面仍然加个小数点(为了显示的一致性,即任何时候框中的数据都是*.)
}
// DecimalFlag = false;
OperaterFlag = false;
}
private void sign_Click(object sender, EventArgs e) //正负切换(+/-)
{
if (ReadOut.Text != "0.") //此时框中的数值不为“0.”
{
if (LastInput == "NUMS") //上次输入的数为正数
{
LastInput = "NEG"; //把LastInput置为“NEG”,表明最后一次输入的数是负数
ReadOut.Text = "-" + ReadOut.Text; //给文本框中的数值前添上“-”号
}
else if (LastInput == "NEG") //如果上次输入为负数
{
LastInput = "NUMS"; //把LastInput置为“NUMS”,表明最后一次输入的数是正数
ReadOut.Text = ReadOut.Text.Substring(1, ReadOut.Text.Length - 1); //把框中的数据最前面的符号去掉(重新变成正数)
}
else //正常情况下默认此时文本框中的数值是正数,点击+/-后,变成负数
{
LastInput = "NEG";
ReadOut.Text = "-" + ReadOut.Text;
}
}
else
{
LastInput = "NUMS"; //为“0.”时的情况
}
}
private void DecimalDot_Click(object sender, EventArgs e) //小数点(.)
{
if (OperaterFlag == true)
{
ReadOut.Text = "0.";
}
DecimalFlag = true;
}
public void StandardizationShow(String s) //规范化显示
{
if (s.IndexOf(".") == -1)
{
ReadOut.Text = s + ".";
}
else
{
ReadOut.Text=s;
}
}
private void Number0_Click(object sender, EventArgs e) //点击对应的数字键时调用方法
{
calculate(0);
}
private void Number1_Click(object sender, EventArgs e)
{
calculate(1);
}
private void Number2_Click(object sender, EventArgs e)
{
calculate(2);
}
private void Number3_Click(object sender, EventArgs e)
{
calculate(3);
}
private void Number4_Click(object sender, EventArgs e)
{
calculate(4);
}
private void Number5_Click(object sender, EventArgs e)
{
calculate(5);
}
private void Number6_Click(object sender, EventArgs e)
{
calculate(6);
}
private void Number7_Click(object sender, EventArgs e)
{
calculate(7);
}
private void Number8_Click(object sender, EventArgs e)
{
calculate(8);
}
private void Number9_Click(object sender, EventArgs e)
{
calculate(9);
}
public void OperatorCal(int MyOperator) //接收操作符
{
if(!OperaterFlag) //判断以前是否单击过操作符,避免连击操作符错误
{
NumOps = NumOps + 1;
}
switch (NumOps)
{
case 0:
OperaterFlag = true;
break;
case 1:
op1 = ReadOut.Text;
OperaterFlag = true;
break;
case 2:
op2 = ReadOut.Text;
switch (OpFlag)
{
case 1:
op1 = (Double.Parse(op1) + Double.Parse(op2)).ToString(); //加
break;
case 3:
op1 = (Double.Parse(op1) - Double.Parse(op2)).ToString(); //减
break;
case 2:
op1 = (Double.Parse(op1) * Double.Parse(op2)).ToString();//乘
break;
case 0:
if (Double.Parse(op2) == 0) //除
{
MessageBox.Show("除数不能为", "计算器");
}
else
{
try
{
op1 = (Double.Parse(op1) / Double.Parse(op2)).ToString();
}
catch (Exception e)
{
Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
}
}
break;
case 4:
op1 = op2; //等
break;
}
TempReadout = op1;
this.StandardizationShow(TempReadout);
NumOps = 1;
break;
}
if(NumOps!=0)
{
OpFlag = MyOperator;
}
OperaterFlag = true;
DecimalFlag = false;
// LastInput = "NUMS";
}
private void operator1_Click(object sender, EventArgs e)
{
OperatorCal(1);
}
private void operator3_Click(object sender, EventArgs e)
{
OperatorCal(3);
}
private void operator2_Click(object sender, EventArgs e)
{
OperatorCal(2);
}
private void operator0_Click(object sender, EventArgs e)
{
OperatorCal(0);
}
private void operator4_Click(object sender, EventArgs e)
{
OperatorCal(4);
}
private void Percent_Click(object sender, EventArgs e) //%
{
ReadOut.Text = (Double.Parse(ReadOut.Text) / 100).ToString();
NumOps = NumOps + 1;
DecimalFlag = true;
}
private void Cancel_Click(object sender, EventArgs e) //C
{
ReadOut.Text = "0.";
op1 = "";
op2 = "";
caculator1_Load(this, new System.EventArgs());
}
private void CancelEntry_Click(object sender, EventArgs e) //CE
{
ReadOut.Text = "0.";
DecimalFlag = false;
LastInput = "CE";
}
private void reciprocal_Click(object sender, EventArgs e) //求倒数(/x)
{
ReadOut.Text = (1/Double.Parse(ReadOut.Text)).ToString();
}
private void Copy_Click(object sender, EventArgs e) //复制
{
if(ReadOut.Text.Equals(""))
{
return;
}
Clipboard.SetDataObject(ReadOut.Text,true);
}
private void paste_Click(object sender, EventArgs e) //粘贴
{
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
this.paste.Enabled = true;
ReadOut.Text = "";
this.ReadOut.Paste();
}
else
{
this.paste.Enabled = false;
}
}
private void Delete_Click(object sender, EventArgs e) //删除(BackSpace)
{
if (ReadOut.Text != "0.")
{
try
{
ReadOut.Text = ReadOut.Text.Substring(0, ReadOut.Text.Length - 2) + ".";
}
catch (Exception ex)
{
Console.WriteLine("Generic Exception Handler: {0}", ex.ToString());
}
if(ReadOut.Text==".")
{
ReadOut.Text = "0.";
}
}
}
private void sqrt_Click(object sender, EventArgs e)
{
TempReadout = this.ReadOut.Text;
this.ReadOut.Text = System.Convert.ToString(Math.Sqrt(System.Convert.ToDouble(TempReadout)));
}
}
}
- c#制作计算器全过程
前言: 网上看的计算器制作只有代码,没有为全过程下面贴图,所以我在下面主要是贴图,让大家零基础制作计算器. 我的环境是visual studio 2010,其他版本例如2008,2012 都可以 1. ...
- Wxpython零基础制作计算器
本文关于Wxpython零基础利用python3.6在pycharm下制作计算器,文章末尾有免费源代码供下载 以后同步更新到博客园和这个网站,www.empirefree.top, 这个网站备案号没有 ...
- Qt简单项目--加法计算器(详细代码注释)
Qt的简单案例--加法计算器(详细代码注释) 一.项目结构 二.项目代码 widget.h #ifndef WIDGET_H #define WIDGET_H //预编译指令, 为了避免头文件被重复包 ...
- jquery侧边折叠导航栏制作,两行代码搞定
jquery侧边折叠导航栏制作,两行代码搞定 //CSS*{margin: 0;padding: 0} ul{list-style: none} .menu li ul{display: none} ...
- WPF中桌面屏保的制作(主要代码)
原文:WPF中桌面屏保的制作(主要代码) 制作要点:(1) 使用System.Windows.Threading.DispatcherTimer;(2) 将Window属性设置为: this ...
- 用简单的JS代码制作计算器
代码+注释一共不到200行,是练习交流的必备良药 主界面如下: 操作示意图: 以下是代码部分 HTML: <div> <table class="window"& ...
- C#网页版计算器程序代码
calculator.aspx.cs代码 using System; using System.Collections.Generic; using System.Linq; using System ...
- Python实现的复杂的计算器的代码
用Python实现复杂的计算器,可以按照“()”.乘除.加减的优先级进行混合运算.主旨是对正则表达式进行学习. 设计思路: 1.在计算式中搜索最后一个“(”,再搜索和它匹配的“)”,截取两个括号间的表 ...
- Java实现GUI计算器【代码】
这几天用java写了一个计算器程序,开始写的时候原本只是想实现一下GUI(这个是直接读三个字母还是什么“固椅”的发音)界面,熟悉一下Java GUI 编程,为Java期末大作业练练手,本以为代码不会很 ...
随机推荐
- Easyui 生成layout
Easyui 生成layout var $tabs; var $body; var $south; function appendLayout(title, href) { if (!$body) $ ...
- ASP.NET文件上传的三种基本方法
ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. <form i ...
- 【Android】Android SDK在线更新镜像服务器
Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: http://mi ...
- Less和Sass编译
使用koala编译 Koala 是一款由国人开发的开源预处理语言图形编译工具,目前已支持 Less.Sass.Compass 与CoffeeScript. 目前支持以下系统:Windows,Mac, ...
- IE=edge,chrome=1的META信息详解
这几天在玩 HTML5 ★ Boilerplate,注意到meta信息中有这么一句: 复制代码 代码如下: <meta http-equiv="X-UA-Compatible" ...
- Android:启动引导页实现
前言 基本上现在所有的应用都会有一个欢迎界面,在欢迎界面对应用做一个整体的介绍,然后在跳入到主界面,这次要说的这个引导页就是带翻页的引导页.效果如下所示
- sqlsever2008及以上各个安装包的说明
LocalDB (SqlLocalDB)LocalDB 是 Express 的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少的特点.如果您需要 ...
- Iso8601 日期格式
unit Iso8601Unit; interface type TIso8601 = class(TObject) public class function DateTimeFromIso8601 ...
- [Python 标准库]第一章 文本
Chapter01 文本 1.1 string - 文本常量和模板 作用:包含处理文本的常量和类. 1.1.1 函数 capwords(s):字符串中所有单词首字母大写 maketrans():创建转 ...
- closest()一个在评论里很有用的函数
实例 本例演示如何通过 closest() 完成事件委托.当被最接近的列表元素或其子后代元素被点击时,会切换黄色背景: $( document ).bind("click", fu ...