先贴图:

这是用C# 语言编写的普通型计算器,功能基本模仿Windows8自带计算器程序(版本6.3,内部版本9600)。支持加、减、乘、除、退格、清除、平方根、倒数、相反数、连续四则、连续等号、自动补齐、记忆、键盘输入等功能。可以应对已知的多种形式输入而不发生崩溃,计算结果基本正确。

但是该计算器与Windows自带版本相比还有很多不足:例如,精度无法达到后者水平;“显示屏”部分只有一行,无法显示当前运算式子;未对运算时十进制与二进制相互转化数据丢失现象做优化(例如 12.45 – 12.4 ,即“安卓计算器Bug  http://www.guokr.com/article/27173/ ”);功能相比后者也更为简单。

该计算器程序特点:色彩较为鲜艳,至于美不美,就仁者见仁智者见智了;由于“显示屏”只有一行,设计当M中存有数据时,使MR按钮颜色变化来提示;另外在某处藏有彩蛋,数目不详。

编写的感悟:

1.开始一项工作时,计划要清晰,要对目标有深入的了解。例如,我在编程过程中发现,Windows计算器具有自动补齐功能(如按键 1 + 2 = 5 = ,显示 7,即 5 + 2)。而原来头脑中以为,运算完毕,就可以清空数据。

2.编程风格的规范很重要。命名是一个有技术的工作,要反映一个变量、函数等的性质、从属,让人一目了然;善于写注释,使之简明、保持有效。修改代码,先改注释。如果像某著名C语言教材一样乱写代码,很容易误入歧途,自己也认不清程序,从而走向重写之路。我想到了Python的一个彩蛋,作为参考:

The Zen of Python, by Tim Peters

Python之道

Beautiful is better than ugly.

美观胜于丑陋。

Explicit is better than implicit.

显示胜于隐式。

Simple is better than complex.

简单胜于复杂。

Complex is better than complicated.

复杂胜于过度复杂。

Flat is better than nested.

平面胜于嵌套。

Sparse is better than dense.

稀少胜于稠密。

Readability counts.

可读性需要考虑。

Special cases aren't special enough to break the rules.

即使情况特殊,也不应打破原则,

Although practicality beats purity.

尽管实用胜于纯净。

Errors should never pass silently.

错误不应悄无声息的通过,

Unless explicitly silenced.

除非特意这么做。

In the face of ambiguity, refuse the temptation to guess.

当有混淆时,拒绝猜测(深入的搞明白问题)。

There should be one-- and preferably only one --obvious way to do it.

总有一个,且(理想情况下)只有一个,明显的方法来处理问题。

Although that way may not be obvious at first unless you're Dutch.

尽管那个方法可能并不明显,除非你是荷兰人。(Python的作者Guido是荷兰人,这是在致敬)

Now is better than never.

现在开始胜过永远不开始,

Although never is often better than *right* now.

尽管永远不开始经常比仓促立即开始好。

If the implementation is hard to explain, it's a bad idea.

如果程序实现很难解释,那么它是个坏主意。

If the implementation is easy to explain, it may be a good idea.

如果程序实现很容易解释,那么它可能是个好主意。

Namespaces are one honking great idea -- let's do more of those!

命名空间是个绝好的主意,让我们多利用它。

3.在测试时,要兼顾普遍情况和特殊情况。我搞了一个随机脚本,生成随机的提示符,对照Windows计算器操作,一连测了800行都没有问题。但是马上,又发现了BUG。这说明随机脚本的代表性不够,如果真要用代表性的运算测试,实际上30-50次运算就够了。计算器里面的特殊键有很多,例如 0 ,退格 ,根号, 小数点, 根号。事先计划好这些键的功能目标,可以少走不少弯路。

C#编程普通型计算器 经验与感悟的更多相关文章

  1. 从Java小白到收获BAT等offer,分享我这两年的经验和感悟

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  2. 菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

  3. 关于如何学好游戏3D引擎编程的一些经验[转]

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...

  4. Python: Tkinter、ttk编程之计算器

    起源: 研究Python UI编程,我偏喜欢其原生组件,于是学习Tkinter.ttk组件用法.找一计算器开源代码,略加修整,以为备忘.其界面如图所示: 1.源代码(Python 2.7): # en ...

  5. (转)关于如何学好游戏3D引擎编程的一些经验

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...

  6. 从技术小白到收获BAT研发offer,分享我的学习经验和感悟(赠送相关学习资料)

    去年秋季参加了校园招聘,有幸拿到了BAT.头条.网易.滴滴.亚马逊.华为等offer,经过研究生两年的学习积累,终于达成了自己的目标,期间也经历了很多,谨以此文,聊表感叹,也会分享很多我的Java学习 ...

  7. Oracle Proc编程性能优化经验

    Proc 是Oracle提供的一种数据库操作的API.它是基于ESql技术的,需要预编译后才可以变成普通c代码,非常不直观,使用起来不太方便,阅读也存在困难. 因为这些问题导致程序员平时开发中会出现一 ...

  8. 参加 Tokyo Westerns / MMA CTF 2nd 2016 经验与感悟 TWCTF 2016 WriteUp

    洒家近期参加了 Tokyo Westerns / MMA CTF 2nd 2016(TWCTF) 比赛,不得不说国际赛的玩法比国内赛更有玩头,有的题给洒家一种一看就知道怎么做,但是做出来还需要洒家拍一 ...

  9. python 编程之计算器

    作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后 ...

随机推荐

  1. VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS

    VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS 原文链接:http://bbs.weiphone.com/read-htm-tid-7625465.html 原文作者已经写的 ...

  2. 从基础学起----xuld版高手成长手记[1]

    别人的代码总是看不懂? 想实现一个功能总是无从下手? 学会一个,但稍微变个花样就不知道了? 无论你擅长什么编程语言,如果你觉得自己基础薄弱,想从头开始学起,那本文将适合你. 这篇文章的含金量非常高,如 ...

  3. 分享22款响应式的 jQuery 图片滑块插件

    响应式(Responsive)设计的目标是要让产品界面能够响应用户的行为,根据不同终端设备自动调整尺寸,带给用户良好的使用体验.这篇文章收集了22款优秀的响应式 jQuery 幻灯片插件,它们能够帮助 ...

  4. 免费 PSD 下载: 20个精美的登录和注册表单

    注册表单有许多不同的形状和尺寸,有的只是单个的输入框,有的则需要多个步骤.登录表单的设计将定义网站的性质,因此它应进行针对性的设计.下面的列表提供了20个醒目的登录和注册表单设计为您提供灵感. 您可能 ...

  5. Spring AOP专业术语解析

    一. 连接点(Joinpoint) 连接点就是程序执行的某个特定的位置,如:类开始初始化前.类初始化后.类的某个方法调用前.类的某个方法调用后.方法抛出异常后等.Spring 只支持类的方法前.后.抛 ...

  6. 【javascript激增的思考04】MVC与Backbone.js(beta)

    前言 最近整理了很多前端面试题的东西,今天又去参加了一次面试,不知各位烦不烦,我反正有点累了,于是我们今天继续回到我们前段时间研究的问题,我们再来看看MVC吧. 什么是MVC 又回到这个问题了,到底什 ...

  7. IOS5中的Safari不兼容Javascript中的Date问题,做下笔录吧!奶奶的,折腾我半天!

    在做Mobile终端的Website开发中,我遇到一个很懊恼的问题. 在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2013-10 ...

  8. iOS创建、删除文件夹、获取沙盒路径

    1.获取沙盒路径 // 获取沙盒路径 NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent: ...

  9. Android 应用程序的反编译

    1.ApkTool工具 安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件.安装环境:需要安装JRE1.61> 到http://code.google.com/p/an ...

  10. 网络热恋之SDWebImage

    SDWebImage-master 是一个非常强大的三方. 当需要应用SDWeb时把文件夹里的SDWebImage文件夹放入工程里. 在需要使用网络获取图片的文件里进入头文件#import " ...