Cocos2dx 개발시 Services 클래스 구현방법 및 돈에 콤마 넣기

2016. 2. 19. 17:03Korean/개발백과사전

프로그래밍을 하다가 보면 똑같은 코드인데 요걸 어떻게 각 클래스 마다 중복시키지 않고 잘 활용할 수 있을까 하는 생각을 하게 됩니다.


이럴때 서비스클래스를 만들어서 이용해 보면 어떨까요?


예를 들어 100000원이 있습니다.

이걸 바로 화면상에 보여주면 일십백천만 이렇게 헤아려야겠지요, 그런데 여기에 100,000원 콤마를 넣어서 표현해 주면 사용자가 알아보기 쉽겠지요?


근데 이 숫자를 콤마를 넣어서 변환해 주는 코드는 여기저기 클래스에서 막 가져다 써야 한다면?


이럴때 서비스 클래스가 좋은것 같아요



구현 코드 입니다.

헤더파일이구요,


class GoldSpoonServices

{

public:

GoldSpoonServices();

~GoldSpoonServices();


// attributes

public:

static void addCommaIntoMoney(const int &iMoney, char *buffer);

static void addKorUnitIntoMoney(const long long &iMoney, std::string &oCurrency);

};


소스파일 입니다.


#include "GoldSpoonServices.h"


GoldSpoonServices::GoldSpoonServices(){}

GoldSpoonServices::~GoldSpoonServices(){}


void GoldSpoonServices::addCommaIntoMoney(const int &iMoney, char *buffer)

{

std::string szMoney = StringUtils::format("%d", iMoney);

const char *stringToMoney= szMoney.c_str();


int length;

int shift;


length= strlen(stringToMoney);

shift = -length;


while (*stringToMoney)

{

*buffer++ = *stringToMoney++;

if (++shift && (shift % 3) == 0)

*buffer++ = ',';

}


*buffer= '\0';

}


void GoldSpoonServices::addKorUnitIntoMoney(const long long &iMoney, std::string &oCurrency)

{

std::string szMoney = StringUtils::format("%lld", iMoney);

int length;

int shift;


/* count given string */

length= szMoney.length();

shift = length;


int idx = 0;

while (idx < length)

{

oCurrency.push_back(szMoney.at(idx++));

if (--shift && (shift % 4) == 0)

{

if(shift == 4)

oCurrency.append("만");

else if (shift == 8)

oCurrency.append("억");

else if (shift == 12)

oCurrency.append("조");

else if (shift == 16)

oCurrency.append("경");

else if (shift == 20)

oCurrency.append("해");

}

}

}


위에 보면 두가지 예제 함수가 있는데요,

addCommaIntoMoney   : 세자리수 마다 콤마를 넣어줍니다. (예, 100,233,133)


addKorUnitIntoMoney   : 한국돈으로 표시해 줍니다. (예, 23억1000만2931원) 이렇게요.



그럼 즐거운 코딩 되세요.