要求:分数计算器
信息类型和属性
声明一个整数类,然后派生出一个分数类。
功能描述
分数的加、减、乘和除运算。
把分数化简为最简分数。
异常处理:分数中分母不能为零。
在屏幕上显示计算式和计算结果。
将计算式和计算结果写入到历史记录文件中(只保留最新的10条记录)
退出系统。
帮我写一个c++工程
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
24条回答 默认 最新
关注 获得0.30元问题酬金 引自免费微信小程序:皆我百晓生
为了实现这个分数计算器的C++工程,我们将分步骤进行。首先,定义基本的数据结构和类,然后实现所需的功能,最后添加异常处理、屏幕显示、文件记录和程序退出逻辑。
1. 分数类定义
我们从定义一个整数类
Integer
开始,尽管在这个场景中直接使用C++的int
类型可能更直接有效,但为了遵循你的要求,我们先定义一个简单的Integer
类,然后派生出Fraction
(分数)类。#include <iostream> #include <fstream> #include <vector> #include <algorithm> #include <gcd> class Integer { public: int value; Integer(int v = 0) : value(v) {} }; class Fraction : public Integer { private: Integer denominator; // 分母 public: Fraction(Integer numerator, Integer denominator) : Integer(numerator.value), denominator(denominator.value) { if (denominator.value == 0) throw std::invalid_argument("Denominator cannot be zero."); simplify(); } void simplify() { int gcd_val = std::__gcd(value, denominator.value); value /= gcd_val; denominator.value /= gcd_val; } Fraction operator+(const Fraction& other) const { Integer newNumerator(value * other.denominator.value + other.value * denominator.value); Integer newDenominator(denominator.value * other.denominator.value); return Fraction(newNumerator, newDenominator); } // 类似地,定义减法、乘法、除法运算符重载 // ... 略 friend std::ostream& operator<<(std::ostream& os, const Fraction& f); };
2. 运算符重载和输出格式调整
继续完成分数类中剩余的运算符重载,并定义输出格式以便于屏幕显示。
3. 异常处理
在分数类构造函数中已处理了分母为零的情况。其他潜在的异常处理应根据具体实现细节添加。
4. 屏幕显示
定义一个函数来显示计算式和结果:
void display(const std::string& operation, const Fraction& result) { std::cout << operation << " = " << result << std::endl; }
5. 历史记录文件
维护一个文件,存储最新的10条记录。这里使用
std::vector
来暂存记录,并定期写入文件,每次写入前清空旧记录并加入新记录。void saveToHistory(const std::string& operation, const Fraction& result) { static std::vector<std::pair<std::string, Fraction>> history(10); static size_t index = 0; history[index] = {operation, result}; index = (index + 1) % 10; // 循环更新索引 std::ofstream file("history.txt"); if (file.is_open()) { for (const auto& entry : history) { file << entry.first << " = " << entry.second << "\n"; } file.close(); } else { std::cerr << "Unable to open history file." << std::endl; } }
6. 主函数及用户交互
最后,编写主函数来实现用户输入、计算、显示和记录功能,并提供退出选项。
int main() { try { Fraction f1(3, 4), f2(1, 2); Fraction sum = f1 + f2; display("3/4 + 1/2", sum); saveToHistory("3/4 + 1/2", sum); // 示例结束,实际应用中需添加循环以持续接受用户输入和操作 } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } return 0; }
以上代码框架实现了分数类的基本定义、运算、简化、屏幕显示和历史记录保存功能。请根据实际需求调整和完善,比如添加更多用户交互逻辑来接受用户输入,以及完成减法、乘法、除法的运算符重载等。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 TLS1.2协议通信解密
- ¥40 图书信息管理系统程序编写
- ¥20 Qcustomplot缩小曲线形状问题
- ¥15 企业资源规划ERP沙盘模拟
- ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
- ¥15 前端echarts坐标轴问题
- ¥15 ad5933的I2C
- ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
- ¥15 数学建模求思路及代码
- ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题