文档章节

简单计算器 C# 学习

電泡泡
 電泡泡
发布于 2015/09/05 14:50
字数 947
阅读 795
收藏 4

精选30+云产品,助力企业轻松上云!>>>

C# 源代码

https://git.oschina.net/363451039/Jisuanqi

实现加减乘除 平方开放倒数 键盘输入
历史记录查询和删除


未实现记忆加减功能

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        
        /*连等功能 
        ///存储最近输入的数字e_Num和最近的操作e_Op
        ///button CE 保存e_Num,而button C 清空e_Num和e_Op
        double e_Num = 0;
        double e_Res=0;
        string e_Op="";
        //*/
        string op="";//运算符
        double num1=0;
        double num2=0;
        double res=0;
        int iOp = 0;//运算符位置
        bool newOp = true;  //开始新的运算
        bool addOp = false;        
        //键入数字
        private void button_Click_Num(object sender, EventArgs e)    
        {
            if (newOp)
            {
                textNumBox.Text = "";
                newOp = false;
                addOp = false;
                /*
                e_Num = num2;
                e_Res=res;
                e_Op=op;
                //*/
            }
            ///*  获取button值,赋值给textNumBox.Ttext
            ///多个button的Click事件同时命名为button_Click_Num
            ///实现批量的button_Click_Num的操作
            Button tempNum = (Button) sender;
            textNumBox.Text += tempNum.Text.ToString();
            //*/
        }

        private void button_Click_Op(object sender, EventArgs e)
        {
            
            Button tempOp = (Button)sender;
            operater(tempOp.Text.ToString());
        }
        private void operater(string oper)
        {
            if (addOp)
            {
                textNumBox.Text = Convert.ToString(res) + oper;
                newOp = false;
            }
            else
            {
                textNumBox.Text += oper;
            } 
            op=oper;
            //e_Op=tempOp.Text.Tostring();
            //e_num1=textNumBox.Text.Substring(0, textNumBox.Text.Length - 1);
            //e_num2=textNumBox.Text.SkipWhile<char>(char i,result<char,i=='+'||i=='-'||i=='×'||i=='÷'>predicate);//并不会用该函数
        }
        private void operater(char oper)
        {
            if (addOp)
            {
                newOp = false;
            }
            op = Convert.ToString(oper);
            //e_Op=tempOp.Text.Tostring();
            //e_num1=textNumBox.Text.Substring(0, textNumBox.Text.Length - 1);
            //e_num2=textNumBox.Text.SkipWhile<char>(char i,result<char,i=='+'||i=='-'||i=='×'||i=='÷'>predicate);//并不会用该函数
        }


        private void button_Click_Del(object sender, EventArgs e)
        {
            if (textNumBox.Text.Length > 0)
            {
                textNumBox.Text = textNumBox.Text.Substring(0, textNumBox.Text.Length - 1);
                newOp = false;
            }
        }

        private void button_Click_CE(object sender, EventArgs e)
        {
            textNumBox.Text = "";
            newOp = true;
        }

        private void button_Click_C(object sender, EventArgs e)
        {
            textNumBox.Text = "";
            /*
            e_Num = 0;
            e_Op = "";
            //*/
        }
        private void button_Click_Result(object sender, EventArgs e)
        {
            try
            {
                //if (newOp)    不要在result里判断是否是重新开始的计算,而是更新textNumBox.Text
                //{
                    result();
                    res = Operate(op);
                    newOp = true;
                    addOp = true;
                    Common.historylist.Add(textNumBox.Text);

                //}
                //else
                //{
                //    result(res);
                //    res = Operate(op); 
                //}
            }
            catch (Exception exc)
            {
                textNumBox.Text= "Error";
                newOp = false;
                addOp = true;
            }
        }
        private void result()
        {
            iOp = textNumBox.Text.IndexOf(op);
            num1 = Convert.ToDouble(textNumBox.Text.Substring(0, iOp));
            num2 = Convert.ToDouble(textNumBox.Text.Substring(iOp + 1, textNumBox.Text.Length - iOp - 1));//-iOp,第二个参数是substring起始之后多少个
            
        }
        //private void result(double oldnum)
        //{
        //    iOp=textNumBox.Text.LastIndexOf(op);
        //    num1 = oldnum;
        //    num2 = Convert.ToDouble(textNumBox.Text.Substring(iOp + 1, textNumBox.Text.Length - iOp - 1));
        //}
        private double Operate(string opp)
        {
            double ress;
            if (op == "+")
            {
                ress = num1 + num2;
                textNumBox.Text += "=" + ress;
            }
            else if (op == "-")
            {
                ress = num1 - num2;
                textNumBox.Text += "=" + ress;
            }
            else if (op == "×")
            {
                ress = num1 * num2;
                textNumBox.Text += "=" + ress;
            }
            else if (op == "÷")
            {
                
                ress = num1 / num2;
                textNumBox.Text += "=" + ress;
            }
            else
            {
                ress = 0;
            }
            return ress;
        }

        private void button_Click_fushu(object sender, EventArgs e)
        {
            textNumBox.Text += "-";
            newOp = false;
            Common.historylist.Add(textNumBox.Text);
        }

        private void button_Click_pingfanggen(object sender, EventArgs e)
        {
            double numtemp;
            try
            {
                numtemp = Convert.ToDouble(textNumBox.Text);
            }
            catch (System.FormatException)  //不能转化为double的异常下用res结果计算
            {
                numtemp = res;
            }
            res = Math.Sqrt(numtemp);
            textNumBox.Text = "√(" + numtemp + ")=" + res;
            newOp = true;
            Common.historylist.Add(textNumBox.Text);
        }

        private void button_Click_daoshu(object sender, EventArgs e)
        {
            double numtemp;
            try
            {
                numtemp = Convert.ToDouble(textNumBox.Text);
            }
            catch (System.FormatException)  //不能转化为double的异常下用res结果计算
            {
                numtemp = res;
            }
            res = 1/numtemp;
            textNumBox.Text = "1/(" + numtemp + ")=" + Convert.ToString(res);
            newOp = true;
            Common.historylist.Add(textNumBox.Text);
        }

        private void Click_About(object sender, EventArgs e)
        {
            About aboutbox = new About();   //打开新的窗口,要先new 方法
            aboutbox.ShowDialog();
        }

        private void Click_History(object sender, EventArgs e)
        {
            History historybox = new History();   //打开新的窗口,要先new 方法
            historybox.ShowDialog();
        }

        private void Click_PasteNow(object sender, EventArgs e)
        {
            textNumBox.Text += Clipboard.GetText();
        }

        private void Click_CopyNow(object sender, EventArgs e)
        {
            Clipboard.SetText(textNumBox.Text);
        }

        bool flag = true;
        private void KeyPress_EqueKey(object sender, KeyPressEventArgs e)
        {
            
            switch (e.KeyChar)
            {
                case '=':
                    {
                        if (flag)
                        {
                            flag = false;
                            try
                            {
                                //if (newOp)    不要在result里判断是否是重新开始的计算,而是更新textNumBox.Text
                                {
                                    //textNumBox.Text += "=";
                                    //result();
                                    //if (textNumBox.Text.Length > 0)
                                    //{
                                    //    textNumBox.Text = textNumBox.Text.Substring(0, textNumBox.Text.Length - 2);
                                    //    newOp = false;
                                    //}
                                    iOp = textNumBox.Text.IndexOf(op);
                                    int op0 = textNumBox.Text[0];//(0);
                                    int op1 = textNumBox.Text[1];
                                    num1 = Convert.ToDouble(textNumBox.Text.Substring(0, iOp));
                                    //string temp = textNumBox.Text.Substring(iOp + 1, textNumBox.Text.Length - iOp-1);
                                    num2 = Convert.ToDouble(textNumBox.Text.Substring(iOp + 1, textNumBox.Text.Length - iOp - 1));//-iOp,第二个参数是substring起始之后多少个

                                    res = Operate(op);
                                    newOp = true;
                                    addOp = true;
                                    Common.historylist.Add(textNumBox.Text);

                                }
                                //else
                                //{
                                //    result(res);
                                //    res = Operate(op); 
                                //}
                            }
                            catch (Exception exc)
                            {
                                textNumBox.Text = "Error";
                                newOp = false;
                                addOp = true;
                            }
                        }
                        else
                        {
                            flag = true;
                            //textNumBox.Text.Substring(1, textNumBox.Text.Length - 1);
                        }
                        break;
                    }
                case '+':
                    {
                        operater('+');
                        break;
                    }
                case '-':
                    {
                        operater('-');
                        break;
                    }
                case '*':
                    {
                        operater('×');
                        break;
                    }
                case '/':
                    {
                        operater('÷');
                        break;
                    }
            }
        }
    }

    //历史记录传递
    public class Common
    {
        public static List<string> historylist = new List<string>();
        public static int a = 0;
    }
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class History : Form
    {
        public History()
        {
            InitializeComponent();
        }

        private void button_Click_Copy(object sender, EventArgs e)
        {
            Clipboard.SetText(listBox1.Items[listBox1.SelectedIndex].ToString());
        }

        private void button_Click_Delete(object sender, EventArgs e)
        {
            //listBox1.ClearSelected();
            //listBox1.Items.Clear(); 清除全部
            int sel = listBox1.SelectedIndex;
            listBox1.Items.RemoveAt(sel);
        }

        private void History_Load(object sender, EventArgs e)
        {
            foreach (string a in Common.historylist)
            {
                listBox1.Items.Add(a);
            }
        }
    }
}



