您的位置:首页 > 编程语言 > C语言/C++

c++实现简单计算器

2015-06-06 18:34 435 查看
帮一个同学写的,非计算机类专业,应付交差,也没什么功能,两个数的加减乘除运算,以及三角函数的运算。要求用到模板、运算符重载和异常处理。

一直以来都是用的java,没怎么用过c++,就当是复习了一下c++语法。

代码如下:

#include<iostream>
#include<string>
#include<cmath>
#include<cstdlib>

using namespace std;

//四则运算
template <class T> class ElementaryArithmetic{
private:
T result;
T operand1, operand2;
char operators;
public:
//四则运算
void Calculate();
//加法运算
void add(T, T);
//减法运算
void subtraction(T, T);
//乘法运算
void multiplication(T, T);
//除法运算
void divide(T, T);
//输出运算符重载
template <class E> friend ostream &operator<<(ostream&, ElementaryArithmetic<E> &);
};

//四则运算
template <class T> void ElementaryArithmetic<T>::Calculate(){
int type;

loop1:
system("cls");
cout << endl << "*******************" << endl;
cout << "*   1.加法运算    *" << endl;
cout << "*   2.减法运算    *" << endl;
cout << "*   3.乘法运算    *" << endl;
cout << "*   4.除法运算    *" << endl;
cout << "*******************" << endl << endl;
cout << "请输入菜单项(1-4):";
try{
cin >> type;
if (type != 1 && type != 2 && type != 3 && type != 4)
throw 1;
}
catch (int e){
cout << endl << "输入错误,请重新输入选项...";
system("pause");
goto loop1;
}

cout << endl << "请输入两个数字:";
cin >> operand1 >> operand2;
if (type == 1){
add(operand1, operand2);
operators = '+';
}
else if (type == 2){
subtraction(operand1, operand2);
operators = '-';
}
else if (type == 3){
multiplication(operand1, operand2);
operators = '*';
}
else if (type == 4){
divide(operand1, operand2);
operators = '/';
}

}

//加法运算
template <class T> void ElementaryArithmetic<T>::add(T operand1,T operand2){
result = operand1 + operand2;
}

//减法运算
template <class T> void ElementaryArithmetic<T>::subtraction(T operand1, T operand2){
result = operand1 - operand2;
}

//乘法运算
template <class T> void ElementaryArithmetic<T>::multiplication(T operand1, T operand2){
result = operand1 * operand2;
}

//除法运算
template <class T> void ElementaryArithmetic<T>::divide(T operand1, T operand2){
try{
//除数为0,出现异常
if ((operand2 - 0) < 1e-8 && (operand2 - 0) > -1e-8)
throw 0;
}
catch (int){
throw ;
}
result = operand1 / operand2;
}

//输出运算符重载
template <class E> ostream& operator<<(ostream &os, ElementaryArithmetic<E> &result){
os << endl << "计算结果 : " << result.operand1 << result.operators << result.operand2 << '=' << result.result << endl;
return os;
}

//三角函数
class Trigonometric{
private:
double radian;
string type;
double result;
public:
//三角函数计算
void Calculate();
//输出运算符重载
friend ostream &operator<<(ostream&, Trigonometric &);
};

//三角函数计算
void Trigonometric::Calculate(){
int option;

loop2:
system("cls");
cout << "*******************" << endl;
cout << "*    1.求正弦      *"<< endl;
cout << "*    2.求余弦      *"<< endl;
cout << "*    3.求正切      *"<< endl;
cout << "*******************" << endl << endl;
cout << "请输入菜单项(1-3):";
try{
cin >> option;
if (option != 1 && option != 2 && option != 3 && option != 4)
throw 2;
}
catch (int e){
cout << endl << "输入错误,请重新输入选项..." ;
system("pause");
goto loop2;
}

cout << endl << "请输入弧度:";
cin >> radian;

if (option == 1){
result = sin(radian);
type = "sin";
}
else if (option == 2){
result = cos(radian);
type = "cos";
}
else if (option == 3){
result = tan(radian);
type = "tan";
}
}

//输出运算符重载
ostream &operator<<(ostream &os, Trigonometric &result){
os << endl << "计算结果 : " << result.type << "(" << result.radian << ") = " << result.result << endl;
return os;
}

int main(){
int type;

loop:
while (true){
system("cls");
cout << "*******主菜单**********" << endl;
cout << "*                     *" << endl;
cout << "*   1. 四则运算       *" << endl;
cout << "*   2. 三角函数       *" << endl;
cout << "*   3. 退出程序       *" << endl;
cout << "*                     *" << endl;
cout << "***********************" << endl << endl;
cout << "请输入菜单项(1-3):";

try{
cin >> type;
if (type != 1 && type != 2 && type != 3)
throw - 1;

if (type == 1){
ElementaryArithmetic<double> calc;
calc.Calculate();
cout << calc;
}
else if (type == 2){
Trigonometric calc;
calc.Calculate();
cout << calc;
}
else if (type == 3)
break;
}
catch (int e){
if (e == -1){
cout << endl << "输入错误,请重新输入选项...";
system("pause");
goto loop;
}
else if (e == 0)
cout << "除数不能为 0 " << endl;

}
cout << endl;
system("pause");
}
return 0;
}


好吧,其实我也不知道为什么要求用模板和运算符重载,感觉没什么必要,典型的作业代码,不过也可能是我思想的局限性。总之,就这样吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: