程序再小,它也要运行的相关功能要求,或者还有扩展需求。比如,算式中有括号怎么办?你们不要被图片中的括号诱导,其实我没实现算式中有括号的功能,那只是取反。
选择了项目,当然第一步是确定功能需求。本计算器是模仿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