『Lena's by ☆볶기!!』: Restart !!

Rorolena
1-6 <프로젝트> 성적표 Ver 1

-/1. 프로젝트의 소개/-

// 프로젝트 목적
4~7챕터까지 배운 내용을
응용하고 이해하는대 목적이있다.

// 프로젝트의 설계 요령
1. 전체적인 모습을 구체적으로 대략 생각을 한다.
2. 위의 구성이 끝나면 기본 시스템과 골격을 잡는다.
3. 벽과 구역을 나누고 점점 살을 붇힌다
4. 마무리를 한다.
0. 작업 틈틈히 테스트를 하여 문재를 바로잡고
그리고 작업물은 반듯이 구버전과 신버전 모두 보관한다.

시스템 설계 목록
┬ 학생의 정보와성적을 입력 받는다. -> 학생의 정보와 성적을 입력 받아서 보관한다.
├ 전체 학생의 성적을 화면으로 출력한다. -> 그동안 입력 받은 학생 정보를 화면으로 출력한다.
├ 전체 학생의 성적을 Text 파일로 출력한다. -> 위와 동일한 내용을 텍스트 파일로 출력한다.
└ 전체 학생의 성적을 HTML 파일로 출력한다. -> 위와 동일한 내용을 HTML 파일로 출력한다.

-/2. 성적표 Ver 1.0 - 메뉴의 구성/-

성적표 Ver 1.0
-----------------------------------------------------------------------
#include <iostream>
using namespace std;

int main()
{
 // 계속해서 메뉴를 보여준다.
 while(1)
 {
  // 메뉴 보여주기
  cout << "\n------ 메뉴 ------\n";
  cout << "1. 학생 성적 추가\n";
  cout << "2. 전체 성적 보기\n";
  cout << "Q. 프로그램 종료\n";
  cout << "------------------\n\n";
  cout << "원하는 작업의 번호를 입력하세요 : ";

  // 작업 입력 받기
  char select;
  cin >> select;

  // 선택된 값에 따라서 처리
  switch(select)
  {
  case '1':
   // 학생 성적 추가
   cout << "\n학생 성적 추가가 선택되었습니다.\n";
   break;
  case '2':
   // 전체 성적 보기
   cout << "\n전체 성적 보기가 선택되었습니다.\n";
   break;
  case 'Q':
  case 'q':
   // 종료
   cout << "\n프로그램을 종료합니다.\n";
   return 0;
  default:
   // 그 외의 선택
   cout << "\n올바른 값을 입력해주세요.\n";
   break;
  }

 }

 return 0;
}
-----------------------------------------------------------------------
point

1. while(1) 문은 종료문을 선택하기 전까지
개속 반복하여 코드를 실행 시켜준다.

2. cin은 콘솔 입력의(console Input)의 약자로써
콘솔에서 입력을 받을 때는 cin 객체로부터
>> 연산자를 사용해서 값을 얻어올 수 있다.

-/3. 성적표 Ver 1.1 - 세 명의 성적 처리하기/-

성적표 Ver 1.1
-----------------------------------------------------------------------
#include <iostream>
using namespace std;

