zoukankan      html  css  js  c++  java
  • 『开源』也顺手写一个 科学计算器:重磅开源

    前言:

    看到 博客园 写了一个 计算器的制作过程,心血来潮 顺手也写了一个;

    代码简单,先上运行截图:

    编码过程:

    新建项目 基于 .Net 2.0:

    在窗体上拖拽 文本框 作为显示屏,并拖拽 按键:

    为了节省代码,所以每个按钮 公用 btnInput_Click 事件;为了作为区分,所以 我们设置每个 按钮的Tag 值:

    在共用的按钮事件中,我们进行编码:

    1         private void btnInput_Click(object sender, EventArgs e)
    2         {
    3             Button currentButton = sender as Button;
    4             if (currentButton != null && currentButton.Tag != null)
    5             {
    6                 string input = currentButton.Tag.ToString();
    7                 txtExpress.Text = txtExpress.Text + input;
    8             }
    9         }

    最后计算:

    计算过程,就交给 Laura.Compute 算法了:本算法为字符串计算算法,用本算法计算结果。

     1         private void btnResult_Click(object sender, EventArgs e)
     2         {
     3             string express = txtExpress.Text ?? string.Empty;
     4             if (string.IsNullOrEmpty(express) || string.IsNullOrEmpty(express.Trim()))
     5             {
     6                 txtResult.Text = "ERROR:INPUT THE EXPRESS!";
     7             }
     8             else
     9             {
    10                 try
    11                 {
    12                     object result = ComputeHelper.Compute(txtExpress.Text);
    13                     txtResult.Text = (result ?? string.Empty).ToString();
    14                 }
    15                 catch(Exception exp)
    16                 {
    17                     txtResult.Text = "ERROR:" + exp.Message;
    18                 }
    19             }
    20         }

    程序代码:

    代码极其简单,65行源码。

     1 using System;
     2 using System.Windows.Forms;
     3 using Laura.Compute;
     4 
     5 namespace Laura.Calculator
     6 {
     7     public partial class MainForm : Form
     8     {
     9         public MainForm()
    10         {
    11             InitializeComponent();
    12         }
    13 
    14         private void btnInput_Click(object sender, EventArgs e)
    15         {
    16             Button currentButton = sender as Button;
    17             if (currentButton != null && currentButton.Tag != null)
    18             {
    19                 string input = currentButton.Tag.ToString();
    20                 txtExpress.Text = txtExpress.Text + input;
    21             }
    22         }
    23 
    24         private void btnCancel_Click(object sender, EventArgs e)
    25         {
    26             string express = txtExpress.Text ?? string.Empty;
    27             if (!string.IsNullOrEmpty(express))
    28             {
    29                 txtExpress.Text = express.Substring(0, express.Length - 1);
    30             }
    31         }
    32 
    33         private void btnResult_Click(object sender, EventArgs e)
    34         {
    35             string express = txtExpress.Text ?? string.Empty;
    36             if (string.IsNullOrEmpty(express) || string.IsNullOrEmpty(express.Trim()))
    37             {
    38                 txtResult.Text = "ERROR:INPUT THE EXPRESS!";
    39             }
    40             else
    41             {
    42                 try
    43                 {
    44                     object result = ComputeHelper.Compute(txtExpress.Text);
    45                     txtResult.Text = (result ?? string.Empty).ToString();
    46                 }
    47                 catch(Exception exp)
    48                 {
    49                     txtResult.Text = "ERROR:" + exp.Message;
    50                 }
    51             }
    52         }
    53 
    54         private void btnClean_Click(object sender, EventArgs e)
    55         {
    56             txtExpress.Text = txtResult.Text = string.Empty;
    57         }
    58 
    59         private void linkAbout_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    60         {
    61             AboutForm aboutForm = new AboutForm();
    62             aboutForm.ShowDialog();
    63         }
    64     }
    65 }

    Ps.如果想扩展 Laura.Compute 算法,在 任何程序集,任何命名空间,任何类名下 类似如下扩展即可:

     1 using System;
     2 using Laura.Compute.Utils;
     3 
     4 namespace Laura.Compute.Extend.MathMethod
     5 {
     6     [Serializable]
     7     [ComputeExpress(Express = "{A} + {A}", Keywords = new[] { "+" }, Level = 1000, ComputeType = typeof(PlusComputeSymbol))]
     8     public class PlusComputeSymbol : ComputeBase
     9     {
    10         public override object Compute(ExpressSchema expressSchema, object objOrHash)
    11         {
    12             object argObj1 = ArgumentsObject(0, expressSchema, objOrHash);
    13             object argObj2 = ArgumentsObject(1, expressSchema, objOrHash);
    14 
    15             if (ArgumentsType(0) == ExpressType.String || ArgumentsType(1) == ExpressType.String || argObj1 is string || argObj2 is string)
    16             {
    17                 string arg1 = Tools.ToString(argObj1);
    18                 string arg2 = Tools.ToString(argObj2);
    19                 string value = arg1 + arg2;
    20                 return value;
    21             }
    22             else
    23             {
    24                 double arg1 = Tools.ToDouble(argObj1);
    25                 double arg2 = Tools.ToDouble(argObj2);
    26                 double value = arg1 + arg2;
    27                 return value;
    28             }
    29         }
    30     }
    31 }

    当然,最后就是 本计算器源码开源,包括重磅 的 Laura.Compute 算法:

    全部源代码点击下载

  • 相关阅读:
    C#缓存
    js 日期相减
    无法加载图片信息处理
    一些经营性的文章,写得不蛮不错
    集线器、交换机、路由器的区别
    存储过程使用建议
    存储过程优点和缺点
    杀人游戏规则介绍(1.0~5.0版本)
    C#网络编程(1) 来源出网络的资源收集
    谈谈外包软件项目的经验
  • 原文地址:https://www.cnblogs.com/shuxiaolong/p/20131112_001.html
Copyright © 2011-2022 走看看