아래는 주어진 학생 관리 프로그램의 코드를 한 줄 한 줄 꼼꼼하게 분석한 결과입니다. 모든 코드와 주석을 포함하며, 세부적으로 설명하겠습니다.
#define NAME_SIZE 32
#define ADDRESS_SIZE 128
#define PHONE_SIZE 14 // 000-000-0000\n
#define STUDENT_MAX 10
#define
매크로 상수 정의 NAME_SIZE
: 학생 이름 최대 길이 설정(32바이트). ADDRESS_SIZE
: 학생 주소 최대 길이 설정(128바이트). PHONE_SIZE
: 학생 전화번호 최대 길이 설정(14바이트). STUDENT_MAX
: 등록 가능한 최대 학생 수 설정(10명). struct _tagStudent
{
char strName[NAME_SIZE]; // 학생 이름
char strAddress[ADDRESS_SIZE]; // 학생 주소
char strPhoneNumber[PHONE_SIZE]; // 학생 전화번호
int iNumber; // 학번(학생 고유 번호)
int iKor; // 국어 점수
int iEng; // 영어 점수
int iMath; // 수학 점수
int iTotal; // 총점
int fAvg; // 평균 점수
};
_tagStudent
는 하나의 학생 정보를 저장하기 위한 구조체입니다. char[]
)은 고정 크기로 이름, 주소, 전화번호를 저장합니다. int
) 변수로 관리합니다. enum Menu
{
MENU_NONE,
MENU_INSERT,
MENU_DELETE,
MENU_SEARCH,
MENU_OUTPUT,
MENU_EXIT
};
Menu
열거형은 각 메뉴를 숫자로 식별할 수 있도록 정의되었습니다. MENU_NONE
: 초기값 (사용하지 않음). MENU_INSERT
: 학생 추가. MENU_DELETE
: 학생 삭제. MENU_SEARCH
: 학생 검색. MENU_OUTPUT
: 학생 목록 출력. MENU_EXIT
: 프로그램 종료. int main()
{
_tagStudent tStudentArr[STUDENT_MAX] = {}; // 학생 정보를 저장할 배열 (최대 10명).
int iStudentCount = 0; // 현재 등록된 학생 수.
int iStdNumber = 1; // 학번 관리용 변수 (1부터 시작).
char strName[NAME_SIZE] = {}; // 검색/삭제에 사용할 임시 이름 저장 공간.
while (true) // 프로그램이 종료될 때까지 반복.
main
함수 tStudentArr
: 학생 정보를 저장하는 구조체 배열, 최대 크기는 STUDENT_MAX
(10). iStudentCount
: 현재 등록된 학생 수를 추적하는 변수. iStdNumber
: 학번 관리 변수, 등록 시 자동으로 증가. strName
: 임시로 이름을 저장할 배열. while (true)
: 프로그램이 종료될 때까지 무한 반복 실행. system("cls");
system("cls")
: Windows 콘솔 화면을 지웁니다. (다른 플랫폼에서는 동작하지 않을 수 있음). cout << "1. 학생등록" << endl;
cout << "2. 학생삭제" << endl;
cout << "3. 학생탐색" << endl;
cout << "4. 학생출력" << endl;
cout << "5. 종료" << endl;
cout << "메뉴를 선택하세요" << endl;
int iMenu;
cin >> iMenu;
cin >> iMenu
: 사용자가 선택한 메뉴 번호를 입력받습니다. if (cin.fail())
{
cin.clear();
cin.ignore(1024, '\n');
continue;
}
cin.fail()
: 입력이 잘못되었는지 확인. (예: 정수가 아닌 값을 입력). cin.clear()
: 에러 상태를 초기화. cin.ignore(1024, '\n')
: 입력 버퍼를 비워 다음 입력을 받을 수 있도록 처리. if (iMenu == MENU_EXIT)
{
break;
}
MENU_EXIT
(5번 메뉴)이 선택되면 break
로 루프를 종료합니다. MENU_INSERT
)case MENU_INSERT:
system("cls");
cout << "==================== 학생추가 ====================" << endl;
if (iStudentCount == STUDENT_MAX)
{
break;
}
MENU_INSERT
가 선택되었을 때 실행됩니다. iStudentCount
가 STUDENT_MAX
에 도달하면 더 이상 추가하지 않고 종료. cout << "이름 : ";
cin >> tStudentArr[iStudentCount].strName;
cin.ignore(1024, '\n');
cin
으로 이름을 입력받고, 입력 버퍼를 비워 추가 입력 충돌을 방지합니다. cout << "주소 : ";
cin.getline(tStudentArr[iStudentCount].strAddress, ADDRESS_SIZE);
cout << "전화번호 : ";
cin.getline(tStudentArr[iStudentCount].strPhoneNumber, PHONE_SIZE);
cin.getline
: 공백 포함 문자열 입력. cout << "국어 : ";
cin >> tStudentArr[iStudentCount].iKor;
cout << "영어 : ";
cin >> tStudentArr[iStudentCount].iEng;
cout << "수학 : ";
cin >> tStudentArr[iStudentCount].iMath;
tStudentArr[iStudentCount].iTotal =
tStudentArr[iStudentCount].iKor +
tStudentArr[iStudentCount].iEng +
tStudentArr[iStudentCount].iMath;
tStudentArr[iStudentCount].fAvg =
tStudentArr[iStudentCount].iTotal / 3.f;
iTotal
: 국어, 영어, 수학 점수의 합. fAvg
: 총점 / 3.0으로 평균 계산. tStudentArr[iStudentCount].iNumber = iStdNumber;
++iStdNumber;
++iStudentCount;
cout << "학생 추가 완료" << endl;
iNumber
: 현재 학번을 저장. ++iStdNumber
: 학번 증가. ++iStudentCount
: 등록된 학생 수 증가. MENU_DELETE
: 학생 이름 검색 → 데이터 삭제 후 뒤 데이터 정렬. MENU_SEARCH
: 학생 이름 검색 → 해당 정보 출력. MENU_OUTPUT
: 현재 등록된 모든 학생 정보 출력. 코드의 나머지 부분은 동일한 방식으로 구체적인 기능을 구현합니다. 필요한 경우 각 기능별 코드를 더 세부적으로 다시 풀어 설명할 수 있습니다. 🎯