본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 17일 차 : 성적표 만들기 및 설계

안녕하세요 넬다이입니다.

 

오늘은 이제껏 배웠던 내용들로 성적표를 만들어 보도록 하겠습니다.

 

지난 16일 차에도 말씀드렸듯이 오늘은 성적표를 만들고 이를 토대로 다음 시간에는 리스트도 한번 사용해볼 생각이에요

그러니깐 오늘은 준비운동이다 생각하시고 천천히 따라오시면 될 것 같습니다.

 


성적표

 

자 우리는 이번 시간에 성적표를 만들어 볼 생각입니다.

이를 통해서 우리는 코드 설계라는 것을 하게 되는데요 이건 그렇게 어렵게 생각할 필요 없이 어떻게 구현하면 될까를

미리 생각하고 정리하는 것이라고 생각하면 편합니다. 나중에는 더욱 어려워지겠지만요....ㅠㅠ

 

자 이번 과제의 문제는 이렇습니다

땡땡 학교에서 성적표 입출력하는 프로그램을 만들려고 합니다. 이 프로그램을 통해서 특정 학생의 이름을 검색할 때 

입력이 되어있다면은 국어 점수 , 수학 점수 , 영어점수를 출력을 해줄 수도 있고 전체 입력된 학생을 전부 출력해줄 수 있는 프로그램입니다.

 

아아 제가 문제를 생각해서 만들었더니 문제가 이상하네요...ㅋㅋ 다들 이해해주시길 부탁드립니다.

 

자 일단 저기에서 필요한 건 무엇인지 생각을 해보겠습니다.

자 일단 성적표라는 묶은 형태가 있으니깐 국어와 수학과 영어를 한 곳에 구조체로 모두 모아 두고 그 구조체가 누구의 성적인지 알기 위해서 구조체 안에 이름까지 해서 넣어놓도록 하겠습니다.

 

또 한 입력이 되어있다면이라는 말을 통해서 이 프로그램은 누군가의 점수를 직접 입력을 받습니다.

 

그 후 모든 입력된 사람을 출력하거나 특정 이름을 가지고 있는 사람의 성적표를 나열하게 되어있습니다.

 

자 이를 통해서 전부 필요한 것들은 나와있습니다.

이를 통해서 한번 개발을 해보도록 하겠습니다.

 

자 첫 번째로 구조체로 묶어보겠습니다

#include <iostream>

using namespace std;

typedef struct tagInfo
{
	char	szName[20];
	int		iKor;
	int		iEng;
	int		iMath;
}INFO;

void main()
{
}

자 이걸 보시면은 이름 , 국어 , 영어 , 수학을 한대 묶어서 tagInfo에 저장하고 그걸 typedef를 통해서 INFO라는 이름을 하나 더 추가하였습니다.

 

그 후 우리는 프로그램이 계속 돌아가게 하기 위해서 while문을 통해서 계속 돌아가면서 메뉴를 보여주는 프로그램을 짜 보겠습니다

#include <iostream>

using namespace std;

typedef struct tagInfo
{
	char	szName[20];
	int		iKor;
	int		iEng;
	int		iMath;
}INFO;

void RenderMenu(void);

void main()
{
	int iInput = 0;
	int	iCount = 0;
	cout << "입력받을 학생 수 :";
	cin >>iCount;

	INFO*	pInfo = new INFO[iCount];


	for(int i = 0; i < iCount; ++i)
	{
		cout << i << " 번째 이름 : ";
		cin >> pInfo[i].szName;
		cout << i << " 번째 국어 : ";
		cin >> pInfo[i].iKor;
		cout << i << " 번째 영어 : ";
		cin >> pInfo[i].iEng;
		cout << i << " 번째 수학 : ";
		cin >> pInfo[i].iMath;
	}

	while(true)
	{
		//화면을 지워주는 명령어.
		system("cls");
        
		RenderMenu();
		cin >> iInput;
	}
}

void RenderMenu(void)
{
	cout << "1. 입력, 2.전체, 3.검색, 4.종료: ";
}

 

위에 코드를 보시면 아시겠지만 위에서 말했듯이 while문을 이용해서 무한하게 돌게 만들었으며

