C++로 작성했고요
list를 이용한 완전 간단 회원 관리 프로그램입니다. ㅎㅎ
그냥 단순히 list 클래스와 iterator를 연습해보고자 만든 것이고요...
파일 저장 기능... 이딴 거 없습니다.
list<>.begin()과 list<>.end(), list<>::iterator
이 3가지의 사용 방법을 익혀보고자 만들어 봤습니다.
소스 파일 공개합니다.
// stdafx.h
// 작성: tapitolife (http://tapito.tistory.com/), 트위터: @tapitolife
// 내용: 각 파일의 공통적인 내용을 정의합니다.
#ifndef __STDAFX_H
#define __STDAFX_H
#include <iostream>
#include <fstream>
#include <memory>
#include <cstring>
#include <cstdlib>
#include <list>
using namespace std;
#ifndef __in
#define __in
#endif
#ifndef __out
#define __out
#endif
#endif
// main.cpp
// STL 약간을 활용한 완전 간단 회원 관리 프로그램입니다.
#include "stdafx.h"
#include "tapito_member.h"
#include "tapito_memberlist.h"
#include <iomanip>
#include >conio.h>
void member_input(tapito::tapito_memberlist& tmlist, tapito::tapito_member& tm);
void member_remove(tapito::tapito_memberlist& tmlist, string& name);
void member_print(tapito::tapito_memberlist& tmlist);
void main()
{
tapito::tapito_memberlist tmlist;
tapito::tapito_member tm;
string str;
int c = '\0';
while(true)
{
cout<<"A. 회원 추가"<<endl;
cout<<"B. 회원 제거"<<endl;
cout<<"C. 회원 목록"<<endl;
cout<<"X. 종료"<<endl;
cout<<"어느것? < ";
c = _getch();
cout<<endl;
switch(c)
{
case 'A':
case 'a':
member_input(tmlist, tm);
break;
case 'B':
case 'b':
member_remove(tmlist, str);
break;
case 'C':
case 'c':
member_print(tmlist);
break;
case 'X':
case 'x':
return;
default:
cout<<"지금 뭐임? 다시 입력하셈."<<endl;
break;
}
}
}
void member_input(tapito::tapito_memberlist& tmlist, tapito::tapito_member& tm)
{
char str[512];
cout<<"이름: ";
cin.getline(str, 512);
tm.setname(string(str));
cin.clear();
cout<<"전번: ";
cin.getline(str, 512);
tm.setphone1(string(str));
cout<<"폰번: ";
cin.getline(str, 512);
tm.setphone2(string(str));
cout<<"집주소: ";
cin.getline(str, 512);
tm.setaddress(string(str));
cout<<"이메일: ";
cin.getline(str, 512);
tm.setemail(string(str));
cout<<"트위터: ";
cin.getline(str, 512);
tm.settwitter(string(str));
cout<<"블로그: ";
cin.getline(str, 512);
tm.setblog(string(str));
tmlist.appendmember(tm);
}
void member_remove(tapito::tapito_memberlist& tmlist, string& name)
{
char str[512];
cout<<"제거할 회원 이름";
cin.getline(str, 512);
cout<<endl;
tmlist.deletemember(name);
name.clear();
cout<<"제거했습니다. ㅋ"<<endl;
}
void member_print(tapito::tapito_memberlist& tmlist)
{
list<tapito::tapito_member>::iterator it;
cout.clear();
cout.setf(ios_base::left);
cout<<setw(10)<<"이름"<<setw(15)<<"전번"<<setw(15)<<"폰번"<<setw(10)<<"주소"<<setw(10)<<"이메일"<<setw(10)<<"트위터"<<setw(10)<<"블로그"<<endl;
for(it = tmlist.getbegin(); it != tmlist.getend(); it++)
{
cout<<setw(10)<<(it->getname().data())<<setw(15)<<(it->getphone1().data())<<setw(15)<<(it->getphone2().data())<<setw(10)<<(it->getaddress().data())<<setw(10)<<(it->getemail().data())<<setw(10)<<(it->gettwitter().data())<<setw(10)<<(it->getblog().data())<<endl;
}
}
#ifndef __tapito_member_h
#define __tapito_member_h
#include "stdafx.h"
namespace tapito
{
// tapito_member
// 개별 회원의 정보를 나타내는 클래스입니다.
// 이름-전번-폰번-주소-이메일-트위터-블로그의 순입니다.
class tapito_member
{
public:
//friend bool operator ==(tapito_member & r1, tapito_member & r2);
public:
tapito_member();
tapito_member(const tapito_member &);
// 이름을 가져옵니다.
string getname();
// 이름을 설정합니다.
void setname(string &);
// 전번을 가져옵니다.
string getphone1();
// 전번을 설정합니다.
void setphone1(string &);
// 폰번을 가져옵니다.
string getphone2();
// 폰번을 설정합니다.
void setphone2(string &);
// 주소를 가져옵니다.
string getaddress();
// 주소를 설정합니다.
void setaddress(string &);
// 이메일을 가져옵니다.
string getemail();
// 이메일을 설정합니다.
void setemail(string &);
// 트위터 ID를 가져옵니다.
string gettwitter();
// 트위터 ID를 설정합니다.
void settwitter(string &);
// 블로그 주소를 가져옵니다.
string getblog();
// 블로그 주소를 설정합니다.
void setblog(string &);
public:
bool operator ==(tapito_member& m);
bool operator ==(const tapito_member& m);
private:
string member_name;
string member_phone1;
string member_phone2;
string member_address;
string member_email;
string member_twitter;
string member_blog;
};
}
#endif
#include "tapito_member.h"
tapito::tapito_member::tapito_member()
{
}
tapito::tapito_member::tapito_member(const tapito::tapito_member& source)
{
this->member_name = source.member_name;
this->member_phone1 = source.member_phone1;
this->member_phone2 = source.member_phone2;
this->member_address = source.member_address;
this->member_twitter = source.member_twitter;
this->member_blog = source.member_blog;
}
string tapito::tapito_member::getname()
{
return this->member_name;
}
void tapito::tapito_member::setname(string& value)
{
this->member_name = value;
}
string tapito::tapito_member::getphone1()
{
return this->member_phone1;
}
void tapito::tapito_member::setphone1(string& value)
{
this->member_phone1 = value;
}
string tapito::tapito_member::getphone2()
{
return this->member_phone2;
}
void tapito::tapito_member::setphone2(string& value)
{
this->member_phone2 = value;
}
string tapito::tapito_member::getaddress()
{
return this->member_address;
}
void tapito::tapito_member::setaddress(string& value)
{
this->member_address = value;
}
string tapito::tapito_member::getemail()
{
return this->member_email;
}
void tapito::tapito_member::setemail(string& value)
{
this->member_email = value;
}
string tapito::tapito_member::gettwitter()
{
return this->member_twitter;
}
void tapito::tapito_member::settwitter(string& value)
{
this->member_twitter = value;
}
string tapito::tapito_member::getblog()
{
return this->member_blog;
}
void tapito::tapito_member::setblog(string& value)
{
this->member_blog = value;
}
bool tapito::tapito_member::operator ==(tapito_member& m)
{
return (
(this->member_name.compare(m.member_name) == 0) &&
(this->member_phone1.compare(m.member_phone1) == 0) &&
(this->member_phone2.compare(m.member_phone2) == 0) &&
(this->member_address.compare(m.member_address) == 0) &&
(this->member_email.compare(m.member_email) == 0) &&
(this->member_twitter.compare(m.member_twitter) == 0) &&
(this->member_blog.compare(m.member_blog) == 0)
);
}
bool tapito::tapito_member::operator ==(const tapito_member& m)
{
return (
(this->member_name.compare(m.member_name) == 0) &&
(this->member_phone1.compare(m.member_phone1) == 0) &&
(this->member_phone2.compare(m.member_phone2) == 0) &&
(this->member_address.compare(m.member_address) == 0) &&
(this->member_email.compare(m.member_email) == 0) &&
(this->member_twitter.compare(m.member_twitter) == 0) &&
(this->member_blog.compare(m.member_blog) == 0)
);
}
#ifndef __tapito_memberlist_h
#define __tapito_memberlist_h
#include "stdafx.h"
#include "tapito_member.h"
namespace tapito
{
// tapito_memberlist
// 회원 목록을 저장하는 클래스입니다.
class tapito_memberlist
{
public:
tapito_memberlist();
tapito_memberlist(const tapito_memberlist &);
// 주어진 이름을 갖는 회원 목록을 찾습니다.
void searchmember(__in string, __out list<tapito_member> *);
// 주어진 이름을 갖는 회원을 모두 삭제합니다.
void deletemember(__in string);
// 지정한 회원을 삭제합니다.
void deletemember(__in tapito_member);
// 지정한 회원을 추가합니다.
void appendmember(__in tapito_member);
// 첫 번째 회원을 지정하는 반복자를 가져옵니다.
list<tapito_member>::iterator getbegin();
// 마지막 번째 회원을 지정하는 반복자를 가져옵니다.
list<tapito_member>::iterator getend();
private:
list<tapito_member> member;
};
}
#endif
#include "tapito_memberlist.h"
tapito::tapito_memberlist::tapito_memberlist()
{
}
tapito::tapito_memberlist::tapito_memberlist(const tapito_memberlist& source)
{
this->member.clear();
this->member = source.member;
}
void tapito::tapito_memberlist::searchmember(__in string name, __out list<tapito_member> * ret)
{
// 일단 ret가 NULL이면 즐~
if(ret == NULL) return; // 즐~
// 버퍼 지우고
ret->clear();
// 반복자를 이용합니다.
// 반복자(iterator)란,
// 배열에서 특정 원소를 가리키는 것인데 루프가 한번 돌 때 마다 인덱스 값이 바뀌어서
// 가리키는 원소가 달라집니다.
list<tapito_member>::iterator it;
// C++에서는 begin이 반환하는 첫 번째 원소를 가리키는 값을 가지고
// end()가 가리키는 끝 원소에 도달할 때까지 it의 번호를 늘려나갑니다.
for(it = this->member.begin(); it != this->member.end(); it++)
{
if((it->getname().compare(name)) == 0) ret->push_back(*it); // 이름 같으면 리턴 버퍼에 추가
}
}
void tapito::tapito_memberlist::deletemember(__in string name)
{
// 역시 반복자를 이용해봅니다.
list<tapito_member>::iterator it;
for(it = this->member.begin(); it != this->member.end(); it++)
{
if(it->getname().compare(name) == 0) // 이름 같으면 제거 작업
{
tapito_member tm = *it;
this->member.remove(tm);
}
}
}
void tapito::tapito_memberlist::deletemember(__in tapito_member member)
{
this->member.remove(member);
}
void tapito::tapito_memberlist::appendmember(__in tapito_member member)
{
this->member.push_back(member);
}
list<tapito::tapito_member>::iterator tapito::tapito_memberlist::getbegin()
{
return this->member.begin();
}
list<tapito::tapito_member>::iterator tapito::tapito_memberlist::getend()
{
return this->member.end();
}
'자작 프로그램' 카테고리의 다른 글
문자열 크로스 예제 (0) | 2011.03.05 |
---|---|
문자열 빈도 프로그램 (0) | 2011.02.28 |
FindFirstFile, FindNextFile, FindClose 예제 (0) | 2011.02.28 |
대/소문자 변환 예제 (0) | 2011.02.27 |
UK 검사의 개요와 검사 프로그램 구현 (10) | 2011.02.08 |