현재 위치 - 중국 분류 정보 발표 플랫폼 - 애완동물 탁송 - C++ 프로그래밍 문제

C++ 프로그래밍 문제

#include < Iostream.h>

#include < Fstream.h>

#include < String.h>

#include < Conio.h>

class animal

{

protected:

char * m _ pname;

public:

animal ()

{

m _ pname = ;

}

animal (char * p)

{

m _ pname = newchar [strlen (p)+1];

strcpy(m_pName, p) :

}

virtual ~ animal ()

{

if (m _ pname)

delete m _ pname;

}

constchar * getname () {return m _ pname; }

virtual char animalType()=; //순수 가상 함수-인터페이스, 하위 클래스는

virtual void WhoAmI()=; //순수 가상 함수-인터페이스, 하위 클래스는

};

classcat: public animal

{

public:

cat (): animal () {}

cat ( < 동물 유형: 고양이 이름: "< < M_pName;

}

virtualchar animaltype ()

{

return' c';

}

};

classdog: public animal

{

public:

dog (): animal () {}

dog ( < 동물 유형: 개 이름: "< < M_pName;

}

virtualchar animaltype ()

{

return' d';

}

virtual ~Dog(){}

};

classmonkey: public animal

{

public:

monkey (): animal () {}

; < 동물 유형: 원숭이 이름: "< < M_pName;

}

virtualchar animaltype ()

{

return' m';

}

};

classzoo

{

private:

unsigned int m _ max animals;

unsigned int m_NumAnimals;

Animal* *m_pResidents;

char m _ SZ 파일 이름 [256];

public:

zoo (unsigned int max)

{

m _ maxanimals = max;

m_NumAnimals = ;

m _ presidents = new animal * [m _ max animals];

memset (m _ presidents, , sizeof (animal *) * m _ max animals);

m_szfileName[] =;

};

void freeallanimals ()

{

for (unsigned int I = ; I< M_MaxAnimals; +I)

{

if (m _ presidents)

{

delete m _ presidents;

m_pResidents = ;

}

}

m_NumAnimals = ;

}

~ zoo ()

{

freeallanimals ();

delete m_pResidents;

}

unsigned int accept (animal * d); //빈 열 찾기

void Release(unsigned int pos); //동물 방출

void ListAnimals (); //Zoo 의 동물 보이기

void set filename (constchar * pf name); //파일 이름 설정

bool Save (); //파일에 동물 데이터 쓰기

bool Load (); //파일에서 동물 데이터 로드

};

unsigned intzoo:: accept (animal * d)

{

if (m _ num animals = = m _ maxanimals //반환 열 번호 은 이 동물이 열에 배치되지 않았음을 나타냅니다

p>++m_NumAnimals;

int i=;

while (m_pResidents! = NULL)

{

++i;

}

*m_pResidents = d;

리턴++I; //열 번호 1 부터 시작

}

void zoo:: 릴리즈 (unsigned int pos)

{

if (pos > M_MaxAnimals)

return;

-pos; //배열에서 일련 번호 가져오기

if (m _ presidents [pos])

{

animal * p = m _ presidents [pos]

m_pResidents[pos] = ;

-m _ numanimals;

cout < < "\n 열 해제" < < Pos < < "속의 동물, 그 동물의 정보:";

p-> WhoAmI ();

delete p;

}

else

cout< < "지정된 열에 동물이 없습니다. 해제 작업이 실패했습니다. \n"; //방출되지 않은 동물

}

voidzoo:: listanimals ()

{

if (m _ numanimals > )

{

for (unsigned int i=; I< M_MaxAnimals; +I)

{

if (m _ presidents)

{

cout < < I+1 < < "칼럼의 동물 정보:";

m_pResidents[i]-> WhoAmI ();

cout < < Endl;

}

}

}

else

cout < < "< 동물원에 동물이 없어요! > " < < Endl;

}

void zoo:: set filename (constchar * pfname)//파일 이름 설정

{

strcpy (m _;

}

boolzoo:: save ()

{

if (m _ SZ filename [] = = )

save

ofstream fout (m _ SZ 파일 이름);

if (fout.is _ open () = = false)

복귀 false;

// 먼저 총 수 저장

fout < < M_NumAnimals < < Endl;

for (unsigned int i=; I< M_MaxAnimals; +I)

{

if (m _ presidents)

{

//열 번호 동물 유형 동물 이름

fout < < I < < "< < M_pResidents[i]-> AnimalType ();

fout < < "< < M_pResidents[i]-> GetName() < < Endl;

}

}

fout.close ();

return true;

}

boolzoo:: load ()

{

if (m _ SZ filename [] = = )

sp

ifstreamfin (m _ SZ 파일 이름);

if (fin.is _ open () = = false)

return false;

bool bRet = true;

unsigned int count = ;

핀 > > Count;

if (count > M_MaxAnimals) // 잘못된 데이터

bRet = false;

else

{

for (unsigned int I = ; I< Count; ++i)

{

unsigned int index = ;

핀 > > Index; //동물이 있는 열 번호 읽기

if (index > = m_MaxAnimals) // 열 번호 확인

{

bRet = false;

break; // break for 루프

}

Animal* p = ;

char AnimalType;

char szAnimalName[64];

핀 > > AnimalType > > SzAnimalName;

스위치 (animaltype)

{

case' c': p = new cat (szanimalname); 브레크;

case' d': p = new dog (szanimalname); 브레크;

case' m': p = new monkey (szanimalname); 브레크;

default: break;

}

if (p = = )

{

bret = false;

break; // break for 루프

}

m_pResidents[index] = p;

}

}

fin.close ();

if (bRet == false) // 읽기 실패, 설정된 모든 객체 해제

freeAllAnimals ();

else

m_NumAnimals = count;

return bRet;

}

intmain (intargc, char * argv [])

{

animal * p;

Zoo zoo(2);

bool bExit = false;

while (b exit = = false)

{

bool bgoodcommand = true;

char command[128];

char Name[64];

char AnimalTy