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;
writeline方法的作用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)属性赋值好⼀个,我们要进⾏运算,那么这运算的过程我们是不能让⽤户知道的,所以,我们就要在类中计算器类中封装它,然后在外界调⽤它就可以了,但是在调⽤传值的时候我们不知道⽤户输⼊的是什么,所以我们就要通过属性读取⽤户间接给字段赋的值,来将这个值传过来我们做运算,并且我们要判断运算符中的值是什么,要进⾏何种运算,所以就要分情况了。
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());
}
}
}
(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
}
}
本⽚⽂章到这⾥就是结束了,我想肯定会对路过的你有或多或少的帮助,如果说本篇⽂章有什么纰漏或者不⾜之处,还请各位朋友能够在评论区指出,纠正我的错。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论