int main()
{
 // 최대 3명의 성적을 보관한다.
 int S1_No, S2_No, S3_No;
 int S1_Kor, S2_Kor, S3_Kor;
 int S1_Math, S2_Math, S3_Math;
 int S1_Eng, S2_Eng, S3_Eng;
 float S1_Ave, S2_Ave, S3_Ave;
 float TotalAve = 0.0f;
 int NumberOfStudent = 0;

 // 계속해서 메뉴를 보여준다.
 while(1)
 {
  // 메뉴 보여주기
  cout << "\n------ 메뉴 ------\n";
  cout << "1. 학생 성적 추가\n";
  cout << "2. 전체 성적 보기\n";
  cout << "Q. 프로그램 종료\n";
  cout << "------------------\n\n";
  cout << "원하는 작업의 번호를 입력하세요 : ";

  // 작업 입력 받기
  char select;
  cin >> select;

  // 선택된 값에 따라서 처리
  switch(select)
  {
  case '1':
   // 학생 성적 추가
   {
    // 3명 모두 입력됐으면 무시
    if ( 3 == NumberOfStudent)
    {
    cout << "\n더 이상 입력할 수 없습니다.\n";
    break;
    }

    // 국어, 영어, 수학 점수를 입력 받는다.
    int kor, Eng, Math;

    cout << "국어, 영어, 수학 점수를 입력하세요 : ";
    cin >> Kor >> Eng >> Math;

    // 평균을계산한다.
    float Ave = float(Kor + Eng + Math) / 3.0f;

    // 알맞은 변수에 입력된 값을 넣는다.
    if(0 == NumberOfstudent)
    {
     // 개인 정보
     S1_No = NumberOfStudent + 1;
     S1_Kor = Kor;
     S1_Eng = Eng;
     S1_Math = Math;
     s1_Ave = Ave;

     // 전체 평균
     TotalAve = S1_Ave;
    }
    else if(1 == NumverOfStudent)
    {
     // 개인 정보
     S2_No = NumberOfStudent + 1;
     S2_Kor = Kor;
     S2_Eng = Eng;
     S2_Math = Math;
     s2_Ave = Ave;

     // 전체 평균
     TotalAve = (S1_Ave + S2_Ave) / 2;
    }
    else
    {
     // 개인 정보
     S3_No = NumberOfStudent + 1;
     S3_Kor = Kor;
     S3_Eng = Eng;
     S3_Math = Math;
     s3_Ave = Ave;

     // 전체 평균
     TotalAve = (S1_Ave + S2_Ave + S3_Ave) / 3;
    }

    // 입력 받은 학생 수를 증가시킨다.
    NumberOfStudent++;

    // 작업의 성공을 알린다.
    cout << "\n학생 성적이 올바르게 입력되었습니다.\n";

    break;
   }
  case '2':
   // 전체 성적 보기
   {
    // 타이틀 부분을 출력한다.
    cout << "\n 전체 성적 보기 \n";
    cout << "학번 국어 영어 수학 평균\n";

    // 입력된 학생 수만큼 반복한다.
    for(int i = 0; i < NumverOfStudent; ++i)
    {
     //알맞은 학생의 정보를 출력한다.
     if(0 == i)
     {
      cout << S1_No << " " << S1_Kor << " " << S1_Eng;
      cout << " " << S1_Math << " " << S1_Ave << "\n";
     }
     else if(1 == i)
     {
      cout << S2_No << " " << S2_Kor << " " << S2_Eng;
      cout << " " << S2_Math << " " << S2_Ave << "\n";
     }
     else
     {
      cout << S3_No << " " << S3_Kor << " " << S3_Eng;
      cout << " " << S3_Math << " " << S3_Ave << "\n";
     }
    }

    // 전체 평균을 출력한다.
    cout << "\n전체 평균 = " << TotalAve << "\n";

    break;
   }
  case 'Q':
  case 'q':
   // 종료
   cout << "\n프로그램을 종료합니다.\n";
   return 0;
  default:
   // 그 외의 선택
   cout << "\n올바른 값을 입력해주세요.\n";
   break;
  }

 }

 return 0;
}
-----------------------------------------------------------------------
point

1. float Ave = float(Kor + Eng + Math) / 3.0f;는 입력받은
int 값들을 float으로 형변환후 3.0f로 나누어 Ave 변수에 대입하고 있다.

-/4. 성적표 Ver 1.2 - 성적표 예쁘게 출력하기/-

성적표 Ver 1.2
-----------------------------------------------------------------------
#include <iomanip>
#include <iostream>
using namespace std;

