당신은 "Codeville"이라는 작은 도시에서 IT 관리자로 일하고 있습니다. 이 도시는 기술적으로 매우 진보한 도시로, 모든 주민들의 정보는 중앙 데이터베이스에 저장되어 있습니다. 이 데이터베이스는 주민들의 이름과 고유한 ID를 저장하고 있습니다. 최근, 도시의 시장인 "Finder16"는 주민들의 정보를 더 효과적으로 관리하기 위해 새로운 시스템을 도입하기로 결정했습니다. 그는 당신에게 이 시스템을 개발하라는 임무를 부여했습니다. 당신에게 부여된 코드는 해고된 이전 개발자가 작성한 코드에서, 중요한 부분만 모두 지워진 코드 뿐입니다
시스템은 다음과 같은 기능을 수행해야 합니다:
이를 위해 주민 정보를 저장할 구조체와 이 구조체의 배열을 사용하세요. 또한, 주민 정보를 추가하고, 검색하고, 삭제하는 기능을 구현하세요. Finder16는 당신이 이 임무를 완수할 수 있을 것이라고 믿고 있습니다. Codeville의 미래는 당신의 손에 달려 있습니다!
아래 코드를 채워 코드를 완성하고 블로그정리하세요 (표절 여부 확인합니다.)
#include <stdio.h>
#include <string.h>
typedef struct {
char name[30];
char phone[30];
char ssn[30];
} CitizenData;
CitizenData citizens[100];
int total = 0;
int main() {
while (1) {
int choice, i, found;
char sname[30], sphone[30], sssn[30], temp;
printf("Enter 1: Register citizen\\n2: Search citizen\\n3: Delete citizen\\n4: Exit\\n>> ");
scanf("%d", &choice);
if (choice == 1) {
CitizenData citizen;
printf("Name: ");
scanf("%s", citizen.name);
printf("Phone Number: ");
scanf("%s", citizen.phone);
printf("Social Security Number : ");
scanf("%s", citizen.ssn);
for (i = 0, found = 0; i < total; i++) {
if (strcmp(citizens[i].phone, citizen.phone) == 0 || strcmp(citizens[i].ssn, citizen.ssn) == 0) {
printf("already have ssn and phone\\n");
found = 1;
break;
}
}
if (!found) {
citizens[total] = citizen;
total++;
printf("Good\\n");
}
} else if (choice == 2) {
printf("Enter\\n1 to find by name\\n2 to find by phone number\\n3 to find by social security number\\n>> ");
int searchopt;
scanf("%d", &searchopt);
if (searchopt == 1) {
printf("Name: ");
scanf("%s", sname);
} else if (searchopt == 2) {
printf("Phone Number: ");
scanf("%s", sphone);
} else if (searchopt == 3) {
printf("Social Security Number: ");
scanf("%s", sssn);
} else {
printf("Invalid option.\\n");
continue;
}
for(found = 0, i = 0; i < total; i++) {
if ((searchopt == 1 && strcmp(citizens[i].name, sname) == 0) ||
(searchopt == 2 && strcmp(citizens[i].phone, sphone) == 0) ||
(searchopt == 3 && strcmp(citizens[i].ssn, sssn) == 0)) {
printf("%d. %s, %s, %s\\n", i+1, citizens[i].name, citizens[i].phone, citizens[i].ssn);
found = 1;
}
}
if (!found) printf("No citizen found.\\n");
} else if (choice == 3) {
printf("Enter\\n1 to delete by phone number\\n2 to delete by social security number\\n>> ");
int deleteopt;
scanf("%d", &deleteopt);
if (deleteopt == 1) {
printf("Phone Number: ");
scanf("%s", sphone);
} else if (deleteopt == 2) {
printf("Social Security Number: ");
scanf("%s", sssn);
} else {
printf("option is not good\\n");
continue;
}
for (i = 0; i < total; i++) {
if ((deleteopt == 1 && strcmp(citizens[i].phone, sphone) == 0) || (deleteopt == 2 && strcmp(citizens[i].ssn, sssn) == 0)) {
for (int j = i; j < total - 1; j++) {
citizens[j] = citizens[j + 1];
}
total--;
printf("good\\n");
break;
}
}
} else if (choice == 4) {
printf("Goodbye!\\n");
return 0;
}
}
}
구조체로 이름과 전화번호, SSN을 3가지 선언합니다. 무한 반복으로 시민을 가입시킬것인가, 가입된 시민을 찾을것인가, 시민을 삭제시킬것인가 를 1, 2, 3으로 고를 수 있습니다.
1부터 설명하겠습니다. 이름과 전화번호, SSN을 받은 뒤 구조체의 각 이름, 전화번호, SSN 자리에 선언합니다.
strcmp를 사용하여 이미 citizen 구조체 중에 똑같은 전화번호 혹은 SSN이 있는지 확인합니다. 이미 있다면 리젝, 없으면 가입시킵니다.
2입니다. 가입된 내용으로 1은 사람 이름, 2는 휴대폰 번호, 3은 SSN을 가지고 판단합니다. strcmp를 사용하여 같은 항목을 출력합니다.
3입니다. 1은 전화번호, 2는 SSN으로 개인 정보를 삭제시킬 수 있습니다. for 문을 통해 순회하여 삭제합니다.
마지막으로 4는 그냥 return 0; 을 통해 프로그램을 종료시킵니다.