Skip to content

jwoo9928/-Object-oriented-design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

-Object-oriented-design

c++객체 지향 설계 실습

-week3 : 기본 입출력

-week4 : 포인터 실습

-week5 : class, 참조자, 소멸자

-week6 : operator 오버로딩

-week7 : throw, friend

-week8 :

-week9 : 가상함수

termProject : 문서 편집기

주요 코드에 대한 설명 -class Book Test.txt 의 단어들을 읽고 여러 명령들을 수행하면서 여러 정보를 저장하는 객체이다.

  1. Vector : txt파일에 담겨있는 단어들을 모두 집어 넣은 벡터이다.
  2. Vector<vector > : 출력한 20줄의 각 첫번째 단어들의 word에서의 index값을 저장해 둔 vector들을 전부 저장한 이중 vector이다.
  3. Int currentPage : 출력결과에 나와있는 현재 페이지에 관한 정보이다.
  4. Int index : 현재까지 출력한 단어의 word에서의 index를 담고 있다.
  5. addPage함수 : 다음장을 출력하라는 커맨드를 받았을 때 생성된 출력한 20줄의 각 첫 번째 단어들의 word에서의 index값을 저장해둔 vector들을 pages에 저장하는 함수
  6. getPage함수 : pages를 리턴하는 함수
  7. getWords함수 : words를 리턴하는 함수

-showPage() 출력할 총 20줄의 내용을 출력하는 함수이다. 가장 처음 0번째 index부터 page 벡터에 삽입한다. 이는 현재 출력하는 페이지의 가장 첫 번째 줄이 book객체에 있는 words의 첫번째 단어로 시작한다는 것을 의미한다. 이후 주어진 출력형식에 맞게 줄 맨앞 몇줄인지를 출력한다. 이후 20줄을 세어가며 book의 words에서 단어를 하나씩 가져오면서 index를 상승시킨다. 가져온 단어의 길이를 strLength에 더하고 이 값이 75자를 넘지 않으면 단어를 띄어쓰기 와 함께 화면에 출력을 한다. 만약 75자를 넘게 될경우 page벡터에 현재 index값을 넣어 준다음 다음줄 출력형식에 맞게 출력을 해준다. 이때 count를 세준다. Count가 20이 넘으면 한페이지를 모두 출력했으므로 while문을 탈출한다. 그후 주어진 출력형식에 맞게 커맨드 종류를 출력한다. Page를 반환한다

-main() Ifstream을 통해 파일을 연다. 이때 파일이 없으면 프로그램이 실행되지 않는다. 파일이 존재할떄 book, edit객체를 생성한다. Edit객체의 setCommand함수를 통해 총 7개의 명령어를 생성과 동시에 적재한다. (추후 edit객체를 통해 명령들을 사용하기 위함이다.) getAllWord라는 함수를 통해 txt파일의 모든 단어를 읽어드린다. 그후 무한 루프문을 돌며 input값에 따라 기능을 동작한다. Input은 inputSelect함수를 통해 설정하며 동시에 book 객체의 cmd에 입력받은 명령의 인 자를 저장한다.

-getAllWord() Txt파일에 존재하는 글들을 단어단위로 읽어와 book의 words를 main에서 받아와 이곳에 vector형태로 저장하는 함수이다.

-inputSelect() 입력받은 명령을 프로그램이 명령대로 수행할 수 있도록 변경하는 함수 Input을 입력받은 str의 첫번째 글자로 설정한다. 이때 n,p,t일경우 다른 명령인자가 없으 므로 그대로 break후 input값을 설정하고 종료한다. 아닐경우, (명령인자,..)형태인지를 판단한다.str의 두번째 글자와 마지막 글자가 ‘(‘, ‘)’인지 판단한다. 아닐경우 포멧에 맞지 않다는 에러메세지를 내보낸뒤 입력을 다시 받는다. 맞을 경우 str의 첫번째 글자와 (,)를 str에서 지운다. 그후 ,(콤마)단위로 명령인자를 분리 시킨뒤 break한다. 이후 input을 설정하고 명령인자들을 vector형태로 반환한다.

