Gachudon edited this page May 15, 2021
·
5 revisions
현재 이 프로젝트는 C언어로 개발 되고 있으며, 개발 툴로 Visual Studio Code 를 사용하고 있습니다. 165개의 데이터를 저장할 수 있도록 디자인 하여 전국 지역이름, 확진자 수 등을 관리할 수 있습니다.
int selectMenu()
{
int menu;
printf("\n***covid-19***\n");
printf("1. 조회\n");
printf("2. 추가\n");
printf("3. 수정\n");
printf("4. 삭제\n");
printf("5. 저장\n");
printf("6. 지역이름 검색\n");
printf("7. 확진자 수 검색\n");
printf("8. 날짜 검색\n");
printf("9. 완치자 수 검색\n");
printf("0. 종료\n");
printf("=> 원하는 메뉴는? ");
scanf("%d", &menu);
return menu;
}
- 메뉴를 출력하는 함수입니다.
- 정수형 숫자 1개를 입력받아 반환합니다.
int addCovid(covid* c)
{
printf("지역이름은? ");
scanf("%s", c->name);
printf("확진자 수는? ");
scanf("%d", &c->confirm);
printf("마지막 확진자 날짜는(형식: yyyymmdd)? ");
scanf("%d", &c->date);
printf("완치자 수는? ");
scanf("%d", &c->healer);
return 1;
}
-
지역 이름, 확진자 수, 마지막 확진자 확진 날짜, 완치자 수를 입력하는 함수입니다.
-
각각의 데이터를 입력 받습니다.
void readCovid(covid* c) { printf("%s %5d %08d %5d\n", c->name, c->confirm, c->date, c->healer); }
*지역 이름, 확진자 수, 마지막 확진자 확진 날짜, 완치자 수 순서대로 한줄의 데이터를 출력합니다.
void listCovid(covid** c, int count)
{
printf("\nNo. 지역이름 확진자 수 마지막확진날짜 완치자 수\n");
printf("============================================\n");
for(int i = 0; i < count; i++)
{
if(c[i] == NULL) continue;
printf("%2d.",i+1);
readCovid(c[i]);
}
}
- 데이터들을 알아보기 쉽게 출력합니다.
int selectDataNo(covid** c, int count)
{
int no;
listCovid(c, count);
printf("번호는 (0:취소)? ");
scanf("%d%*c",&no);
if(no == 0)
{
printf("=> 취소됨!\n");
return -1;
}
else
{
return no-1;
}
}
-
데이터 목록을 출력하고, 데이터를 선택 합니다.
-
선택한 데이터의 번호를 반환합니다.
int updateCovid(covid** c, int count) { int no = selectDataNo(c, count); if(no == -1) return 0; else { printf("지역이름은? "); scanf("%s", c[no]->name); printf("확진자 수는? "); scanf("%d", &c[no]->confirm); printf("마지막 확진자 날짜는(형식: yyyymmdd)? "); scanf("%d", &c[no]->date); printf("완치자 수는? "); scanf("%d", &c[no]->healer); printf("=> 수정 성공!\n"); return 1; } }
-
데이터의 정보를 갱신합니다. 선택된 데이터의 기존 정보는 사라지고 새로 입력된 정보로 대체됩니다.
-
수정에 성공하면 1을 반환합니다.
int deleteCovid(covid** c, int count)
{
int no = selectDataNo(c, count);
int isdel = 0;
if(no == -1) return 0;
else
{
printf("정말 삭제하시겠습니까(1: 실행)? ");
scanf("%d", &isdel);
if(isdel == 1)
{
free(c[no]);
c[no] = NULL;
printf("=> 삭제됨!\n");
return 1;
}
}
return 0;
}
- 선택된 데이터를 삭제합니다. 삭제에 성공하면 0을 반환합니다.
void searchCovidByName(covid **c, int count){
int scnt = 0;
char search[20];
printf("검색할 지역명은?");
scanf("%s", search);
printf("\nNo. 지역이름 확진자 수 마지막확진날짜 완치자 수\n");
printf("============================================\n");
for(int i = 0; i <count; i++){
if(c[i] == NULL)continue;
if(strstr(c[i]->name, search)){
printf("%2d", i+1);
readCovid(c[i]);
scnt++;
}
}
if(scnt == 0) printf("=> 검색된 데이터 없음!");
printf("\n");
}
- 데이터를 지역명으로 검색합니다.
void searchCovidByConfirm(covid **c, int count){
int scnt = 0;
int search = 0;
printf("검색할 확진자 수는? (오차범위 500명)");
scanf("%d", &search);
printf("\nNo. 지역이름 확진자 수 마지막확진날짜 완치자 수\n");
printf("============================================\n");
for(int i = 0; i <count; i++){
if(c[i] == NULL)continue;
if((c[i]->confirm<=(search+500))&&(c[i]->confirm>=(search-500))){
printf("%2d", i+1);
readCovid(c[i]);
scnt++;
}
}
if(scnt == 0) printf("=> 검색된 데이터 없음!");
printf("\n");
}
- 확진자 수를 기준으로 검색합니다.
- 숫자를 입력하면 오차범위 500이내의 데이터를 모두 출력합니다.
void searchCovidByDate(covid **c, int count){
int scnt = 0;
int search = 0;
printf("검색할 마지막 확진자 발생날짜는? (오차범위 1달)");
scanf("%d", &search);
printf("\nNo. 지역이름 확진자 수 마지막확진날짜 완치자 수\n");
printf("============================================\n");
for(int i = 0; i <count; i++){
if(c[i] == NULL)continue;
if((c[i]->date<=(search+100))&&(c[i]->date>=(search-100))){
printf("%2d", i+1);
readCovid(c[i]);
scnt++;
}
}
if(scnt == 0) printf("=> 검색된 데이터 없음!");
printf("\n");
}
- 데이터를 날짜 기준으로 검색합니다.
- 날짜를 입력하면 오차범위 1달 이내에 모든 데이터를 출력합니다.
void searchCovidByHealer(covid **c, int count){
int scnt = 0;
int search = 0;
printf("검색할 완치자 수는? (오차범위 500명)");
scanf("%d", &search);
printf("\nNo. 지역이름 확진자 수 마지막확진날짜 완치자 수\n");
printf("============================================\n");
for(int i = 0; i <count; i++){
if(c[i] == NULL)continue;
if((c[i]->healer<=(search+500))&&(c[i]->healer>=(search-500))){
printf("%2d", i+1);
readCovid(c[i]);
scnt++;
}
}
if(scnt == 0) printf("=> 검색된 데이터 없음!");
printf("\n");
}
- 데이터를 완치자 수를 기준으로 검색합니다.
- 숫자를 입력하면 오차범위 500 이내에 모든 데이터를 출력합니다.
int loadData(covid **c){
FILE *fp;
fp = fopen("covid.txt", "rt");
if(fp==NULL){
printf("=>파일 없음\n");
return 0;
}
int i = 0;
while(!feof(fp))
{
c[i] = (covid*)malloc(sizeof(covid));
fscanf(fp, "%s %d %d %d\n",c[i]->name, &c[i]->confirm, &c[i]->date, &c[i]->healer);
i++;
}
printf("=> 로딩 성공!\n");
fclose(fp);
return i-1;
}
- 파일로 저장된 데이터를 불러옵니다.
void saveData(covid **c, int count){
FILE *fp;
fp = fopen("covid.txt", "wt");
for (int i = 0; i<count; i++){
if(c[i] == NULL)continue;
fprintf(fp, "%s %d %d %d\n", c[i]->name, c[i]->confirm, c[i]->date, c[i]->healer);
}
fclose(fp);
printf("=> 저장됨!\n");
}
- 데이터를 파일에 저장합니다.