栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C#实例 —— 设计一个科学计算器 (WPF界面实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#实例 —— 设计一个科学计算器 (WPF界面实现)

C#实例 —— 设计一个科学计算器 (WPF界面实现)

文章目录
  • 前言
  • 一、基本技术
    • (一)C# 语言
    • (二)WPF(Windows Presentation Foundation)
  • 二、开发环境:Rider (.Net 开发神器)
    • (一)简介
    • (二)特点
      • 1. 支持多种 .NET 项目类型
      • 2. 功能丰富速度快
      • 3. 跨平台
  • 三、程序设计
    • (一)xaml界面代码
      • 1. MainWindow.xaml部分
      • 2. App.xaml部分(Style样式)
    • (二)MainWindow.xaml.cs 部分(C#后台代码)
  • 四、运行效果(界面截图)


前言

计算器的系统功能在 “加” “减” “乘” “除” 等基本运算之上新增 “取余” “幂运算” “对数” “阶层” “三角函数” 等运算功能。


一、基本技术 (一)C# 语言

C#是由C和C++衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

(二)WPF(Windows Presentation Foundation)

WPF是微软新一代图形系统,运行在.NET Framework 3.0及以上版本下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持(flow text support),3D视觉效果和强大无比的控件模型框架。程序人员与美工人员明确分工,美工人员可以使用Expression Studio中套装工具可视化的设计界面。然后交给程序开发组中的XAML就可以。让程序人员直接套用到开发环境,不需要想页面怎么切了。而且您可以使用任何一种.Net编程语言(C#,VB NET等开发语言)进行开发。XAML主要针对界面的可视化控件描述,成生进会分析成 .cs或 .vb文件,并最后将编译为CLR中间运行语言。

二、开发环境:Rider (.Net 开发神器)

多数人在进行 .Net 开发的时候首选的会是号称宇宙无敌第一的IDE —— Visio Studio,而因为笔者是JetBrains 的粉丝,同我们所熟知的IDEA以及PyCahrm一样,Rider也是JetBrains 旗下的一款产品,因此本人在进行开发的时候选择的是他们的 Rider 这款IDE。下图是本人在Rider开发的一个界面。

(一)简介

JetBrains Rider 是一款基于 IntelliJ 平台和 ReSharper 的跨平台 .NET IDE。Rider 让您可以高效地开发广泛的应用程序,包括:.NET 桌面应用程序、服务和库、Unity 和 Unreal Engine 游戏、Xamarin 应用、ASP.NET 和 ASP.NET Core web 应用程序。

(二)特点 1. 支持多种 .NET 项目类型

Rider 支持 .NET 框架、新的跨平台框架 .NET Core 和基于 Mono 的项目。 这使您可以开发广泛的应用程序,包括:.NET 桌面应用程序、服务和库、Unity 游戏、Xamarin 应用、ASP.NET 和 ASP.NET Core web 应用程序。

2. 功能丰富速度快

Rider 提供 2200 多种活跃代码检查,数百种来自 ReSharper 的上下文操作和重构,并与 IntelliJ 平台可靠的 IDE 功能相结合。 除了丰富的功能集,Rider 的设计宗旨是轻量级、响应式。

3. 跨平台

除了运行和调试多个运行时之外,Rider 本身还可以在多个平台上运行:Windows、macOS 和 Linux。

三、程序设计 (一)xaml界面代码 1. MainWindow.xaml部分

        
    
    
        
        
            
        
            
        
        
            
            
            
            
            
            
        
        
        
            
            
            
            
            
            
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    


2. App.xaml部分(Style样式)

    
    
        
       
        
        
        
    


(二)MainWindow.xaml.cs 部分(C#后台代码)
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace Scientific_Calculator
{
    public partial class MainWindow
    {
        public MainWindow()
        {//窗口类
            InitializeComponent();
        }

        private string num1 = null; //运算符之前的数
        private string num2 = null; //运算符之后的数
        private string ope = null;  //运算符

        private void B7_OnClick(object sender, RoutedEventArgs e)
        {//输入数字7
            if (ope == null)
            {//假如没有运算符,那就是输入运算符前的第一个数字
                num1 += B7.Content;
                MyText.Text = num1;
            }
            else
            {//否则有运算符的情况下,输入的就是运算符之后的数字
                num2 += B7.Content;
                MyText.Text = num2;
            }
        }

        private void B8_OnClick(object sender, RoutedEventArgs e)
        {//输入数字8
            if (ope == null)
            {
                num1 += B8.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B8.Content;
                MyText.Text = num2;
            }
        }

        private void B9_OnClick(object sender, RoutedEventArgs e)
        {//输入数字9
            if (ope == null)
            {
                num1 += B9.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B9.Content;
                MyText.Text = num2;
            }
        }

        private void B4_OnClick(object sender, RoutedEventArgs e)
        {//输入数字4
            if (ope == null)
            {
                num1 += B4.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B4.Content;
                MyText.Text = num2;
            }
        }

        private void B5_OnClick(object sender, RoutedEventArgs e)
        {//输入数字5
            if (ope == null)
            {
                num1 += B5.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B5.Content;
                MyText.Text = num2;
            }
        }

        private void B6_OnClick(object sender, RoutedEventArgs e)
        {//输入数字6
            if (ope == null)
            {
                num1 += B6.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B6.Content;
                MyText.Text = num2;
            }
        }

        private void B1_OnClick(object sender, RoutedEventArgs e)
        {//输入数字1
            if (ope == null)
            {
                num1 += B1.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B1.Content;
                MyText.Text = num2;
            }
        }

        private void B2_OnClick(object sender, RoutedEventArgs e)
        {//输入数字2
            if (ope == null)
            {
                num1 += B2.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B2.Content;
                MyText.Text = num2;
            }
        }

        private void B3_OnClick(object sender, RoutedEventArgs e)
        {//输入数字3
            if (ope == null)
            {
                num1 += B3.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B3.Content;
                MyText.Text = num2;
            }
        }

        private void BPeriod_OnClick(object sender, RoutedEventArgs e)
        {//输入小数点
            if (ope == null && !num1.Contains("."))   //如果num中已有小数点,则不允许再输入.
            {
                num1 += BPeriod.Content;
                MyText.Text = num1;
            }
            if (ope != null && !num2.Contains("."))                                  
            {
                num2 += BPeriod.Content;
                MyText.Text = num2;
            }
        }

        private void B0_OnClick(object sender, RoutedEventArgs e)
        {//输入数字0
            if (ope == null)
            {
                num1 += B0.Content;
                MyText.Text = num1;
            }
            else
            {
                num2 += B0.Content;
                MyText.Text = num2;
            }
        }

        private void BPlus_OnClick(object sender, RoutedEventArgs e)
        {//输入加号
            ope = "+";
        }

        private void Minus_OnClick(object sender, RoutedEventArgs e)
        {//输入减号
            ope = "-";
        }

        private void Multiply_OnClick(object sender, RoutedEventArgs e)
        {//输入乘号
            ope = "*";
        }

        private void Devide_OnClick(object sender, RoutedEventArgs e)
        {//输入除号
            ope = "/";
        }

        private void Percent_OnClick(object sender, RoutedEventArgs e)
        {//取余
            ope = "%";
        }

        private void Hierarchy_OnClick(object sender, RoutedEventArgs e)
        {//阶层
            ope = "!";
        }

        private void Pow_OnClick(object sender, RoutedEventArgs e)
        {//幂运算
            ope = "pow";
        }

        private void Log_OnClick(object sender, RoutedEventArgs e)
        {//取对数
            ope = "log";
        }

        private void Sin_OnClick(object sender, RoutedEventArgs e)
        {//正弦函数
            ope = "sin";
        }

        private void Cos_OnClick(object sender, RoutedEventArgs e)
        {//余弦函数
            ope = "cos";
        }

        private void Tan_OnClick(object sender, RoutedEventArgs e)
        {//正切函数
            ope = "tan";
        }

        private void BC_OnClick(object sender, RoutedEventArgs e)
        {//清除文本框所有内容
            this.MyText.Text = "";
            num1 = null;
            num2 = null;
            ope = null;
        }
        
        public static int fun(int n)
        {//求阶层的递归函数
            if (n < 1)
                return 0;
            if (n == 1) 	
                return 1; 
            return n * fun(n - 1);
        }

        private void Amount_OnClick(object sender, RoutedEventArgs e)
        {//点击等于号,进行数学运算
            switch (ope)
            {//进行数学运算,其中Convert是转换数据类型
                case "+":
                    MyText.Text = Convert.ToString(Convert.ToDouble(num1) + Convert.ToDouble(num2));
                    break;
                case "-":
                    MyText.Text = Convert.ToString(Convert.ToDouble(num1) - Convert.ToDouble(num2));
                    break;
                case "*":
                    MyText.Text = Convert.ToString(Convert.ToDouble(num1) * Convert.ToDouble(num2));
                    break;
                case "/":
                    MyText.Text = Convert.ToString(Convert.ToDouble(num1) / Convert.ToDouble(num2));
                    break;
                case "%":
                    MyText.Text = Convert.ToString(Convert.ToDouble(num1) % Convert.ToDouble(num2));
                    break;
                case "sin":
                    MyText.Text = Convert.ToString(Math.Sin(Math.PI * Convert.ToDouble(num1) / 180));
                    break;
                case "cos":
                    MyText.Text = Convert.ToString(Math.Cos(Math.PI * Convert.ToDouble(num1) / 180));
                    break;
                case "tan":
                    MyText.Text = Convert.ToString(Math.Tan(Math.PI * Convert.ToDouble(num1) / 180));
                    break;
                case "pow":
                    MyText.Text = Convert.ToString(Math.Pow(Convert.ToDouble(num1),Convert.ToDouble(num2)));
                    break;
                case "log":
                    MyText.Text = Convert.ToString(Math.Log(Convert.ToDouble(num1),Convert.ToDouble(num2)));
                    break;
                case "!":
                    MyText.Text = Convert.ToString(fun(Convert.ToInt32(num1))); //调用求阶层的递归函数fun()
                    break;
            }
            num1 = MyText.Text;
            num2 = null;
            ope = null;
        }
    }
}
四、运行效果(界面截图)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号