소프트웨어공학 프로젝트 8조 큐리 119 -...

29
1 소프트웨어공학 프로젝트 8조 큐리 119 컴 퓨 터 과 학 전 공 20084334 장용준 200914550 서준원 200914626 차진환 201014523 박지혜 201113479 김현수 담당교수 문 양 세 교수님

Upload: others

Post on 30-Dec-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

1

소프트웨어공학 프로젝트 8조

큐리 119

학 과 컴 퓨 터 과 학 전 공팀 장 20084334 장용준팀 원 200914550 서준원

200914626 차진환201014523 박지혜201113479 김현수

담당교수 문 양 세 교수님

Page 2: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

2

-계획서-1.개요

1.1 프로젝트 개요프로그램명 : 닥터 119제작 배경애완견을 키우는 사람들이 부득이하게 병원에 가지 못할 경우에 이 앱을 통해서 자가진단을 통해 상태의 심각성을 알 수 있게 되고 또 가까운 동물병원으로 갈 수 있는 지도와 전화번호를 제공한다. 그리고 애견 다이어리 기능을 통해 애견의 성장과정과 추억들을 저장할 수 있게 된다.

1.2 프로젝트의 산출물문서산출물 : 프로젝트 계획서, 요구분석서, 설계서프로그램 : 안드로이드 어플리케이션 (닥터 119)

1.3 정의, 약어닥터 119 : 아픈 애완견을 자가 처방 할 수 있고 애견 정보가 담겨있는 어플리케이 션DB : DataBase의 약어, 정보저장 프로그램

2. 자원 및 일정 예측2.1 자원조직 구성 및 인력 배치분산형 팀 조직-민주주의식 의사 결정서준원 : 설계서 작성, 디자인장용준 : 계획서 작성, 자료수집차진환 : 설계서 작성, 자료수집김현수 : 요구분석서 작성, 프로그래밍박지혜 : 발표자료 작성, 발표

Page 3: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

3

2.2 일정 예측

진행 목차 10.11~15 10.16~20 10.21~25 10.26~11.20 11.20~30

계획프로젝트 기획자원 및 일정조직 구성 및

인력배치표준 및 절차

요구분석계획 구체화 작업

성능 및 제약조건 고려

설계 DB 설계Class 설계

구현 App 구현테스트 App 테스트

3. WBS

4. 기술관리 방법4.1 변경관리변경 요구 사항 수집 후 회의 때 변경주기적인 프로젝트 점검

4.2 위험 관리일정 지연을 예방하기 위해서 철저하게 일정을 관리한다.명확하게 설계 한다.정확하게 요구분석 한다.예상치 못한 상황에 대한 대비로 백업을 해 둔다.

Page 4: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

4

4.3 문제점 해결 방안문제가 발생하면 인터넷이나 책을 통해 해결한다.문제 발생 이전에 문제를 예측하여 문제를 예방한다.

5. 표준 및 개발 절차5.1 개발 방법론폭포수 모형

계획1)프로그램 작성 이전에 안드로이드 프로그래밍 원리 및 지식 습득2)프로그램 설계3)프로그램 구현 4)테스트 및 디버깅

6. 검토 회의6.1 검토회 일정10월 11일 : 1차 검토회10월 16일 : 2차 검토회10월 21일 : 3차 검토회10월 25일 : 4차 검토회11월 5일 : 5차 검토회11월 25일 : 6차 검토회

6.2 검토회 진행 방법회의 순서1)팀장의 일정 브리핑

Page 5: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

5

2)주요 사항 논의3)문제점 논의4)건의 사항

6.3 검토회 후속 조치회의 종료 후 문제점이나 변동 사항이 있으면 신속하게 전파한다.회의로 결정된 사항들을 잘 지킨다.

7. 개발 환경개발 운영체제 : Windows 7(32bit)개발 도구 : Eclipse, AndroidDataBase : SQL lite

8. 성능 시험 방법프로그램의 안정성과 정확도를 시험한다.여러 운영체제에서 시험해 본다.스마트폰에서 시험해 보고 오류를 다시 해결한다.

9. 문서화일단 개인이 작성하고 다시 모여서 수정한다.계속해서 정보를 교환하며 의사소통을 한다.

