|
void CMyDBDlg::OnBnClickedAddmem() { UpdateData(true); MyDocument *doc = GetDocument();
if(!doc->AddMem(e_id,e_pw,e_name)) { AfxMessageBox(_T("중복된아이디")); }
e_id.Empty(); e_pw.Empty(); e_name.Empty();
ShowList(); UpdateData(false); } |
추가 버튼을 누르면 입력 받은 아이디, 패스워드, 이름 MyDocument의 AddMem 메쏘드의 인자로 전달한다.
bool MyDocument::AddMem(CString id, CString pw , CString name) { if(IdCompare(id)) { CMember *mem = new CMember(0); CMemInfo *meminfo = new CMemInfo(0); mem->Open(); meminfo->Open();
mem->AddNew(); meminfo->AddNew();
mem->SetId(id); mem->SetPw(pw); meminfo->SetId(id); meminfo->SetName(name); meminfo->Setstatus(0); //*************************************임시보여주기...................*************/////// meminfo->SetIp(L"192.168.34.62"); meminfo->SetChat_Port(10300); meminfo->SetSmsg_Port(10200); meminfo->SetFile_Port(10400); meminfo->SetSts_Port(10500); meminfo->SetKeepAliveTime(0); //*************************************임시보여주기...................*************/////// mem->Update(); meminfo->Update(); mem->Close(); meminfo->Close(); delete meminfo; delete mem;
return true; } else { return false; } } |
Open() 으로 DB를 열고 레코드를 추가하는 AddNew()를 쓴다.
mem 테이블에 전달 받은 id, pw를 meminfo 테이블에 id와 name을 넣어준다.
Update()를 호출하여 DB를 업데이트 해주고 열어놓은 DB를 닫는다.
-회원 삭제 부분
void CMyDBDlg::OnBnClickedDelmem() { // TODO: 여기에컨트롤알림처리기코드를추가합니다. this->UpdateData(true); MyDocument *doc = GetDocument();
if(doc->DelMem(e_id)) { AfxMessageBox(_T("삭제되었습니다.")); } else { AfxMessageBox(_T("없는아이디")); } ShowList(); this->UpdateData(false); } |
삭제 버튼을 누르면 입력 받은 아이디를 MyDocument의 DelMem 메쏘드의 인자로 전달한다.
bool MyDocument::DelMem(CString id) { WCHAR str[20];
CMember *mem = new CMember(0); if(!IdCompare(id)) //아이디를비교해서넘어온아이디가있을경우if문수행 { mem->Open();
wsprintf(str,L"id = '%s'",id); mem->m_strFilter = str; mem->Requery(); while(!mem->IsEOF()) { mem->Delete(); mem->MoveNext(); } mem->Close(); delete mem; return true; //삭제됬으면true } else { delete mem; return false; //아이디가없으면false } } |
넘겨받은 id를 테이블에서 검색Requery() 해서 삭제Delete() 한다.
m_strFilter에 조건문을 넣어준다.
IsEOF는 레코드의 끝.
MoveNext는 다음 레코드.
-로그인 부분
void CMyDBDlg::OnBnClickedLogin() { this->UpdateData(true); MyDocument *doc = GetDocument(); switch(doc->Login(e_id,e_pw)) { case 0: AfxMessageBox(_T("없는아이디")); break; case 1: AfxMessageBox(_T("로그인성공")); b_addmem.EnableWindow(false); b_delmem.EnableWindow(false); b_login.EnableWindow(false); b_logout.EnableWindow(true); ec_id.EnableWindow(false); ec_pw.EnableWindow(false); ec_name.EnableWindow(false); break; case 2: AfxMessageBox(_T("비밀번호를확인하세요"));break; } this->UpdateData(false); } |
로그인 버튼을 누르면 입력 받은 아이디와 패스워드를 MyDocument의 Login 메쏘드의 인자로 전달한다.
int MyDocument::Login(CString id, CString pw) { if(IdCompare(id)) { return 0; //아이디가없으면0 반환 } else { CMember *mem = new CMember(0); mem->Open();
WCHAR str[20]; wsprintf(str,L"id = '%s'",id); mem->m_strFilter = str; mem->Requery();
if(mem->GetId() == id) { if(mem->GetPw() == pw) { ChangeStatus(mem->GetId(),1); mem->Close(); delete mem; return 1; //로그인성공 } else { mem->Close(); delete mem; return 2; //비밀번호틀림 } } mem->Close(); delete mem;
return 0; } } |
검색부분은 삭제부분과 동일하다. 로그인에 성공하면 ChaneStatus함수로 상태를 바꿔주고 1을 리턴 한다.
void MyDocument::ChangeStatus(CString id, int status) { CMemInfo *meminfo = new CMemInfo(0); meminfo->Open();
WCHAR str[20]; wsprintf(str,L" id = '%s' ",id); meminfo->m_strFilter = str; meminfo->Requery();
meminfo->Edit(); meminfo->Setstatus(status); meminfo->Update();
meminfo->Close(); delete meminfo; } |
MemInfo 테이블에 상태를 바꿔 준다.
-로그 아웃 부분
void CMyDBDlg::OnBnClickedLogout() { MyDocument *doc = GetDocument();
doc->LogOut(e_id);
b_addmem.EnableWindow(true); b_delmem.EnableWindow(true); b_login.EnableWindow(true); b_logout.EnableWindow(false); ec_id.EnableWindow(true); ec_pw.EnableWindow(true); } |
로그아웃 버튼을 누르면 입력 받은 아이디를 MyDocument의 LogOut 메쏘드의 인자로 전달한다.
void MyDocument::LogOut(CString id) { if(IdCompare(id)) { return ; //아이디가없으면0 반환 } else { CMemInfo *meminfo = new CMemInfo(0); meminfo->Open(); WCHAR str[20]; wsprintf(str,L"id = '%s'",id); meminfo->m_strFilter = str; meminfo->Requery();
ChangeStatus(meminfo->GetId(),0);
meminfo->Close(); delete meminfo; } } |
ChaneStatus함수로 상태를 바꿔준다.
-아이디가 유효한지 검사해주는 함수
bool MyDocument::IdCompare(CString id) { CMember *mem = new CMember(0); mem->Open();
while(!mem->IsEOF()) { if(mem->GetId() == id) { mem->Close(); delete mem; return false; //같은아이디가있으면false 없으면true } mem->MoveNext(); } mem->Close(); delete mem; return true; } |
-회원 리스트를 리스트뷰에 출력해준다.
void CMyDBDlg::ShowList() { MyDocument *doc = GetDocument();
m_list.DeleteAllItems(); umap *memlist = doc->MemList(); userinfomap *meminfolist = doc->MemInfoList(); CString id; CString pw; //변수 선언 나머지 생략…
map<int, User*>::iterator it; map<int, UserInfo*>::iterator userinfoit;
it = memlist->begin(); userinfoit = meminfolist->begin();
while(it != memlist->end()) { //리스트 뷰 출력 부분 나머지 생략…
id = (*memlist)[cnt]->GetId(); pw = (*memlist)[cnt]->GetPw();
m_list.InsertItem(cnt, id); m_list.SetItemText(cnt, 1, pw);
cnt++; it++; } } |
MyDocument에 MemList()를 호출하여 맵으로 되어있는 회원 리스트를 리턴 받는다.
umap* MyDocument::MemList() { CMember *mem = new CMember(0); mem->Open(); int cnt=0;
//user컨테이너에보관된모든user개체소멸 user.clear(); while(!mem->IsEOF()) { user[cnt] = new User(mem->GetId(), mem->GetPw()); mem->MoveNext(); cnt++; } mem->Close(); delete mem; return &user; } |
테이블에 저장되어 있는 모든 회원들을 맵에 저장하여 리턴 한다.
*** 메시지, 파일을 데이터 베이스에 읽고 쓰는 것도 위와 동일하다. (파일은 저장되어 있는 폴더의 경로를 저장) 5. 실행 화면
|