No older revisions available
No older revisions available
~cpp
#include <iostream>
#include <cstdlib>
using namespace std;
struct student
{
char name[20];
int number;
int kor;
int eng;
int math;
int total;
double ave;
char * grade;
}; // 구조체 선언
student data[20] =
{
{ "고재선" ,20025301, 85, 90, 80 },
{ "권현진" ,20025302, 80, 88, 85 },
{ "김동욱" ,20025303, 88, 93, 75 },
{ "김무영" ,20025309, 75, 85, 70 },
{ "김민재" ,20025307, 73, 83, 77 },
{ "김성원" ,20025304, 95, 88, 80 },
{ "김영준" ,20025308, 95, 88, 80 },
{ "김윤섭" ,20025305, 94, 70, 65 },
{ "김철호" ,20025306, 80, 75, 88 },
{ "김태완" ,20025310, 65, 73, 94 },
{ "김태완" ,20025313, 77, 78, 99 },
{ "김희균" ,20025312, 80, 77, 85 },
{ "류재현" ,20025311, 95, 80, 95 },
{ "문구봉" ,20025315, 78, 90, 75 },
{ "박대원" ,20025314, 90, 95, 65 },
{ "박세연" ,20025316, 88, 88, 80 },
{ "박준성" ,20025317, 83, 76, 75 },
{ "서수원" ,20025318, 75, 68, 70 },
{ "양민우" ,20025319, 65, 70, 80 },
{ "양정은" ,20025320, 88, 85, 90 }
}; // 데이터 값
// 함수 선언
void sort (int *);
void copy();
int input();
void error_message();
void showmenu();
void showsubmenu();
void pass();
void grade_();
void choose_1();
void choose_2();
void choose_3();
void choose_4();
void result_1(student l[] , int *);
void result_2(student m[]);
student temp, copy_data[20];
int select, i, j, check=0;
int main()
{
for (i = 0 ; i <= 19 ; i++ ){
data[i].total = data[i].kor + data[i].eng + data[i].math;
data[i].ave = data[i].total / 3;
}
grade_();
while (1)
{
if (check == 0 )
{
showmenu();
}
switch (input())
{
case 1 :
choose_1();
check = 0;
break;
case 2 :
choose_2();
check = 0;
break;
case 3 :
choose_3();
check = 0;
break;
case 4 :
choose_4();
check = 0;
break;
case 5 :
return 0;
break;
default :
error_message();
check = 1;
break;
}
}
}
////////////////////////////////////////////////////////////
// 메인 함수의 끝 //
////////////////////////////////////////////////////////////
////////////////// 메세지 출력 함수 //////////////////
void showmenu()
{
cout << "\t◆ 메뉴 ◆" << endl
<< "1) 과목별 입력 결과 리스트 " << endl
<< "2) 과목별 성적순 리스트 " << endl
<< "3) 학생 전과목 입력 결과 리스트 " << endl
<< "4) 학생 전과목 성적순 리스트 " << endl
<< "5) 종료 " << endl << endl
<< "메뉴를 선택하세요 -> ";
}
void showsubmenu()
{
cout << "\t◇과목 선택 메뉴◇" << endl
<< "1) 국어" << endl
<< "2) 영어" << endl
<< "3) 수학" << endl
<< "과목을 선택하세요 -> ";
}
void error_message()
{
cout << "다시 입력하세요 -> ";
}
/////////////// 선택 메뉴 함수 ////////////////
void choose_1() // 1번 선택
{
system ("cls") ;
showsubmenu();
while (1)
{
switch (input())
{
case 1 :
cout << "이름\t번호\t국어" << endl;
result_1(data, &data[0].kor);
pass();
return;
case 2 :
cout << "이름\t번호\t영어" << endl;
result_1(data, &data[0].eng);
pass();
return;
case 3 :
cout << "이름\t번호\t수학" << endl;
result_1(data, &data[0].math);
pass();
return;
default :
error_message();
break;
}
}
}
void choose_2() // 2번 선택
{
system ("cls") ;
copy();
showsubmenu();
while (1)
{
switch (input())
{
case 1 :
system ("cls");
sort(©_data[0].kor);
cout << "이름\t번호\t국어" << endl;
result_1(copy_data , ©_data[0].kor);
pass();
return;
case 2 :
system ("cls");
sort(©_data[0].eng);
cout << "이름\t번호\t영어" << endl;
result_1(copy_data , ©_data[0].eng);
pass();
return;
case 3 :
system ("cls");
sort(©_data[0].math);
cout << "이름\t번호\t수학" << endl;
result_1(copy_data , ©_data[0].math);
pass();
return;
default :
error_message();
break;
}
}
}
void choose_3() // 3번 선택
{
system ("cls");
result_2(data);
pass();
}
void choose_4() // 4번 선택
{
copy();
system ("cls");
sort(©_data[0].total);
result_2(copy_data);
pass();
}
//////////////// 결과 출력 함수들 ////////////////////
void result_1(student l[] , int * n)
{
for (i = 0 ; i <= 19 ; i++ )
cout << l[i].name << "\t" << l[i].number << " " << *(n+(i*14)) << endl;
}
void result_2(student m[])
{
cout << "이름\t번호\t국어\t영어\t수학\t총점\t평균\t등급" << endl;
for (i = 0 ; i <= 19 ; i++)
{
cout.precision(3);
cout.setf(ios_base::showpoint);
cout << m[i].name << "\t" << m[i].number << " "<< m[i].kor
<< "\t" << m[i].eng << "\t" << m[i].math << "\t" << m[i].total
<< "\t" << m[i].ave << "\t" << m[i].grade << endl;
}
}
///////////////// 그 밖의 함수들 /////////////////////
void sort(int * x) // 소트 함수
{
for (i = 1 ; i <= 19 ; i++)
{
for (j = 19 ; j >= i ; j--)
{
if ( *(x+j*14) >= *(x+(j-1)*14) )
{
temp = copy_data[j];
copy_data[j] = copy_data[j-1];
copy_data[j-1] = temp;
}
}
}
}
void copy() // 데이터 훼손을 방지하기 위한 데이터 카피
{
for (int i = 0 ; i <= 19 ; i++ )
copy_data[i] = data[i];
}
int input() // 올바른 입력을 위한 입력함수
{
cin.clear();
while (!(cin >> select))
{
cin.clear();
while (cin.get() != '\n')
continue;
error_message();
}
return select;
}
void grade_() // 등급을 입력하는 함수
{
for (i = 0 ; i <= 19 ; i++ )
{
if ( data[i].ave >= 95 && data[i].ave <=100)
data[i].grade = "a+";
else if ( data[i].ave >= 90 && data[i].ave < 95)
data[i].grade = "a";
else if ( data[i].ave >= 85 && data[i].ave < 90)
data[i].grade = "b+";
else if ( data[i].ave >= 80 && data[i].ave < 85)
data[i].grade = "b";
else if ( data[i].ave >= 75 && data[i].ave < 80)
data[i].grade = "c+";
else if ( data[i].ave >= 70 && data[i].ave < 75)
data[i].grade = "c";
else if ( data[i].ave >= 65 && data[i].ave < 70)
data[i].grade = "d+";
else if ( data[i].ave >= 60 && data[i].ave < 65)
data[i].grade = "d";
else if ( data[i].ave <= 59)
data[i].grade = "f";
}
}
void pass() // 바로 넘어가지 않기 위한 함수
{
cout << "계속 하려면 Enter 키를 누르십시오. ";
cin.get();
while (cin.get() != '\n')
continue;
system ("cls");
}