-Class next_Command의 excute 페이지를 0부터 시작하면서 book의 currentPage의 값을 현재 출력하는 페이지 값으로 변 경해준다.showPage함수를 실행시키고 리턴값인 20줄 각 첫번째 단어 index정보가 들어있 는 vector를 받는다. 그후 그 값을 book에 addPage() 함수로 전달하여 저장한다. 이후에 현 재 출력한 페이지가 몇 페이지인지를 출력하고 종료한다.

-Class before_Command의 excute BeforePage를 현재 출력되어있는 페이지에서 이전 페이지 값으로 설정한다. 만약 0보다 작으면 현재 페이지가 첫페이지라는 메세지를 출력한다. 아니라면 book의 index를 이전페이지의 첫번째 글자 index로 변경한다. 그 후 마찬가지로 showPage를 통해 이전페이지를 출력한다. Book의 page정보를 getPage로 가져와 이전페이지의 vector값을 방금전 출력한 page로 변경 한다. 그리고 현재 페이지 값을 이전페이지 값으로 변경한뒤 이를 출력해준다.

-Class insert_Command의 excute 처음에 입력받은 인자의 개수가 book에 저장되어있는것을 가져와 맞는 개수인지를 확인 하고 역시 그중에 인자로 받은 단어가 75자이하인지도 판단해 둘중에 하나라도 만족하지 않는다면 입력형식에 맞지 않는다는 에러메세지를 출력하고 종료하여 입력을 다시 받도 록 한다. 조건을 통과한다면 인자들 중 수는 int형으로 변경을 하고 현재 페이지의 정보를 book에 서 가져온다. 만약 받은 숫자중 n번째 줄이 20줄이 넘어가거나 받은 값중 m번째 단어가 그줄 중에서 없을 경우 존재하지 않는다는 메세지를 내보내고 종료하여 입력을 다시 받 도록 한다. 조건을 역시 통과한다면 page의 n번째 줄의 첫번째 단어 index에서 +m된 단어의 index를 찾아 이를 book의 word에서찾은뒤 이 값 뒤에 입력받은 단어를 추가한다. Book의 index를 현재 페이지의 첫단어로 변경한뒤 다시 20줄을 출력하고 변경성공이라는 메세지를 출력한다.

-Class delete_Command의 excute 삽입 전까지는 insert와 동일한 과정을 거치되 검사하는 cmd의 개수는 2로 확인한다. Insert함수와 다른점은 insert대신 찾은 단어 index를 통해 그위치의 단어를 erase로 제거하 고 역시 마찬가지로 insert와 동일한 절차를 밟은뒤 삭제 성공이라는 메세지를 출력한다.

-Class search_Command의 excute Book에 저장되어있는 명령인자가 1개인지를 확인하고 역시 이 인자가 75자를 넘는지 확 인한다. 넘든다면 형식에 맞지 않는다는 메세지를 내보내고 종료한다. 조건이 맞는다면 book의 words를 불러와 입력받은 단어가 존재하는지 처음부터 체크하면 서 i를 증가시킨다. 없다면 i가 str의 길이와 같을 것 임으로 찾지 못했다는 에러메세지를 내보낸다. 존재한다면 가장 처음 찾은 단어의 index == i일것임으로 이 인덱스부터 showPage를 통해 출력하여 찾은 페이지를 출력한다.

-Class change_Command의 excute 입력받은 인자가 2개인지 받은 단어의 인자가 둘다 75자를 넘지않는지를 확인하여 조건 미충족이면 에러메세지를 내보낸후 종료한다. 충족한다면 book의 words를 가져와 처음부터 끝까지 검사를 시작한다. 검사를 하면서 첫번째 인자의 단어를 찾으면 그 단어의 index == i이므로 그 위치의 단어를 두번째 인자로 변경한다 이과정을 전부 수행한 후 이 과정을 진행하기전 출력했던 페이 지의 첫번째줄 첫번째 단어의 index를 book의 index로 변경한 뒤에 showPage함수를 통해 페이지를 출력한후 변경성공이라는 메세지를 내보낸다.

-Class save_Command의 excute Ofstream으로 파일을 연뒤에 book의 words의 단어들을 전부 txt에 형식에 맞게 써준다. 그후 저장 성공이라는 메세지를 출력한다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published