문제 서술 : 정렬과 탐색, 해싱 기법을 활용하여 학생 성적표를 관리하는 프로그램을 구현해결방법 및 프로그래밍 환경학생의 성적입력을 받는 부분은 파일 입.출력을 이용해서 record.txt 파일에서 성적을 읽어왔습니다. 일단 임시 배열에 모든 데이터를 저장한 후에 학번의 키 값에 따라 각각의 배열에 저장했습니다. 저장한 성적으로부터 총점과 평균을 구해서 배열을 저장했습니다.해싱함수로는 제산함수를 이용했습니다. 학번을 해싱테이블 크기로 나눠서 키 값을 구했습니다. 그리고 선형탐색법을 이용해서 오버플로처리를 하였습니다.탐색은 전체 성적출력의 경우 학생 수 보다 해싱테이블이 커지면 어디에 저장되어 있는지 알 필요성이 있어서 키 값을 key_save란 배열에 저장해두어 출력시에 키 값의 배열만 출력하도록 했습니다.개인 성적출력의 경우는 일단 학번을 입력하면 그 학번의 키 값을 얻어와서 그 키 값의 배열만 출력하게 했습니다.정렬은 기본 알고리즘은 버블정렬을 이용했고, 학번,중간,기말,과제,충점에 따라서 정렬이 가능하게 했는데, 각각의 키 값이 있어 그 키 값을 입력하면 키에 따라 내림차순으로 정렬됩니다. 올림차순은 성적관리에서 굳이 필요할것 같지 않아 구현하지 않았습니다.학점을 입력하는 부분은 일단 프로그램을 시작하면 기본 학점비율이 설정되게 했습니다.학점은 상대평가를 기준으로 하기 때문에 일단 총점에 따른 석차를 기록하였습니다.석차가 기록이 되면 입력되어 있는 학점 비율에 따라 학생수에 곱을 해주어 몇 %까지 무슨 학점이 되도록 했습니다. 일단 모든 학생에게 F학점을 기록하고 그 다음 퍼센티지까지 D학점, 그 다음까지 C학점.....이렇게 학점을 기록했고 , 오류방지를 위해 상위학점은 하위학점보다 더 높은 비율로 설정할 수 없도록 하였습니다.전체 성적의 통계를 내는 부분은 단순히 모든 성적을 더하고 학생수로 나누어서 평균을 내는 방법을 이용했습니다. 이 부분은 소수점이 필요해서 float형 배열을 선언하였습니다.프로그래밍은 비쥬얼 스튜디오 6.0을 이용하였습니다..실행방법최초 실행을 하면 해싱테이블과 메뉴가 나옵니다. 개인성적보기를 하면 학번 입력이 나오는데 저장되어 있는 학번을 입력하면 그 학번의 성적이 나오게 됩니다.전체성적보기를 하면 정렬 기준을 정할 수 있는데 각각의 번호를 고르면 거기에 맞게 정렬이 되어서 모든 데이터가 출력됩니다.성적통계보기를 하면 각각의 시험,레포트에 따른 총점과 평균이 출력됩니다.학점비율변경은 일단 메뉴에 지금 설정되어 있는 학점의 비율이 표시되고 비율을 변경하면 갱신해서 표시되게 됩니다. 학점 입력시 20%내면 20 이라고 입력을 하면 됩니다.학점입력시 주의사항으로 하위학점은 상위학점보다 더 낮은 비율로 설정할 수 없고 제대로 입력할 때까지 계속 입력을 받게 됩니다.해싱테이블 보기를 하면 지금 해싱테이블에 저장되어 있는 학번이 출력됩니다.#include #include #include #define MAXNSTUDENT 20//학생수#define NLEN 20//이름길이#define NTEST 7//성적의 종류#define TABLE_SIZE 17//해싱테이블크기int hash_table[TABLE_SIZE];//해싱테이블char name[MAXNSTUDENT][NLEN];//이름int test[MAXNSTUDENT][NTEST];//성적char name1[MAXNSTUDENT][NLEN];//이름 임시저장int test1[MAXNSTUDENT][NTEST];//성적 임시저장float AllRecord[6];char grade[MAXNSTUDENT];//학점int key_save[TABLE_SIZE];//해싱키값 저장double a=15,b=40,c=80,d=90;//학점 비율int hash(int value)//해싱펑션함수(제산함수){int i=0;i = value % TABLE_SIZE;//학번을 해싱테이블 크기로 나눔return i;}void hash_display()//해싱테이블 표시 함수{int k = 0, m=0;for(m=0;m