c#控制台实现计算器二目运算功能

c#控制台实现计算器二目运算功能

本篇文章是我在学控制台程序中做计算器功能时所遇到的一些问题,在这里我将问题总结明细,希望对路过的朋友能有很大的帮助,并且希望能够早日高新就业,加油!

1、首先,我们要先来了解两个方法的意思

方法说明
Console.ReadLine();会等待直到用户按下回车,一次性读入一行
Console.ReadKey();等待用户按下键盘上的某个键,一次读入一个字符

2、分析:

(1)既然是要做计算器,那么肯定是不能让客户看到我们的底层算法,所以要实例化一个计算器对象,并且在类中要封装属性以及行为等,这样这个对象才具备了计算器的功能。

 Calculative count = new Calculative(0,"+",0);//实例化Calculative对象,并传值

(2)那么肯定要让客户输入两个数字和一个字符,所以就要在类中创建成员变量,并封装方法。其中,构造函数的作用就是初始化成员变量,那么我们就初始化成员变量,给它一个值。

//定义私有的成员变量 		
private double number1;//用户输入的第一个数
private double number2;//用户输入的第二个数
private string symbol;//用户输入的运算符
 //通过构造函数初始化成员变量,来给我们的属性赋值
public Calculative(double number1,string symbol, double number2)//初始化成员变量,默认第一个第二个数字为0,运算符为+号
        {
            
            this.Number1 = number1;
            this.Symbol = symbol;
            this.Number2 = number2;
        }

(3)在给属性赋值的时候,客户有可能输入的是一个汉字,而不是数字或者运算符,所以说这就是很头疼的,那么我们就给属性的set来添加一定的限制,就是说用户输入的不是设定好的,那么我们就给他提示,并让他重新输入。这里我只设置运算符的限制,因为如果限制数字的话就特别麻烦。

/// <summary>
        ///  Number1 表示获取或设置第一个double类型数字的值
        /// </summary>
        public double Number1//第一个数的属性
        {
            get { return number1; }
            set { number1 = value;}
        }
        /// <summary>
        ///  Number2 表示获取或设置第二个double类型数字的值
        /// </summary>
        public double Number2//第二个数的属性
        {
            get { return number2; }
            set { number2 = value; }
        }
        /// <summary>
        /// Symbo 表示获取或设置string类型的运算符
        /// </summary>
        public string Symbol//第三个数的属性
        {
            get { return symbol; }
            set
            {
                if (value == "+" || value == "-" || value == "*" || value == "/" || value == "%")//如果用户输入的值是我们设置好的着几个运算符,那么就把值赋给字段
                {
                    symbol = value;
                }
                else//否则,就不是
                {
                    Console.WriteLine("您输入的运算符不在范围内,请重新输入");//那么,我们就给他提示
                    this.Symbol = Console.ReadLine();//然后让他继续给属性赋值
                }
            }
        }

(4)属性设置好以后,接着我们要在外界给用用户提示和接收用户输入的数字和字符。那么这里我们就要用到Console.ReadLine();就是指会等待直到用户按下回车,一次性读入一行。读入以后我们要把这个读到的字符或者数字来给属性,让属性判断是否正确。

 Console.WriteLine("《——袖珍计算器——》");//这是一个提示标题
 Console.WriteLine("\r\n请输入第一个要进行运算的数字");//提示第一个数字
 count.Number1 = Convert.ToDouble(Console.ReadLine());//读取第一字符,并且要转换为double类型,最终交给属性来验证
 Console.WriteLine("\r\n请输入要进行运算的运算符,如:+、-、*、/……");//给用户的提示
 count.Symbol = Console.ReadLine();//读取运算符,因为运算符是字符串类型的所以不用转换,最终交给属性来验证
 Console.WriteLine("\r\n请输入第二个要进行运算的数字");//给用户的提示
 count.Number2 = Convert.ToDouble(Console.ReadLine());读取第二字符,并且要转换为double类型,最终交给属性来验证

注意:

Console.ReadLine();方法读取后是字符串类型,所以必须通过隐式转换为你想要的类型

(5)属性赋值好一个,我们要进行运算,那么这运算的过程我们是不能让用户知道的,所以,我们就要在类中计算器类中封装它,然后在外界调用它就可以了,但是在调用传值的时候我们不知道用户输入的是什么,所以我们就要通过属性读取用户间接给字段赋的值,来将这个值传过来我们做运算,并且我们要判断运算符中的值是什么,要进行何种运算,所以就要分情况了。

count.resultn(count.Number1,  count.Symbol, count.Number2);//调用运算的这个方法,并传值,(值是读取到属性中字段的值)
  public void resultn(double number1,string symbol, double number2)//封装运算的方法,并收值做运算
        {
             switch (symbol)//通过switch分支语句判断是否是运算符,如果是运算符,那么就执行分支语句
             {
                 case"+":sum = number1 + number2;Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t"+"{0}+{1}={2}",number1,number2,sum); break;
//判断,如果运算符中是+,那么就将第一个数和第二个数相加,,并且要在成员变量中创建一个变量来存储运算的这个结果,最后通过模板字符串将公式以及运算结果打印出来,让客户看到,最后跳出分支语句
                 case "-":sum = number1 - number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}-{1}={2}", number1, number2, sum); break;
//判断,如果运算符中是-,那么就将第一个数和第二个数相减,,并且将结果存储到sum成员变量中,最后通过模板字符串将公式以及运算结果打印出来,让客户看到,最后跳出分支语句                   
                 case "*":sum = number1 * number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}*{1}={2}", number1, number2, sum); break;
