第一课程序框架的构建——C#计算器编程教学

来源:互联网 发布:淘宝网沙发布料 编辑:程序博客网 时间:2024/05/22 08:02

         程序再小,它也要运行的相关功能要求,或者还有扩展需求。比如,算式中有括号怎么办?你们不要被图片中的括号诱导,其实我没实现算式中有括号的功能,那只是取反。

       选择了项目,当然第一步是确定功能需求。本计算器是模仿Win7的基本型,这上面的每一个按钮基本可代表一个功能,分析也简单,英语单词不会查百度。主要功能其实是三个,输入、输出和记忆,也可以考虑可扩展等因素,编写完整实现功能暴露。

       第二步,根据功能需求构建接口。编程的第一个代码应该是接口文件,因为接口定义功能。一个人的项目可以选择简版接口,团队项目选择完整版接口。

简版接口:

namespace MyCacl{    public interface ICacl    {        /// <summary>        /// 计算结果。        /// </summary>        string Result { get; }        /// <summary>        /// 算式。        /// </summary>        string CaclString { get; set; }        /// <summary>        /// 用户是否设置了记忆。        /// </summary>        bool HaveMemory { get; }        /// <summary>        /// 程序输入。        /// </summary>        /// <param name="输入的按钮Text值"></param>        void EnterString(string str);    }}
完整接口:

namespace MyCacl{public interface ICacl{/// <summary>/// 计算的结果显示。/// </summary>string Result{get;set;}/// <summary>/// 显示和设置算式。/// </summary>string CaclString{get;set;}/// <summary>/// 是否保存结果。/// </summary>bool HaveMemory{get;}/// <summary>/// 运行计算,显示结果。/// </summary>void RunCaclEqual();/// <summary>/// 开根号运算。 /// </summary>void Square();/// <summary>/// 倒数运算/// </summary>void Reciproc();/// <summary>/// 清除算式和结果。/// </summary>void ClearAll();/// <summary>/// 清除一个算式。/// </summary>void ClearEnter();/// <summary>/// 显示保存的结果/// </summary>void MemoryRecall();/// <summary>/// 清除保存的内容/// </summary>void MemoryClear();/// <summary>/// 保存算式/// </summary>void MemorySave();/// <summary>/// 算式结果加保存/// </summary>void MemoryAdd();/// <summary>/// 算式结果减保存/// </summary>void MemorySubtract();/// <summary>/// 取反/// </summary>void Contrary();/// <summary>/// 回删一个字符/// </summary>void Backspace();/// <summary>/// 输入数字/// </summary>/// <param name="数字字符"></param>void EnterDigit(string str);}}
      第三步,细节分析。有模仿那就直接操作它,看有什么情况需注意和实现的。这个程序其实细节繁多,没有仔细分析程序就出错。

      细节之一,每个按钮随时可点击。不要小看它,这需要随时判断在任何情况下点击应作如何反应。

      细节之二,算式开头不能是操作符,0后面不能是其他数字,只能是点,点小数点后再点小数点怎么办?点了操作符再点操作符怎么办?

      细节之三,不是每个算式都能算出结果,或者算式错了,或者计算过程中超出了C#数据类型的取值范围,需要try catch模块。

      由于要支持键盘录入,可能的细节那可能还有。

      第一课结语。先说构架。界面Ul是winform,然后绑定操作类,操作类实现通知界面变更接口,再加上实现计算的辅助类,和功能接口。

      程序分享,欢迎测试找渣。http://yun.baidu.com/share/link?shareid=1042838818&uk=2751882860



0 0