본문 바로가기

SW Study/윤성우 C 프로그래밍

도전! 프로그래밍4 도전7

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct personinfo
{
   char name[20];
   char phoneNum[20];
} PersonInfo;

void Insert(PersonInfo *man, int * pnum)
{
   printf("[ INSERT ] \n");
   printf("Input Name: "); scanf("%s", man[*pnum].name);
   printf("Input Tel Number: "); scanf("%s", man[*pnum].phoneNum);
   printf("      Data Inserted \n\n");
   (*pnum)++;
}

void Delete(PersonInfo *man, int * pnum)
{
   char del[20] = { 0 };
   int i, j;

   if (*pnum == 0)
   {
      printf("No One \n\n");
      return;
   }
   printf("[ DELETE ] \n");
   printf("Input Delete Name: "); scanf("%s", del);
   
   for (i = 0; i < *pnum; i++)
   {
      if (strcmp(man[i].name, del) == 0)
      {
         for (j = i + 1; j < *pnum; j++)
         {
            strcpy(man[j - 1].name, man[j].name);
            strcpy(man[j - 1].phoneNum, man[j].phoneNum);
         }
         (*pnum)--;
         printf("Delete! \n\n");
         return;
      }
   }
   printf("No One \n\n");
}

void Search(PersonInfo *man, int num)
{
   char ser[20] = { 0 };
   int i ;

   if (num == 0)
   {
      printf("No One \n\n");
      return;
   }

   printf("[ SEARCH ] \n");
   printf("Input Search Name: "); scanf("%s", ser);
   for (i = 0; i < num; i++)
   {
      if (strcmp(man[i].name, ser) == 0)
      {
         printf("Name: %s ", man[i].name);
         printf("Tel: %s \n\n", man[i].phoneNum);
         return;
      }
   }
   printf("No One \n\n");
}

void Print_All(PersonInfo *man, int num)
{
   int i;

   if (num == 0)
   {
      printf("No One \n\n");
      return;
   }

   printf("[ Print All Data ] \n");
   for (i = 0; i < num; i++)
   {
      printf("Name: %s ", man[i].name);
      printf("Tel: %s \n", man[i].phoneNum);
   }
   printf("\n");
}

int main(void)
{
   PersonInfo * man = (PersonInfo *)malloc(sizeof(PersonInfo) * 30);
   int menu = 0;
   int num = 0;

   Load(man, &num);

   while (1)
   {
      printf("***** MENU *****\n");
      printf("1. Insert \n");
      printf("2. Delete \n");
      printf("3. Search \n");
      printf("4. Print All \n");
      printf("5. Exit \n");
      printf("Choose the item: ");
      scanf("%d", &menu);

      if (menu == 1)
      {
         Insert(man, &num);
      }
      else if (menu == 2)
      {
         Delete(man, &num);
      }
      else if (menu == 3)
         Search(man, num);
      else if (menu == 4)
         Print_All(man, num);
      else if (menu == 5)
      {
         Save(man, num);
         printf("[ Exit the Program ] \n");
         break;
      }
   }
   free(man);
   return 0;
}

int Load(PersonInfo * man, int * pnum)
{
   FILE * fp = fopen("data.txt", "rt");
   if (fp == NULL)
   {
      puts("file open error! \n");
      return -1;
   }

   while (1)
   {
      fscanf(fp, "%s %s ", man[*pnum].name, man[*pnum].phoneNum);
      if (feof(fp) != 0)
         break;
      (*pnum)++;
   }
   return 0;
}

int Save(PersonInfo * man, int num)
{
   FILE * fp = fopen("data.txt", "wt");
   if (fp == NULL)
   {
      printf("file open error! \n");
      return -1;
   }

   for (int i = 0; i < num; i++)
   {
      fprintf(fp, "%s %s ", man[i].name, man[i].phoneNum);
      if (feof(fp) != 0)
         break;
   }
   fclose(fp);
   return 0;
}