본문 바로가기
01.Bit 단기/C

30_파일IO서식기반

by chojju 2018. 4. 28.
반응형

#include <stdio.h>

struct student_t{
 char name[20];
 int kor;
 int eng;
 int mat;
 int total;
 float aver;
 char grad;
};
void fun_inputjumsu(struct student_t * stulist, int size);
void fun_printstudent(const struct student_t * stulist, int size);
void fun_input_sum(struct student_t * stulist, int size);
void fun_input_aver(struct student_t * stulist, int size);
void fun_printresult(const struct student_t * stulist, int size);
void fun_input_grad(struct student_t * stulist, int size);

void fun_filewrite(struct student_t * stulist, int size);
void fun_fileread(struct student_t * stulist, int size);

int main(){
 struct student_t  stulist[4] = { 0 };

 fun_fileread(stulist, 4);
// fun_inputjumsu(stulist, 4);
 fun_input_sum(stulist, 4);
 fun_input_aver(stulist, 4);
 fun_input_grad(stulist, 4); //<==================
 fun_printstudent(stulist, 4);
 fun_printresult(stulist, 4);

 fun_filewrite(stulist, 4);
 return 0;
}

void fun_fileread(struct student_t * stulist, int size)
{
 FILE *in = fopen("data.txt", "r");
 if (in == NULL)
 {
  printf("파일 열기 에러\n");
  return;
 }
 //==============================================
 for (int i = 0; i < size; i++)
 {
  fscanf(in, "%10s%10d%10d%10d",
   stulist[i].name, &stulist[i].kor,
   &stulist[i].eng, &stulist[i].mat);
 }
 //==============================================
 fclose(in);
}

void fun_filewrite(struct student_t * stulist, int size)
{
 FILE *out = fopen("data.txt", "w");
 if (out == NULL)
 {
  printf("파일 열기 에러\n");
  return;
 }
 //==============================================
 for (int i = 0; i < size; i++)
 {
  fprintf(out, "%10s%10d%10d%10d\n",
   stulist[i].name, stulist[i].kor,
   stulist[i].eng, stulist[i].mat);
 }
 //==============================================
 fclose(out);
}


void fun_input_grad(struct student_t * stulist, int size)
{
 int i;
 for (i = 0; i < size; i++)
 {
  if (stulist[i].aver >= 90.0f && stulist[i].aver <= 100.0f)
  {
   stulist[i].grad = 'A';
  }
  else if (stulist[i].aver >= 80.0f && stulist[i].aver <= 89.0f)
  {
   stulist[i].grad = 'B';
  }
  else if (stulist[i].aver >= 70.0f && stulist[i].aver <= 79.0f)
  {
   stulist[i].grad = 'C';
  }
  else if (stulist[i].aver >= 60.0f && stulist[i].aver <= 69.0f)
  {
   stulist[i].grad = 'D';
  }
  else
  {
   stulist[i].grad = 'F';
  }
 }
}

void fun_printresult(const struct student_t * stulist, int size)
{
 int i;
 float kor_sum = 0, eng_sum = 0, mat_sum = 0;
 for (i = 0; i < size; i++)
 {
  kor_sum = kor_sum + stulist[i].kor;
  eng_sum = eng_sum + stulist[i].eng;
  mat_sum = mat_sum + stulist[i].mat;
 }
 printf(" >> 국어 평균 : %.2f\n", (float)kor_sum / size);
 printf(" >> 영어 평균 : %.2f\n", (float)eng_sum / size);
 printf(" >> 수학 평균 : %.2f\n", (float)mat_sum / size);
}


void fun_input_aver(struct student_t * stulist, int size)
{
 int i;
 for (i = 0; i < size; i++)
 {
  stulist[i].aver = stulist[i].total / 3.0f;
 }
}

void fun_input_sum(struct student_t * stulist, int size)
{
 int i;
 for (i = 0; i < size; i++)
 {
  stulist[i].total = stulist[i].kor + stulist[i].eng + stulist[i].mat;
 }
}

void fun_inputjumsu(struct student_t * stulist, int size)
{
 //국어, 영어, 수학
 int i;
 for (i = 0; i < size; i++)
 {
  printf("[%d] 번째 학생 성적 입력(국어, 영어, 수학)\n", i + 1);
  printf("  >> 입력 예) 홍길동 100 90 80 : ");
  scanf("%s", stulist[i].name);
  scanf("%d%d%d", &stulist[i].kor, &stulist[i].eng, &stulist[i].mat);
  printf("\n");
 }
}

void fun_printstudent(const struct student_t * stulist, int size)
{
 int i;
 printf("%10s%10s%10s%10s%10s%10s%10s\n",
  "이름", "국어", "영어", "수학", "총점", "평균", "등급");
 printf("======================================================================\n");

 for (i = 0; i < size; i++)
 {
  printf("%10s%10d%10d%10d%10d%10.2f%10c\n",
   stulist[i].name,
   stulist[i].kor, stulist[i].eng, stulist[i].mat,
   stulist[i].total, stulist[i].aver,
   stulist[i].grad);
 }
 printf("======================================================================\n");

}

반응형

'01.Bit 단기 > C' 카테고리의 다른 글

32_난수 중복없이 출력  (0) 2021.11.29
31_파일IO바이너리모드  (0) 2018.04.28
29_파일복사  (0) 2018.04.28
28_파일IO문자전용  (0) 2018.04.28
27_파일IO기본코드  (0) 2018.04.28

댓글