성적처리프로그램 질문
조회수 973회
제가 복수전공을 하는데 아무것도 모르는데 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);
}
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력