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 



+ Recent posts