10. 유지보수유지보수 영역 : 안드로이드 어플리케이션유지보수 주기 : 정기정검 1년, 긴급정검(새로운 질병이 발생하였을 때)유지보수 요구 수집 : 유지보수 요구는 메일로 받는다.

11. 설치, 인수프로그램 개발이 완료 되면, 인수하여 테스트 한다.테스트한 결과를 문서화 한다.테스트완료 후 이상 없으면 프로그램을 설치한다.프로그램을 설치하여 이상이 있는지 최종적으로 정검한다.

12. 참고문헌 및 부록

소프트웨어 공학 – 문양세 교수님 PPT 자료

Page 6: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

6

-요구분석서-1. 개요 1.1 개발 주제

애견(강아지) 관리 앱

1.2 시스템의 목적 사회가 발전할수록 점점 애완동물을 키우는 가정이 늘고 있다. 애견을 관리하는 일은 많은 시간과 돈을 요하는 일이나, 바쁜 현대 사회에 살며

애견 에만 신경을 쓰고 있을 수는 없는 노릇이다. 이 앱을 개발하는 목적은 애견인들에게 보다 많은 정보를 제공하고, 편리하고

효율적으로, 많은 시간을 투자하지 않고도 이 앱을 통해 정보를 얻어 애견을 관리할 수 있도록 편의 사항들을 제공해 주는 것이다.

또한 애견 다이어리 기능을 추가하여 보다 섬세하게 애견을 돌볼 수 있도록 돕는다.

1.3 개발 배경 애견이 가벼운 병에 걸렸을 때, 병원에 가기에는 병원비가 너무 비쌈. 바쁜 현대사회에서 애견에 많은 시간을 투자하지 못할 때가 많음. 애견에 대한 정보를 한 번에 얻을 수 있는 앱이 많지 않음. 애견인들에게 정보 외에 부차적인 필요도 있을 텐데 그 필요들을 채우려함.

1.4 개발 환경 OS : Android DBMS : SQL Lite Document : Microsoft Office Power Point, 한글. etc. : Photoshop, Eclipse.

1.5 시나리오 애견이 병에 걸렸거나 문제가 있을 때, 병원에 가지 않고, 여러 정보를 찾기 위해

전문 도서와 웹서핑에 시간을 낭비하지 않고 앱 하나로 간단하게 정보를 얻을 수 있게 한다.

많은 시간을 들이지 않고도 애견을 손쉽게 관리할 수 있도록 돕는다.

1.6 시스템 필수 요소 신속한 정보 획득 : 대분류, 소분류 방식을 이용하여 애견의 상황에 따라 손쉽게

정보를 획득할 수 있도록 함. 동물병원 위치 검색 : 이 앱만으로 해결이 안 될 상황에는 동물병원에 가야 하므로 주변에 동물병원이 어디 있는지 확인하고 정보 제공. 애견 다이어리 : 애견에 대한 여러 가지 정보를 제공하는 다이어리 기능.

Page 7: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

7

2. 기능적 요구 2.1 외부 인터페이스 요구

사용자 인터페이스 : 사용자가 사용하기 편하게 그림을 이용해서 정리할 예정.그림으로 대분류를 나눈 후 소분류 목록을 주어 세세한 병명을 검색하게 함.

2.2 기능 요구사용 사례 1 : 애견이 아픈데 어디가 아픈지 모르는 상황에서 초기 진단이 필요할 때 이 앱을 통해 임시 진료.사용 사례 2 : 임시 진료가 끝난 후 병원이 필요할 때 병원의 위치를 조사해 정보를 받고, 받은 정보를 찾음.(정보에는 위치, 전화번호 등 인터넷에서 제공해 주는 정보가 들어감.)

2.3 자료 흐름도

3. 기타 요구 및 제약 사항 가. 성능요구 정확한 정보를 제공한다. 깔끔한 인터페이스 제공 3.1 H/W요구 DB와 연동할 수 있는 서버 안드로이드를 프로그래밍 할 수 있는 하드웨어 체제 구축

3.2 사용자 인터페이스 간단한 인터페이스 구성으로 초보자도 쉽게 사용할 수 있게 구현

Page 8: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

8

