STL MAP 관련해서 질문드립니다.

yoongun35795의 이미지

현재 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를 타지 않는지 궁금합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.