int main()
{
 // 최대 3명의 성적을 보관한다.
 int S1_No, S2_No, S3_No;
 int S1_Kor, S2_Kor, S3_Kor;
 int S1_Math, S2_Math, S3_Math;
 int S1_Eng, S2_Eng, S3_Eng;
 float S1_Ave, S2_Ave, S3_Ave;
 float TotalAve = 0.0f;
 int NumberOfStudent = 0;

 // 계속해서 메뉴를 보여준다.
 while(1)
 {
  // 메뉴 보여주기
  cout << "\n------ 메뉴 ------\n";
  cout << "1. 학생 성적 추가\n";
  cout << "2. 전체 성적 보기\n";
  cout << "Q. 프로그램 종료\n";
  cout << "------------------\n\n";
  cout << "원하는 작업의 번호를 입력하세요 : ";

  // 작업 입력 받기
  char select;
  cin >> select;

  // 선택된 값에 따라서 처리
  switch(select)
  {
  case '1':
   // 학생 성적 추가
   {
    // 3명 모두 입력됐으면 무시
    if ( 3 == NumberOfStudent)
    {
    cout << "\n더 이상 입력할 수 없습니다.\n";
    break;
    }

    // 국어, 영어, 수학 점수를 입력 받는다.
    int Kor, Eng, Math;

    cout << "국어, 영어, 수학 점수를 입력하세요 : ";
    cin >> Kor >> Eng >> Math;

    // 평균을계산한다.
    float Ave = float(Kor + Eng + Math) / 3.0f;

    // 알맞은 변수에 입력된 값을 넣는다.
    if(0 == NumberOfStudent)
    {
     // 개인 정보
     S1_No = NumberOfStudent + 1;
     S1_Kor = Kor;
     S1_Eng = Eng;
     S1_Math = Math;
     S1_Ave = Ave;

     // 전체 평균
     TotalAve = S1_Ave;
    }
    else if(1 == NumberOfStudent)
    {
     // 개인 정보
     S2_No = NumberOfStudent + 1;
     S2_Kor = Kor;
     S2_Eng = Eng;
     S2_Math = Math;
     S2_Ave = Ave;
     
     // 전체 평균
     TotalAve = (S1_Ave + S2_Ave) / 2;
    }
    else
    {
     // 개인 정보
     S3_No = NumberOfStudent + 1;
     S3_Kor = Kor;
     S3_Eng = Eng;
     S3_Math = Math;
     S3_Ave = Ave;
     
     // 전체 평균
     TotalAve = (S1_Ave + S2_Ave + S3_Ave) / 3;
    }

    // 입력 받은 학생 수를 증가시킨다.
    NumberOfStudent++;

    // 작업의 성공을 알린다.
    cout << "\n학생 성적이 올바르게 입력되었습니다.\n";

    break;
   }
  case '2':
   // 전체 성적 보기
   {
    // 실수 출력 시에 소수점 이하 두 자리만 표시되게 한다.
    cout.precision(2);
    cout << fixed;

    // 타이틀 부분을 출력한다.
    cout << "\n        < 전체 성적 보기 >";
    cout << "\n   학번 국어 영어 수학   평균\n";

    // 입력된 학생 수만큼 반복한다.
    for(int i = 0; i < NumberOfStudent; ++i)
    {
     //알맞은 학생의 정보를 출력한다.
     if(0 == i)
     {
      cout << setw(7) << S1_No << setw(5) << S1_Kor << setw(5) << S1_Eng;
      cout << setw(5) << S1_Math << setw(7) << S1_Ave << "\n";
     }
     else if(1 == i)
     {
      cout << setw(7) << S2_No << setw(5) << S2_Kor << setw(5) << S2_Eng;
      cout << setw(5) << S2_Math << setw(7) << S2_Ave << "\n";
     }
     else
     {
      cout << setw(7) << S3_No << setw(5) << S3_Kor << setw(5) << S3_Eng;
      cout << setw(5) << S3_Math << setw(7) << S3_Ave << "\n";
     }
    }

    // 전체 평균을 출력한다.
    cout << "\n전체 평균 = " << TotalAve << "\n";

    break;
   }
  case 'Q':
  case 'q':
   // 종료
   cout << "\n프로그램을 종료합니다.\n";
   return 0;
  default:
   // 그 외의 선택
   cout << "\n올바른 값을 입력해주세요.\n";
   break;
  }

 }

 return 0;
}
-----------------------------------------------------------------------
point

1. cout.precision();
cout << fixed;
이 코드는 실수를출력할 떄 소수점
이하 2자리까지만 출력하게 만들어준다.
자세한 내용은 뒤의 내용 정리에서 다룬다.

2. setw()을 사용하여 다음 출력할 글자의 허용 칸수를 지정한다.
칸수를 넘으면 넘은대로 출력되고 남으면 빈칸으로 채워진다.
그리고 setw()을 사용하려면 #include <iomanip>가 필요하다.
자세한 내용은 뒤의 내용 정리에서 다룬다.