A대학의 B본부는 학생과 교직원, 일반인으로부터 기탁받은 발전기금을 관리한다.
기탁받은 발전기금에 대한 정보는 파일에 저장된다.
발전기금 목록을 single-user 기반으로 하는 c++ 프로그램을 작성하시오.
o 학생은 학번(key), 이름, 소속학과, 휴대전화번호, 총기탁액 정보를 가진다.
o 교직원은 사번(key), 이름, 소속부서, 휴대전화번호, 내선번호, 총기탁액 정보를 가진다.
o 일반인은 이름, 전화번호, 총기탁액 정보를 가진다.
o 모든 전화번호는 반드시 XXX-XXXX-XXXX의 형태로 들어오는 것으로 가정한다.
o 모든 key값들 간에는 중복이 존재하지 않으며, 중복 전화번호도 존재하지 않는다
입력 파일에서도 제약조건에 맞게 중복값이 존재하지 않는 것으로 가정한다
o 첨부된 예시 파일 FundList.new.txt와 같이 파일의 각 내용은 공백으로 구분된다.
o 채점시에는 파일명이 다른 여러 파일을 사용하여 평가한다.
o 명령형 인자는 항상 전달되어야 한다.
[전체 조회]
[신규 기탁자 등록] 새로운 기탁자와 기부액 등록
[기존 기탁자 변경] 기탁자의 기탁액 변경
[기존 기탁자 삭제] 기탁 내용을 전부 삭제하여 목록에서 제외
o 파일의 구조는 입력되는 형태와 반드시 동일하게 유지.
o 효율성 증가를 위해 파일에 저장할 때도 기탁액 내림차순으로 정렬하여 저장.

o MyList는 Linked List 또는 동적배열을 포함하는 구조로 구현한다.
o MyList를 template으로 구현하면 더 높은 점수를 얻을 수 있다.
o 상속을 사용하지 않는 설계는 허용하지 않는다.
o 학번과 사번, 기탁자코드는 모든 사람이 가지는 속성이 아니므로, 부모 class인 class
Person이 아닌 파생클래스가 가지게 구현한다.
o Template으로 구현되는 MyList 는 다형성 전용으로 가정하고 구현한다.
MyList<Person> (또는 Key를 추가한 MyList<Person, string>)으로 선언할 수 있다.o 다형성을 사용한 구현에서는 자신을 type을 파악할 수 있는 변수를 하나라도 사용하면,다형성에 의한 가산점은 받을 수 없다.
o 전체 목록을 기탁액 내림차순 조회하지 않고, 학생 목록 / 교직원 목록 / 일반인 목록을 각각 별도로 내림차순 조회하고 저장하는 형식으로 구현할 수 있다.
o 입력 순서 또는 입력 역순으로 출력하고 저장해도 부분 점수를 받을 수 있다.
o 한번 프로그램을 거친 후에는 정렬된 목록이 입력되므로, O(NlogN) 정렬 방식을 적용하는 것보다는 insertion sort 의 insertion을 적용하는 것이 효율이다.
o 목록 자체를 정렬해 두지 않고, 출력시에 매번 정렬하는 방식은 허용하지 않는다.
o [필수 요소] 상속, 명령형 인자의 파일 처리, 동적 배열 또는 Linked List
o [추가 요소] Template, 다형성, 목록 정렬
o 동적 배열 또는 Linked List와, 동적 생성되는 객체에 대한 정확한 delete 여부 중요
o class에 필요없는 변수 포함 최소화
o 동적배열이나 Linked List 모두에서 정렬key가 존재하는 경우 신규/변경/삭제의 O(N)의 복잡도를 피할 수 없으므로, 이외의 기본적인 부분에서 비효율적인 코드를 최소화하도록 신경쓸 것