STL MAP 관련해서 질문드립니다.
글쓴이: yoongun35795 / 작성시간: 목, 2014/12/18 - 12:00오후
현재 main부분에서 MAP을 사용하여 Add,Delete,Find를 하려고 합니다.
#pragma once
#include <string>
class Man
{
public:
int m_iseq;
char* m_cname;
char* m_cnumber;
public:
Man(int seq, char* name, char* number);
Man();
~Man();
Man(const Man& cp)
{
this->m_iseq=cp.m_iseq;
this->m_cname=new char[strlen(cp.m_cname)+1];
strcpy(this->m_cname,cp.m_cname);
this->m_cnumber=new char[strlen(cp.m_cnumber)+1];
strcpy(this->m_cnumber,cp.m_cnumber);
}
Man& operator=(const Man& cp)
{
this->m_iseq=cp.m_iseq;
this->m_cname=new char[strlen(cp.m_cname)+1];
strcpy(this->m_cname,cp.m_cname);
this->m_cnumber=new char[strlen(cp.m_cnumber)+1];
strcpy(this->m_cnumber,cp.m_cnumber);
}
public:
void printData();
};#include "Man.h"
using namespace std;
Man::Man()
{
}
Man::Man(int seq,char * name, char * number)
{
m_iseq = seq;
m_cname=new char[strlen(name)+1];
strcpy(m_cname, name);
m_cnumber=new char[strlen(number)+1];
strcpy(m_cnumber,number);
}
void Man::printData()
{
printf("고유번호 : %d\n",m_iseq);
printf("이름 : %s\n",m_cname);
printf("주민번호 : %s\n",m_cnumber);
}
Man::~Man()
{
delete m_cname;
delete m_cnumber;
}Man의 헤더파일과 cpp파일입니다.
다음은 jobkorea라는 헤더파일과 cpp파일입니다.
#pragma once
#include <iostream>
#include "Man.h"
#include <map>
using namespace std;
class jobkorea
{
public:
jobkorea();
~jobkorea();
public:
std::map<int,Man*> m_mapMan;
public:
void AddMan(Man* object);
void DeleteMan(int seq);
void DeleteMan(char* name);
Man* FindMan(Man* object);
std::map<int,Man*>::iterator GetBegin()
{
//std::map<int,Man*>::iterator itr=GetBegin();
m_mapMan.begin();
}
std::map<int,Man*>::iterator GetEnd()
{
//std::map<int,Man*>::iterator itr=GetEnd();
m_mapMan.end();
}
};#include "jobkorea.h"
#include <iostream>
using namespace std;
jobkorea::jobkorea()
{
}
jobkorea::~jobkorea()
{
}
void jobkorea::AddMan(Man* object)
{
std::map<int,Man*>::iterator itr;
std::map<int,Man*> m_mapMan;
int seq;
char name[20];
char number[20];
cout<<"고유번호 : "; cin>>seq;
cout<<"이름 : "; cin>>name;
cout<<"주민등록번호 : "; cin>>number;
cout<<endl;
Man * Object = new Man(seq, name, number);
m_mapMan.insert(make_pair(seq,object));
}
void jobkorea::DeleteMan(int seq)
{
std::map<int,Man*>::iterator itr;
std::map<int,Man*> m_mapMan;
//int seq = 1;
cout<<"삭제할 고유번호 입력 : "; cin>>seq;
cout<<endl;
for(itr=m_mapMan.begin(); itr !=m_mapMan.end(); itr++)
{
if(itr->first==seq)
{
m_mapMan.erase(itr++);
}
else
itr++;
cout<<"일치하는 번호 없음"<<endl;
}
}
/*
void jobkorea::DeleteMan(char* name)
{
std::map<int,Man*>::iterator itr;
std::map<int,Man*> m_mapMan;
char *name = new char[20];
cout<<"삭제할 이름 입력"; cin>>name;
cout<<endl;
for(itr=m_mapMan.begin(); itr !=m_mapMan.end(); itr++)
if(itr->second==)
{
itr= m_mapMan.erase(itr);
}
m_mapMan.clear();
}
*/
Man* jobkorea::FindMan(Man* object)
{
std::map<int,Man*>::iterator itr;
std::map<int,Man*> m_mapMan;
int seq;
seq=1;
char name[20];
char number[20];
Man * Object = new Man(seq, name, number);
cout<<"찾을 번호를 입력하세요"; cin>>seq;
cout<<endl;
for(itr=m_mapMan.begin(); itr !=m_mapMan.end(); itr++)
{
if(itr->first==seq)
{
cout<<itr->second<<endl;
}
}
return object;
}다음은 menu의 헤더파일과 cpp파일입니다.
#pragma once
#include <iostream>
using namespace std;
class CCMymenu
{
public:
CCMymenu();
~CCMymenu();
public:
static int m_select;
public:
void printCCMymenu();
};#include "menu.h"
using namespace std;
CCMymenu::CCMymenu()
{
}
CCMymenu::~CCMymenu()
{
}
void CCMymenu::printCCMymenu()
{
int m_select;
cout<<"1.잡코리아 등록"<<endl;
cout<<"2.잡코리아 삭제"<<endl;
cout<<"3.잡코리아 목록 검색"<<endl;
cout<<"4.잡코리아 전체 출력"<<endl;
cout<<"번호를 선택하세요 :"; cin>>m_select;
cout<<endl;
}다음은 controller의 헤더파일과 cpp파일입니다.
#pragma once
#include "menu.h"
#include "jobkorea.h"
#include "Man.h"
class controller
{
public:
controller(CCMymenu* menu, jobkorea* job);
~controller();
public:
jobkorea* m_job;
CCMymenu* m_menu;
int m_select;
public:
void PrintMenu();
void Action();
void AddJobKorea_Man();
void PrintJobkorea_Man();
};#include "controller.h"
controller::controller(CCMymenu* menu, jobkorea* job)
{
CCMymenu * m_menu = new CCMymenu();
jobkorea * m_job = new jobkorea();
}
controller::~controller(void)
{
}
void controller::AddJobKorea_Man()
{
}
void controller::PrintJobkorea_Man()
{
}
void controller::PrintMenu()
{
m_menu->printCCMymenu();
}
void controller::Action()
{
int m_select;
m_select=1;
system("cls");
Man * object = new Man();
jobkorea * p = new jobkorea();
switch(m_select)
{
case 1:
p->AddMan(object);
break;
case 2:
p->DeleteMan(m_select);
break;
case 3:
p->FindMan(object);
break;
case 4:
return;
break;
}
return;
}main.cpp입니다.
#include "menu.h"
#include "controller.h"
#include "jobkorea.h"
int main(void)
{
CCMymenu * mymenu = new CCMymenu();
jobkorea * myjob = new jobkorea();
controller * ob = new controller(mymenu, myjob);
while (1)
{
ob->PrintMenu();
ob->Action();
}
return 0;
}컴파일을 하면 PrintMenu를 첫 화면에 보여주고 입력하는 값(ex:1,2,3,4)등에 따라 Action을 취하도록 하여 해당 함수를 호출하는 방식입니다.
질문사항
1. jobkorea.cpp파일에서 DeleteMan과 FindMan의 seq를 재정의하라고 나오는데 제가 임의대로 seq=1로 재정의 하는 방법 말고 없나요?
2. 전부다 작성하고 컴파일을 하면 계속 AddMan만 동작하고 나머지는 동작할 생각도 안하는데 무엇이 문제인지 알고싶습니다.
3. AddMan,DeleteMan,FindMan에서 MAP은 저런 형식으로 쓰는게 맞는건가요?
4. 실행은 되는데 왜 while문이나 case를 타지 않는지 궁금합니다.
Forums:


댓글 달기