느낀점 및 설명 ¶
오오.. 귀차니즘이 글에달한 소스여요.ㅎ
선형 리스트로 데이터베이스 구축 -> 자료구조를 배열을 사용하세요~ 로 이해....OTL
그많은 자료구조중에서 왜 배열이냐고오..ㅠ.ㅜ 막강한 메모리 낭비와 오버플로우의 한계를 느끼고 싶은 것인가아..;;ㅁ;;
동적 할당이나 트리구조로 좀더 이쁘게 만들 수 있었으나.. 시키는 대로 해야지 뭐..ㅠ.ㅜ
그래서 작성. 결과는 아래와 같으며 심지어 id역시 문자열로 처리해서 맘껏 적어 넣을 수 있다.
그결과 자료역시 일반적으로 시간순서대로 저장하기때문에 검색속도는 평범..OTL
또한 소스에서 보시다시피.. 영어실력의 한계가 마구마구 느껴지며~
에러코드는.. 단순한 장식.. ㅋ (뭐든지 뽀대가 나고 봐야함.ㅎ)
그럼 좋은 하루 되시길.ㅎ
선형 리스트로 데이터베이스 구축 -> 자료구조를 배열을 사용하세요~ 로 이해....OTL
그많은 자료구조중에서 왜 배열이냐고오..ㅠ.ㅜ 막강한 메모리 낭비와 오버플로우의 한계를 느끼고 싶은 것인가아..;;ㅁ;;
동적 할당이나 트리구조로 좀더 이쁘게 만들 수 있었으나.. 시키는 대로 해야지 뭐..ㅠ.ㅜ
그래서 작성. 결과는 아래와 같으며 심지어 id역시 문자열로 처리해서 맘껏 적어 넣을 수 있다.
그결과 자료역시 일반적으로 시간순서대로 저장하기때문에 검색속도는 평범..OTL
또한 소스에서 보시다시피.. 영어실력의 한계가 마구마구 느껴지며~
에러코드는.. 단순한 장식.. ㅋ (뭐든지 뽀대가 나고 봐야함.ㅎ)
그럼 좋은 하루 되시길.ㅎ
// 실행해서 ?를 입력하면 입력 가능한 명령어를 볼 수 있습니다.
소스 ¶
~cpp
#include <stdio.h>
#include <string.h>
const int MAX_DATA_SIZE=100;
const int HANG_MOK=4;
const int MAX_MENU=8;
const int QUIT=6;
const char menu[MAX_MENU][20]={"insert","modify","delete","undelete","search","list","quit","?"};
const char print_outs[HANG_MOK][5]={"id","name","tel","add"};
const int MAX_BLOCK_SIZE=256;
const int FALSE=-1;
const int ALL=-1;
char datas[MAX_DATA_SIZE+1][HANG_MOK][MAX_BLOCK_SIZE];
int how_many_data=0;
int prv_del=-1;
int select_menu();
void function_insert();void function_modify();void function_delete();void function_undelete();void function_search();void function_list();void function_quit();void function_help();
int such_data();
void print_list(int);
void modify_data(int);
void print_cursur();
void main()
{
void (*functions[MAX_MENU])(void)={function_insert,function_modify,function_delete,function_undelete,function_search,function_list,function_quit,function_help};
while (1)
{
int selected_number=select_menu();
functions[selected_number]();
if (QUIT==selected_number)
break;
}
}
int select_menu()
{
char temp_input[20];
while (1)
{
print_cursur();
scanf("%s",temp_input);
for (register int i=0; i<MAX_MENU; ++i)
{
if (0==strcmp(temp_input,menu[i]))
return i;
}
printf ("ERROR!! - code:00 - Wrong order!!\n");
}
}
void function_insert()
{
if (MAX_DATA_SIZE==how_many_data)
printf("ERROR!! - code:03 - data overflow!!\n");
else
{
modify_data(how_many_data);
++how_many_data;
}
}
void function_modify()
{
int target=such_data();
if (FALSE!=target)
modify_data(target);
}
void function_delete()
{
int target=such_data();
if (FALSE!=target)
{
for (register int i=0; i<HANG_MOK; ++i)
strcpy(datas[MAX_DATA_SIZE][i],datas[target][i]);
for (register int i=target+1; i<how_many_data; ++i)
{
for (register int j=0; j<HANG_MOK; ++j)
strcpy(datas[i-1][j],datas[i][j]);
}
--how_many_data;
prv_del=target;
}
}
void function_undelete()
{
if (-1==prv_del)
printf("ERROR!! - code:02 - Can't find deleted data!!\n");
else
{
for (register int i=how_many_data-1; prv_del<=i; --i)
{
for (register int j=0; j<HANG_MOK; ++j)
strcpy(datas[i+1][j],datas[i][j]);
}
for (register int i=0; i<HANG_MOK; ++i)
strcpy(datas[prv_del][i],datas[MAX_DATA_SIZE][i]);
++how_many_data;
prv_del=-1;
}
}
void function_search()
{
int target=such_data();
if (FALSE!=target)
print_list(target);
}
void function_list()
{
print_list(ALL);
}
void function_quit()
{
printf ("Goodbye~\n");
}
void function_help()
{
printf("Menu: ");
for (register int i=0; i<MAX_MENU; ++i)
printf(" %s ",menu[i]);
printf("\n");
}
int such_data()
{
int select_number;
char temp_data[MAX_BLOCK_SIZE];
printf("select number : ");
for (register int i=0; i<HANG_MOK; ++i)
printf("%d. %s\t",i,print_outs[i]);
printf("\n");
print_cursur();
scanf("%d",&select_number);
printf("content? ");
scanf("%s",temp_data);
for (register int i=0; i<how_many_data; ++i)
{
if (0==strcmp(temp_data,datas[i][select_number]))
return i;
}
printf("ERROR!! - code:01 - Can't find!!\n");
return FALSE;
}
void print_list(int number)
{
for (register int i=0; i<HANG_MOK; ++i)
printf("%s\t",print_outs[i]);
printf("\n");
if (ALL==number)
{
for (register int i=0; i<how_many_data; ++i)
{
for (register int j=0; j<HANG_MOK; ++j)
printf("%s\t",datas[i][j]);
printf("\n");
}
}
else
{
for (register int j=0; j<HANG_MOK; ++j)
printf("%s\t",datas[number][j]);
printf("\n");
}
}
void modify_data(int target)
{
for (register int i=0; i<HANG_MOK; ++i)
{
printf("%s? ",print_outs[i]);
scanf("%s",datas[target][i]);
}
}
void print_cursur()
{
printf(">>");
}










