2010년 4월 17일 토요일

사전프로그램~

#include
#include
#include //getch() 쓰기위해
#include // cls쓰기위해

char menu();
void input(struct DIC *, int *);
void output(struct DIC *,int *);
void search(struct DIC *,int *);
void del(struct DIC *,int *);
void sort(struct DIC *);

struct DIC{
char word[20];
char mean[80];
int len;
};

void main()
{
char menuNumber; //menu함수 return값
int wordcount = 0; //문자열수 카운터 변수

struct DIC ary[20]; //입력된 단어와 뜻을 구조체에 저장

while(1){

system("cls");
menuNumber = menu(); //menu() return 값 저장 변수

/* 함수 호출 (각 함수에 입력된 단어와 뜻을 담을 구조체와 카운터변수를 넘겨줌)*/

if(menuNumber == '1'){ system("cls"); input(ary,&wordcount);}

else if(menuNumber == '2'){system("cls"); output(ary,&wordcount); }

else if(menuNumber == '3'){system("cls"); search(ary,&wordcount); }

else if(menuNumber == '4'){system("cls"); del(ary,&wordcount); }

else if(menuNumber == '5'){ break;}

}
}

char menu() //메뉴 출력
{
printf("\n\n\n\n\n\n");
printf(" 1. 입력하기 \n\n");
printf(" 2. 출력하기 \n\n");
printf(" 3. 검색하기 \n\n");
printf(" 4. 삭제하기 \n\n");
printf(" 5. 종 료 \n\n");

printf(" # 메뉴를 선택하세요 : ");

char menuNumber=getchar();
fflush(stdin);

return menuNumber; //입력받은 메뉴 번호 return

}

