편집 기록

편집 기록
  • 프로필 noah0508님의 편집
    날짜2021.12.01

    성적처리프로그램 질문


    제가 복수전공을 하는데 아무것도 모르는데 2학년 전공을 신청해서 수업을 듣고 있거든요..

    과제로 학생 성적 처리 프로그램이 나왔는데 인터넷 보면서 하다가 안되는 게 있어서요

    핵생 수랑 과목수를 동적으로 입력받고 출력하는 건데 학생수는 넘어가지는데 자꾸 교과목 칠때 터미널에

    서 나가지네요.. 해결 하는 방법 없을까요??

    #include<iomanip>
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    
    struct Subject
    {
        char SubName[30];
        int Hakjum;
        char Grade[10];
        float GPA;
    };
    struct Student
    {
        char StdName[30];
        int Hakbun;
        Subject *Sub;
        int SubNum;
        float AveGPA;
    };
    
    
    int menu = 0;
    int StudentNum;
    
    inline void PrintMenu();
    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 InputValue(char* str);
    inline void InputValue(int& i);
    void PrintAllStdList(const Student* pSt, int StudentNum);
    void ModifyStdInfo(Student* pSt);
    void InputData(Student *pSt, int StudentNum);
    
    
    inline void InputValue(char* str)
    {
        cin >> str;
    }
    inline void InputValue(int& i)
    {
        cin >> i;
    }
    
    
    int main()
    {
        cout<<"학생 수를 입력하세요 : ";
        cin>>StudentNum;
    
        do
        {
            PrintMenu();
            Student *St=new Student[StudentNum];
            if (menu == 1)
            {
             for(int i=0;i<StudentNum;i++)
                {
                    InputData(St,StudentNum);
                    St[i].AveGPA = CalcAveGPA(St[i].Sub);
                }
    
                cout << endl;
    
            }
            else if (menu == 2)
            {
                PrintAllData(St, StudentNum);
                cout << endl;
            }
            else if (menu == 3)
            {
                Student* SearchStd;
                SearchStd = StdSearch(St, StudentNum);
    
                if (SearchStd != NULL) 
                   { 
                       PrintOneData(*SearchStd);
                   }
            }
            else if (menu == 4)
            {
                PrintAllStdList(St,StudentNum);
                cout << endl;
            }
            else if (menu == 5)
            {
                ModifyStdInfo(StdSearch(St,StudentNum));
                    cout << endl;
            }
            else if (menu == 6)
            {
                cout << "프로그램을 종료합니다." << endl;
                delete St;
                return 0;
            }
            else
            {
                cout << "올바른 메뉴입력이 아닙니다." << endl;
                cout << "프로그램을 종료합니다." << endl;
                delete St;
                return 0;
            }
        } while (1);
    }
    
    
    void PrintMenu()
    {
        cout << endl << "===== 메뉴 =====" << endl;
        cout << "1. 학생 성적 입력" << endl;
        cout << "2. 전체 학생 성적 보기" << endl;
        cout << "3. 학생 이름 검색" << endl;
        cout << "4. 전체 학생 목록 보기" <<  endl;
        cout << "5. 학생 정보 수정" << endl;
        cout << "6. 프로그램 종료" << endl;
        cout << endl;
        cout << "원하는 기능을 입력하세요 : ";
        cin >> menu;
    }
    
    
    void InputData(Student *pSt, int StudentNum)
    {
        for(int i=1;i<StudentNum;i++)
        {
            cout << "*"<< i<<"번째 학생 이름과 학번을 입력하세요." << endl;
            cout << "이름 : ";
            cin >> pSt->StdName;
            cout << endl << "학번 : ";
            cin >> pSt->Hakbun;
            cout<<"과목수 : ";
            cin>>pSt->SubNum;
            cout << endl << "* 수강한 과목"<< pSt->SubNum << "개와 각 교과목명, 과목학점, 과목 등급을 입력하세요." << endl;
    
            Subject* stsub = new Subject[pSt->SubNum];
    
            for(int j=0;j<pSt->SubNum;j++)
            {
                cout << endl << "교과목명 : ";
                cin >> pSt->Sub[i].SubName;
                cout << endl << "과목학점수 : ";
                cin >> pSt->Sub[i].Hakjum;
                cout << endl << "과목등급(A+~F) : ";
                cin >> pSt->Sub[i].Grade;
    
                CalcGPA(pSt->Sub[i]);
            }
        }
    }
    
    
    void CalcGPA(Subject& Sub)
    {
        if (strcmp(Sub.Grade, "A+") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 4.50;
        }
        else if (strcmp(Sub.Grade, "A0") == 0 || strcmp(Sub.Grade, "A") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 4.00;
        }
        else if (strcmp(Sub.Grade, "B+") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 3.50;
        }
        else if (strcmp(Sub.Grade, "B0") == 0 || strcmp(Sub.Grade, "B") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 3.00;
        }
        else if (strcmp(Sub.Grade, "C+") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 2.50;
        }
        else if (strcmp(Sub.Grade, "C0") == 0 || strcmp(Sub.Grade, "C") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 2.00;
        }
        else if (strcmp(Sub.Grade, "D+") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 1.50;
        }
        else if (strcmp(Sub.Grade, "D0") == 0 || strcmp(Sub.Grade, "D") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 1.00;
        }
        else if (strcmp(Sub.Grade, "F") == 0)
        {
            Sub.GPA = (float)Sub.Hakjum * 0.00;
        }
    
    }
    
    
    float CalcAveGPA(Subject* Sub)
    {
        float sum = 0;
        for (int i = 0; i < 3; i++)
        {
            sum += Sub[i].GPA;
        }
    
        return  sum / 3;
    }
    
    
    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 << setw(10) << "학번 : " << rSt.Hakbun << endl;
        cout << "============================================= " << endl;
        cout.width(15);
        cout << "과목명" << setw(10) << "과목학점" << setw(10) << "과목등급" << setw(10) << "과목평점" << endl;
        cout << "============================================= " << endl;
        for (int i = 0; i < 3; i++)
        {
            cout.width(10);
            cout << fixed;
            cout.precision(2);
    
    
            cout << rSt.Sub[i].SubName << setw(10) << rSt.Sub[i].Hakjum << setw(10) << rSt.Sub[i].Grade << setw(10) << rSt.Sub[i].GPA << endl;
        }
        cout << "============================================= " << endl;
        cout.width(10);
        cout << fixed;
        cout.precision(2);
    
        cout << "평균 평점" << rSt.AveGPA << endl;
    }
    
    
    Student* StdSearch(Student* pSt, int StudentNum)
    {
        char name[40];
    
        cout << endl << "검색할 학생 이름 : ";
        cin >> name;
    
        for (int i = 0; i < StudentNum; i++)
        {
            for (int j = 0; j < strlen(name) && pSt[i].StdName[j] == name[j] && strlen(name) == strlen(pSt[i].StdName); j++)
            {
                if (j == strlen(name) - 1)
                    return &pSt[i];
            }
        }
        return NULL;
    }
    
    
    void PrintAllStdList(const Student* pSt, int StudentNum )
    {
        cout << "==================================" << endl;
        cout << setw(10) << "학번" << setw(10) << "이름" << endl;
        cout << "==================================" << endl;
    
        for (int i = 0; i < StudentNum; i++)
        {
            cout << setw(10) << pSt[i].StdName << setw(7) << pSt[i].Hakbun << endl;
        }
        cout << "==================================" << endl;
    }
    
    
    void ModifyStdInfo(Student* pSt)
    {
        cout << "* <" << pSt->StdName << "," << pSt->Hakbun << ">의 정보를 수정하세요." << endl;
        cout << "이름 :";
        InputValue(pSt->StdName);
        cout << "학번 :";
        InputValue(pSt->Hakbun);
    }
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2021.04.24

    궁금한게 있어서요 ㅠㅠ


    제가 복수전공을 하는데 아무것도 모르는데 2학년 전공을 신청해서 수업을 듣고 있거든요..

    과제로 학생 성적 처리 프로그램이 나왔는데 인터넷 보면서 하다가 안되는 게 있어서요

    핵생 수랑 과목수를 동적으로 입력받고 출력하는 건데 학생수는 넘어가지는데 자꾸 교과목 칠때 터미널에

    서 나가지네요.. 해결 하는 방법 없을까요??

    include

    include

    include

    using namespace std;

    struct Subject { char SubName[30]; int Hakjum; char Grade[10]; float GPA; }; struct Student { char StdName[30]; int Hakbun; Subject *Sub; int SubNum; float AveGPA; };

    int menu = 0; int StudentNum;

    inline void PrintMenu(); 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 InputValue(char* str); inline void InputValue(int& i); void PrintAllStdList(const Student* pSt, int StudentNum); void ModifyStdInfo(Student* pSt); void InputData(Student *pSt, int StudentNum);

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

    int main() { cout<<"학생 수를 입력하세요 : "; cin>>StudentNum;

    do
    {
        PrintMenu();
        Student *St=new Student[StudentNum];
        if (menu == 1)
        {
         for(int i=0;i<StudentNum;i++)
            {
                InputData(St,StudentNum);
                St[i].AveGPA = CalcAveGPA(St[i].Sub);
            }
    
            cout << endl;
    
        }
        else if (menu == 2)
        {
            PrintAllData(St, StudentNum);
            cout << endl;
        }
        else if (menu == 3)
        {
            Student* SearchStd;
            SearchStd = StdSearch(St, StudentNum);
    
            if (SearchStd != NULL) 
               { 
                   PrintOneData(*SearchStd);
               }
        }
        else if (menu == 4)
        {
            PrintAllStdList(St,StudentNum);
            cout << endl;
        }
        else if (menu == 5)
        {
            ModifyStdInfo(StdSearch(St,StudentNum));
                cout << endl;
        }
        else if (menu == 6)
        {
            cout << "프로그램을 종료합니다." << endl;
            delete St;
            return 0;
        }
        else
        {
            cout << "올바른 메뉴입력이 아닙니다." << endl;
            cout << "프로그램을 종료합니다." << endl;
            delete St;
            return 0;
        }
    } while (1);
    

    }

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

    void InputData(Student pSt, int StudentNum) { for(int i=1;i<StudentNum;i++) { cout << ""<< i<<"번째 학생 이름과 학번을 입력하세요." << endl; cout << "이름 : "; cin >> pSt->StdName; cout << endl << "학번 : "; cin >> pSt->Hakbun; cout<<"과목수 : "; cin>>pSt->SubNum; cout << endl << "* 수강한 과목"<< pSt->SubNum << "개와 각 교과목명, 과목학점, 과목 등급을 입력하세요." << endl;

        Subject* stsub = new Subject[pSt->SubNum];
    
        for(int j=0;j<pSt->SubNum;j++)
        {
            cout << endl << "교과목명 : ";
            cin >> pSt->Sub[i].SubName;
            cout << endl << "과목학점수 : ";
            cin >> pSt->Sub[i].Hakjum;
            cout << endl << "과목등급(A+~F) : ";
            cin >> pSt->Sub[i].Grade;
    
            CalcGPA(pSt->Sub[i]);
        }
    }
    

    }

    void CalcGPA(Subject& Sub) { if (strcmp(Sub.Grade, "A+") == 0) { Sub.GPA = (float)Sub.Hakjum * 4.50; } else if (strcmp(Sub.Grade, "A0") == 0 || strcmp(Sub.Grade, "A") == 0) { Sub.GPA = (float)Sub.Hakjum * 4.00; } else if (strcmp(Sub.Grade, "B+") == 0) { Sub.GPA = (float)Sub.Hakjum * 3.50; } else if (strcmp(Sub.Grade, "B0") == 0 || strcmp(Sub.Grade, "B") == 0) { Sub.GPA = (float)Sub.Hakjum * 3.00; } else if (strcmp(Sub.Grade, "C+") == 0) { Sub.GPA = (float)Sub.Hakjum * 2.50; } else if (strcmp(Sub.Grade, "C0") == 0 || strcmp(Sub.Grade, "C") == 0) { Sub.GPA = (float)Sub.Hakjum * 2.00; } else if (strcmp(Sub.Grade, "D+") == 0) { Sub.GPA = (float)Sub.Hakjum * 1.50; } else if (strcmp(Sub.Grade, "D0") == 0 || strcmp(Sub.Grade, "D") == 0) { Sub.GPA = (float)Sub.Hakjum * 1.00; } else if (strcmp(Sub.Grade, "F") == 0) { Sub.GPA = (float)Sub.Hakjum * 0.00; }

    }

    float CalcAveGPA(Subject* Sub) { float sum = 0; for (int i = 0; i < 3; i++) { sum += Sub[i].GPA; }

    return  sum / 3;
    

    }

    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 << setw(10) << "학번 : " << rSt.Hakbun << endl; cout << "============================================= " << endl; cout.width(15); cout << "과목명" << setw(10) << "과목학점" << setw(10) << "과목등급" << setw(10) << "과목평점" << endl; cout << "============================================= " << endl; for (int i = 0; i < 3; i++) { cout.width(10); cout << fixed; cout.precision(2);

        cout << rSt.Sub[i].SubName << setw(10) << rSt.Sub[i].Hakjum << setw(10) << rSt.Sub[i].Grade << setw(10) << rSt.Sub[i].GPA << endl;
    }
    cout << "============================================= " << endl;
    cout.width(10);
    cout << fixed;
    cout.precision(2);
    
    cout << "평균 평점" << rSt.AveGPA << endl;
    

    }

    Student* StdSearch(Student* pSt, int StudentNum) { char name[40];

    cout << endl << "검색할 학생 이름 : ";
    cin >> name;
    
    for (int i = 0; i < StudentNum; i++)
    {
        for (int j = 0; j < strlen(name) && pSt[i].StdName[j] == name[j] && strlen(name) == strlen(pSt[i].StdName); j++)
        {
            if (j == strlen(name) - 1)
                return &pSt[i];
        }
    }
    return NULL;
    

    }

    void PrintAllStdList(const Student* pSt, int StudentNum ) { cout << "==================================" << endl; cout << setw(10) << "학번" << setw(10) << "이름" << endl; cout << "==================================" << endl;

    for (int i = 0; i < StudentNum; i++)
    {
        cout << setw(10) << pSt[i].StdName << setw(7) << pSt[i].Hakbun << endl;
    }
    cout << "==================================" << endl;
    

    }

    void ModifyStdInfo(Student* pSt) { cout << "* <" << pSt->StdName << "," << pSt->Hakbun << ">의 정보를 수정하세요." << endl; cout << "이름 :"; InputValue(pSt->StdName); cout << "학번 :"; InputValue(pSt->Hakbun); }