Skip to content
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]);
    }
}
  • 데이터들을 알아보기 쉽게 출력합니다.

CRTest

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을 반환합니다.

UTest

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을 반환합니다.

Dtest

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");
}
  • 데이터를 지역명으로 검색합니다.

search6

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이내의 데이터를 모두 출력합니다.

search7

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달 이내에 모든 데이터를 출력합니다.

search8

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 이내에 모든 데이터를 출력합니다.

search9

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;
}
  • 파일로 저장된 데이터를 불러옵니다.

Load

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");
}
  • 데이터를 파일에 저장합니다.

save

Clone this wiki locally