3.1 KiB
3.1 KiB
项目一:单位换算器
适合第2—3章讲解信号槽、组件访问和函数分工,第4章可继续练习下拉框与字符串处理。
运行后试什么
初始输入为 25,源单位为摄氏度,目标单位为华氏度。点击“换算”,应显示 77 °F,并在下方显示公式。也可以在输入框内按 Enter。
切换到长度后,默认将米换成厘米。输入 1,结果应为 100 cm。“交换单位”只交换源单位与目标单位,输入值保持不变。修改输入或单位会清空旧结果,防止把上次的答案当成当前答案。
支持摄氏度、华氏度、开尔文,以及毫米、厘米、米、千米、英寸和英尺。结果最多显示 12 位有效数字。
课堂任务
第一步只保留温度输入、换算按钮和结果框。让学生完成摄氏度到华氏度的换算,并解释输入框返回的是字符串,计算需要数值。
第二步加入返回值检查。分别输入空字符串、abc 和 25.5,观察程序怎样决定是否继续计算。当前工程用完整字符串的格式检查配合 toDouble,支持小数和科学计数法,不接受千位分隔符。
第三步加入源单位和目标单位。先统一到摄氏度,再计算目标温度。让学生画出华氏度到开尔文的两步过程,避免只背诵一个总公式。
第四步加入长度换算。单位比例写在数组中,先解释数组下标与下拉框顺序的对应关系,再讨论增加一个单位时需要修改哪些位置。
一次换算怎样完成
- convertButton 发出 clicked 信号,调用 convertValue。
- 主窗口读取 inputEdit 的文本和两个下拉框的索引。
- Conversion::convert 检查输入,计算结果,返回 Result。
- 主窗口根据 Result::ok 显示结果或错误原因。
- 计算成功后允许复制;输入变化后立即禁用复制并清除旧结果。
Conversion::convert 不直接操作输入框或标签,因此可以使用不同界面调用,也可以单独测试。
需要解释的条件
- 温度不能低于绝对零度。摄氏度下限为 −273.15,华氏度下限为 −459.67,开尔文下限为 0。
- 边界比较保留极小的浮点误差余量,防止换算时的舍入把绝对零度判为非法值。
- 本工具中的长度表示非负长度,不表示带方向的坐标位移。
- 输入可以合法,但结果仍可能溢出。输入检查和结果检查分别负责两个阶段。
- 显示的有效数字有限,程序不承诺任意精度计算。
学生练习
- 增加“码”,已知 1 yd = 0.9144 m。检查它与米、英尺之间的换算。
- 增加“使用本次结果继续换算”按钮,说明它与“交换单位”的区别。
- 为结果增加可选择的显示精度,并解释显示精度为什么不等于计算精度。
验收用例
| 操作 | 预期 |
|---|---|
| 0 °C → °F | 32 |
| 212 °F → °C | 100 |
| −459.67 °F → K | 0 |
| −274 °C → K | 显示低于绝对零度的提示 |
| 1 in → cm | 2.54 |
| 1 ft → m | 0.3048 |
| 输入 12abc、nan 或 1,000 | 拒绝计算 |
| 算出结果后修改输入 | 旧结果清空,复制按钮不可用 |