#include <iostream>
class Counter {
public:
Counter(const int MAX = 9999);
void reset() { count = 0; };
void incrFunction(const char length);
bool overflow(int example) const;
int getCountofCounter() const { return count; };
private:
int MAXofCounter;
int count;
void incr1(const int numb) { count = count + numb * 1; };
void incr10(const int numb) { count = count + numb * 10; };
void incr100(const int numb) { count = count + numb * 100; };
void incr1000(const int numb) { count = count + numb * 1000; };
};
Counter::Counter(const int MAX) : MAXofCounter(MAX), count(0) {};
bool Counter::overflow(int example) const {
if(example == 0) {
if(MAXofCounter < count) std::cout << "계산기 범위를 초과 하였습니다" << "\n";
else std::cout << "계산기 범위를 초과 하지 않았습니다" << "\n";
}
return count > MAXofCounter;
}
void Counter::incrFunction(const char length) {
int numb;
std::cout << "1의 자리를 입력해주세요 1 ~ 9 " << "\n";
std::cin >> numb;
while(numb > 9 || numb < 0) {
std::cout << "다시 입력 해주세요" << "\n";
std::cin >> numb;
}
if(numb > 0 && numb < 10) {
switch (length) {
case 'a' :
incr1(numb);
break;
case 's' :
incr10(numb);
break;
case 'd' :
incr100(numb);
break;
case 'f' :
incr1000(numb);
break;
default :
std::cout << "오류 발생" << "\n";
break;
}
}
std::cout << "현재 계산 :" << getCountofCounter() << std::endl;
};
int main() {
Counter counter;
char calculator;
while (calculator != 'q') {
std::cout << "명령어를 입력해주세요" << "\n"
<< " '1' 의자리 : 'a' | '10' 의 자리 : 's' | '100' 의 자리 : 'd' | "
"'1000'의 자리 : 'f' | 초과검사 : 'o' | 종료 : 'q' " << "\n";
std::cin >> calculator;
if(calculator == 'a' || calculator == 's' || calculator == 'd' || calculator == 'f') {
counter.incrFunction(calculator);
if(counter.overflow(1)) {
char reset;
std::cout << "리셋 하시겠습니까 ? Y/N" << "\n";
std::cin >> reset;
if(reset == 'Y') counter.reset();
else break;
}
} else if(calculator == 'o') {
if(counter.overflow(0)) {
char reset;
std::cout << "리셋 하시겠습니까 ? Y/N" << "\n";
std::cin >> reset;
if(reset == 'Y') counter.reset();
else break;
}
} else {
std::cout << "잘못된 입력입니다.";
}
};
std::cout << "계산기 종료" << std::endl;
return 0;
};```