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:
댓글 달기