학생 성적 정리 프로그램
- 제어시스템 연구일지
- 2021. 5. 8.
안녕하세요. 오늘은 학생 성적 정리 프로그램 설계를 진행하고 소스 분석하고 결과를 애기하도록 하겠습니다.
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. 결과화면
'제어시스템 연구일지' 카테고리의 다른 글
목민 심서 독후감 (0) | 2021.05.12 |
---|---|
C소스 연습문제풀이(구조체,배열,포인터) (0) | 2021.05.11 |
객체지향 성적 정리 프로그램 소스 분석 (0) | 2021.05.06 |
도형의 넓이 계산 프로그램 (1) | 2021.05.05 |
죽은 시인의 사회 감상문 (0) | 2021.05.04 |