Showing posts with label program. Show all posts
Showing posts with label program. Show all posts

Saturday, April 30, 2016

[도서관리 프로그램] C언어로 구현한 도서 검색 예제 소스(추가/수정/삭제/정렬 기능)

도서관리 프로그램


프로그램 예제 소스를 공유한 적이
있었는데 UI는 없고, 이클립스의
console 상으로만 실행이 가능한
소스였습니다~ 그래서 이번에는
UI까지 구현된 도서관리프로그램을
블로그에 올려 봅니다~ 자바로
구현한 건 아니고 C언어로 구현된
프로그램입니다. 자료는 pdReport
카페에 공유해 두었습니다.


아래 영상은 해당 도서검색 프로그램을
실행해 본 영상입니다. 보시면 아시겠지만
검색은 물론 새로운 도서의 추가/수정 및
기존 도서를 삭제할 수도 있고, 이름이나
가격 순서로 재정렬도 할 수 있습니다.


등록된 책의 정보는 파일로
남게 되어 있습니다. 도서리스트의 정보를
저장하는 파일의 경로는 자료를 받으셔서
압축을 푸셔서 아래로 가시면 됩니다.
도서검색시스템\bin\Debug\Book_Info.dat
도서를 추가/수정/삭제하면 위의 파일이
그 때 그 때 수정이 되겠죠~


그리고 하나 재미있는 기능이 있어
추가로 설명을 드리겠습니다.
위의 이미지를 보시면 제목으로
책을 검색을 했습니다.
그런데 검색어를 그락커퍼니 라고
입력을 했는데 검색 결과로 
책 제목이 극락컴퍼니, 그리스인 조르바
인 책들이 검색이 되었습니다.
검색어와 정확히 일치하는 것만 결과만
보여주는 것이 아니고, 어느 정도
일치하는 것까지 판단을 해서
보여주고 있습니다~~ㅎㅎㅎ
사용자가 오타를 치거나 정확한
제목이나 저자, 출판사를 모르고
어렴풋이 알아도 검색을 하면
유사한 결과도 보여준다는 겁니다~

실행


파일을 다운 받아서 압축을 푸시면
도서검색시스템\bin\Debug\도서검색시스템.exe
위에 경로에 있는 파일을 실행하시면 됩니다.
아 그리고 실행을 하셨을 때 닷넷이라는
프로그램에 설치가 필요한 경우가 있습니다.
그런 경우에는 창에서 알려주는 사이트에
가서 닷넷을 다운 받아 설치해 주시면
문제 없이 실행이 되실 겁니다~

해당 C언어로 구현한 도서검색시스템은
pdReport 카페에서 공유 받으실 수 있습니다.


위에 링크된 주소로 가시면 됩니다!!!

Wednesday, April 20, 2016

앵귤러JS(AngularJS) 필터(filter) 예제 및 소스


AngularJS


회사에서 AngularJS로 프로젝트를 진행한지도
반 년이 넘어 가고 있습니다. 그 동안 앵귤러2.0이
나와서 1.0에서 2.0으로 넘어가야 되나 고민도
했었지만 아직 AngularJS 내부에서도 문제가
많은 거 같고, 예제도 적어 기존의 버전을
유지하기로 했고, 검색을 함에 있어 구글의
위대함을 알게 되었으며, 이래저래 책도
보면서 지금은 어느 정도 작업이 진행되고
있는 상태입니다...



현재까지는 AngularJS 선택에 큰
후회는 없는 상태이며, 개인적으로는
참 좋은 기술 하나 익히고 있다라는
생각을 가지고 있습니다 ㅎㅎ
이번에 멀티캠퍼스에서 AngularJS
교육을 듣고 있는데 복습 겸 공부 겸
블로그에 주저리 주저리 생각나는 데로
좀 적어 놓으려고 합니다 ㅎㅎㅎ
시간 날 때마다 올려 놓으려고 합니다.
시간에 쫓기는 교육이고, 단체 교육이라
아시는 분들께는 기초적인 내용이
될 수도 있겠다는 생각이 듭니다.

필터($Filter)


전체 예제 소스는 pdReport 카페에
올려 놓았으니 가셔서 받으세요~


$scope.value = 1000;
{{ value | currency }} : $1,000
/*
화폐 단위를 바꾸기 위해서는 각 나라 별로 js 파일이 존재하는 데 
경로를 불러오면 된다(수업이 너무 빨라서 풀경로를 모르겠습니다 ㅠㅠ
*/

$scope.jObj = '{name : 'Mike'}';
{{ jObj | json }} : {"name" : "Mike"}

$scope.str = 'AbCdEfGh';
{{ str | lowercase }} : abcdefgh

$scope.int = 3.333333333333;
{{ int | number : 5 }} : 3.3333

<div>
<input type="text" ng-model=search.id>
</div>
<ul>
<li ng-repeat="user in users" | filter:search>
<p>{{ user.id}} | {{user.name}} | {{user.email}} </p>
</li>
</ul>
/*
search 값에 따라 테이블의 값이 조회 되어 해당 값들로만 재정렬 된다.
*/

 ng-repeat="user in userList" | orderBy:order:reverse">