모듈명 Curi 119

모듈형 Output image

인터페이스 Image View

오류메시지 x

사용하는

파일Main_image.jpg

호출하는

모듈x

기능 설명 메인화면이다.

모듈명 My Pet모듈형 Input Text

인터페이스 EditText

오류메시지알 수 없는 강아지

정보입니다.

사용하는 파일 x

호출하는 모듈 x

기능 설명내 강아지의 품종, 나이,

성별을 입력시키는 창이다.

-설계서-1. 개요

1.1 시스템의 목표애완견의 증상을 확인하고 그에 따른 병명, 치료방법, 예방법 등을 제공애완견의 상태를 매일 기록 할 수 있는 애견 다이어리 기능지도뷰를 통한 근처 동물병원의 위치, 전화번호 제공

1.2 하드웨어Intel Core(TM)2 CPU E8400 @ 3.00GHz

1.3 소프트웨어개발 운영체제 : Windows 7(32bit)개발 도구 : Eclipse, AndroidDataBase : SQL lite

2. 시스템 구조

2.1 시스템 구조개요

2.2 시스템 구조도

3.모듈설계

Page 9: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

9

모듈명 My address모듈형 Input Text

인터페이스 EditText

오류메시지 알 수 없는 주소입니다.

사용하는

파일x

호출하는

모듈x

기능 설명내 거주지를

입력시키는 창이다.

모듈명 Why?모듈형 Output Text

인터페이스 TextView

오류메시지 DB 오류

사용하는 파일 x

호출하는 모듈 x

기능 설명

내 강아지 정확한

증상을 알수 있게 선택지를

주며 대분류에서 소분류로

데이터를 출력한다.

모듈명 Where?

모듈형 Output Graphic

인터페이스 View

오류메시지 x

사용하는

파일My_map.png

호출하는

모듈x

기능 설명근처 동물병원

위치를 출력한다.

모듈명 Pet diary

모듈형 Input Text

인터페이스 EditText

오류메시지 x

사용하는 파일 x

호출하는 모듈 x

기능 설명강아지 관련 일기를

작성하는 곳이다.

모듈명 Call

모듈형 Output Label

인터페이스 Label

오류메시지 DB 읽기 실패

사용하는

파일x

호출하는

모듈x

기능 설명동물병원

전화번호를 출력함.

4. 제약 사항

1. 강아지의 모든 병명에 대해서 정확하게 사용자에게 정보를

전달해주기는 어렵다.(DB가 매우 방대하다)2. 새로운 병이 나타날 때마다 입력을 시켜줘야 하므로 잦은 업데이트가 요구된다.

3. 애완동물 전문가가 아니기 때문에 정확한 진단을 하기는 어렵다. 언제까지나 인터넷 정보에 의존하는 정보일수 밖에 없다.

4. 애완동물병원의 위치에 오차가 있을 수 있다. 5. 팀원 모두 아직 안드로이드에 익숙하지가 않다.

5. 참고 사항소프트웨어 공학 – 문양세 교수님 PPT 자료동물관련 의학서적

Page 10: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

10

-시험결과- 메인화면 메뉴선택 애견진단

다이어리 날짜선택 병원찾기

Page 11: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

11

-코드-*Main menu*package puppy.clinic;

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;

public class MainMenu extends Activity {

/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu); Button button = (Button)findViewById(R.id.gotoPC);

button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainMenu.this, MainList.class); startActivity(intent); } });

Button button2 = (Button)findViewById(R.id.gotoD); button2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainMenu.this, CalendarActivity.class); startActivity(intent); } });

Button button3 = (Button)findViewById(R.id.gotoLO); button3.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainMenu.this, Map.class); startActivity(intent); } });

Page 12: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

12

}}

*Map*package puppy.clinic;

import java.util.List;

import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.widget.Toast;

import com.google.android.maps.GeoPoint;import com.google.android.maps.ItemizedOverlay;import com.google.android.maps.MapActivity;import com.google.android.maps.MapController;import com.google.android.maps.MapView;import com.google.android.maps.Overlay;import com.google.android.maps.OverlayItem;

public class Map extends MapActivity{MapView mMap;Drawable mMarker;//------

protected boolean isRouteDisplayed(){return false;

}

public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.map);

