<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 用控制台实现的计算器思路完成过程

首先:为了满足界面要求,我做了一个方法来绘制界面,一、方便需要时刷新。方法和变量命名不是很规则主要是英语水平有限,
大家不要见怪啊。
public static void jsj()

        {

            Console.WriteLine(Console.Title = " 计算器" );

            Console.WindowWidth = 43;

            Console.WindowHeight =30;

            Console.WriteLine(   " );

            Console.WriteLine("      " );

            Console.WriteLine(" ▕▕                                 " );

            Console.WriteLine(" ▕▕ " +message +" " );

            Console.WriteLine(" ▕▕                                 " );

            Console.WriteLine("   ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                        .       " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                        +       " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                        -       " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                                      " );

            Console.WriteLine("       0      %       /       *       " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                                      " );

            Console.WriteLine("                                       " );

            Console.WriteLine( ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ " );

        }

为了满足不越界的要求:定义一个全局变量message来显示输入的数和显示计算结果,我这里能输入32个字符。当时就命名了两个char类型的数组  
 static char[] result = new char[32]; //接收输入的的一个数
static char[] result2 = new char[32];   // 接收输入的的二个数。

可能当时为了满足不越界来存储每一个输入的字符,和方便提取出来才定义32唯 ,后来种种原因必须先赋给他‘ ’带有空格的字符(方便判定存储数所占的为数);
现在想来这样不是很好。
public static void clearzero()//

        {

            for (int i = 0; i < 32; i++)

            {

                result2[i] = ' ';

                result[i] = ' ';

            }

            tag = 0; // 标记 . 的个数

            No = -1; // 输入字符在数组result中的索引

            message = "                              0.";        // 显示结果

        }

for 循环为数组赋‘ ’其他变量是干什么的?为什么还写成方法? 

置于写此方法是在基本功能完成后,看到还少一个清零功能 。不就是重新运行吗 。即对所用到得变量重新赋值吗!看到这就写了此方法。这都是后话

 

char Char=  Console.ReadKey(true).KeyChar; 此行代码就是监控用户输入,它应该在Main()内,且还得在一直为真的循环内部。Whiletrue

 

接下来就把监控到得数字显示出来:(这里用case接收我们需要的字符,如:123456789
         所以写了一个存储字符的方法 SoreChar ()

   public static void SoreChar(char keychar)

        {

            result[No] = keychar;

            message ="";

            for (int i = 31; i > No; i--)

            {

                message += " ";

                result[i] = ' ';

            }

            for (int i = 0; i <=No; i++)

            {

                message += result[i];

            }

        }

No 我们定义的全局变量记录数组result【】中(我们需要数字)字符的个数  在这里也实现了时时显示输入的数  (现在来看,为什么没用字符串来接收输入的数)当时没想到,现在看来可以整体的改进。现在只讲讲当时的想法

 

接下来就是对 零和小数点的存储,这需要有很多验证:1、先输入的是否是02、小数点的个数等。及他们的位置是否正确;如下调用验证字符方法(No:字符的个数 tag:小数点的个数。

switch (Char){

case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':

{No++;SoreChar(Char);break;}

case '0':{No++;CheckChar(Char);break;}

case '.':{No++;tag++;CheckChar(Char);break;}

No tag先做加加,验证失败在做减减处理。这样错误的输入不计在内。下面方法是对 零和小数点的验证

public static void CheckChar(char keychar)

        {

            if (keychar == '.' && No==0|| tag>1) // 排除点的位置,和数量

            { No--;tag--;        }

            else if(keychar =='0'&&No ==1 &&result [0]=='0') // 排除前两位都是零

            { No--;}

            else {SoreChar(keychar);}

        }
在下一步处理核心+-*%

  case '+':case '-':case '*':case '%':case '/':

                       {No = -1;ShowJspType(Char);JsType(Char);break;}

为了在Main()内少写代码;能用方法的我几乎都写到外面了;

ShowJspType(Char) 就是为了显示计算类型,没打算也存储以下,只在屏幕中显示以下

        public static void ShowJspType(char keychar)

        {message = "";

for (int i = 31; i > 0; i--){message += " ";}

            message += keychar;}

这些代码很容易理解,于前面很多地方差不多,就是刷新使其显示。

 
由于字符太多多本篇显示不完放在下一篇中