用控制檯實現的計算器思路完成過程(一)

 用控制檯實現的計算器思路完成過程

首先:爲了滿足界面要求,我做了一個方法來繪製界面,一、方便需要時刷新。方法和變量命名不是很規則主要是英語水平有限,
大家不要見怪啊。
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;}

這些代碼很容易理解,於前面很多地方差不多,就是刷新使其顯示。

 
由於字符太多多本篇顯示不完放在下一篇中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章