mMap = (MapView)findViewById(R.id.mapView1);MapController mapControl = mMap.getController();mapControl.setZoom(15);mMap.setSatellite(false);mMap.setBuiltInZoomControls(true);

GeoPoint pt = new GeoPoint((int)(37.869789*1000000.0),

Page 13: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

13

(int)(127.743380*1000000.0));mapControl.setCenter(pt);

mMarker = getResources().getDrawable(R.drawable.marker);mMarker.setBounds(0, 0, mMarker.getIntrinsicWidth(),

mMarker.getIntrinsicHeight());

Clinic rest = new Clinic(mMarker);List<Overlay> overlays = mMap.getOverlays();overlays.add(rest);

}

class Clinic extends ItemizedOverlay<OverlayItem>{public Clinic(Drawable marker){

super(marker);boundCenterBottom(marker);boundCenter(mMarker);populate();

}

public void draw(Canvas canvas, MapView mapView, boolean shadow){super.draw(canvas, mapView, false);

}

public int size(){return 11;

}

protected OverlayItem createItem(int i){OverlayItem item = null;

switch(i){case 0:

item = new OverlayItem(new GeoPoint((int)(37.868252*1000000.0), (int)(127.751175*1000000.0)), "강원대학교 부속 동물병원", "033-250-8606");

break;case 1:

item = new OverlayItem(new GeoPoint((int)(37.877817*1000000.0), (int)(127.750794*1000000.0)), "춘천 동물병원", "033-242-1317");

Page 14: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

14

break;case 2:

item = new OverlayItem(new GeoPoint((int)(37.862909*1000000.0), (int)(127.749976*1000000.0)), "강남 종합 동물병원", "033-263-0513");

break;case 3:

item = new OverlayItem(new GeoPoint((int)(37.859684*1000000.0), (int)(127.742943*1000000.0)), "미래 종합 동물병원", "033-275-7533");

break;case 4:

item = new OverlayItem(new GeoPoint((int)(37.856347*1000000.0), (int)(127.743112*1000000.0)), "봄내 동물병원", "033-262-9070");

break;case 5:

item = new OverlayItem(new GeoPoint((int)(37.879968*1000000.0), (int)(127.742913*1000000.0)), "현대 동물병원", "033-256-7582");

break;case 6:

item = new OverlayItem(new GeoPoint((int)(37.855324*1000000.0), (int)(127.751649*1000000.0)), "우리 동물병원", "033-263-7502");

break;case 7:

item = new OverlayItem(new GeoPoint((int)(37.851353*1000000.0), (int)(127.743533*1000000.0)), "고려 동물병원", "033-264-9975");

break;case 8:

item = new OverlayItem(new GeoPoint((int)(37.885835*1000000.0), (int)(127.745740*1000000.0)), "한독 동물병원", "033-275-7533");

break;case 9:

item = new OverlayItem(new GeoPoint((int)(37.881766*1000000.0), (int)(127.747983*1000000.0)), "삼성 동물병원", "033-244-9975");

break;case 10:

item = new OverlayItem(new

Page 15: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

15

GeoPoint((int)(37.867273*1000000.0), (int)(127.731999*1000000.0)), "조 동물병원", "033-251-0911");

item.setMarker(mMarker);break;

}return item;

}

public boolean onTap(int index){String msg;OverlayItem item = getItem(index);msg = "이름 : " + item.getTitle() + "\n"+"전화번호 : " +

item.getSnippet();Toast.makeText(Map.this, msg, Toast.LENGTH_LONG).show();return true;

}}

}

*Mainlist*package puppy.clinic;

import java.util.ArrayList;

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;

public class MainList extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); ArrayList<String> list = new ArrayList<String>(); list.add("구토 증상이 있다."); list.add("걸음걸이에 이상이 있다.");

Page 16: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

16

