학생 성적 정리 프로그램

안녕하세요. 오늘은 학생 성적 정리 프로그램 설계를 진행하고 소스 분석하고 결과를 애기하도록 하겠습니다.

 

1. 문제 설명

<문제설명>

다음과 같은 메뉴를 출력하여 해당기능을 수행하는 프로그램 작성합니다.

  • -----메뉴-----
  • 1.학생성적입력
  • 2.성적순보기(함수를 사용하여 업그레이드=>최소한 기능별 함수 작성)
  • 3.전체성적보기
  • Q.끝내기
  • -------------

이러한 메세지를 스크린에 뛰어야 하며 각 메뉴별로 정상적인 동작을 할 수 있게 조건을 참고하여 설계을 진행 할 예정입니다.

 

조건:

  • 1.학생은 최대5명을 저장할 수 있어야 한다.
  • 2.입력순서에 따라 학번을 부여해야 한다.
  • 3.국어, 영어, 수학 성적을 1명씩 입력받아야 한다.
  • 4.출력은 아래와 같은 형식으로 한다.
  • 학번 국어 영어 수학 평균 등급
  • 1 90 80 100 90.00 ********* A
  • 2 80 70 90 80.00 ******** B
  • 전체평균 = 85.00 *********

2. 설계

 

메뉴2번 즉, case 2에서 swap_student 라는 함수를 사용하여 성적순보기를 하도록 설계하였습니다.

 

swap_student함수는 평균들을 비교하여서 평균이 높은 순서대로 배열이 될 수 있게 작성한 함수입니다.

 

3. 코드 소스 분석

<코드>

#include<iostream>

using namespace std;

 

struct subject{

int kor,eng,math;

int bun;

float avg;

};

 

struct subject s[5];

 

void swap_student(int p,int q);

 

int main()

{

char num;

int i=0;

int a,b;

float allavg=0;

 

while(1)

{

cout<<"-----메뉴-----"<<endl;

cout<<"1.학생성적입력"<<endl;

cout<<"2.성적 순 보기"<<endl;

cout<<"3.전체성적보기"<<endl;

cout<<"Q.끝내기"<<endl;

cout<<"--------------"<<endl;

 

cout<<"메뉴를 고르시오:";

cin>>num;

 

switch(num){

case '1':{

if(i<5){

i++;

s[i-1].bun=i;

cout<<i<<"학번 국어 성적 입력:";

cin>>s[i-1].kor;

cout<<i<<"학번 영어 성적 입력:";

cin>>s[i-1].eng;

cout<<i<<"학번 수학 성적 입력:";

cin>>s[i-1].math;

 

s[i-1].avg=(float)(s[i-1].kor+s[i-1].eng+s[i-1].math)/3;

cout<<endl;

break;

}

else {

cout<<"학생 수 최대 5명까지 밖에 저장이 안됩니다."<<endl;

continue;

}

}

 

case '2':{

for(a=0;a<i;a++)

for(b=a+1;b<i;b++)

{

swap_student(a,b);

}

cout<<"학번\t국어\t영어\t수학\t평균\t\t등급"<<endl;

 

for(a=0;a<i;a++){

allavg=allavg+s[a].avg;

cout<<

""<<s[a].bun<<"\t"<<s[a].kor<<"\t"<<s[a].eng<<"\t"<<s[a].math<<"\t"<<s[a].avg<<"\t";

 

for(b=0;b<=s[a].avg/10;b=b++)

cout<<"*";

 

 

if(s[a].avg>=90) cout<<"A";

else if(s[a].avg>=80) cout<<"B";

else if(s[a].avg>=70) cout<<"C";

else if(s[a].avg>=60) cout<<"D";

else if(s[a].avg>=50) cout<<"E";

else cout<<"F";

cout<<endl;

}

cout<<endl;

break;

}

 

case '3':{

cout<<"학번\t국어\t영어\t수학\t평균\t\t등급"<<endl;

 

for(a=0;a<i;a++){

allavg=allavg+s[a].avg;

cout<<

""<<s[a].bun<<"\t"<<s[a].kor<<"\t"<<s[a].eng<<"\t"<<s[a].math<<"\t"<<s[a].avg<<"\t";

 

for(b=0;b<=s[a].avg/10;b=b++)

cout<<"*";

 

 

if(s[a].avg>=90) cout<<"A";

else if(s[a].avg>=80) cout<<"B";

else if(s[a].avg>=70) cout<<"C";

else if(s[a].avg>=60) cout<<"D";

else if(s[a].avg>=50) cout<<"E";

else cout<<"F";

cout<<endl;

}

 

allavg=(float)allavg/i;

cout<<"전체평균:"<<allavg;

for(b=10;b<=allavg;b=b+10)

cout<<"*";

 

cout<<endl;

break;

}

 

 

case 'Q':{

cout<<"끝내겠습니다."<<endl;

break;

}

 

default:{

cout<<"잘못 입력하셨습니다. 다시 입력해 주세요."<<endl;

break;

}

}

if(num=='Q')

break;

}

}

 

void swap_student(int p,int q)

{

int tmp;

if(s[p].avg<s[q].avg)

{

tmp=s[p].kor;

s[p].kor=s[q].kor;

s[q].kor=tmp;

 

tmp=s[p].eng;

s[p].eng=s[q].eng;

s[q].eng=tmp;

 

tmp=s[p].math;

s[p].math=s[q].math;

s[q].math=tmp;

 

tmp=s[p].avg;

s[p].avg=s[q].avg;

s[q].avg=tmp;

 

tmp=s[p].bun;

s[p].bun=s[q].bun;

s[q].bun=tmp;

}

}

4. 결과화면

 

반응형

댓글

Designed by JB FACTORY