#include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string.h>
using namespace std;
/*
구형 C++ 컴파일러를 사용한다면 위의 코드를 다음과 같이 바꿉니다.
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <string.h>
// using namespace std; // ERROR MESSAGE in old version of compiler.
*/
class StudentInfo{
private:
//학번 이름 주민번호 주소 학과
char no[16];
char name[32];
char idenNumber[64];
char address[64];
char major[32];
public:
//생성자
StudentInfo( char* ino = "", char* iname = "", char* iidennum = "", char* iaddr = "",
char* imaj = "" ){
strcpy( no, ino );
strcpy( name, iname );
strcpy( idenNumber, iidennum );
strcpy( address, iaddr );
strcpy( major, imaj );
}
// 객체를 출력스트림에 쓰기
friend ostream& operator << ( ostream& os, const StudentInfo& rcs ){
os << rcs.no << "\t" << rcs.name << "\t" << rcs.idenNumber << "\t"
<< rcs.address << "\t" << rcs.major << endl;
return os;
}
// 입력스트림으로부터 객체를 읽기
friend istream& operator >> ( istream& is, StudentInfo& rcs ){
is >> rcs.no >> rcs.name >> rcs.idenNumber >> rcs.address >> rcs.major;
return is;
}
};
/* 아래 메인함수는 명령라인에 전달된 입력화일의 정보들을 객체의 배열로 읽어들인 후
그 결과를 출력하는 예입니다. */
int main(int narg, char *argv[])
{
// 1. 명령라인에 읽어들일 화일명이 입력되었는지 확인합니다.
if( narg < 2 ){
cout << "명령어 다음에 화일명이 빠졌습니다.[사용법: 명령어+화일명 ]\n " << endl;
getch();
exit( EXIT_FAILURE );
}
else if( narg > 2 ){
cout << "명령라인에 불필요한 매개변수가 포함되어 있습니다.[사용법: 명령어+화일명]\n " << endl;
getch();
exit( EXIT_FAILURE );
}
// 2. 5000여명에 대한 정보를 저장할 배열을 동적메모리 공간에서 확보합니다.
StudentInfo* infos = new StudentInfo[5000];
if( infos == 0 ){
cout << "메모리를 확보할 수 없습니다. " << endl;
getch();
exit( EXIT_FAILURE );
}
// 3. 입력화일 스트림을 생성하고 읽어들여 위의 배열에 순차적으로 저장합니다.
// argv[1] : 명령라인(command line )에 전달된 입력화일명
ifstream inputFile( argv[1] );
int index = 0;
if( !inputFile ){
cout << "입력화일 \"" << argv[1] << "\"를/을 열 수 없습니다.파일명이나 패스가
올바른지 확인이 필요합니다." << endl;
getch();
exit( EXIT_FAILURE );
}
while( inputFile ){
inputFile >> infos[index]; // friend 함수 "operator >>" 호출
index++;
}
inputFile.close();
// 4. 읽어들인 만큼 배열에 저장된 정보를 콘솔( 표준출력스트림 cout )에 출력하고
// 결과를 봅니다..
for( int i = 0; i < index; i++ )
cout << infos[i];
getch();
return 1;
}