/*
테이블의 값들이 order 에 해당하는 필드 순으로 정렬 되는데
reverse에  값이 true/false 이냐에 따라 정렬/역정렬 된다
*/

<tr ng-repeat="obj in objs" | filter : q : strict>
/*
objs 안에 있던 배열의 값들이 테이블로 표현되는 q 변수 안에 담긴 값에 따라 검색이 되는데
이 때 strict의 값이 true이면 q 값과 정확히 일치하는 행만 화면에 출력된다.
*/

{{ 123456789 | limitTo : 2}} : 12
/*
123456789의 첫 두자리 값만 출력
*/

{{ 123456789 | -2 }} : 89
/*
끝 두 자리 값만 출력
*/

{{ 123.4455 | number:2 }} : 123.45
/*
소수점 두 째 자리까지 출력(그 밑으로 소수자리가 더 있으면 셋 째 자리에서 반올림)
*/

{{123.4455 | number:-2 }} : 100
/*
십의 자리에서 반올림
*/


/*
날짜 표현 방식이 yyyy-MM-dd 말고도 angularJS에서는 위와 같이도 제공한다
*/



<select ng-model="arrCountry" ng-options="country.name group by country.continent for country in countryList" ng-request="true">
/*
아래와 같이 selectbox가 생성되는데 country 배열 안에 있는 continent 값으로 group이 지어진다.
그리고 repeat를 사용했으므로 countryList 안에 있는 배열들이 총 세개가 찍히는데 이 때 값은
continet에 매핑되는 name 값으로 화면에 출력된다.​
*/



음 소스까지 손으로 다 직접 칠려고 했는데
점점 귀찮아져서 캡처해서 올렸습니다 ㅎ
여기까지 올린게 다는 아니지만 filter
부분에 대해서 간단하게나마 올려 봤습니다.
다음에는 Form 관련 예제 올려 보겠습니다

AngularJS(앵귤러JS) 서비스(Service)와 팩토리(Factory)의 차이와 관련 예제

AngularJS


멀티캠퍼스 AnnularJS 교육 3일차 입니다.
앵귤러JS 관련 예제로 빠르게 8시간을
진행하다 보니 교육이 끝나면 진이 좀
빠지지만 그래도 회사에서 AngularJS
프로젝트를 하고 있는 상태에서 듣는
교육이라 내용 이해하는 데 많이
도움이 되고 있습니다.
개인적인 생각이지만... 이렇게 단기간
속성 교육은 어느 정도 알고 들어야
도움이 되는 거 같습니다. 아예 모르는
상태에서 처음부터 배우겠다는 생각으로
갔다가는 시간만 낭비하기 딱 좋은거 같습니다.

오늘도 AngularJS 교육에서도 많은 내용이
나왔는데 그 중에서 흥미를 끄는 내용이
있어서 올려 보겠습니다.
서비스와 팩토리 관련 내용입니다.

AngularJS로 프로젝트를 하면서 factory를
특히 많이 사용했습니다. 하지만 service,
directive, constant 등 인터넷에서 검색해서
사용하기는 하지만 도대체 각각의 정확한
용도와 차이를 아직까지도 모르고 있어서
이걸 맞게 사용하고 있는 건지가 의문이었는데
오늘 그 중 서비스와 팩토리를 설명해 주는
부분이 있어서 귀가 번뜩했습니다.

Factory


일단 어제 강의에서도 Factory에 대한 내용이
잠깐 나왔던게 있어서 정리해 보겠습니다.
$scope 을 이용해서 View와 Controller를
연결을 해줍니다. 그리고 실질적인 화면 작업은
Controller에서 해주는데 이 때 기능 구현 시
하나의 controller에서가 아닌 다른 controller에서도
사용될 수 있는 기능적인 부분을 factory로 따로
빼서 관리를 한다고 합니다. 그리고 이를 위해
factory에서는 변수나 함수를 return을 해주는데
이 return 되는 값에 한해서만 다른 module에서
사용하는 것이 바람직하다. 그리고 이렇게 return을
해주는 이유는 팩토리는 내부는 변수나 함수를
var 타입으로 선언해서 외부에서는 해당 변수나
함수에 접근하지 못하도록 하는게 바람직하기
때문이라고 합니다. 대신 외부에 제공할 변수나
함수에 대해서만 return 형태로 전달해서
사용할 수 있게 하는 겁니다.


위에서 보시면 factory 내부의 변수와 함수는
모두 var 타입으로 선언이 되었습니다.
그러므로 위에 factory를 의존성 주입한
다른 module에서도 위에 변수나 함수에는
직접 접근을 할 수가 없습니다.
대신 factory에 마지막에서 return을 해주는
값들이 있는데 이 거에 대해서는 팩토리
의존성 주입이 된 다른 변수에서 접근할 수
있습니다.

Service


