ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 100명의 신상 정보를 관리하는 프로그램
    Visual Studio/C 실전 2012. 9. 23. 16:29

    총 100명까지의 신상 정보를 입력하는 프로그램입니다. 숫자를 더 늘리고 싶다면 MAX값을 수정하면 되겠죠?

    이 프로그램은 프로그램 출력에 대해 까지 포스팅한 내용을 바탕으로 제작되었습니다.

    #include <stdio.h>
    #include <stdlib.h>

    #define MAX 100
    #define TRUE 1
    #define FALSE 0

    struct record {
     char fname[15+1]; // 성이고 +1은 NULL값을 위한 자리
     char lname[20+1]; // 이름
     char phone[11+1]; // 전화번호
     long income; //수입
     int month;
     int day;
     int year; //각각 생일의 월, 일 년도
    };

    struct record list[MAX]; //실제 구조체를 선언
    int last_entry=0; //항목의 전체 수
    void main(void);
    void get_data(void);
    void display_report(void);
    int continue_func(void);
    void clear(void);

    void main(){
     int cont = TRUE;
     int ch;

     while(cont == TRUE)
     {
      printf("\n\n MENU\n");
      printf("========\n");
      printf("\n1. 이름 입력");
      printf("\n2. 보고서 출력");
      printf("\n3. 종료");
      printf("\n\n선택하세요 ==>");
      ch = getchar();
      fflush(stdin); //추가 문자 제거

      switch(ch)
      {
      case'1':get_data();
       break;
      case'2':display_report();
       break;
      case'3':printf("\n\n이 프로그램을 이용해주셔서 감사합니다.\n");
       cont = FALSE;
       break;
      default: printf("유효하지 않은 항목입니다. 1~3항목 중에서만 선택해주세요!");
       break;
      }
     }
    }

    /* get_data의 목적은 사용자에게서 데이터를 구합니다.
    -- 100명의 자료를 입력하거나 사용자가 계속하지 않도록 선택할 때 까지 데이터를 구합니다.
    -- 복귀 값 : 없음
    -- 사용자가 분명하지 않은 경우에 생일에 0/0/0이 자동으로 입력됩니다.
    -- 각 월별로 모두 31일을 허용합니다. */

    void get_data(void){
     int cont;
     for (cont = TRUE; last_entry<MAX&&cont==TRUE;last_entry++)
     {
      printf("%d번째 사용자에 대한 정보를 입력하는 항목입니다.",last_entry+1);

      printf("\n\n성을 입력해주세요 : ");
      gets(list[last_entry].fname);

      printf("\n\n이름을 입력해주세요 : ");
      gets(list[last_entry].lname);

      printf("전화번호를 -를 포함하여 입력해주세요 : ");
      gets(list[last_entry].phone);

      printf("\n연봉을 입력해주세요");
      scanf("%ld",&list[last_entry].income);
      printf("\n생일을 입력해주세요");

      do{
       printf("생일의 월 : ");
       scanf("%d",&list[last_entry].month);
      }while(list[last_entry].month < 0 || list[last_entry].month > 12);

      do{
       printf("생일의 일 : ");
       scanf("%d",&list[last_entry].day);
      }while(list[last_entry].day < 0 || list[last_entry].day > 31);
      
      do{
       printf("생일의 년도 : ");
       scanf("%d",&list[last_entry].year);
      }while(list[last_entry].year != 0 && list[last_entry].year <1800 || list[last_entry].year > 1997);

      cont = continue_func();
      if(last_entry == MAX)
       printf("\n\n이미 전부 입력하셨습니다!\n");
     }
    }
     /* display_report()
     -- 화면에 보고서를 출력합니다.
     -- 복귀값 : 없음
     -- 보고서를 인쇄할 땐 stdout을 stdprn으로 변경하면 됩니다.
     */

     void display_report() {
      long month_total=0, grand_total=0; // 합계
      int x, y;

      fprintf(stdout, "\n\n");
      fprintf(stdout,"\nreport");
      fprintf(stdout,"\n========");

      for(x=0; x<=12; x++) // 월별로 반복
      {
       month_total=0;
       for(y=0; y < last_entry; y++)
       {
        if(list[y].month==x)
        {
         fprintf(stdout,"\n\t%s %s %s %ld",list[y].fname, list[y].lname, list[y].phone, list[y].income);
        }
       }
       fprintf(stdout, "\n%d월 총 수입은 : %ld",x,month_total);
       grand_total += month_total;
      }
      fprintf(stdout,"\n\n보고서 총 합 :");
      fprintf(stdout,"\n총 수입 : %ld", grand_total);
      fprintf(stdout,"\n평균 수입 : %ld", grand_total/last_entry);
      
      fprintf(stdout,"\n\n -- 보고서 끝 --");
     }

    /*continue_func()
    --사용자에게 계속할 것인지 묻습니다.
    --TRUE 계속할 경우, FALSE 마칠 경우
    */

    int continue_func(void){
     int ch;
     printf("계속하시겠습니까? (Y/N) :");
     fflush(stdin);
     ch = getchar();
     while(ch!='n' && ch!='N'&& ch!='y' && ch!='Y')
     {
      printf("유효하지 않은 선택입니다!");
      printf("끝내시려면 N, 계속하시려면 Y를 입력해주세요 :");
      fflush(stdin);
      ch=getchar();
     }
     clear();
     if(ch=='n'||ch=='N')
      return(FALSE);
     else
      return(TRUE);
    }

    void clear(void){
     char junk[80];
     gets(junk);

     

    'Visual Studio > C 실전' 카테고리의 다른 글

    C언어 도서관 좌석 예약 프로그램  (8) 2015.06.19
    C언어 버블 정렬  (1) 2015.03.31
    C언어 선택 정렬  (0) 2015.03.31

    댓글

Designed by Tistory.