메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 C++ 프로그래밍

뇌를 자극하는 C++ 프로그래밍 질의응답 게시판입니다.

c++ 로 사전을 구현하는데 파일입출력 문제입니다.

2011-07-26

|

by 이재현

3710

#include
#include
#include
#include
#include // getche() ,getch()를 사용하기 위해 필요한 헤더

using namespace std;

#define max 2048 //테이블 크기
#define filename "dict.txt" //파일명



// 단어 DB 자료구조
typedef struct Word_DB
{
int index; //인덱스
char word[64]; //단어
int cntdescript; //단어설명 byte
char *descript; //단어설명
}Word_DB;



class Dictionary
{
private:
int count; //등록된 DB테이블 갯수
Word_DB *Dblist[max]; //DB리스트

public:
Dictionary(); //생성자
~Dictionary(); //소멸자

int menu(); //메뉴화면출력
void search_word(); //단어검색
void insert_word(); //단어등록
void delete_word(); //단어삭제
void print_word(); //단어리스트
int searchindex(char *_word); //단어 DB index 검색
void loadfile(char *_filename); // 파일로드
void savefile(char *_filename); // 파일저장
};




Dictionary::Dictionary()
{
count=0;
loadfile(filename); // DB파일 로드(파일 입력;;)
}
Dictionary::~Dictionary() // DB메모리 제거
{
savefile(filename); // DB파일 저장 (파일출력이되야함)

int i;
for(i=0;i {
  Word_DB *tmp= (Word_DB*) Dblist[i];
  if( tmp!=0)
  {
   delete tmp->descript;
   delete tmp;
  }
}
}



int Dictionary::menu()
{
int select;
    while(1)
{
system("cls");
    cout<< "━━━━━━━━━━━━━━"<     cout<< "     사전 프로그램"<         cout<< "━━━━━━━━━━━━━━"<     cout<< "     [1] 단어 검색          "<         cout<< "     [2] 단어 등록          "<          cout<< "     [3] 단어 삭제          "<     cout<< "     [4] 단어 리스트        "<         cout<< "     [5] 종료               "<         cout<< "━━━━━━━━━━━━━━"<     cout<<"▷메뉴번호를 선택해 주세요>>[ ]";
        cout<<"\b\b";
    cin >>select;
if(select>0 && select<6)
       return select;
else
{
  cout<   cout<<"   잘못 입력하셨습니다."<   cout<<"   [ Plase, Any key ]"<   
  getch();
  continue;
}
}
}



int Dictionary::searchindex(char *_word) // 단어검색
{
int i;
for(i=0; i {
  Word_DB *searching=(Word_DB*)Dblist[i];
  if(!strcmp(searching->word,_word))
   return i+1;
}
return 0;
}
void Dictionary::search_word()
{
char sword[64];
int sindex;

cout< cout<<"검색하고싶은 단어를 입력해주세요"< cout<<"▷ ";
cin>>sword;

sindex = searchindex(sword); //searching index

if(sindex!=0)
{
  Word_DB *searchdb = (Word_DB*)Dblist[sindex-1];
  
  cout<   cout<<"검색 단어: "<   cout<<"단어 설명: "<descript;

  system("pause");
  return;
}
cout< cout<<"찾고자 하는 단어가 없습니다."< cout< system("pause");
}




void Dictionary::insert_word()
{
char sword[64], sdescript[32768];
cout<<"등록할 단어를 입력해주세요"< cout<<"▷ ";
cin>>sword;
cout<<"단어의 설명을 입력해주세요"< cout<<"단어입력종료는 Ctrl+z 를 눌러주세요"< cout<<"▷ ";

cin.clear();
    cin.get( sdescript, 32768 - 4, 0x1b ); // ctrl + z
    cin.clear();

Word_DB *tmpdb= new Word_DB;

tmpdb->index = count+1;
tmpdb->cntdescript = strlen(sdescript);
tmpdb->descript = new char[tmpdb->cntdescript];
strcpy(tmpdb->word, sword);
strcpy(tmpdb->descript, sdescript);

Dblist[count++] = tmpdb;
savefile(filename);

}




void Dictionary::delete_word()
{
char sword[64];
int sindex ,i;
cout< cout<<"삭제할 단어를 입력해 주세요"< cout<<"▷ ";
cin>>sword;

sindex= searchindex(sword); //단어 인덱스 검색

if(sindex != 0)
{
  Word_DB *deletedb=(Word_DB*)Dblist[sindex-1];
  for(i=0; i    Dblist[i+(sindex-1)]=Dblist[i+sindex]; //리스트변경
  delete deletedb->descript;
  delete deletedb;
  count--;
  return;  
}
cout< cout<<"삭제하고자 하는 단어가 존재하지 않습니다."< system("pause");
}



void Dictionary::print_word()
{
cout<     cout<<"━━━━━단어LIST━━━━━"< cout<     for( int i = 0 ; i < count ; i++ )
    {
        Word_DB *loaddb= (Word_DB*)Dblist[i];
  cout<<"\t"<word<<"\t"<     }
  
    cout< cout<     system( "pause" );
}



void Dictionary::loadfile(char *_filename)
{
int i;
fstream fload(_filename,ios::binary | ios::in);
fload.read((char*)&count, sizeof(int));

for(i=0; i {
  Word_DB *loaddb = new Word_DB;
  fload.read((char*)loaddb, sizeof(Word_DB));
  loaddb->descript = new char[loaddb->cntdescript+1];
  fload.read((char*)loaddb->cntdescript,loaddb->cntdescript+1);

  Dblist[count++]=loaddb;
  Dblist[i] = loaddb;
}
fload.close();
}



void Dictionary::savefile(char *_filename)
{
fstream fsave(_filename, ios::binary | ios::out);

fsave.write((char*)&count, sizeof(int));

for(int i=0; i {
  Word_DB *savedb = (Word_DB*)Dblist[i];

  fsave.write((char*)savedb,sizeof(Word_DB));
  fsave.write((char*)savedb->descript,savedb->cntdescript+1);
}

fsave.close();
}



int main()
{
Dictionary *Dicword = new Dictionary();
while(true)
{
  switch(Dicword->menu()) // select 값
  {
   case 1:
    Dicword->search_word(); break; // 단어검색
   case 2:
    Dicword->insert_word(); break; // 단어등록
   case 3:
    Dicword->delete_word(); break; // 단어삭제
   case 4:
    Dicword->print_word(); break; // 단어리스트 출력
   case 5:
    return 0; // 프로그램 종료
  }
  Dicword->savefile(filename);


}


return 0;
}

여기서 db 까지는 구현되는데 txt파일로 입출력을 어떻게 해야할지 모르겠어서 올립니다.
댓글 입력
자료실