~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"; }