list.add("기침을 한다."); list.add("호흡곤란이 있다."); list.add("기운이 없다."); list.add("설사 증상이 있다."); list.add("식욕부진이 있다."); list.add("가려움증이 있다."); list.add("콧물이 난다."); list.add("탈모 현상이 있다."); list.add("열이 난다."); list.add("귀지가 부풀어 오른다"); list.add("눈을 자주 비비고 눈물을 많이 흘린다."); list.add("눈주위가 짓무르고 지저분하다."); list.add("눈이 녹색이거나 적색으로 보인다."); list.add("안구가 커진다."); list.add("코에서 피가 난다."); list.add("이가 노란색이거나 갈색으로 변색된다."); list.add("잇몸이 붓고 피가 난다."); list.add("호흡곤란과 황달이 생긴다."); list.add("조금씩 여위어 간다."); list.add("호흡곤란이 있고 제대로 성장하지 못한다."); list.add("배가 부풀어 오르고 침을 흘린다."); list.add("입안에 발진이 생기며 붓거나 짓무른다."); list.add("침을 많이 흘리거나 입냄새가 난다."); list.add("입 주위를 핥다가 털이 빠지거나 악취가 난다."); ArrayAdapter<String> adapter; adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); ListView listview = (ListView)findViewById(R.id.list); listview.setAdapter(adapter); listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE); listview.setOnItemClickListener(mItemClickListener); } AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = null; switch(position) { case 0:

Page 17: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

17

startActivity(new Intent(MainList.this, vomit.class)); break; case 1: startActivity(new Intent(MainList.this, walking.class)); break; case 2: startActivity(new Intent(MainList.this, cough.class)); break; case 3: startActivity(new Intent(MainList.this, breathing.class)); break; case 4: startActivity(new Intent(MainList.this, energy.class)); break; case 5: startActivity(new Intent(MainList.this, diarrhea.class)); break; case 6: startActivity(new Intent(MainList.this, appetite.class)); break; case 7: startActivity(new Intent(MainList.this, itching.class)); break; case 8: startActivity(new Intent(MainList.this, running.class)); break; case 9: startActivity(new Intent(MainList.this, hair.class)); break; case 10: startActivity(new Intent(MainList.this, fever.class)); break; case 11: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","이혈종"); startActivity(intent); break; case 12: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","각막염 · 결막염"); startActivity(intent); break; case 13:

Page 18: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

18

intent = new Intent(MainList.this, Result.class); intent.putExtra("put","각막염 · 결막염"); startActivity(intent); break; case 14: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","녹내장"); startActivity(intent); break; case 15: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","녹내장"); startActivity(intent); break; case 16: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","비출혈"); startActivity(intent); break; case 17: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","치주병"); startActivity(intent); break; case 18: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","치주병"); startActivity(intent); break; case 19: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","필라리아증"); startActivity(intent); break; case 20: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","간경변"); startActivity(intent); break; case 21: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","심실중격 결손증"); startActivity(intent);

Page 19: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

19

break; case 22: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","위염전"); startActivity(intent); break; case 23: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","구내염 · 구순염"); startActivity(intent); break; case 24: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","구내염 · 구순염"); startActivity(intent); break; case 25: intent = new Intent(MainList.this, Result.class); intent.putExtra("put","구내염 · 구순염"); startActivity(intent); break; } } };*CalendarActivity*package puppy.clinic;

import java.util.Date;import java.util.ArrayList;import java.util.Calendar;

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.TextView;

Page 20: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

20

public class CalendarActivity extends Activity implements OnClickListener,OnItemClickListener {

ArrayList<String> mItems;ArrayAdapter<String> adapter;TextView textYear;TextView textMon;

/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.calendar_main);

textYear = (TextView) this.findViewById(R.id.edit1);textMon = (TextView) this.findViewById(R.id.edit2);

mItems = new ArrayList<String>();adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_list_item_1, mItems);

GridView gird = (GridView) this.findViewById(R.id.grid1);gird.setAdapter(adapter);gird.setOnItemClickListener(this);

// Date date = new Date(0, 0, 0);// 오늘에 날짜를 세팅 해준다.Calendar car = Calendar.getInstance( ) ;Date date = car.getTime() ;int year = date.getYear() + 1900;int mon = date.getMonth() + 1;textYear.setText(year + "");textMon.setText(mon + "");

fillDate(year, mon);

Button btnmove = (Button) this.findViewById(R.id.bt1);btnmove.setOnClickListener(this);

}

