~cpp
#include <iostream>
#include <stdlib.h>
using namespace std;
void menu1(), menu2(), menu3(), menu4(), sub_menu(), avr(), sort(int, int),
grade(int), prt_select(), prt_all(), error();
const int students = 20;
char name[students][7] = {"ê³ ìž¬ì„ ", "권현진", "ê¹€ë�™ìš±", "김무ì˜�", "김민재",
"김성ì›�", "ê¹€ì˜�준", "김윤ì„", "ê¹€ì² í˜¸", "김태완",
"김태완", "ê¹€í�¬ê· ", "류재현", "문구봉", "박대ì›�",
"박세연", "박준성", "서수ì›�", "양민우", "ì–‘ì •ì�€"};
int stats[students][4] = {
{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, 85, 65, 90}, {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}};
char sort_name[students + 1][7];
int sort_stats[students + 1][4];
int select;
int sum_sub[3], sum_avr;
double avr_ind[students + 1];
int main()
{
for ( ; ; )
{
for (int i = 0 ; i < students ; i++)
{
for (int j = 0 ; j < 7 ; j++)
sort_name[i][j] = name[i][j];
for (j = 0 ; j < 4 ; j++)
sort_stats[i][j] = stats[i][j];
}
system("cls");
cout << " 메뉴n1) 과목별 리스트n2) 과목별 성ì �순 리스트n3) í•™ìƒ� 리스트n"
<< "4) í�‰ê· 성ì �순 리스트n5) 종료n메뉴를 ì„ íƒ�하ì‹ì‹œì˜¤. ";
cin >> select;
if (select == 1) menu1(); // ê°� ì„ íƒ�ì—� 맞게 함수를 호출
else if (select == 2) menu2();
else if (select == 3) menu3();
else if (select == 4) menu4();
else if (select == 5) break; // 5번 메뉴는 종료
else error(); // 잘못 ìž…ë ¥í•˜ì˜€ì�„ 경우 ì—�러메시지를 ì¶œë ¥í•˜ëŠ” 함수 호출
system("pause"); // 실행 결과를 확ì�¸í•˜ê¸° 위해 실행ì�„ ìž ì‹œ 멈춤
}
cout << "nì¢…ë£Œí•˜ê² ìŠµë‹ˆë‹¤.nn"; // 종료 시 종료 메시지를 ì¶œë ¥í•¨
return 0; // 실행 종료
}
void menu1() // 1번 메뉴 : 사용ìž�ê°€ ì§€ì •í•œ 과목ì�„ ìž…ë ¥ìˆœì—� ë”°ë�¼ 화면ì—� ì¶œë ¥í•¨
{
sub_menu(); // 서브메뉴 호출
if (select >= 1 && select <= 3) // 서브메뉴ì�˜ ì„ íƒ�ì—� ë”°ë�¼ 화면ì—� ì¶œë ¥í•˜ëŠ” 함수를 호출
prt_select();
}
void menu2() // 2번 메뉴 : 사용ìž�ê°€ ì§€ì •í•œ 과목ì�˜ 성ì �순ì—� ë”°ë�¼ 화면ì—� ì¶œë ¥í•¨
{
sub_menu(); // 서브메뉴 호출
if (select >= 1 && select <= 3) {
for (int i = 1 ; i < students ; i++)
for (int j = 0 ; j < i ; j++)
if (sort_stats[i][select] > sort_stats[j][select]) // ì„ íƒ�ë�œ 과목ì—� ë”°ë�¼
sort(i, j); // ì •ë ¬ 함수를 호출함
prt_select(); // ì„ íƒ�ë�œ 서브메뉴ì—� ë”°ë�¼ ì¶œë ¥í•˜ëŠ” 함수를 호출
}
}
void menu3() // ëª¨ë“ ìž…ë ¥ ë�°ì�´í„°ì™€ í�‰ê· ë°� í•™ì �ì�„ ìž…ë ¥ 순ì—� ë”°ë�¼ ì¶œë ¥í•¨
{
avr(); // í�‰ê· ì‚°ì¶œ 함수를 호출
cout << "ní•™ìƒ� 리스트n"; // ì„ íƒ�ë�œ 메뉴를 화면ì—� ì¶œë ¥í•¨
prt_all(); // 화면ì—� ë�°ì�´í„°ë¥¼ ì¶œë ¥í•¨
}
void menu4() // ëª¨ë“ ìž…ë ¥ ë�°ì�´í„°ì™€ í�‰ê· ë°� í•™ì �ì�„ í�‰ê· 성ì � 순으로 ì •ë ¬í•˜ì—¬ ì¶œë ¥í•¨
{
avr(); // í�‰ê· ì‚°ì¶œ 함수를 호출
for (int i = 1 ; i < students ; i++) // í�‰ê· 성ì �ì—� ë”°ë�¼
for (int j = 0 ; j < i ; j++) // ì •ë ¬ 함수를 호출하여 ì •ë ¬í•¨
if (avr_ind[i] > avr_ind[j])
sort(i, j); // 루프ì—� ë”°ë�¼ ì •ë ¬í•˜ê¸° 위해 i, j 변수를 ì „ë‹¬í•¨
cout << "ní�‰ê· 성ì �별 리스트n"; // ì„ íƒ�ë�œ 메뉴를 화면ì—� ì¶œë ¥í•¨
prt_all(); // 화면ì—� ë�°ì�´í„°ë¥¼ ì¶œë ¥í•¨
}
void sub_menu() // 1, 2번 메뉴ì�˜ 경우 서브 메뉴를 ìž…ë ¥ë°›ì•„ ì„ íƒ�ë�œ 메뉴를 ì¶œë ¥í•˜ëŠ” 함수
{
cout << "n1) êµì–´n2) ì˜�ì–´n3) 수학nì–´ë–¤ 과목ì�„ ë³´ì‹œê² ìŠµë‹ˆê¹Œ? ";
cin >> select; // 서브메뉴를 ì¶œë ¥í•˜ê³ ì‚¬ìš©ìž�로부터 ìž…ë ¥ë°›ì�Œ
if (select < 1 || select > 3)
error(); // 잘못 ìž…ë ¥í•˜ì˜€ì�„ 경우 ì—�러메시지를 ì¶œë ¥í•˜ëŠ” 함수 호출
else cout << endl << (select == 1 ? "êµì–´" : (select == 2 ? "ì˜�ì–´" : "수학")) << " 목ë¡�n"
<< " ì�´ë¦„t 학번tì �수n"; // ì„ íƒ�ë�œ 메뉴를 ì¶œë ¥í•˜ê³
} // 공통ì �으로 들어가는 ë�¼ì�¸ì�„ ì¶œë ¥í•¨
void prt_select() // 1, 2번 메뉴ì�˜ 경우 서브 메뉴ì—� ë”°ë�¼ 화면ì—� 결과를 ì¶œë ¥í•¨
{
for (int i = 0 ; i < students ; i++)
cout << sort_name[i] << "t" << " " << sort_stats[i][0] // ì�´ë¦„ê³¼ 학번 ì¶œë ¥
<< "t " << sort_stats[i][select] << endl; // 성ì � ì¶œë ¥
}
void sort(int i, int j) // 사용ìž�ì�˜ ì„ íƒ�ì—� ë”°ë�¼ i, j 변수를 ì „ë‹¬ë°›ì•„ ì •ë ¬í•¨
{
for (int k = 0 ; k < 7 ; k++) { // ë�°ì�´í„°ì�˜ ì�´ë¦„ì�„ ì •ë ¬í•¨
sort_name[students][k] = sort_name[j][k];
sort_name[j][k] = sort_name[i][k];
sort_name[i][k] = sort_name[students][k];
}
for (k = 0 ; k < 4 ; k++) { // ë�°ì�´í„°ì�˜ 학번과 성ì �ì�„ ì •ë ¬í•¨
sort_stats[students][k] = sort_stats[j][k];
sort_stats[j][k] = sort_stats[i][k];
sort_stats[i][k] = sort_stats[students][k];
}
}
void avr() // í�‰ê· ì�„ 산출하는 함수
{
for (int i = 0 ; i < students ; i++) // í�‰ê· ì‚°ì¶œ
avr_ind[i] = (sort_stats[i][1] + sort_stats[i][2] + sort_stats[i][3]) / 3.0;
if (select == 4) // ì„ íƒ�ë�œ 메뉴가 4번ì�¼ 경우
for (int i = 1 ; i < students ; i++)
for (int j = 0 ; j < i ; j++)
if (avr_ind[i] > avr_ind[j]){ // í�‰ê· 성ì �ì—� ë”°ë�¼
sort(i, j); // ë�°ì�´í„°ì�˜ ì •ë ¬ì�„ 실행하ê³
avr_ind[students] = avr_ind[j]; // í�‰ê· 성ì �ì�„ 따로 ì •ë ¬í•¨
avr_ind[j] = avr_ind[i];
avr_ind[i] = avr_ind[students];
}
}
void prt_all() // 3, 4번 메뉴를 ì„ íƒ�í–ˆì�„ 경우 ê³µë�™ìœ¼ë¡œ 사용하는 ì¶œë ¥ 함수
{
cout << " ì�´ë¦„t 학번têµì–´tì˜�ì–´t수학tí�‰ê· ttí•™ì �n"; // 필드명ì�„ ì¶œë ¥
for (int i = 0 ; i < students ; i++) {
cout << sort_name[i] << "t "; // ì�´ë¦„ì�„ ì¶œë ¥í•¨
for (int j = 0 ; j < 4 ; j++)
cout << sort_stats[i][j] << "t "; // 학번과 성ì �ì�„ ì¶œë ¥í•¨
cout << avr_ind[i] << " t ";
grade(i); // í•™ì �ì�„ 산출하는 함수 í�¬ì¶œ
sum_avr += avr_ind[i]; // í�‰ê· ì�˜ í•©ì�„ 누ì �연산함
for (j = 0 ; j < 3 ; j++)
sum_sub[j] += sort_stats[i][j + 1]; // ê°� 과목ì�˜ 합계를 누ì � 연산함
}
cout << "n/ì´�ì �/ttt";
for (i = 0 ; i < 3 ; i++)
cout << sum_sub[i] << "t"; // ê°� 과목ì�˜ í•©ì�„ ì¶œë ¥í•¨
cout << sum_avr << "n/í�‰ê· /ttt "; // í�‰ê· 들ì�˜ í•©ì�„ ì¶œë ¥í•¨
for (i = 0 ; i < 3 ; i++){ // ê°� 과목ì�˜ í�‰ê· ê³¼ ì´� í�‰ê· ì�€ 변수를 사용하지 않ê³
cout << sum_sub[i] / students << "t "; // 과목과 í�‰ê· ì�˜ 합계 변수를 ì�´ìš©í•˜ì—¬ ì¶œë ¥
sum_sub[i] = 0; // ê°� 과목ì�˜ í�‰ê· ì�„ ì¶œë ¥í•œ ë’¤
} // � 과목� 합계를 초기화 함
cout << sum_avr / students <<"nn"; // í�‰ê· 들ì�˜ í�‰ê· ì�„ ì¶œë ¥í•œ ë’¤
sum_avr = 0; // í�‰ê· 들ì�˜ í•©ì�„ 초기화 함
}
void grade(int i) // í•™ì �ì�„ 산출하는 함수
{
if (avr_ind[i] >= 95) cout << "A+n"; // í�‰ê· 95ì � ì�´ìƒ�ì�€ A+
else if (avr_ind[i] >= 90) cout << "An"; // 90 A
else if (avr_ind[i] >= 85) cout << "B+n"; // 85 B+
else if (avr_ind[i] >= 80) cout << "Bn"; // 80 B
else if (avr_ind[i] >= 75) cout << "C+n"; // 75 C+
else if (avr_ind[i] >= 70) cout << "Cn"; // 70 C
else if (avr_ind[i] >= 65) cout << "D+n"; // 65 D+
else if (avr_ind[i] >= 60) cout << "Dn"; // 60 D
else cout << "Fn"; // 60ì � 미만ì�€ F 를 ê°�ê°� ì¶œë ¥ì¼€ 함
}
void error() // 메뉴를 잘못 ìž…ë ¥í•˜ì˜€ì�„ 경우 ì—�러 메시지를 ì¶œë ¥í•˜ëŠ” 함수
{
cout << "n잘못 ìž…ë ¥í•˜ì…¨ìŠµë‹ˆë‹¤.nn";
}