ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2020년 1학기] C프로그래밍 - 출석 대체 과제물 (30/30)
    Study/과제 2020. 8. 22. 02:13

    이름, 학과, 주민번호 입력 및 정보 출력 프로그램


    -목차-

    1.     프로그램 소스

    2.     프로그램 실행 화면

    3.     프로그램 순서도


    1.   프로그램 소스

     

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

     

    //구조체 정의

    struct student{

        char name[10];  //이름

        char major[20];  //학과

        char birth[13];  //주민등록번호

        int leap; //주민번호 첫번째 2자리 연도 + 주민번호 일곱번째 숫자 연도 판단

        char month[10]; // 주민번호 세번째 네번째

        char day[10]; // 주빈번호 다섯번째 여섯번째

        char leap_check[20]; //주민번호 일곱번째 숫자로 연도 판단

        char nation_check[20]; // 주민번호 일곱번째 숫자로 국가 판단

        char sex_check[10]; // 주민번호 일곱번째 숫자로 성별 판단

     

        int ymd; // 주민번호 여섯자리 정수화

    };

     

    int main()

    {

        //구조체 배열 변수 선언

        struct student info[3];

     

        printf("3명의 학생 정보 입력\n");

     

        int numArr[10] = {1800, 1900, 1900, 2000, 2000, 1900, 1900, 2000, 2000, 1800};

        int nation_flag[10] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 0};

     

        //세명 정보 입력 것이므로 세번 반복 제어문

        int i;

        for(i=0; i<3; i++){

            printf("---------------------------------\n");

            printf("이름: ");

            scanf("%s", info[i].name);

            printf("학과: ");

            scanf("%s", info[i].major);

            printf("주민등록번호: ");

            scanf("%s", info[i].birth);

     

            //주민번호 자리 정수화

            int k = 0, j = 0;

            char year[20];

            for(k = 0; k<2; k++)

            {

                year[j++] = info[i].birth[k];

            }

            year[j] = NULL;

           

            //주민번호 세번째, 네번째 자리 정수화

            j = 0;

            for(k = 2; k<4; k++)

            {

                info[i].month[j++] = info[i].birth[k];

            }

            info[i].month[j] = NULL;

     

            //주민번호 다섯번째, 여섯번째 자리 정수화

            j = 0;

            for(k = 4; k<6; k++)

            {

               info[i].day[j++] = info[i].birth[k];

            }

            info[i].day[j] = NULL;

     

            //주민번호 7번째 자리로 성별 확인

            j = 0;

            char sex[20];

            sex[0] = info[i].birth[6];

            //7번째 숫자 2 나눠서 나머지가 0이면 여자, 아닐때 남자

            if(atoi(sex)%2 == 0){

                strcpy(info[i].sex_check, "여자");

            }else{

                strcpy(info[i].sex_check, "남자");

            }

           

            //주민번호 7번째 자리로 내국인 여부 확인

            if(nation_flag[atoi(sex)] == 0){

                strcpy(info[i].nation_check, "대한민국");

            }else{

                strcpy(info[i].nation_check, "외국");

            }

           

            //주민번호 7번째 자리로 윤년여부 확인

            info[i].leap = atoi(year)+numArr[atoi(sex)];

            strcpy(info[i].leap_check, "윤년아님");

            if(info[i].leap%4 == 0 && info[i].leap%100 != 0){

                strcpy(info[i].leap_check, "윤년");

            }

            if(info[i].leap%400 == 0){

                strcpy(info[i].leap_check, "윤년");

            }

           

            //입력 정보 이름, 생년월일, 윤년확인, 거주지 확인, 성별확인, 전공 출력

            printf("%s, %d %d %d, %s, %s, %s, %s\n", info[i].name, info[i].leap, atoi(info[i].month), atoi(info[i].day), info[i].leap_check, info[i].nation_check, info[i].sex_check, info[i].major);

           

            //주민번호 여섯자리 정수화

            info[i].ymd = info[i].leap*10000+atoi(info[i].month)*100+atoi(info[i].day);

        }

     

        printf("=================================\n");

        printf("3명의 정보 오름차순 정렬\n");

        printf("---------------------------------\n");

     

     

        //생년월일 크기에 따라 오름차순 정렬 - 버블정렬

        int a;

        struct student ymd_temp;

        for(a=0; a<3; a++){

            for(i=1; i<3; i++){

                if(info[i].ymd < info[i-1].ymd){

                    ymd_temp = info[i];//최솟값

                    info[i] = info[i-1];

                    info[i-1] = ymd_temp;

                }

            }   

        }

     

        //오름차순 정렬 출력

        for(i=0; i<3; i++){

            printf("%s, %d %d %d, %s, %s, %s, %s\n", info[i].name, info[i].leap, atoi(info[i].month), atoi(info[i].day), info[i].leap_check, info[i].nation_check, info[i].sex_check, info[i].major);

        }

     

        return 0;

       

    }

     

    2.   프로그램 실행 화면

     

    3.   프로그램 순서도

    댓글

The name is already in use.