public void onClick(View arg0) {// TODO Auto-generated method stubif (arg0.getId() == R.id.bt1) {

Page 21: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

21

int year = Integer.parseInt(textYear.getText().toString());int mon = Integer.parseInt(textMon.getText().toString());fillDate(year, mon);

}

}

private void fillDate(int year, int mon) {mItems.clear();

mItems.add("일");mItems.add("월");mItems.add("화");mItems.add("수");mItems.add("목");mItems.add("금");mItems.add("토");

Date current = new Date(year - 1900, mon - 1, 1);int day = current.getDay(); // 요일도 int로 저장.

for (int i = 0; i < day; i++) {mItems.add("");

}

current.setDate(32);// 32일까지 입력하면 1일로 바꿔준다.int last = 32 - current.getDate();

for (int i = 1; i <= last; i++) {mItems.add(i + "");

}adapter.notifyDataSetChanged();

}

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stubif (mItems.get(arg2).equals("")) {

;} else {

Intent intent = new Intent(this, Today.class);//해당 일을 눌렸을때

intent.putExtra("Param1", textYear.getText().toString() + "/"

Page 22: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

22

+ textMon.getText().toString() + "/" + mItems.get(arg2));

startActivity(intent);}

}}*Result*package puppy.clinic;

import java.util.ArrayList;

import android.app.ExpandableListActivity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.TextView;

public class Result extends ExpandableListActivity {

private static final String TAG = "Result";ExpandableListAdapter mAdapter;

private String get = null;

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.last);

get = getIntent().getExtras().getString("put");Log.e(TAG,"get : " + get);

mAdapter = new MyExpandableListAdapter(get);setListAdapter(mAdapter);

Page 23: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

23

registerForContextMenu(getExpandableListView());

TextView tv = (TextView)findViewById(R.id.tvLast);tv.setText(get);tv.setTextSize(30);

}

public class MyExpandableListAdapter extends BaseExpandableListAdapter {ClinicDataHelper openHelper = null;SQLiteDatabase sdb = null;String get = null;int height = 0;ArrayList<Disease> diseases = null;

private String[] groups = { " 원인과 증상", " 치료와 예방법" };private String[][] children = null;

public MyExpandableListAdapter(String get) {this.get = get;this.openHelper = new ClinicDataHelper(getApplicationContext());this.sdb = openHelper.getReadableDatabase();this.diseases = new ArrayList<Disease>();getDisease();setChildren();

}private void setChildren() {

children = new String[][] { {"abc"}, {"abc"} };children[0][0] = diseases.get(0).getSymptom();children[1][0] = diseases.get(0).getTreat();

}private void getDisease() {

String sql = "select * from " + Constants.ClinicData.TABLE_NAME + " where " + Constants.ClinicData.NAME + " = '" + this.get + "'";

Cursor c = sdb.rawQuery(sql, null);

String name = new String();String symptom = new String();String treat = new String();

Page 24: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

24

if(c.moveToFirst()) {

do {name = c.getString(0);symptom = c.getString(1);treat = c.getString(2);Disease temp = new Disease(name, symptom,

treat);diseases.add(temp);

}while(c.moveToNext());}this.height = symptom.length();

}

public Object getChild(int groupPosition, int childPosition) {return children[groupPosition][childPosition];

}

public long getChildId(int groupPosition, int childPosition) {return childPosition;

}

public int getChildrenCount(int groupPosition) {return children[groupPosition].length;

}

public TextView getGenericView() {AbsListView.LayoutParams lp = new

AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);

TextView textView = new TextView(Result.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(30, 10, 30, 10);return textView;

}

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

TextView textView = getGenericView();AbsListView.LayoutParams lp = new

AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, height + 40);

Page 25: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

25

textView.setLayoutParams(lp); textView.setPadding(10, 10, 10, 10);

textView.setText(getChild(groupPosition, childPosition).toString());return textView;

}

public Object getGroup(int groupPosition) {return groups[groupPosition];

}

public int getGroupCount() {return groups.length;

}

public long getGroupId(int groupPosition) {return groupPosition;

}

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

TextView textView = getGenericView();textView.setText(getGroup(groupPosition).toString());return textView;

}

public boolean isChildSelectable(int groupPosition, int childPosition) {return true;

}