system("cls")는 도스 창 화면을 지워주는 명령어입니다.

그리고 RenderMenu()라는 함수를 통해서 메뉴창을 출력해 주고 있으며 

cin >> iInput을 통해서 유저가 어떤 메뉴를 선택할지 입력받고 있습니다.

 

자 그럼 메뉴 선택 입력을 받고 있으니깐 그것을 나눠주고 그에 맞는 행동을 해보겠습니다

#include <iostream>

using namespace std;

typedef struct tagInfo
{
	char	szName[20];
	int		iKor;
	int		iEng;
	int		iMath;
}INFO;

void RenderMenu(void);
void RenderInfo(INFO* pInfo, int iCount);
void RenderFind(INFO* pInfo, int iCount);

void main()
{
	int iInput = 0;
	int	iCount = 0;
	cout << "입력받을 학생 수 :";
	cin >>iCount;

	INFO*	pInfo = new INFO[iCount];


	for(int i = 0; i < iCount; ++i)
	{
		cout << i << " 번째 이름 : ";
		cin >> pInfo[i].szName;
		cout << i << " 번째 국어 : ";
		cin >> pInfo[i].iKor;
		cout << i << " 번째 영어 : ";
		cin >> pInfo[i].iEng;
		cout << i << " 번째 수학 : ";
		cin >> pInfo[i].iMath;
	}

	while(true)
	{
		//화면을 지워주는 명령어.
		system("cls");
        
		RenderMenu();
		cin >> iInput;
        
        switch(iInput)
		{
		case 1:
			RenderInfo(pInfo, iCount);
			break;
		case 2:
			RenderFind(pInfo, iCount);
			break;
		case 3:
			delete[] pInfo;
			return;
			break;
		}

	}
}

void RenderMenu(void)
{
	cout << "1. 입력, 2.전체, 3.검색, 4.종료: ";
}

void RenderInfo(INFO* pInfo, int iCount)
{
	for(int i = 0; i < iCount; ++i)
	{
		cout << "이름 :" << pInfo[i].szName << "\t영어:" << pInfo[i].iEng
			<< "\t국어 :" << pInfo[i].iKor << "\t수학 : " << pInfo[i].iMath << endl;
	}

	system("pause");
}

void RenderFind(INFO* pInfo, int iCount)
{
	cout << "검색할 이름 : ";
	char szName[20] = "";
	cin >> szName;

	for(int i = 0; i < iCount; ++i)
	{
		if(strcmp(pInfo[i].szName, szName) == 0)
		{
			cout << "이름 :" << pInfo[i].szName << "\t영어:" << pInfo[i].iEng
				<< "\t국어 :" << pInfo[i].iKor << "\t수학 : " << pInfo[i].iMath << endl;
			system("pause");
			break;
		}
	}
}

 

아 그리고 system("pause") 은 화면을 멈춰주는 기능입니다.

 

위에 코드를 보시면은 RenderInfo와 RenderFind를 추가해서 전체 사람의 성적표를 뽑아내기도 하고

특정 이름을 사용하고 있는 사람의 성적표를 뽑아낼 수도 있습니다.

 

이를 통해서 성적표를 만들어 보는 시간을 가져보았습니다.

 

처음에는 어색할지 모르지만 계속해보시면은 점점 편해지시는 자신을 발견하실 거예요.

 

다음 시간에는 리스트를 통해서 성적표를 만들어 보는 시간을 가져보겠습니다.

 

[개발/C&C++] - (C/C++ 속성 정리) 16일 차 : 메모리 관련 함수

[개발/C&C++] - (C/C++ 속성 정리) 15일 차 : 포인터와 동적할당

[개발/C&C++] - (C/C++ 속성 정리) 14일 차 : 함수의 사용방법

[개발/C&C++] - (C/C++ 속성 정리) 13일 차 : typedef , 구조체

[개발/C&C++] - (C/C++ 속성 정리) 12일 차 : string 컨테이너

[개발/C&C++] - (C/C++ 속성 정리) 11일 차 : 문자열 및 문자열 함수