電泡泡
粉丝 23
博文 183
码字总数 69717
作品 0
衡阳
私信 提问
加载中
请先登录后再评论。
从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了。 Caliburn.Micro(Caliburn.Micro框架概述...

osc_8vgjpfw9
2019/03/24
4
0
Python入门的三大问题和三大谎言

Python广告,铺天盖地,小白们雾里看花,Python无限美好。作为会20几种语言(BASIC Foxbase/pro VB VC C C++ c# js typescript HTML ArduinoC Delphi VBA VB 汇编 scratch java swift python ...

osc_ikbuen62
04/16
9
0
QT实战-计算器-刘桂林-专题视频课程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26787115/article/details/83580590 QT实战-计算器—152人已学习 课程介绍 使用Qt Creator开发一个具有运算...

刘某人程序员
2018/04/27
0
0
C#面向对象Chatbot智能版

C#面向对象Chatbot智能版 大家好,我是一个C#的初学者,老师平时叫我们写C#控制台程序,我总结了一些所学的知识,写了一个升级版的聊天机器人,通过文件操着,机器人具有智能查找,学习功能。...

GongBiao
2013/06/15
154
0
【2019-2020春学期】数据库实验安排

实验项目名称:数据库应用系统的设计与实现 每次上课准时签到。 课上可以采取:群内提问、共享屏幕提问、小窗私聊等多种方式问问题。 进度根据自身情况安排,每周日前至少发一次“实验进度博...

HBU_David
04/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

521我发誓读完本文,再也不会担心Spring配置类问题了

当大潮退去,才知道谁在裸泳。关注公众号【BAT的乌托邦】开启专栏式学习,拒绝浅尝辄止。本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈、MyBatis、中间件等小而美的专栏供...

osc_72k9vb4y
14分钟前
8
0
微服务思考(01):什么是微服务?微服务的优势和劣势

一、单体应用 在软件开发早期阶段,大家都在一个应用系统上开发。各个业务模块之间耦合也比较紧密。软件发布也是整体发布,或者对软件进行打包发布和部署,比如java可以打包成war部署。测试也...

osc_bcvwusz2
15分钟前
9
0
Halcon一维测量1D Measuring解析

一维测量(也叫一维计量或卡尺)的概念非常直观。沿着一个预定的区域(主要是垂直于RIO感兴趣区域的方向) 边缘的位置。这里的边缘为从暗到亮或从亮到暗的过渡。 基于提取的边缘,可以测量零件...

osc_xs2d5ls9
16分钟前
10
0
U盘+grub2安装centos8实战

1. U盘准备 这里的U盘也可以换成硬盘 grub2安装一直失败,怀疑U盘坏了,下面命令修复了一下 [root@host2 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda ...

osc_43xj61td
17分钟前
7
0
遇见SQL(2)

SQL自学笔记 约束 1.0概念及分类 2.0非空约束 3.0 唯一约束 4.0 主键约束 自动增长 5.0 外键约束 级联操作 多表关系 三种情况概述 数据库的备份和还原 多表查询 1.0 内连接查询 隐式内连...

osc_4eht81t7
18分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部