\r\n\t\t" + "{0}-{1}={2}", number1, number2, sum); break;
//判断,如果运算符中是*,那么就将第一个数和第二个数相乘,,并且将结果存储到sum成员变量中,最后通过模板字符串将公式以及运算结果打印出来,让客户看到,最后跳出分支语句                             
                 case "/":sum =number1 / number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}÷{1}={2}", number1, number2, sum); break;
\r\n\t\t" + "{0}-{1}={2}", number1, number2, sum); break;
//判断,如果运算符中是-,那么就将第一个数和第二个数相除,,并且将结果存储到sum成员变量中,最后通过模板字符串将公式以及运算结果打印出来,让客户看到,最后跳出分支语句                             
                 case "%":sum = number1 % number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}%{1}={2}", number1, number2, sum); break;
 \r\n\t\t" + "{0}-{1}={2}", number1, number2, sum); break;
//判断,如果运算符中是-,那么就将第一个数和第二个数做余整个运算,,并且将结果存储到sum成员变量中,最后通过模板字符串将公式以及运算结果打印出来,让客户看到,最后跳出分支语句                            
             }
            Console.ReadLine();//为了解决控制台闪退,我们通过这个方法让计算机以为用户还要输入,将它停留在这个控制台界面
        }

(6)最后为了让控制台美观,设置控制台窗体的大小还有字体颜色

 Console.ForegroundColor = ConsoleColor.Green;//设置控制台的字体颜色
 Console.SetWindowSize(100, 30);//设置控制台的大小

3、全部代码

(1)主类(程序主入口)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 封装
{
    class Program
    {
        
        static void Main(string[] args)
        {
            /*
            Console.ReadLine();    //指:会等待直到用户按下回车,一次性读入一行
            Console.ReadKey();      //指:等待用户按下键盘上的某个键,一次读入一个字符 
            */ 

            Calculative count = new Calculative(0,"+",0);//实例化Calculative对象,并传值
            Console.ForegroundColor = ConsoleColor.Green;//设置控制台的字体颜色
            Console.SetWindowSize(100, 30);//设置控制台的大小
            Console.WriteLine("《——袖珍计算器——》");
            Console.WriteLine("\r\n请输入第一个要进行运算的数字");
            count.Number1 = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("\r\n请输入要进行运算的运算符,如:+、-、*、/……");
            count.Symbol = Console.ReadLine();
            Console.WriteLine("\r\n请输入第二个要进行运算的数字");
            count.Number2 = Convert.ToDouble(Console.ReadLine());
            count.resultn(count.Number1,  count.Symbol, count.Number2);
        }
       
    }
}

(2)Calculative类

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 封装
{
    class Calculative
    {
        #region 定义的成员变量
        private double number1;
        private double number2;
        private string symbol;
        private double sum = 0;
        #endregion
        #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        public Calculative(double number1,string symbol, double number2)//初始化成员变量,默认第一个第二个数字为0,运算符为+号
        {
            
            this.Number1 = number1;
            this.Symbol = symbol;
            this.Number2 = number2;
        }
        #endregion
        #region 运算过程
        public void resultn(double number1,string symbol, double number2)
        {
             switch (symbol)
             {
                 case"+":sum = number1 + number2;Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t"+"{0}+{1}={2}",number1,number2,sum); break;
                 case "-":sum = number1 - number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}-{1}={2}", number1, number2, sum); break;
                 case "*":sum = number1 * number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}*{1}={2}", number1, number2, sum); break;
                 case "/":sum =number1 / number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}÷{1}={2}", number1, number2, sum); break;
                 case "%":sum = number1 % number2; Console.WriteLine("\r\n计算公式及结果为:\r\n\t\t" + "{0}%{1}={2}", number1, number2, sum); break;
             }
            Console.ReadLine();
        }
        #endregion
        
        #region 封装的属性
        /// <summary>
        ///  Number1 表示获取或设置第一个double类型数字的值
        /// </summary>
        public double Number1
        {
            get { return number1; }
            set { number1 = value;}
        }
        /// <summary>
        ///  Number2 表示获取或设置第二个double类型数字的值
        /// </summary>
        public double Number2
        {
            get { return number2; }
            set { number2 = value; }
        }
        /// <summary>
        /// Symbo 表示获取或设置string类型的运算符
        /// </summary>
        public string Symbol
        {
            get { return symbol; }
            set
            {
                if (value == "+" || value == "-" || value == "*" || value == "/" || value == "%")
                {
                    symbol = value;
                }
                else
                {
                    Console.WriteLine("您输入的运算符不在范围内,请重新输入");
                    this.Symbol = Console.ReadLine();
                }
            }
        }
        #endregion

    }
}


本片文章到这里就是结束了,我想肯定会对路过的你有或多或少的帮助,如果说本篇文章有什么纰漏或者不足之处,还请各位朋友能够在评论区指出,纠正我的错。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值