C/C++ 언어 파일 읽어 성적 평균, 학점, 검색, 순위 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | #include <stdio.h> #include <string.h> #define MAX_DATA 20 #define DATA_FILE "data.txt" typedef struct Student{ char name[10]; char st_num[10]; int eng; int math; int phy; int che; double aver; char point; }STU; void averNpoint(STU *stu, int inputCnt); void inputData(STU *stu, int *inputCnt); void averListprint(STU *stu, int inputCnt); void pointListprint(STU *stu, int inputCnt); void searchPoint(STU *stu, int inputCnt); void sort(STU *stu, int inputCnt); int maxCheck(int check); int main() { int select = 0; int inputCnt = 0; STU stu[MAX_DATA]; do { printf("1. 성적입력\n"); printf("2. 평균 List 출력\n"); printf("3. 학점 List 출력\n"); printf("4. 성적 검색\n"); printf("5. 성적 순위 List 출력\n"); printf("6. 나가기\n"); printf("\n선택> "); fflush(stdin); scanf("%d", &select); switch(select) { case 1: inputData(stu, &inputCnt); break; case 2: averListprint(stu, inputCnt); break; case 3: pointListprint(stu, inputCnt); break; case 4: searchPoint(stu, inputCnt); break; case 5: sort(stu, inputCnt); break; default : break; } } while(select != 6); return 0; } int maxCheck(int check) { if(check >= MAX_DATA) { printf("입력 공간이 부족합니다.\n"); return 1; } return 0; } void sort(STU *stu, int inputCnt) { int i = 0, j = 0; STU temp; for (i = inputCnt-1; i > 0; i--) { for (j = 0; j < i; j++) { if(stu[j].aver < stu[j+1].aver) { temp = stu[j+1]; stu[j+1] = stu[j]; stu[j] = temp; } } } printf("\n성적 순위 List 출력\n"); for(i = 0; i < inputCnt;i++) { printf("%7s %8s %4d %4d %4d %4d %6.2lf %2c\n", stu[i].name, stu[i].st_num, stu[i].eng,stu[i].math,stu[i].phy,stu[i].che, stu[i].aver, stu[i].point); } printf("\n"); } void searchPoint(STU *stu, int inputCnt) { int i = 0; char search[10] ="\0"; printf("\n성적 검색\n"); printf("학번 입력> "); fflush(stdin); scanf("%s",&search); for(i = 0; i < inputCnt;i++) { if(!strcmp(search,stu[i].st_num)) printf("%6s %7s %c\n", stu[i].name,stu[i].st_num,stu[i].point); } printf("\n"); } void pointListprint(STU *stu, int inputCnt) { int i = 0; printf("\n학점 List 출력\n"); for(i = 0; i < inputCnt;i++) { printf("%6s %7s %c\n",stu[i].name,stu[i].st_num,stu[i].point); } printf("\n"); } void averListprint(STU *stu, int inputCnt) { int i = 0; printf("\n평균 List 출력\n"); for(i = 0; i < inputCnt;i++) { printf("%6s %7s %6.2lf\n",stu[i].name,stu[i].st_num,stu[i].aver); } printf("\n"); } void averNpoint(STU *stu, int inputCnt) { stu[inputCnt].aver = (double)(stu[inputCnt].eng+stu[inputCnt]. math+stu[inputCnt].phy+stu[inputCnt].che) / 4.0; if(stu[inputCnt].aver >= 90.0) stu[inputCnt].point = 'A'; else if(stu[inputCnt].aver >= 80.0 && stu[inputCnt].aver < 90.0) stu[inputCnt].point = 'B'; else if(stu[inputCnt].aver >= 70.0 && stu[inputCnt].aver < 80.0) stu[inputCnt].point = 'C'; else if(stu[inputCnt].aver >= 60.0 && stu[inputCnt].aver < 70.0) stu[inputCnt].point = 'D'; else stu[inputCnt].point = 'F'; } void inputData(STU *stu, int *inputCnt) { FILE *fp = fopen(DATA_FILE,"r"); if(maxCheck(*inputCnt)) return; if(*inputCnt == 0) { while(!feof(fp)) { if(maxCheck(*inputCnt)) return; fscanf(fp,"%s %s %d %d %d %d",stu[*inputCnt].name,stu[*inputCnt].st_num, &stu[*inputCnt].eng,&stu[*inputCnt].math, &stu[*inputCnt].phy,&stu[*inputCnt].che); averNpoint(stu,*inputCnt); (*inputCnt)++; } fclose(fp); } else { if(maxCheck(*inputCnt)) return; scanf("%s %s %d %d %d %d",stu[*inputCnt].name,stu[*inputCnt].st_num, &stu[*inputCnt].eng,&stu[*inputCnt].math, &stu[*inputCnt].phy,&stu[*inputCnt].che); averNpoint(stu,*inputCnt); (*inputCnt)++; } } | cs |
C/C++ 언어 파일 읽어 성적 평균, 학점, 검색, 순위 출력
<data.txt>
홍길동 0100123 90 91 92 93 길동홍 0200234 100 99 98 97 김길동 0300345 75 100 90 85 길동김 0400456 100 100 93 91 김순이 0500567 80 86 88 84 이순이 0600678 97 67 74 88 박순이 0700789 97 67 74 88 |
'C,C++ > 예제' 카테고리의 다른 글
| C/C++ 언어 콘솔에서 텍스트에 색깔 적용하기 예제 프로그램 (0) | 2016.02.02 |
|---|---|
| C/C++ 언어 원하는 위치에 사각형 그리기 예제 프로그램 (0) | 2016.02.02 |
| C/C++ 언어 printf()의 여러가지 출력 (0) | 2016.02.02 |
| C/C++ 언어 printf() 출력 방법 (0) | 2016.02.02 |
| C/C++ 언어 두 정수를 입력 받아 연산하기 (0) | 2016.02.02 |