public boolean hasStableIds() {return true;

}}

}

*MydbHelper*package puppy.clinic;

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;

Page 26: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

26

public class MyDBHelper extends SQLiteOpenHelper { //데이터베이스 클래스

public MyDBHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);

// TODO Auto-generated constructor stub}

@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub

db.execSQL("CREATE TABLE today(_id INTEGER PRIMARY KEY AUTOINCREMENT, "

+ "title TEXT, " + "date TEXT , " + "time TEXT, "+ "memo TEXT );");

}

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stubdb.execSQL("DROP TABLE IF EXIST today;");onCreate(db);

}

}

*Detail*package puppy.clinic;

import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;

public class Detail extends Activity implements OnClickListener { // 일정목록 추가하기MyDBHelper mDBHelper;int mId;

Page 27: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

27

String today;EditText editDate, editTitle, editTime, editMemo;

/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.detail);

editDate = (EditText) findViewById(R.id.editdate);editTitle = (EditText) findViewById(R.id.edittitle);editTime = (EditText) findViewById(R.id.edittime);editMemo = (EditText) findViewById(R.id.editmemo);

Intent intent = getIntent();mId = intent.getIntExtra("ParamID", -1);today = intent.getStringExtra("ParamDate");

mDBHelper = new MyDBHelper(this, "Today.db", null, 1);

if (mId == -1) {editDate.setText(today);

} else {SQLiteDatabase db = mDBHelper.getWritableDatabase();Cursor cursor = db.rawQuery("SELECT * FROM today WHERE

_id='" + mId+ "'", null);

if (cursor.moveToNext()) {editTitle.setText(cursor.getString(1));editDate.setText(cursor.getString(2));editTime.setText(cursor.getString(3));editMemo.setText(cursor.getString(4));

}mDBHelper.close();

}

Button btn1 = (Button) findViewById(R.id.btnsave);btn1.setOnClickListener(this);Button btn2 = (Button) findViewById(R.id.btndel);btn2.setOnClickListener(this);Button btn3 = (Button) findViewById(R.id.btncancel);btn3.setOnClickListener(this);

Page 28: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

28

if (mId == -1) {btn2.setVisibility(View.INVISIBLE);

}}

public void onClick(View v) {// TODO Auto-generated method stubSQLiteDatabase db = mDBHelper.getWritableDatabase();

switch (v.getId()) {case R.id.btnsave:

if (mId != -1) {db.execSQL("UPDATE today SET title='"

+ editTitle.getText().toString() + "',date='"

+ editDate.getText().toString() + "', time='"

+ editTime.getText().toString() + "', memo='"

+ editMemo.getText().toString() + "' WHERE _id='" + mId

+ "';");} else {

db.execSQL("INSERT INTO today VALUES(null, '"+ editTitle.getText().toString() + "', '"+ editDate.getText().toString() + "', '"+ editTime.getText().toString() + "', '"+ editMemo.getText().toString() + "');");

}mDBHelper.close();setResult(RESULT_OK);break;

case R.id.btndel:if (mId != -1) {

db.execSQL("DELETE FROM today WHERE _id='" + mId + "';");

mDBHelper.close();}setResult(RESULT_OK);break;

case R.id.btncancel:setResult(RESULT_CANCELED);

Page 29: 소프트웨어공학 프로젝트 8조 큐리 119 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_2/se/8.final... · 2016-06-02 · 계획 구체화 작업 성능 및 제약조건

29

break;}finish();

}}

*ClinicDataHelper*package puppy.clinic;

import puppy.clinic.Constants.ClinicData;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;

public class ClinicDataHelper extends SQLiteOpenHelper {static final String TAG = "ClinicDataHelper";

public ClinicDataHelper(Context c) {super(c, ClinicData.DB_NAME, null, ClinicData.DB_VERSION);

}

public void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE " + ClinicData.TABLE_NAME + " (" +

ClinicData.NAME + " text, " + ClinicData.SYMPTOM + " text," + ClinicData.TREAT + " text);");

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Log.w(TAG, "Version mismatch :" + oldVersion + "to " + newVersion);db.execSQL("DROP TABLE " + ClinicData.TABLE_NAME);onCreate(db);

}}