|
안녕하세요. 현재 대학교에서 컴퓨터를 전공하고 있는 학생입니다.
다름 아니라 과제를 수행하는 중에 도저히 문제 해결 방법에 감이 안잡혀서
중간에 막혀버린 상태입니다.
C++를 배우는 과목인데 C++를 배우는 과정이다보니 지금 당장은 객체지향 개념을 사용하지 않고
그냥 C처럼 코딩을 해버려야하는게 특징이구요.
제가 막힌 문제는 교과목들의 평점 계산 부분입니다.
A+일때 4.5 * 과목당 학점
A0일때 4 * 과목당 학점
B+일때 3.5 * 과목당 학점
...
F일때 0점
이 부분을 구현하려 strcmp를 사용했는데 자꾸 오류가 떠버리는데 여기서 어떻게 해야
제가 원하는 방향으로 데이터 처리를 하게 만들지 모르겠어서 문제입니다. ㅜㅜ
두번째는 while문으로 계속 메뉴를 반복시켜야하는데 이때 3번 프로그램 종료를 입력했을때는
프로그램을 종료시켜야하는데 while문 내의 switch문 안에 들어가 있다보니
프로그램을 종료시키고 싶지만 계속 메뉴화면이 구현되는데 이때 제가 switch문이 아닌 다른 형태로
코딩을 해야하는거 같은데 이것도 어떤 다른 대안이 있는지를 모르겠습니다.
아래 소스코드 보시고 제가 학점을 구현하기 위해서 어떻게 해야되는지
메뉴 종료시 프로그램을 종료시키는 방법 등등 알려주시면 감사하겠습니다.
막 배우는 입장이다보니 실력있는 분들의 조언이 절실한 상태입니다.
#include <iostream>
#include <iomanip>
#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[3]; // 과목
float ave_gpa; // 교과목 평균 평점
};
int main(void)
{
struct student stu[2];
int menu, i, j, k;
char* a[9][2] = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F" };
while (1)
{
cout << "---- 메뉴 ----" << endl;
cout << "1. 학생 성적 입력" << endl;
cout << "2. 전체 학생 성적 보기" << endl;
cout << "3. 프로그램 종료" << "\n\n";
cout << "원하는 기능을 입력하세요 : ";
cin >> menu;
cout << "\n";
switch (menu)
{
case 1:
for (i = 0; i < 2; i++)
{
cout << "* " << i + 1 << " 번째 학생 이름과 학번을 입력하세요." << endl;
cout << "이름 : ";
cin >> stu[i].stdName;
cout << "학번 : ";
cin >> stu[i].hakbun;
cout << "\n\n\n";
cout << "* " << "수강한 과목 3개와 각 교과목명, 과목학점, 과목등급을 입력하세요." << endl;
for (j = 0; j < 3; j++)
{
cout << "교과목명 : ";
cin >> stu[i].sub[j].subName;
cout << "과목학 점수 : ";
cin >> stu[i].sub[j].hakjum;
cout << "과목등급(A+ ~ F) : ";
cin >> stu[i].sub[j].grade;
cout << "\n\n";
if (strcmp(stu[i].sub[j].grade, a[0]) == 0)
stu[i].sub[j].gpa = 4.5 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[1]) == 0)
stu[i].sub[j].gpa = 4 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[2]) == 0)
stu[i].sub[j].gpa = 3.5 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[3]) == 0)
stu[i].sub[j].gpa = 3 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[4]) == 0)
stu[i].sub[j].gpa = 2.5 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[5]) == 0)
stu[i].sub[j].gpa = 2 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[6]) == 0)
stu[i].sub[j].gpa = 1.5 * stu[i].sub[j].grade;
else if (strcmp(stu[i].sub[j].grade, a[7]) == 0)
stu[i].sub[j].gpa = 1 * stu[i].sub[j].grade;
else
stu[i].sub[j].gpa = 0;
}
}
break;
case 2:
cout.width(10);
cout << "전체 학생 성적 보기" << endl;
cout << "========================================================" << endl;
for (i = 0; i < 2; i++)
{
cout << "이름 : " << stu[i].stdName << " 학번 : " << stu[i].hakbun << endl;
cout << "========================================================" << endl;
cout.width(20);
cout << "과목명";
cout.width(20);
cout << "과목학점";
cout.width(20);
cout << "과목등급";
cout.width(20);
cout << "과목평점" << endl;
cout << "========================================================" << endl;
for (j = 0; j < 3; j++)
{
cout.width(20);
cout << stu[i].sub[j].subName;
cout.width(20);
cout << stu[i].sub[j].hakjum;
cout.width(20);
cout << stu[i].sub[j].grade;
cout.width(20);
cout << stu[i].sub[j].gpa;
}
cout << "========================================================" << endl;
cout.width(40);
cout << "평균평점 : xx \n" << endl;
}
break;
case 3:
cout << "프로그램을 종료합니다." << endl;
break;
default:
cout << "잘못 입력되었습니다. \n" << endl;
break;
}
}
return 0;
}
|