팩토리와 달리 service에서는 return 되는
값이나 변수가 없습니다. 그럼 이 때 생각해
봐야 될 게... 만약 서비스 내부도 팩토리처럼
var 타입의 변수/함수만 있다면 해당 service를
의존성 주입 받은 다른 module에서는 이 서비스에서
얻을 수 있는 값이 하나도 없게 됩니다. 팩토리는
return을 통해서 var 타입의 변수/함수를 외부에서도
사용할 수 있게 할 수 있는데 반해 return 형태가
없는 service는 외부에서 접근 자체가 불가능합니다.
그러므로 service는 외부에서 접근할 수 있도록
변수/함수는 this를 사용해서 선언해 줍니다.



위에 serivce를 보시면 this.변수/함수 형태로 선언이
되고 있습니다. 이러한 값들은 해당 서비스의 의존성을
받은 다른 외부 모듈에서 접근이 가능합니다.
그렇다고 service 내부의 모든 함수나 변수를 this로
선언할 필요는 없습니다. 외부접근을 막을 건 var로
선언해서 막고, 외부에 공유할 것만 this로 선언하면
되는 겁니다.

서비스와 팩토리의 용도


이 쯤 되면 그럼 서비스를 써야 되나?
팩토리를 써야 되나? 하는 의문 하나가
먼저 생기고, 또 이런 차이는 도대체
왜 존재하고, 어떻게 써먹어야 되는거지?
란 구금증도 생기게 됩니다.

여기서부터는 교육을 듣고 블로그에
정리하면서 든 제 생각 위주로 작성을
해보도록 하겠습니다. 판단은 읽으시는
분들께서 해주세요 ㅠㅠ 저도 오늘 처음
교육 듣고, 복습 하면서 곱씹어 보는 겁니다.

일단 controller라는 놈은 view와 연결되어
view 와 관련된 구현을 하는 놈이라고
보면 될 거 같습니다. 그럼 controller에서
화면을 구현하다 보면 단순하게 보이는 것만
구현하는 게 아니라 필연적으로 기능적인 개발도
수반되게 됩니다. 그런 이 화면 구현과
기능 개발을 controller에서만 하게 되면
화면의 구현과 비즈니스 로직 개발이
서로 뒤섞이게 됩니다. 즉 화면 구현이 아닌
부분(기능)을 view단과 분리를 시키기 위해
서비스나 팩토리가 존재하는게 아닌가 싶습니다.

결국 function 형태로 그 부분을 외부로 뺄건데...
이 때 그 function 내용에 특성에 따라
AngularJS에서는 service로 분리해낼 수도 있고,
factory로 분리해낼 수도 있는 겁니다.

위에서 말했 듯이 만약 해당 부분의 내용 중
일부만을 외부에 보여주고 싶다면 해당 변수나
함수는 var 타입으로 선언하면 되고, 외부로
공유하고 싶은 건 this로 선언해 주면 됩니다.
그런데 앵귤러JS의 팩토리에 경우 return하는
형태로 외부 모듈에서 접근할 수 있게 해주므로
일부만 외부에 제공하려면 factory를 사용하면
된다는 결론을 내릴 수 있지 않나 싶습니다.

또 다른 관점에서 만약 외부로 뺄 내용이
외부에서 저급해도 상관이 없다면 굳이
일부만 return해서 제공해주는 factory가 아닌
service를 사용하면 되는 거겠죠~~~

결국 factory나 service나 공통 부분을
외부로 빼서 관리를 하고 외부에서
접근하는 형태로 특정 기능이나 값을 제공하는
역할을 한다는 것은 다르지 않다는 겁니다.

접근권한, 객체지향


이렇게 주저리주저리 이야기를 하다보니

어라?? 어디서 많이 들었던 얘기들인데?

이런 생각이 갑자기 듭니다.
처음 전자과에서 소프트웨어 쪽으로
전향 한답시고 프로그램 관련 수업만
들었을 때 수업에서 줄기차게 들었던
자바의 특성들과 크게 다르지 않다라는
생각이 들었습니다. C와 같이 폭포수 코딩을
하면 가독성/관리/효율적인 면에서 많은
문제가 생겼고, 그렇게 때문에 객체지향의
언어가 부각 되었으며, 그 객체지향의
특성 중에는 재사용이 있었습니다.
따로 선언만 해놓으면 언제든 그 기능을
가져다 사용할 수 있다!!! 란 개념은
제가 오늘 얘기한 angularJS의 서비스나
팩토리의 용도와 크게 다르지 않다라는
생각이 듭니다. 또 자바에서는 public,
private 등과 같은 선언자를 사용해서
변수나 메서드접근에 제한을 주고 있습니다.
AngularJS에서도 var나 this를 이용해
외부 module에서의 접근을 제한하고 있구요~
이렇게 생각을 하니 오늘 AngularJS에 대한
이해도가 조금은 더 올라가서 친숙도가
조금은 상승한 거 같네요~~~

뭐 제 설명이 맞는지 틀린지는 모르겠지만
적어도 저 자신은 오늘 교육에 대해 납득을
시킨 거 같아 뿌듯합니다 ㅋㅋㅋㅋㅋㅋㅋ

ㅎㅎ 오늘 설명한 내용은 오늘 교육 중
한 시간 분량도 안되는 내용인데 ㅋㅋ
저도 정리가 필요하므로 시간 날 때마다
계속 블로그에 올려 놓도록 하겠습니다!