반응형

언어 자료구조 알고리즘 1251

[C language] 106. 도서 관리 프로그램 - 전체 장르 보기

이번에는 전체 장르 보기에 관한 시퀀스 다이어그램을 작성하기로 해요. 전체 장르 보기에서는 App에 보관한 모든 장르를 순차적으로 탐색하여 각 장르의 정보를 출력하면 되겠죠.먼저 Genre에 View 함수를 제공하기로 해요. View 함수에서는 장르 번호와 이름을 출력하게 하세요. void GenreView(Genre *genre) { printf("장르 번호:%d 장르 이름:%s\n",genre->gnum,genre->name); } App 소스에서는 Iterator 이용하여 배열에 보관한 장르를 하나씩 얻어와서 Genre의 View함수를 호출하세요. void AppListGenre(App *app) { Iterator seek= EHArrayBegin(app->genres); Iterator end=..

[C language] 105. 도서 관리 프로그램 - 장르 추가

이제 유즈케이스별로 각 기능을 어떠한 흐름으로 수행해야 하는지 생각해 보기로 해요. 여기서는 최종 사용자, App, Genre, Book사이에 주고 받을 흐름만 정의할게요. 먼저 장르 추가 기능의 시퀀스를 정의해 보세요. 장르 추가 기능에서는 Program에서 최종 사용자에게 추가할 장르 이름을 입력할 것을 요청하게 하세요. 최종 사용자가 장르 이름을 입력하면 Program에서는 같은 이름의 장르가 있는지 확인하겠죠. 그리고 없을 때 장르를 생성하게 하세요. App에서는 Genre에서 제공하는 GetName 기능과 장르를 생성하는 NewGenre 기능을 사용하고 있어요. 따라서 이 두 함수는 Genre에서 제공하세요. New 함수를 제외한 나머지 함수 이름은 형식명으로 시작하고 첫 번째 인자는 형식 포인..

[C language] 104.도서관리프로그램 - 클래스다이어그램

도서 관리 프로그램에서는 장르별로 도서를 관리하게 할거예요. 따라서 사용자 정의 형식으로 프로그램, 장르, 도서로 역할을 구분하여 정의하기로 해요. 클래스 다이어그램에서는 프로그램에 정의할 형식을 클래스로 표시하고 클래스 간의 관계를 추가로 표시해요. 프로그램은 장르들의 집합체이고 장르는 도서의 집합체죠. 이와 같은 관계를 집합 관계(실선과 빈 다이아몬드)라 불러요.이 외에도 클래스 간의 관계는 직접 연관 관계, 연관 관계, 집합 관계, 일반화 관계, 의존 관계, 실현 관계가 있어요. C++, Java, C# 처럼 OOP 프로그램에서는 이와 같은 관계에 어울리는 문법이 있어요. 여기에서는 이들에 관한 설명은 하지 않을게요. 도서는 Book 구조체로 정의할게요. 도서 데이터에는 제목, 저자, 도서 번호를 ..

[C language] 103. 도서 관리 프로그램 - 분석 결과를 코드로

실습 각 단계에서 다이어그램을 작성할 때마다 약속한 부분을 코드로 구현할게요.먼저 Win32 콘솔 응용 프로그램 프로젝트를 생성한 후에 Program.h 파일과 Program.c 파일을 추가하세요. 그리고 앞에서 작성한 동적 배열(EHArray.h, EHArray.c)을 추가하세요. 요구 분석한 부분을 코드로 옮기기 전에 콘솔 응용 프로그램 종류에 관계없이 사용할 두 개의 함수를 작성하고 출발합시다. 하나는 콘솔 화면을 지우는 함수예요. void clrscr(); 그리고 나머지 하나는 기능 키를 입력받는 함수예요. int getkey(); 콘솔 화면을 지우는 함수는 단순히 system("cls")를 래핑한 함수예요. void clrscr() { system("cls"); } 기능 키를 입력받는 함수는 키..

[C language] 102. 도서관리 프로그램-요구분석 및 정의

요구 분석 및 정의 단계에서는 프로젝트와 이해 관계가 있는 이해 관계자를 파악하는 것에서 출발해요. 그리고 이해 관계자 별로 요구사항을 수집하는데 여기서는 생략할게요. 요구 사항을 수집한 후에는 작성할 시스템(여기서는 프로그램)을 사용할 사용자와 외부 시스템, 그리고 작성할 시스템이 사용하는 다른 외부 시스템이 있는지 조사해요. 이처럼 작성할 시스템과 상호작용하는 사용자와 외부 시스템을 액터라 불러요. 그리고 언제 우리 시스템을 사용하고 우리 시스템이 언제 다른 시스템을 사용하는지 조사하죠. 이러한 작업을 수행한 후에 결과를 유즈케이스 다이어그램으로 나타내죠. 유즈 케이스 다이어그램은 크게 액터와 유즈 케이스, 관계로 분류할 수 있어요. 액터는 작성할 시스템과 상호작용하는 외부 요소들이예요. 여기서는 최..

[C language] 101. 도서 관리 프로그램 실습 시나리오

전산 기술은 빠르게 발전하고 새로운 기술과 개발 공정이 나오고 있어요.여기에서는 시나리오를 소개한 후에 요구 분석하고 설계한 후에 구현하는 공정으로 진행할게요. 요구 분석에서는 프로그램의 외부 요소와 프로그램 사이의 상호 작용을 분석해요. 외부 요소가 언제 프로그램을 사용하는지 혹은 프로그램이 외부 요소를 언제 사용하는지 파악하죠. 그리고 분석 결과를 유즈케이스(Usecase) 다이어그램으로 작성할거예요. 설계 단계에서는 역할에 따라 사용자 정의 형식을 결정하고 형식 간의 관계를 정의해요. 그리고 유크케이스 별로 시퀀스를 정의하죠. 사용자 정의 형식과 형식 간의 관계는 클래스 다이어그램으로 표현할 거예요. 그리고 시퀀스를 정의한 것은 시퀀스(Sequence) 다이어그램으로 만들기로 해요. C언어로 프로그..

[자료구조와 STL] 18. list 만들기 – 더미 노드없는 이중 연결 리스트 소스 코드

//EHList.h – 더미노드가 없는 이중 연결 리스트 #pragma once namespace EHLIB {     templatetypename T>     class list     {         struct node         {             node *prev; //이전 노드의 위치 정보             node *next; //다음 노드의 위치 정보             T data; //노드에 보관된 요소             node(T data=0):data(data) //초기화             {                 prev = next = 0;             }         };       ..

[자료구조와 STL] 17. list 만들기 – 더미 노드없는 이중 연결 리스트

3. 2 list 만들기 – 더미 노드없는 이중 연결 리스트 이번에는 더미노드가 없는 이중 연결 리스트를 만들어 봅시다. 더미노드가 없는 이중 연결 리스트에도 node의 정의나 iterator의 정의는 차이가 없습니다. 여기에서는 차이가 있는 부분만 언급하겠습니다. 먼저, list를 생성했을 때의 초기 모습이 다를 것입니다. [그림 12] 더미노드 없는 이중 연결 리스트 초기화 모습 list(){ head = tail = 0; bsize = 0;} 생성자 메서드 외에 차이가 있는 부분은 노드를 매다는 hang_node와 노드의 연결을 끊는 dehang_hode와 시작 iterator를 반환하는 begin, 마지막 iterator를 반환하는 end가 있습니다. hang_node 메서드에서는 보관된 자료가 ..

[자료구조와 STL] 16. list 만들기 – 더미 노드있는 이중 연결 리스트 테스트

작성한 list가 정상적으로 동작하는지 확인해 봅시다. 앞에서 얘기한 것처럼 list를 사용하는 방법은 vector와 매우 유사합니다. 단지, vector에서는 인덱스 연산을 이용할 수 있었지만 list에서는 사용하지 못하는 정도의 차이라고 보시면 됩니다. vector를 이용하여 차례대로 요소를 보관하는 프로그램이나 vecor를 이용하여 특정 키순으로 보관했던 응용 프로그램 코드에서 vector를 list로 교체하더라도 정상적으로 동작합니다. //typedef vector StuCollection;typedef list StuCollection; 이러한 이유로 우리가 만든 list가 정상적으로 동작하는지 확인하기 위해 vector에서 만든 프로젝트 조금 수정하여 테스트할 수 있습니다. 기존 프로젝트에 작..

반응형