C++ 성적프로그램

조회수 1860회

1.void InputData(Student *pSt, int StudentNum); // pSt : 수정할 학생정보 포인터 매개변수 // StudentNum : 전체 학생 수 • 2명의 학생과 3개의 교과목을 일률적으로 입력받던 프로그램을 동적으로 학생 수와 과목 수를 입력받 을 수 있도록 수정

  1. float CalcAveGPA(subject *, int)
  2. 구조체를 이렇게 바꿔야합니다. struct Student {// 학생 정보 char StdName[30]; // 학생 이름 int Hakbun; // 학번 Subject *Sub; // 과목 int SubNum; // 과목 수 float AveGPA; // 교과목 평균 평점

이 3가지를 만족해야합니다... 아래의 코드를 수정하여..

include include include using namespace std;

const int Student_Num = 2;

const int Subject_Num = 3;

struct Subject { // 과목정보 char SubName[30]; // 과목명 int Hakjum; // 과목학점 char Grade[10]; // 과목등급 float GPA; // 과목평점 };

struct Student { // 학생정보 char StdName[30]; // 학생이름 int Hakbun; // 학번 Subject Sub[Subject_Num]; // 과목 float AveGPA; // 과목 평균 평점 };

void CalcGPA(Subject &Sub); float CalcAveGPA(Subject *Sub); void PrintAllData(const Student *pSt, int StudentNum); void PrintOneData(const Student &rSt); Student *StdSearch(Student *pSt, int StudentNum);

inline void PrintMenu(); inline void InputValue(char *str); inline void InputValue(int &i); void PrintAllStdList(const Student *pSt, int StudentNum); void ModifyStdInfo(Student *pSt);

void CalcGPA(Subject &Sub) { // 과목등급 점수 저장할 변수 선언 float Sub_score = 0;

// 과목등급을 확인후 변수값 변경
switch(Sub.Grade[0]) {
    case 'A':
        Sub_score += 1;
    case 'B':
        Sub_score += 1;
    case 'C':
        Sub_score += 1;
    case 'D':
        Sub_score += 1;
}

if(Sub.Grade[1]=='+') Sub_score += 0.5;

// 과목평점 저장 
Sub.GPA = Sub_score*Sub.Hakjum;

}

float CalcAveGPA(Subject *Sub) { float AveGPA = 0;

for(int i=0; i<Subject_Num; i++) {
    AveGPA += Sub[i].GPA;
}

return AveGPA/Subject_Num;

}

void PrintAllData(const Student *pSt, int StudentNum) { cout << setw(37) << "전체 학생 성적 보기" << endl; cout << setw(56) << setfill('=') << ' ' << setfill(' ') << endl;

for(int i=0; i<StudentNum; i++) {
    PrintOneData(pSt[i]);
}

}

void PrintOneData(const Student &rSt) { cout << "이름 : " << rSt.StdName << " 학번 : " << rSt.Hakbun << endl; cout << setw(56) << setfill('=') << ' ' << setfill(' ') << endl; cout << setw(12) << "과목명" << setw(12) << "과목학점" << setw(12) << "과목등급" << setw(12) << "과목평점" << endl; cout << setw(56) << setfill('=') << ' ' << setfill(' ') << endl; cout.precision(2); cout << fixed;

for(int i=0; i<Subject_Num; i++) {
    cout << setw(12) << rSt.Sub[i].SubName << setw(12) << rSt.Sub[i].Hakjum << setw(12) << rSt.Sub[i].Grade << setw(12) << rSt.Sub[i].GPA << endl;
}

cout << setw(56) << setfill('=') << ' ' << setfill(' ') << endl;
cout << setw(36) << "평균평점" << setw(12) << rSt.AveGPA << endl << endl;

}

Student *StdSearch(Student *pSt, int StudentNum) { // 검색할 이름 저장용 번수 선언 char SearchName[30];

cout << "검색 할 학생 이름 : ";
InputValue(SearchName);


for(int i=0; i<StudentNum; i++) {
    for(int j=0; j<strlen(SearchName) && pSt[i].StdName[j]==SearchName[j] && strlen(SearchName)==strlen(pSt[i].StdName); j++) {
        if(j==strlen(SearchName)-1) return &pSt[i];
    }
}

// 없으면 NULL을 반환
return NULL;

}

inline void PrintMenu() { cout << "===== 메뉴 =====" << endl; cout << "1. 학생 성적 입력" << endl; cout << "2. 전체 학생 성적 보기" << endl; cout << "3. 학생 이름 검색" << endl; cout << "4. 전체 학생 목록 보기" << endl; cout << "5. 학생 정보 수정" << endl; cout << "6. 프로그램 종료" << endl << endl; cout << "원하는 기능을 입력하세요 : "; }

inline void InputValue(char *str) { cin >> str; }

inline void InputValue(int &i) { cin >> i; }

void PrintAllStdList(const Student *pSt, int StudentNum=2) { cout << setw(32) << setfill('=') << ' ' << setfill(' ') << endl; cout << setw(12) << "학번" << setw(12) << "이름" << endl; cout << setw(32) << setfill('=') << ' ' << setfill(' ') << endl; for(int i=0; i<StudentNum; i++) { cout << setw(12) << pSt[i].Hakbun << setw(12) << pSt[i].StdName << endl; } cout << setw(32) << setfill('=') << ' ' << setfill(' ') << endl << endl; }

// 실습 4 요구사항(이름으로 검색, 수정) void ModifyStdInfo(Student pSt) { // 검색 Student *SearchStd; SearchStd = StdSearch(pSt, Student_Num); if(SearchStd!=NULL) { // 수정 cout << " (" << SearchStd[0].StdName << ", " << SearchStd[0].Hakbun << ")의 정보를 수정하세요" << endl; cout << "이름 : "; InputValue(SearchStd[0].StdName); cout << "학번 : "; InputValue(SearchStd[0].Hakbun); }
}

int main() { // 학생 구조체 선언 Student St[Student_Num];

// 메뉴 선택한 값 저장할 변수 선언 
int selected_menu = 0;


while(selected_menu!=6) {
    // 메뉴 출력 및 입력 
    PrintMenu();
    InputValue(selected_menu);
    cout << endl;


    switch(selected_menu) {
        case 1:

            // 학생 정보 입력 
            for(int i=0; i<Student_Num; i++) {
                cout << "* " << i+1 << " 번째 학생 이름과 학번을 입력하세요." << endl;
                cout << "이름 : ";
                InputValue(St[i].StdName);
                cout << "학번 : ";
                InputValue(St[i].Hakbun);
                cout << endl << endl << endl << endl;
                cout << "* 수강한 과목" << Subject_Num << "개와 각 교과목명, 과목등급을 입력하세요." << endl;

                for(int j=0; j<Subject_Num; j++) {
                    cout << "교과목명 : ";
                    InputValue(St[i].Sub[j].SubName);
                    cout << "과목학점수 : ";
                    InputValue(St[i].Sub[j].Hakjum);
                    cout << "과목등급(A+ ~ F) : ";
                    InputValue(St[i].Sub[j].Grade);
                    cout << endl;
                    CalcGPA(St[i].Sub[j]);
                }
                cout << endl << endl << endl;
                St[i].AveGPA = CalcAveGPA(St[i].Sub);
            }
            break;
        case 2:

            // 전체 학생 정보 출력 
            PrintAllData(St, Student_Num);
            break;
        case 3:

            // 학생 이름 검색 후 출력
            Student *SearchStd;
            SearchStd = StdSearch(St, Student_Num);
            if(SearchStd!=NULL) PrintOneData(*SearchStd);
            break;
        case 4:

            // 전체 학생 목록 출력
            PrintAllStdList(St);
            break;
        case 5:

            // 학생 정보 검색, 수정
            ModifyStdInfo(St);
            break;
    }
}

return 0; 

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)