이코드 맨위에 1번 inputdata 코드 아시는분 알려주세요~ 과제 하고있는데 힘듭니다 ㅠㅠ 2명의 학생과 3개의 교과목을 일률적으로 입력받던 프로그램을 동적으로 학생 수와 과목 수를 입력받 을 수 있도록 수정해야합니다!
조회수 867회
요구하는 조건들과 실행결과 예시입니다! 저도 하고있는데 어려워서 질문합니다!!
1.void InputData(Student *pSt, int StudentNum); // pSt : 수정할 학생정보 포인터 매개변수 // StudentNum : 전체 학생 수 • 2명의 학생과 3개의 교과목을 일률적으로 입력받던 프로그램을 동적으로 학생 수와 과목 수를 입력받 을 수 있도록 수정
float CalcAveGPA(subject *, int) 구조체를 이렇게 바꿔야합니다. 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.Grade1=='+') 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; }
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력