-
[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. 프로그램 순서도
'Study > 과제' 카테고리의 다른 글
[2020년 1학기] 데이터 정보처리 입문 - 출석 대체 과제물 (30/30) (0) 2020.08.22 [2020년 1학기] 컴퓨터의 이해 - 중간과제물 (30/30) (0) 2020.08.22 [2020년 1학기] 유비쿼터스 컴퓨팅 개론 - 중간과제물 (28/30) (0) 2020.08.22