目录
一、 项目简介
二、 项目目标
三、 功能需求
四、 项目亮点
1. 输入验证增强
2. 模块化设计
3. 错误处理机制
五、代码实现(核心部分)
1. 主程序流程
2. 温度转换函数
六、运行示例
七、扩展建议
1. 历史记录功能
2. 函数指针优化
3. 面向对象设计(进阶)
八、总结
九、学习建议
本项目实现了一个交互式命令行温度转换工具,支持以下核心功能:
通过该项目,你将掌握 C++ 的基础语法、输入输出流操作、条件分支与循环控制等核心技能。
F = C * 9/5 + 32
C = (F - 32) * 5/9
K = C + 273.15
功能编号 | 功能名称 | 描述 |
---|---|---|
✅ F1 | 摄氏度转华氏度 | 使用标准公式 F = C * 9/5 + 32 |
✅ F2 | 华氏度转摄氏度 | 使用标准公式 C = (F - 32) * 5/9 |
✅ F3 | 摄氏度转开尔文 | K = C + 273.15 |
✅ F4 | 输入验证 | 非数字输入、绝对零度以下值检测 |
✅ F5 | 用户交互 | 菜单选择、继续/退出控制 |
F6 | 扩展功能(选做) | 历史记录、图形界面集成 |
double getTemperature(const string& prompt, int option) {
double temp;
while (true) {
cout << prompt;
if (cin >> temp) {
// 物理合理性检查
if (option == 1 && temp < -273.15) {
cout << "摄氏度不能低于 -273.15(绝对零度)!\n";
continue;
}
if (option == 2 && temp < -459.67) {
cout << "华氏度不能低于 -459.67(绝对零度)!\n";
continue;
}
break;
} else {
// 非法输入处理
cin.clear();
cin.ignore(numeric_limits::max(), '\n');
cout << "输入错误!请输入一个数字。\n";
}
}
return temp;
}
switch-case
支持动态功能扩展do-while
循环保持程序持续运行int main() {
char choice = 'y';
do {
displayMenu(); // 显示功能菜单
int option; // 获取用户选择
cout << "请选择转换方向 (1/2/3/4): ";
cin >> option;
if (option == 4) {
cout << "感谢使用!再见!" << endl;
break;
}
double temperature;
switch (option) {
case 1: // Celsius → Fahrenheit
temperature = getTemperature("请输入摄氏度 (≥ -273.15): ", option);
celsiusToFahrenheit(temperature);
break;
case 2: // Fahrenheit → Celsius
temperature = getTemperature("请输入华氏度: ", option);
fahrenheitToCelsius(temperature);
break;
case 3: // Celsius → Kelvin
temperature = getTemperature("请输入摄氏度 (≥ -273.15): ", option);
celsiusToKelvin(temperature);
break;
default:
cout << "无效选项!请重新选择。\n";
}
choice = confirmContinue(); // 确认是否继续
} while (choice == 'y' || choice == 'Y');
return 0;
}
void celsiusToKelvin(double celsius) {
double kelvin = celsius + 273.15;
cout << celsius << "°C = " << kelvin << " K\n";
}
void celsiusToFahrenheit(double celsius) {
double fahrenheit = celsius * 9.0 / 5.0 + 32;
cout << celsius << "°C = " << fahrenheit << "°F\n";
}
void fahrenheitToCelsius(double fahrenheit) {
double celsius = (fahrenheit - 32) * 5.0 / 9.0;
cout << fahrenheit << "°F = " << celsius << "°C\n";
}
=== 温度转换工具 ===
1. 摄氏度 → 华氏度
2. 华氏度 → 摄氏度
3. 摄氏度 → 开尔文
4. 退出
请选择转换方向 (1/2/3/4): 1
请输入摄氏度 (≥ -273.15): 100
100°C = 212°F
是否继续转换?(y/n): y
请选择转换方向 (1/2/3/4): 3
请输入摄氏度 (≥ -273.15): 0
0°C = 273.15 K
是否继续转换?(y/n): n
感谢使用!再见!
vector history;
// 每次转换后保存结果
history.push_back(historyLine);
// 退出时显示
cout << "\n历史记录:\n";
for (const auto& line : history) {
cout << line << endl;
}
using Converter = void (*)(double);
map converters = {
{1, celsiusToFahrenheit},
{2, fahrenheitToCelsius},
{3, celsiusToKelvin}
};
class TemperatureConverter {
public:
void run();
private:
void convertCelsiusToFahrenheit(double celsius);
void convertFahrenheitToCelsius(double fahrenheit);
void convertCelsiusToKelvin(double celsius);
};
通过本项目,掌握以下 C++ 核心技能:
switch
/do-while
)