void input(struct DIC *p1,int *i){
/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 1번 입력하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
char tempWord[20]={0,}; //임시 저장공간
char tempMean[80]={0,};

while (strcmp(tempWord,"end") != 0){ //입력문자열이 "end" 아닐경우까지 반복

if((*i)>19){
printf("제한된 20개의 단어를 입력하셨습니다. 더이상 저장할수없습니다. \n");
printf("##아무키나 누르면 주메뉴로 돌아갑니다.");
getch();
break;
}

printf("#단어를 입력하세요 : "); //단어 입력 받기
gets(tempWord);


if(strcmp(tempWord,"end") != 0){ //입력단어가 end가 아니면

printf("#뜻을 입력하세요 : ");
gets(tempMean);

if(strcmp(tempMean,"end") != 0){//뜻을 입력할때 end가 아니면 복사
strcpy(p1[*i].word,tempWord);
strcpy(p1[*i].mean,tempMean);
p1[*i].len = strlen(tempWord); //문자열 길이 선언
++(*i); // 열 카운터 변수 증가
}
else{break;}
}

}

return;
}
void output(struct DIC *p1,int *i){
/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 2번 출력하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
int j,k,size;

sort(p1);

for(j=0; j<(*i) ; j++){

printf(" %4d. ",j+1); //순번 매기기

size = strlen(p1[j].mean); // 뜻의 길이 구하기

printf(" %s(%d) : ",p1[j].word,p1[j].len);

for(k=0 ; k<=size ; k++){
if(k<50){ //50글자까지 찍어라
printf("%c",p1[j].mean[k]);
}

else if(k==50){
printf("~"); //51번째는 생략기호 찍고 포문 탈출
break;
}
}
/*10줄이 출력대고 엔터 치라고 하고 출력이 끝나으면 주메뉴로 돌아가게한다.*/

if( (j%10) == 9 ) {

if( j == (*i)-1 ){ //10줄을 찍었는데 10줄이 입력의 끝이면

printf("\n ##입력하신 단어의 뜻이 모두 출력대었습니다. \n 아무키나 누르면 주메뉴로 돌아갑니다.");
getch();
}

else{ //10줄인데 더 나올께 있으면.. 아무키 치면 다음 줄이..
printf("\n Press Any key to continue...");
getch();
}
}

else if( j == (*i)-1 ){ //출력 완료 메세지

printf("\n ##입력하신 단어의 뜻이 모두 출력대었습니다. \n 아무키나 누르면 주메뉴로 돌아갑니다.");
getch();
}

printf("\n");
}
if((*i) == 0){ printf("##입력하신 단어가 없습니다.아무키나 누르면 주메뉴로 돌아갑니다"); getch();}//입력한게 없을때.

return;
}
void search(struct DIC *p1,int *i){
/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 3번 검색하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/
char tempWord[20]={0,}; //입력받을 문자열 공간
int j,temp1=0; //검색시 전체를 검색하기때문에 출력시 오류 방지를 위해
//같은문자열이 확실히없다는것을 보여주기위한 temp1 변수 선언
while (strcmp(tempWord,"end") != 0){ //입력문자열이 "end" 아닐경우까지 반복

printf("# 찾는 단어를 입력하세요 : ");
gets(tempWord); //단어 입력
fflush(stdin);

for(j=0; j<(*i) ; j++){

if(strcmp(tempWord,p1[j].word) == 0){ //같은 문자열을 찾는다.
printf("@ 단어의 뜻 : %s \n",p1[j].mean);
temp1++; //같은문자열이 있으면 temp1증가
}
}

if(temp1 == 0){ printf("@ Not found. \n");}

temp1 = 0; //temp1이 증가되지않으면 아에 그문자열이없는것 반복을 돌아야대기때문에 다시 0으로 초기화
}

return;

}
void del(struct DIC *p1,int *i){

/*
printf("\n\n\n\n\n\n\n\n\n\n\n");
printf(" 4번 삭제하기 메뉴입니다. \n\n\n\n\n");
printf(" # 아무키나 누르면 주메뉴로 돌아갑니다. \n\n\n\n");

getch();
*/

char tempWord[20]={0,}; //입력받을 문자열 공간
char ch;

int j,k,temp1=0;

while (strcmp(tempWord,"end") != 0){

printf("# 삭제할 단어를 입력하세요 : ");
gets(tempWord);

for(j=0; j<(*i) ; j++){

if(strcmp(tempWord,p1[j].word) == 0){ //삭제할 단어 발견했으면
temp1++;
printf("#정말로 삭제 하시겠습니까? (Y/N) : "); //진짜 정말 삭제할지 물어봄

ch = getche();

if(ch =='Y' || ch =='y'){ //삭제하겠다고 하면 누르는 즉시 삭제

for(k=j ; k<(*i) ; k++){
p1[k] = p1[k+1]; //그 삭제 위치밑 열을 다 한칸씩 끌어올림
}
--(*i); //문자열 카운터 변수 감소 이러면 다음에 누적대서 입력 받을수 있다.
printf("\n@ 삭제되었습니다. \n");
}

else{ //Y, y가아닌게 입력댈때 삭제취소
printf("\n@ 삭제가 취소되었습니다. \n");
}
}
}

if(temp1 == 0){printf("@ Not found. \n");}

temp1 = 0; //temp1이 증가되지않으면 아에 그문자열이없는것 반복을 돌아야대기때문에 다시 0으로 초기화
}

return;
}

void sort(struct DIC *p1)
{

int res;
struct DIC temp; //임시 저장 구조체 선언

for(int i=0 ; i<20; i++){
for(int j=19 ; j>=i+1 ; j--){

res =strcmp(p1[i].word,p1[j].word); //알파벳 순서 검사오름차순

if(res > 0)
{
temp = p1[i]; // 바꿀 열을 통째로 임시저장구조체 변수에 저장
p1[i] = p1[j]; // 바꾸어질 열을 복사하고
p1[j] = temp; // 바꾸어질 곳에 바꿀 문자열을 복사한다.
}
}
}
}

댓글 없음:

댓글 쓰기