|
안녕하세요. C++ 코드 함수 프로토타입 변형에 관련되어 애로가 많아 질문드립니다.
현재 문제에서 주어진 요구사항을 출력시키는데는 전혀 문제가 없지만
문제가 제시한 상세 사항(함수)을 충족시키려하는데 어려움이 많아 도움을 구해보고 싶습니다.
요구 사항은 다 제대로 작동하기에 함수 프로토타입 요구 조건만 충족시켜서 첨삭해주실 고수 분 찾아봐요ㅜㅜ...
=========================================================================================
1. 개인 학생의 교과목 평균 평점을 구할 때 사용하는 코드를 묶어 CalcAveGPA()라는 함수를 구현
함수의 프로토타입 : float CalcAveGPA(Subject* Sub, int SubjectNum);
// Sub : 교과목 정보가 담긴 Subject 포인터 변수
// SubjectNum : 과목 수
2. 개인의 신상 정보와 성적 정보를 출력하는 PrintOneData()라는 함수를 구현
Student 구조체 매개변수 인자는 반드시 레퍼런스로...
함수의 프로토타입 : void PrintOneData(const Student& rSt);
// rSt : 학생 정보가 담긴 Student 레퍼런스 변수
3. 전체 학생의 신상 정보와 성적 정보를 출력하는 부분을 PrintAllData()라는 함수를 구현
이 함수는 개인의 학생 정보를 출력하는 PrintOneData() 함수를 호출하여 사용
함수의 프로토타입 : void PrintAllData(const Student* pSt, int StudentNum);
// pSt : 학생 정보가 담긴 Student 포인터 변수
// StudentNum : 전체 학생 수
// 모든 학생의 정보를 출력하기 위해 학생 개인의 정보를 출력하는 PrintOneData() 함수 호출
4. 특정 학생의 이름을 검색하여 해당 학생 정보가 있는 주소를 리턴하는 기능을 가진 StdSearch()라는 함수를 구현
특정 학생의 이름을 사용자로부터 입력받고, 해당되는 학생이 있는지 검색한 후, 검색에 성공하면 해당 학생의 정보가 있는 곳의 주소를, 성공하지 못하면 NULL을 리턴받고 에러 메시지 출력.
함수의 프로토타입 : Student* StdSearch(Student *pSt);
// pSt : 학생정보가 담긴 Student 포인터 변수
// 리턴값 : 해당 학생의 정보가 있는 곳의 주소
#include <iostream>
#include <iomanip>
using namespace std;
const char jumsu[8][3] = { "D0", "D+", "C0", "C+", "B0", "B+", "A0", "A+" };
typedef struct subject
{
char subName[30];
int hakjum;
char grade[10];
float gpa;
}SubJect;
typedef struct student
{
char stdName[20];
int hakbun;
SubJect sub[3];
float ave_gpa;
}Student;
void PrintMenu(void)
{
cout << "===== 메뉴 =====" << endl;
cout << "1. 학생 성적 입력" << endl;
cout << "2. 전체 학생 성적 보기" << endl;
cout << "3. 학생 이름 검색" << endl;
cout << "4. 프로그램 종료" << endl << endl;
cout << "원하는 기능을 입력하세요 : ";
}
float average(int hakjum, char* grade)
{
for (int i = 0; i < 9; i++)
{
if (strcmp(jumsu[i], grade) == 0)
return hakjum * ((i * 0.5f) + 1);
}
return 0;
}
void CalcGPA(SubJect& Sub)
{
cout << "교과목명 : ";
cin >> Sub.subName;
cout << "과목 학점수 : ";
cin >> Sub.hakjum;
cout << "과목등급(A+ ~ F) : ";
cin >> Sub.grade;
Sub.gpa = average(Sub.hakjum, Sub.grade);
cout << endl;
}
void PrintAllData(Student* stu)
{
cout << "이름 : " << stu->stdName << " 학번 : " << stu->hakbun << endl;
cout.width(10); cout << "========================================================" << endl;
cout.width(20); cout << "과목명";
cout.width(10); cout << "과목학점";
cout.width(10); cout << "과목등급";
cout.width(10); cout << "과목평점" << endl;
for (int j = 0; j < 3; j++)
{
cout.width(20); cout << stu->sub[j].subName;
cout.width(7); cout << stu->sub[j].hakjum;
cout.width(10); cout << stu->sub[j].grade;
cout.width(11); cout << stu->sub[j].gpa << endl;
}
cout << "========================================================" << endl;
stu->ave_gpa = (stu->sub[0].gpa + stu->sub[1].gpa + stu->sub[2].gpa) / 3;
cout.width(46); cout << "평균평점 : " << stu->ave_gpa << endl;
cout << endl << endl;
}
void StdSearch(char* inname, student *pSt)
{
if (strcmp(inname, pSt->stdName) == 0)
PrintAllData(pSt);
}
int main(void)
{
bool check = true;
int menu_input = 0;
int student_num = 0;
Student stu[10];
cout.setf(ios::fixed, ios::floatfield);
cout.precision(2);
while (check)
{
PrintMenu();
cin >> menu_input;
switch (menu_input)
{
case 1:
student_num++;
cout << endl << "* " << student_num << "번째 학생 이름과 학번을 입력하세요." << endl;
cout << "이름 : ";
cin >> stu[student_num - 1].stdName;
cout << "학번 : ";
cin >> stu[student_num - 1].hakbun;
cout << endl << "* 수강한 과목 3개와 각 교과목명, 과목학점, 과목등급을 입력하세요." << endl;
for (int i = 0; i < 3; i++)
CalcGPA(stu[student_num - 1].sub[i]);
break;
case 2:
cout << "전체 성적 보기" << endl;
cout << "========================================================" << endl;
for (int i = 0; i < student_num; i++)
PrintAllData(&stu[i]);
system("pause");
break;
case 3:
cout << endl << endl << endl << endl;
char inname[20];
cout << "검색 할 학생 이름 : ";
cin >> inname;
for (int i = 0; i < student_num; i++)
StdSearch(inname, &stu[i]);
system("pause");
break;
case 4:
check = false;
break;
default:
break;
}
system("cls");
}
cout << "프로그램을 종료합니다." << endl;
return 0;
}
|