Description
[Problem] 1. Overview In this assignment, we will solve the problem of performing pivot transformation after entering student data and visualizing the results in a table and chart. l What is pivot transformation? It is a transformation that groups the given data by the category of a specific column and calculates the sum, average, maximum, etc. for the values in other columns . Figure 1 Example of pivot transformation 2. Description of student data 1) Dept: Department 2) Gender: Gender 3) Name: Name 4) Age: Age l Data details – Dept, Gender, and Name use the std::string type. – Dept, Gender, and Name do not include spaces. – Age uses the integer type. – The number of Dept types (e.g., CS, Bio) does not exceed 9. (Up to 9 is possible)
서 압축하여 제출하시면 됩니다. 만약 MacOS를 이용하는 경우 executable file 대신 makefile
– 각 Dept에 소속된 학생 수는 10,000을 넘지 않는다. (10000개까지 가능)
– Gender는 M,F 만 입력이 가능하다. (M = male, F = Female)
– Dept는 대문자만 입력으로 받는다.
– Name은 대소문자 모두 입력으로 받을 수 있다. (e.g., Minsu, MinSu, minsu)
– Age의 범위는 18 <= age <= 30으로 제한한다.
3. 프로그램 기능
프로그램을 실행하면 아래 사진과 같은 메뉴가 출력되며 사용자로부터 메뉴 번호를 입력 받는다. 이때 선
택 가능한 메뉴는 총 5개로 구성되고 각각의 메뉴에 따른 기능들은 아래에서 설명된다. 항상 메뉴에 따른
기능 수행이 끝난 후에는 메뉴를 다시 출력해주고 입력을 받도록 한다.
1) 학 생 추가 (Add a student)
위에서 설명했던 학생 데이터를 사용자로부터 입력 받는다. 이때 입력된 (학과, 성별, 이름, 나이)가 이
미 존재하면 중복으로 간주하여 추가하지 않고 “The student already exists”를 출력하도록 한다.
만약 중복이 아니라면 입력된 데이터를 추가한 뒤 “A student is added in table!”를 출력한다.
2) 학 생 삭제 (Delete a student)
사용자로부터 (학과, 성별, 이름, 나이)를 순차적으로 입력 받은 후 주어진 입력이 이미 추가된 리스트
내에 존재한다면 삭제한다. 이때 성공적으로 삭제가 되었다면 “Deleted!”를 출력하면 된다. 만약 매칭
이 되지 않거나 리스트가 비어 있는 상태라면 “Can’t Delete it”을 출력하면 된다.
예시: 리스트내에 만약 (CS/M/Minsu/20)이 이미 존재한다고 가정한다면 아래 왼쪽 이미지는 정확하
게 매칭이 되어 리스트 내에서 삭제되지만 오른쪽은 그렇지 아니하다)
3) 학 생 리스트 출력 (Print the student’s list)
입력 받은 학생 데이터를 테이블 형태로 출력한다. 이때 첫번째 줄에는 4개 열의 이름을 Dept, Gender,
Name, Age 출력한다. 다음 줄부터는 학생에 대한 정보를 출력하되 정렬하여 보여 주도록 한다. 이때
문자열은 사전 순서대로 숫자는 오름차순으로 정렬하도록 한다. 각 열 은 탭 문자(‘\t’)로 구분되며
각 줄의 맨 뒤에는 탭이나 공백이 없다.
4) 피벗 테이블 출력 (Pivot Table)
사용자는 카테고리와 함수를 선택할 수 있다. 카테고리에는 (Dept, Gender, Dept and Gender)로 세 가지
의 선택사항이 있다. 함수에는 (Average, Max, Min)으로 세 가지 선택사항이 있다. 이때 Function의 대상
이 되는 값으로 Age를 사용한다.
피벗테이블을 출력할 때, 첫째 줄에는 입력 받은 카테고리와 함수를 출력하고, 다음 줄부터는 카테고리별
로 Age에 함수를 적용하여 테이블 형태로 출력한다. 이때 피벗 테이블의 출력은 카테고리를 사전 순서대
로 정렬하여 나타낸다. 각 열은 탭 문자(‘\t’)로 구분되며 각 줄의 맨 뒤에는 탭이나 공백이 없다.
또한 함수로 적용된 값이 소수로 표현될 경우, 소수점 첫째자리까지 반올림하여 나타낸다.
카테고리 또는 카테고리 조합에 속하는 학생이 없는 경우는 해당 출력을 생략한다 (다음 페이지 이미지
참고).
(Raw/F에 속한 학생이 없으므로 출력하지 않는다)
5) 프로그램 종 료 (Exit)
“Exit!”를 출력하면서, 프로그램을 종료시킨다.
4. Class & Function
본 과제에서는 Class와 Function을 활용하여 문제를 해결하는 것을 목표로 한다. 따라서 아래와 같은
class를 구현하여 해당 문제를 해결한다. 각 Class는 hpp파일을 통해 정의하고, cpp파일을 통해 구체
적인 기능을 구현하도록 한다. 참고로 제시된 기능 이외에 추가적으로 새로운 class나 멤버 변수/함수
가 필요하다고 판단되면 구현하여 제출할 수 있다.
1) Student class
기본적인 학생 데이터를 표현하기 위한 class이다.
class student{
public:
string dept, name, gender;
int age;
void input_info();
};
(1) 멤버 변수
– string dept : 학과
– string name: 이름
– string gender: 성별
– int age: 나이
(2) 멤버 함수
– void Input_info(): 학생 정보(e.g., dept, name, gender, age)를 입력 받는다.
2) List class
전체 학생 정보를 저장하기 위해서는 하나의 List가 요구된다. 이때 List로 Linked List를 활용하도록
한다.
class list{
public:
int count, dept_cnt;
string dept[9];
node *head;
void sort(string metric);
};
(1) 멤버 변수
– int count : List 내 존재하는 Node의 개수
– int dept_cnt: List 내 존재하는 학과의 개수
– string dept[9]: 학과를 저장하기 위한 string array (참고로 학과의 최대 개수는 9개 이므로
size를 9로 설정)
– node *head: Linked List의 head (node class 참고)
(2) 멤버 함수
– Void list_sort(string metric):
앞서 프로그래밍 기능 파트에서 설명한 것처럼, 모든 출력은 정렬이 된 형태로 나타나야 한다.
이를 위해서 주어진 linked list를 정렬하여 저장하도록 한다. 이때 metric으로는 student class
의 멤버 변수인 dept, name, gender, age가 들어갈 수 있다. Metric이 주어지면 이를 기준으로
linked list를 정렬한다.
3) Node class
Linked List의 Node를 나타내기 위한 class이다.
class node{
public:
student data;
node *next;
};
(1) 멤버 변수
– Student data: student의 정보를 저장한다.
– Node * next: 다음 노드를 연결하기 위한 node pointer를 의미한다.
4) Function
아래 function들은 linked list의 node를 추가 및 삭제하기 위한 function이다.
void save_node(list&, node *);
void delete_node(list&, node *);
– void save_node(list &, node *): linked list에 node를 저장한다.
– void delete_node(list &, node *): linked list에 node를 삭제한다.
5. 제약조건
Library로 iostream, string, cmath 만을 사용해서 구현하도록 한다.



