C#编程普通型计算器 经验与感悟

先贴图:

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

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

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

下面甩下载地址,请诸位对存在的问题批评指正。

下载地址:(需安装 .Net Framework才能运行)

http://pan.baidu.com/s/1gdzkigN

编写的感悟:

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 ,退格 ,根号, 小数点, 根号。事先计划好这些键的功能目标,可以少走不少弯路。

时间: 2024-08-12 18:56:07

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

编程实现计算器

需求 编程实现计算器,当输入一个表达式时,可以得出计算结果.(实现加.减.乘.除.取余以及负号运算) 思路 1. 维护两个栈,一个栈my_dig用于push数字,另一个栈my_op用于push运算符.栈中元素结构如下: typedef struct tag_stack1 { int dig_arr[1024]; int dig_top; }DIG, *pDIG; typedef struct tag_stack2 { char op_arr[1024]; int op_top; }OP, *pO

转:六年测试经验总结感悟

1.分享第一条经验:"学历代表过去.能力代表现在.学习力代表未来."其实这是一个来自国外教育领域的一个研究结果.相信工作过几年.十几年的朋友对这个道理有些体会吧.但我相信这一点也很重要:"重要的道理明白太晚将抱憾终生!"所以放在每一条,让刚刚毕业的朋友们早点看到哈! 2.一定要确定自己的发展方向,并为此目的制定可行的计划.不要说什么,"我刚毕业,还不知道将来可能做什么?","跟着感觉走,先做做看".因为,这样的观点会通过你的潜

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

菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少,加减乘除就可以. 第一步:设计布局文件 界面如下图: 由于刚开始学Android,对布局文件也不是很了解,边查边找,最后凑合着写好了布局文件. 注意事项:此布局文件用到了GridLayout布局,是在Android4.0以上才出现的(不知道谷歌有没有开发相应的包来适配4.0以下版本). 有关Gri

Python: UI编程之计算器

起源: 研究Python UI编程,我偏喜欢其原生组件,于是学习Tkinter.ttk组件用法.找一计算器开源代码,略加修整,以为备忘.其界面如图所示: 1.源代码(Python 2.7): # encoding: UTF-8 from Tkinter import * from ttk import * calc = Tk() calc.title('计算器') calc.resizable(False, False) buttons = [ '7', '8', '9', '*', 'C',

结对编程— —总结、经验及教训 (范济海 徐振杰)

1.项目需求 用户: 小学.初中和高中学生. 功能: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-10位,必须含大小写字母和数字: 3.密码设置成功后,跳转到选择界面,界面显示小学.初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量: 4.用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目),界面显示第一题的题干和四个选项,用户选择四个选项

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

点击关注并置顶,江湖要事早提醒 点击关注并指定,江湖要事早知道 我 常想,人生最有趣莫过于前路未知.于是我常常羡慕那些个"金梁古温"笔下随遇而安.随性而为.随缘而爱的浪子们.比如陆小凤,比如叶开. 写在最前 我写过很多篇秋招总结,这篇文章应该是最后一篇总结,当然也是最完整,最详细的一篇总结.秋招是我人生中一段宝贵的经历,不仅是我研究生生涯交出的一份答卷,也是未来职业生涯的开端.仅以此文,献给自己,以及各位在求职路上的,或者是已经经历过校招的朋友们.不忘初心,方得始终. 前言 在下本是跨

Oracle Proc编程性能优化经验

Proc 是Oracle提供的一种数据库操作的AP.它是基于ESql技术的,需要预编译后才可以变成普通c代码,非常不直观,使用起来不太方便,阅读也存在困难. 因为这些问题导致程序员平时开发中会出现一些Proc操作存在效率低下的情况,本文介绍一些Proc一些编译经验,希望能给大家提供参考. 下面以一个简单需求进行举例说明: 要求把DB1里面一张数据表tbl_hch_test的数据导出到DB2的同名表. 最快的方法当然是使用oracle的数据泵工具进行压缩导出再导入,但expdp/impdp对数据库

关于java中面向对象编程的一点点小感悟!!!

断断续续接触java已经有半年的时间,当然中间也有过很多事情,不得已而中断了java的学习.当初刚刚接触到java的时候,总是不能理解java的面向对象编程优点.平常生活中我们做事情的思维方式都是面向过程的,就拿最简单的我要上一个培训班来说: 第一步:当然得是网上.贴吧.朋友的口中来了解这个辅导班,以此来决定是否需要上这个辅导班. 第二步:当然就是当了解完成之后,对这个辅导班比较满意.自己就需要做准备来达到辅导班的要求,比如说学费.复习知识,准备参加辅导班规定的考试. 第三步:当然就是付诸实践,

spring相关—AOP编程—数学计算器情景示例讲解(包含注解配置AOP与XML配置AOP)

1.数学计算器 ①数学计算器接口[MathCalculator]            public void add(int i,int j);     public int sub(int i,int j);     public int multi(int i,int j);     public void divide(int i,int j);    ②提供简单实现:加减乘除运算[EasyImpl]    ③在简单实现的基础上让每一个计算方法都能够打印日志[LoginImpl]