본문 바로가기
Computer & Program/잡다한 이모저모

이름과 점수를 입력받아 관리하는 프로그램

by TDRemon 2009. 3. 4.
반응형

#include<stdio.h>
#include<windows.h>
#include<conio.h>

#define DataFile "c:\\data.txt"

void menu();
void input_sub();
void append_sub();
void search_sub();
void view_sub();

struct AA{
 char name[20]; // 이름 저장할 배열
 int kor, eng, tot; // 국어, 영어, 총점
 double avg; // 평균
};

void main()
{
 char ch;
 while(1){
  menu();
  ch = getche(); // 문자하나를 받아 ch에 저장
  switch(ch){
   case '1' : input_sub(); break;
   case '2' : append_sub(); break;
   case '3' : search_sub(); break;
   case '4' : view_sub(); break;
   case '5' : exit(0);
  }
 }
}

void menu()
{
 system("cls"); // 화면 클리어
 printf("1.InputData\n");
 printf("2.AppendData\n");
 printf("3.SearchData\n");
 printf("4.ViewData\n");
 printf("5.Exit\n");
 printf("Select ? ");
}

void search_sub()
{
 struct AA saram;
 int sw;
 char temp[20], imsi[20];
 FILE *fp;
 fp=fopen(DataFile, "r");
 system("cls");
 printf("Serach Name ? ");
 scanf("%s", temp);

 while(1){
  fgets(saram.name, 20, fp);
  if(feof(fp))
   break;
  fscanf(fp, "%d %d", &saram.kor, &saram.eng);
  fscanf(fp,"%*c"); // enter clear
  saram.name[strlen(saram.name)-1] = '\0'; //마지막 문자열에 저장된 '\n'를 '\0'로 바꿔저는 함수
  strcpy(imsi,saram.name); // saram.name에 저장된 내용을 imsi에 복사
  strupr(temp); // strupr함수는 소문자를 대문자로 바꿔주는 함수이다
  strupr(imsi); // strlwr함수는 대문자를 소문자로 바꿔주는 함수이다
  if(strncmp(temp,imsi,strlen(temp))==0){
   saram.tot = saram.kor+saram.eng;
   saram.avg = (double)saram.tot/2;
   printf("%-20s%-5d%-5d%-5d%-8.2lf\n", saram.name, saram.kor, saram.eng, saram.tot, saram.avg);
  }
  sw=1;
 }
 if(sw==0)printf("Nor found.....\n");
 getch(); // 하나의 문자를 입력 받을때까지 기다림
}

void input_sub()
{
 struct AA saram;
 FILE *fp;
 fp=fopen(DataFile, "w");
 system("cls");
 printf("==== Input Data ====\n");

 while(1){
  printf("Name ? "); gets(saram.name); fflush(stdin);
  if(stricmp(saram.name, "end")==0)
   break;
  printf("Kor ? "); scanf("%d", &saram.kor); fflush(stdin);
  printf("Eng ? "); scanf("%d", &saram.eng); fflush(stdin);

  fprintf(fp, "%s\n", saram.name);
  fprintf(fp, "%5d%5d\n", saram.kor, saram.eng);
 }
 fclose(fp);

}

void append_sub()
{
 struct AA saram;
 FILE *fp;
 fp=fopen(DataFile, "a");
 getch();
 system("cls");
 printf("==== Append Data ====\n");

 while(1){
  printf("Name ? "); gets(saram.name); fflush(stdin);
  if(stricmp(saram.name,"end")==0)
   break;
  printf("Kor ? "); scanf("%d", &saram.kor); fflush(stdin);
  printf("Eng ? "); scanf("%d", &saram.eng); fflush(stdin);

  fprintf(fp, "%s\n", saram.name);
  fprintf(fp, "%5d%5d\n", saram.kor, saram.eng);
 }
 fclose(fp);
}

void view_sub()
{
 FILE *fp;
 struct AA saram;
 int cnt = 0;
 fp = fopen(DataFile, "r");

 system("cls"); // 화면 클리어
 printf("==== Data View ====\n");

 printf("%-20s%-5s%-5s%-5s%-8s\n", "Name", "Kor", "Eng", "Tot", "Avg");

 while(1){
  fgets(saram.name, 20, fp);
  fscanf(fp, "%*c"); // 버퍼에 있는 데이터를 저장하지 않고 꺼내기만 함.
  if(feof(fp))
   break;
  fscanf(fp, " %d %d", &saram.kor, &saram.eng);
  fscanf(fp, "%*c"); // enter clear


  saram.tot = saram.kor+saram.eng;
  saram.avg = (double)saram.tot/2;

  saram.name[strlen(saram.name)-1] = '\0';

  if(cnt==0){
   system("cls");
   printf("%-20s%-5s%-5s%-5s%-8s\n", "Name", "Kor", "Eng", "Tot", "Avg");
  }

  printf("%-20s%-5d%-5d%-5d%-8.2lf\n", saram.name, saram.kor, saram.eng, saram.tot, saram.avg);
  cnt++;
  if(cnt==3){
   printf(".................more\n");
   getch();
   cnt=0;
  }
 }
 printf(".................data end\n");
 getch(); // 문자하나 입력 받을때까지 잠깐 멈춰 주세요

 fclose(fp);
}

반응형

댓글