//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// 60 갑자 환산 클래스
class CKapJa
{
bool bBC; // BC년인가
public:
CKapJa()
{
bBC = false;
}
void SetBC(bool yn)
{
bBC = yn;
}
int GetIndx(int year)
{
if (bBC)
{
// BC1년부터 시작하고 경신년임.
// 30000 = 60으로 나누어 떨어짐.
// 여기에 BC1년 경신56이므로 이를 더해 빼면 값이 순차로 바뀌게 된다.
year = 30056 - year + 1; // 1을 더한 것은 0부터 시작이 아니라 1부터 시작이라서.
year = year % 60;
return year;
}
// AD 경우.
if (year >= 1984)
{
year -= 1984;
year = year % 60;
return year;
}
int n = 1984 - year;
n = n % 60;
n = 60 - n;
return n % 60;
}
// 기준년보다 몇년전 인덱스를 구한다.
int GetIndxBefore(int year, int before)
{
int n = year - before;
if (n > 0)
{
bBC = false;
return GetIndx(n);
}
bBC = true;
n = -n + 1;
return GetIndx(n);
}
String GetName(int idx)
{
int sky = idx % 10;
int earth = idx % 12;
char *ss = "갑을병정무기경신임계";
char *ee = "자축인묘진사오미신유술해";
char buf[10];
strncpy(buf, ss + sky * 2, 2);
strncpy(buf + 2, ee + earth * 2, 2);
buf[4] = 0;
return String(buf);
}
};
CKapJa KapJa;
//---------------------------------------------------------------------------
void TForm1::Add(String s)
{
Memo1->Lines->Add(s);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Lines->Clear();
Add("AD1년~ 신유(57)년부터 시작하고, BC1년 경신년(56)부터 시작함 ");
// 지금 년도 계산
unsigned short year, month, day;
TDateTime t = Now();
t.DecodeDate(&year, &month, &day);
L1->Caption = t.DateString();
Edit1->Text = year;
Add(year);
Add(KapJa.GetName(KapJa.GetIndx(year)));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B1Click(TObject *Sender)
{
bool bc = RBBC->Checked;
KapJa.SetBC(bc);
int year = Edit1->Text.ToIntDef(0);
int idx = KapJa.GetIndx(year);
Add(idx);
Add(KapJa.GetName(idx));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 올해 기준 몇년 전
unsigned short year, month, day;
TDateTime t = Now();
t.DecodeDate(&year, &month, &day);
int n = Edit2->Text.ToIntDef(0);
int idx = KapJa.GetIndxBefore(year, n);
Add(idx);
Add(KapJa.GetName(idx));
}
//---------------------------------------------------------------------------
|