C++ 第一阶段项目一:实现简易计算器

目录

一、项目目标

二、功能需求

1. 基本功能

2. 扩展功能(选做)

三、实现思路

1. 主程序流程图

2. 关键步骤

四、代码实现

五、代码说明

1. 输入验证

2. 异常处理

3. 模块化设计

六、运行示例

七、扩展建议

八、总结


一、项目目标

实现一个命令行简易计算器,支持以下功能:

  1. 四则运算(加、减、乘、除)
  2. 用户交互(输入操作数和操作符)
  3. 错误处理(除零错误、无效输入)
  4. 循环运行(用户可选择继续或退出)

二、功能需求

1. 基本功能

  • 用户输入两个数字和一个运算符(+-*/
  • 程序计算结果并输出
  • 支持连续计算(用户可选择是否继续)

2. 扩展功能(选做)

  • 输入验证(防止非数字输入)
  • 支持更多运算(如幂运算 ^、取模 %
  • 使用函数封装逻辑

三、实现思路

1. 主程序流程图

开始
  ↓
显示菜单
  ↓
获取用户输入(操作数1、操作符、操作数2)
  ↓
执行计算
  ↓
显示结果
  ↓
询问是否继续
  ↓
结束 or 循环

2. 关键步骤

  • 输入处理:使用 cin 获取用户输入,注意处理输入错误。
  • 错误检查:检查除零错误和无效操作符。
  • 循环控制:使用 do-while 循环保持程序运行。

四、代码实现

#include 
#include  // 用于输入验证
using namespace std;

// 函数声明
void displayMenu();
double getNumber(const string& prompt);
char getOperator();
void calculate(double num1, char op, double num2);
bool confirmContinue();

int main() {
    char choice = 'y';
    do {
        displayMenu();
        double num1 = getNumber("请输入第一个数字: ");
        char op = getOperator();
        double num2 = getNumber("请输入第二个数字: ");
        calculate(num1, op, num2);
        choice = confirmContinue();
    } while (choice == 'y' || choice == 'Y');
    cout << "感谢使用!再见!" << endl;
    return 0;
}

// 显示菜单
void displayMenu() {
    cout << "简易计算器\n";
    cout << "支持的运算符: +, -, *, /\n";
}

// 获取数字(带输入验证)
double getNumber(const string& prompt) {
    double num;
    while (true) {
        cout << prompt;
        if (cin >> num) {
            break;
        } else {
            cin.clear(); // 清除错误标志
            cin.ignore(numeric_limits::max(), '\n'); // 忽略无效输入
            cout << "输入错误!请输入一个数字。\n";
        }
    }
    return num;
}

// 获取操作符
char getOperator() {
    char op;
    while (true) {
        cout << "请输入操作符 (+, -, *, /): ";
        cin >> op;
        if (op == '+' || op == '-' || op == '*' || op == '/') {
            break;
        } else {
            cout << "无效的操作符!请重新输入。\n";
        }
    }
    return op;
}

// 执行计算
void calculate(double num1, char op, double num2) {
    try {
        switch (op) {
            case '+':
                cout << "结果: " << num1 + num2 << endl;
                break;
            case '-':
                cout << "结果: " << num1 - num2 << endl;
                break;
            case '*':
                cout << "结果: " << num1 * num2 << endl;
                break;
            case '/':
                if (num2 == 0) {
                    throw runtime_error("除数不能为零!");
                }
                cout << "结果: " << num1 / num2 << endl;
                break;
            default:
                cout << "未知错误!" << endl;
        }
    } catch (const exception& e) {
        cerr << "错误: " << e.what() << endl;
    }
}

// 确认是否继续
bool confirmContinue() {
    char ch;
    while (true) {
        cout << "是否继续计算?(y/n): ";
        cin >> ch;
        if (ch == 'y' || ch == 'Y' || ch == 'n' || ch == 'N') {
            return (ch == 'y' || ch == 'Y');
        } else {
            cout << "请输入 y 或 n。\n";
        }
    }
}

五、代码说明

1. 输入验证

  • 使用 cin.fail() 检测输入错误。
  • 使用 cin.clear() 和 cin.ignore() 清理输入流。

2. 异常处理

  • 使用 try-catch 捕获除零错误。
  • 抛出 runtime_error 提供错误信息。

3. 模块化设计

  • 将功能拆分为独立函数,提高代码可读性和复用性。

六、运行示例

简易计算器
支持的运算符: +, -, *, /
请输入第一个数字: 10
请输入操作符 (+, -, *, /): *
请输入第二个数字: 5
结果: 50
是否继续计算?(y/n): y
请输入第一个数字: 20
请输入操作符 (+, -, *, /): /
请输入第二个数字: 0
错误: 除数不能为零!
是否继续计算?(y/n): n
感谢使用!再见!

七、扩展建议

  1. 添加更多运算

    case '^': // 幂运算
        cout << "结果: " << pow(num1, num2) << endl;
        break;
  2. 使用函数指针或 Lambda 表达式

    using Operation = double (*)(double, double);
    map operations = {
        {'+', [](double a, double b) { return a + b; }},
        {'-', [](double a, double b) { return a - b; }}
    };
  3. 面向对象设计

    class Calculator {
    public:
        void run();
    private:
        double add(double a, double b);
        double subtract(double a, double b);
    };

八、总结

通过本项目,你将掌握:

  • 基本输入输出和用户交互
  • 条件判断与循环控制
  • 函数的封装与调用
  • 异常处理和输入验证
  • 模块化编程思想

这是一个非常适合 C++ 初学者的实践项目,建议多调试并尝试扩展功能!

你可能感兴趣的:(C++从入门到入土连载,c++,microsoft,开发语言)