<?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()内,且还得在一直为真的循环内部。While(true)
接下来就把监控到得数字显示出来:(这里用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、先输入的是否是0;2、小数点的个数等。及他们的位置是否正确;如下调用验证字符方法(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;}
这些代码很容易理解,于前面很多地方差不多,就是刷新使其显示。
由于字符太多多本篇显示不完放在下一篇中

转载于:https://blog.51cto.com/baixl/352061

用控制台实现的计算器思路完成过程(一)相关推荐

  1. ML:人工智能之机器学习ML解决实际应用问题的思路总过程(最全)

    ML:人工智能之机器学习ML解决实际应用问题的思路总过程(最全) 目录 详细思路结构 详细思路结构

  2. U盘修复的大致思路和过程

    记录一下U盘修复的大致思路和过程. 最近我的U盘坏了,总是不能写入文件,也不能格式化.在网上查了很多资料,扫盲+尝试,总算修好了.现在记录一下U盘修复的大致思路和过程,以备将来修复电子产品的时候参考. ...

  3. 轮播图详细制作思路与过程

    轮播图详细制作思路与过程 图片轮播我们经常在众多网站中看到,各种轮播特效有着非常美观炫酷的视觉效果.很多初学js的小伙伴都很心生向往.我也不例外,所以在此分享个写轮播图的思路和过程,有不足之处请多多指 ...

  4. Vue实现登录记住账号密码功能的思路与过程

    文章来源: 学习通http://www.bdgxy.com/ 目录 实现思路 这里有三种方法来存储账号密码: 功能界面 记住账号密码功能的具体实现 密码加密 localStorage cookies ...

  5. python计算器思路_python计算器实现过程

    远程仓库的码云项目地址:https://gitee.com/weizz123456/personal_project41678/commit/b547b0e09caa62bf6d0d5ec60c6d3 ...

  6. java编写某计算器控制台程序_计算器 - 进阶的憨狗 - 博客园

    源起 最近在看程杰著作的<大话设计模式>,全书以小菜和大鸟对话的形势,由浅入深的讲解程序的设计思想,影射出一个个设计模式.我之前虽然也使用过一些设计模式,但没有系统的学习.整理.总结,现从 ...

  7. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)

    文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...

  8. JavaScript 普通计算器 思路分析及代码

    1.普通计算器代码实现功能: 加减乘除运算功能 取小数 取相反数 清除一位数及运算符 全部清除 2.界面: 此界面参照oppo r9手机自带计算器的界面 3.思路 (1)显示: 显示界面实际为两个框, ...

  9. [转]粒子滤波(particle filtering)的思路发展过程及应用(详细深度好文)

    粒子滤波作为视觉SLAM中后端进行状态估计的主要算法之一,很好的完成了扩展卡尔曼滤波无法有效处理的复杂状态方程下的状态估计任务.这篇文章详细地描述了粒子滤波的思想历程,即如何一步步从简单的状态估计.采 ...

最新文章

  1. 8.29 对象?数组?
  2. 系统时间、时区、字符集
  3. 【转】VC MFC 如何删除文件,目录,文件夹
  4. 【C++】Visual Studio教程(一)-概述
  5. linux python连接oracle数据库_Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法...
  6. JAVA进阶day07JNI(java调用c)A部分
  7. 28 | 读写分离有哪些坑?
  8. 【杂文】【IDEA】IDEA项目设置为maven并运行
  9. developerDiskImage文件提取
  10. 蓝桥训练系统 矩阵乘法
  11. paip.语义分析--单字动词表.txt
  12. 创建计算机桌面快捷方式图标异常,桌面快捷方式图标显示异常,win7无法正常显示桌面图标怎么办?...
  13. 【软件安装】IDM安装并扩展到FireFox和Google Chrome
  14. 微信定时自动发消息。每天和你的obj准时说晚安
  15. FPGA内部结构和工作原理
  16. (Note)同比和环比
  17. 第四讲 Linux常用命令
  18. 2018.06.06 第二天面试人在囧途跑错了地方
  19. 2012年10月第3周(10.15-10.21)
  20. 大一作业HTML网页作业:中华传统文化题材网页设计(纯html+css实现)科普网

热门文章

  1. EOJ Monthly 2018.1
  2. Windows 10 周年更新后TPM的一个bug?
  3. 采用fdisk在linux进行分区操作
  4. Spring+Quartz实现定时任务的配置方法
  5. 教你识别:虚拟内存和物理内存的区别
  6. CSS媒体查询 @media
  7. ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
  8. Swift进阶学习笔记
  9. 磁珠,电感,零欧电阻之间的区别
  10. vim技巧总结-查找