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

Similar documents
안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

어댑터뷰

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

03장

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

( )부록

01장

13ÀåÃß°¡ºÐ

SQLite v 소개 ü SQLite 라이브러리를통해완전한관계형데이터베이스 (RDBMS) 기능제공 ü 오픈소스 ü 표준준수 ü 경량 ü 단일계층 2

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

PowerPoint 프레젠테이션

리니어레이아웃 - 2 -

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

09-interface.key

Spring Boot/JDBC JdbcTemplate/CRUD 예제

슬라이드 1

07 자바의 다양한 클래스.key

슬라이드 1

rmi_박준용_final.PDF

전자공학설계실험 A 보고서 화 6A ~ 9B 박종태교수님 제출기한 ( 화 ) Android I.S 작업환경 Eclipse_Juno ver. 전자공학부 이상엽전자공학부 오윤재전자공학부

Microsoft PowerPoint - 04-UDP Programming.ppt

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

PowerPoint 프레젠테이션

// 화면을터치하였을때해야할작업구현 case MotionEvent.ACTION_MOVE: // 화면을드래그하였때 // 화면을드래그하였을때해야할작업구현 case MotionEvent.ACTION_UP: // 화면에서터치가사라질때 // 화면에서터치가사라질때해야할자업구현 c

Spring Data JPA Many To Many 양방향 관계 예제

50_1953.pdf

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

03장.스택.key

05-class.key

학습목표 SQLite 가뭔지알고, 이를사용할줄안다. SQL 의기본적인사용법들을안다. SQLite 을이용해기본적인데이터베이스응용프로그램을작성할수있다. 행을추가하는기본적인데이터베이스응용프로그램을작성할수있다. 쿼리를실행하는기본적인데이터베이스응용프로그램을작성할수있다. 쿼리결과

신림프로그래머_클린코드.key

Modern Javascript

01-OOPConcepts(2).PDF

쉽게 풀어쓴 C 프로그래밊

제8장 자바 GUI 프로그래밍 II

5장.key

Secure Programming Lecture1 : Introduction

비긴쿡-자바 00앞부속

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

12-file.key

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

자바GUI실전프로그래밍2_장대원.PDF

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint - Java7.pptx

JMF3_심빈구.PDF

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

놀이동산미아찾기시스템

gnu-lee-oop-kor-lec06-3-chap7

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

PowerPoint Presentation

안드로이드애플리케이션과통합하는데는자바가편하므로대표적인두가지라이브러리를비교해보자. 자바 ID3 태그라이브러리 jaudiotagger ID3v1, ID3v1.1, Lyrics3v1, Mp3, Mp4 (Mp4 오디오, M4a 지원범위 Lyrics3v2, ID3v2.2, ID

Microsoft PowerPoint - 14주차 강의자료

OOP 소개

MapView

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

C# Programming Guide - Types

UNIST_교원 홈페이지 관리자_Manual_V1.0

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

rosaec_workshop_talk

위젯과레이아웃위젯은 View 클래스를상속해화면디스플레이와이벤트처리를할수있도록구현된스크린구성의최소단위를말한다. android.widget 패키지에는여러유형의위젯들이포함되어있다. TextView, ImageView, Button, ImageButton 등은가장간단한위젯들이

Microsoft PowerPoint - CSharp-10-예외처리

1

MasoJava4_Dongbin.PDF

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

(Microsoft PowerPoint - Ch06.ppt [\310\243\310\257 \270\360\265\345])

자바로

자바 프로그래밍

안드로이드테스트앱을이용한난독화라이브러리파일동적분석 - 중요정보가라이브러리파일내부에 암호화되어있는악성앱동적분석 코드분석팀송지훤 본보고서의전부나일부를인용시, 반드시 [ 자료 : 한국인터넷진흥원 (KISA)] 를명시하

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

PowerPoint 프레젠테이션

안드로이드2_14

DocsPin_Korean.pages

uFOCS

PowerPoint Presentation

PowerPoint Presentation

02 C h a p t e r Java

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - 27.pptx

슬라이드 1

교육2 ? 그림

슬라이드 1

Javascript.pages

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

untitled

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

7.design-report.hwp

PowerPoint Presentation

Something that can be seen, touched or otherwise sensed

슬라이드 1

교육자료

UI TASK & KEY EVENT

Transcription:

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

1. 개요 - 계획서 - 1.1 프로젝트개요프로그램명 : 닥터 119 제작배경애완견을키우는사람들이부득이하게병원에가지못할경우에이앱을통해서자가진단을통해상태의심각성을알수있게되고또가까운동물병원으로갈수있는지도와전화번호를제공한다. 그리고애견다이어리기능을통해애견의성장과정과추억들을저장할수있게된다. 1.2 프로젝트의산출물 문서산출물 : 프로젝트계획서, 요구분석서, 설계서 프로그램 : 안드로이드어플리케이션 ( 닥터 119) 1.3 정의, 약어 닥터 119 : 아픈애완견을자가처방할수있고애견정보가담겨있는어플리케이션 DB : DataBase 의약어, 정보저장프로그램 2. 자원및일정예측 2.1 자원조직구성및인력배치분산형팀조직-민주주의식의사결정서준원 : 설계서작성, 디자인장용준 : 계획서작성, 자료수집차진환 : 설계서작성, 자료수집김현수 : 요구분석서작성, 프로그래밍박지혜 : 발표자료작성, 발표 2

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

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) 팀장의일정브리핑 4

2) 주요사항논의 3) 문제점논의 4) 건의사항 6.3 검토회후속조치 회의종료후문제점이나변동사항이있으면신속하게전파한다. 회의로결정된사항들을잘지킨다. 7. 개발환경개발운영체제 : Windows 7(32bit) 개발도구 : Eclipse, Android DataBase : SQL lite 8. 성능시험방법프로그램의안정성과정확도를시험한다. 여러운영체제에서시험해본다. 스마트폰에서시험해보고오류를다시해결한다. 9. 문서화 일단개인이작성하고다시모여서수정한다. 계속해서정보를교환하며의사소통을한다. 10. 유지보수유지보수영역 : 안드로이드어플리케이션유지보수주기 : 정기정검 1년, 긴급정검 ( 새로운질병이발생하였을때 ) 유지보수요구수집 : 유지보수요구는메일로받는다. 11. 설치, 인수프로그램개발이완료되면, 인수하여테스트한다. 테스트한결과를문서화한다. 테스트완료후이상없으면프로그램을설치한다. 프로그램을설치하여이상이있는지최종적으로정검한다. 12. 참고문헌및부록소프트웨어공학 문양세교수님 PPT 자료 5

- 요구분석서 - 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 시스템필수요소신속한정보획득 : 대분류, 소분류방식을이용하여애견의상황에따라손쉽게정보를획득할수있도록함. 동물병원위치검색 : 이앱만으로해결이안될상황에는동물병원에가야하므로주변에동물병원이어디있는지확인하고정보제공. 애견다이어리 : 애견에대한여러가지정보를제공하는다이어리기능. 6

2. 기능적요구 2.1 외부인터페이스요구사용자인터페이스 : 사용자가사용하기편하게그림을이용해서정리할예정. 그림으로대분류를나눈후소분류목록을주어세세한병명을검색하게함. 2.2 기능요구사용사례 1 : 애견이아픈데어디가아픈지모르는상황에서초기진단이필요할때이앱을통해임시진료. 사용사례 2 : 임시진료가끝난후병원이필요할때병원의위치를조사해정보를받고, 받은정보를찾음.( 정보에는위치, 전화번호등인터넷에서제공해주는정보가들어감.) 2.3 자료흐름도 3. 기타요구및제약사항가. 성능요구정확한정보를제공한다. 깔끔한인터페이스제공 3.1 H/W 요구 DB 와연동할수있는서버 안드로이드를프로그래밍할수있는하드웨어체제구축 3.2 사용자인터페이스 간단한인터페이스구성으로초보자도쉽게사용할수있게구현 7

- 설계서 - 1. 개요 1.1 시스템의목표애완견의증상을확인하고그에따른병명, 치료방법, 예방법등을제공애완견의상태를매일기록할수있는애견다이어리기능지도뷰를통한근처동물병원의위치, 전화번호제공 1.2 하드웨어 Intel Core(TM)2 CPU E8400 @ 3.00GHz 1.3 소프트웨어개발운영체제 : Windows 7(32bit) 개발도구 : Eclipse, Android DataBase : SQL lite 2. 시스템구조 2.1 시스템구조개요 2.2 시스템구조도 3. 모듈설계 모듈명 Curi 119 모듈형 Output image 인터페이스 Image View 오류메시지 x 사용하는파일 Main_image.jpg 호출하는모듈 x 기능설명 메인화면이다. 모듈명모듈형인터페이스오류메시지사용하는파일호출하는모듈기능설명 My Pet Input Text EditText 알수없는강아지정보입니다. x x 내강아지의품종, 나이, 성별을입력시키는창이다. 8

모듈명 My address 모듈형 Input Text 인터페이스 EditText 오류메시지 알수없는주소입니다. 사용하는파일 x 호출하는모듈 x 기능설명 내거주지를입력시키는창이다. 모듈명 Where? 모듈형 Output Graphic 인터페이스 View 모듈명모듈형인터페이스오류메시지사용하는파일호출하는모듈기능설명모듈명모듈형인터페이스 Why? Output Text TextView DB 오류 x x 내강아지정확한증상을알수있게선택지를주며대분류에서소분류로데이터를출력한다. Pet diary Input Text EditText 오류메시지 x 오류메시지 x 사용하는파일호출하는모듈기능설명 My_map.png x 근처동물병원위치를출력한다. 사용하는파일호출하는모듈기능설명 x x 강아지관련일기를작성하는곳이다. 모듈명모듈형인터페이스오류메시지사용하는파일호출하는모듈기능설명 Call Output Label Label DB 읽기실패 x x 동물병원전화번호를출력함. 4. 제약사항 1. 강아지의모든병명에대해서정확하게사용자에게정보를전달해주기는어렵다.(DB 가매우방대하다 ) 2. 새로운병이나타날때마다입력을시켜줘야하므로잦은업데이트가요구된다. 3. 애완동물전문가가아니기때문에정확한진단을하기는어렵다. 언제까지나인터넷정보에의존하는정보일수밖에없다. 4. 애완동물병원의위치에오차가있을수있다. 5. 팀원모두아직안드로이드에익숙하지가않다. 5. 참고사항 소프트웨어공학 문양세교수님 PPT 자료 동물관련의학서적 9

- 시험결과 - 메인화면메뉴선택애견진단 다이어리날짜선택병원찾기 10

- 코드 - *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. */ @Override public 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); ); 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); ); 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); ); 11

*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), 12

(int)(127.743380*1000000.0)); mapcontrol.setcenter(pt); mmarker.getintrinsicheight()); mmarker = getresources().getdrawable(r.drawable.marker); mmarker.setbounds(0, 0, mmarker.getintrinsicwidth(), 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"); case 1: item = new OverlayItem(new GeoPoint((int)(37.877817*1000000.0), (int)(127.750794*1000000.0)), " 춘천 동물병원 ", "033-242-1317"); 13

case 2: item = new OverlayItem(new GeoPoint((int)(37.862909*1000000.0), (int)(127.749976*1000000.0)), " 강남종합동물병원 ", "033-263-0513"); case 3: item = new OverlayItem(new GeoPoint((int)(37.859684*1000000.0), (int)(127.742943*1000000.0)), " 미래종합동물병원 ", "033-275-7533"); case 4: item = new OverlayItem(new GeoPoint((int)(37.856347*1000000.0), (int)(127.743112*1000000.0)), " 봄내 동물병원 ", "033-262-9070"); case 5: item = new OverlayItem(new GeoPoint((int)(37.879968*1000000.0), (int)(127.742913*1000000.0)), " 현대 동물병원 ", "033-256-7582"); case 6: item = new OverlayItem(new GeoPoint((int)(37.855324*1000000.0), (int)(127.751649*1000000.0)), " 우리 동물병원 ", "033-263-7502"); case 7: item = new OverlayItem(new GeoPoint((int)(37.851353*1000000.0), (int)(127.743533*1000000.0)), " 고려 동물병원 ", "033-264-9975"); case 8: item = new OverlayItem(new GeoPoint((int)(37.885835*1000000.0), (int)(127.745740*1000000.0)), " 한독 동물병원 ", "033-275-7533"); case 9: item = new OverlayItem(new GeoPoint((int)(37.881766*1000000.0), (int)(127.747983*1000000.0)), " 삼성 동물병원 ", "033-244-9975"); case 10: item = new OverlayItem(new 14

GeoPoint((int)(37.867273*1000000.0), (int)(127.731999*1000000.0)), " 조 동물병원 ", "033-251-0911"); item.setmarker(mmarker); 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(" 걸음걸이에이상이있다."); 15

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(" 입주위를핥다가털이빠지거나악취가난다."); list); ArrayAdapter<String> adapter; adapter = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1, 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: 16

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

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

case 22: intent = new Intent(MainList.this, Result.class); intent.putextra("put"," 위염전 "); case 23: intent = new Intent(MainList.this, Result.class); intent.putextra("put"," 구내염 구순염 "); case 24: intent = new Intent(MainList.this, Result.class); intent.putextra("put"," 구내염 구순염 "); case 25: intent = new Intent(MainList.this, Result.class); intent.putextra("put"," 구내염 구순염 "); ; *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; 19

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. */ @Override public 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 stub if (arg0.getid() == R.id.bt1) { 20

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 stub if (mitems.get(arg2).equals("")) { ; else { Intent intent = new Intent(this, Today.class);// 해당일을눌렸을 intent.putextra("param1", textyear.gettext().tostring() + "/" 21

mitems.get(arg2)); *Result* package puppy.clinic; + textmon.gettext().tostring() + "/" + 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); 22

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(); 23

if(c.movetofirst()) { treat); do { name = c.getstring(0); symptom = c.getstring(1); treat = c.getstring(2); Disease temp = new Disease(name, symptom, 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); 24

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; 25

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 @Override public 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 );"); @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // TODO Auto-generated method stub db.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; 26

String today; EditText editdate, edittitle, edittime, editmemo; /** Called when the activity is first created. */ @Override public 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); 27

if (mid == -1) { btn2.setvisibility(view.invisible); public void onclick(view v) { // TODO Auto-generated method stub SQLiteDatabase 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); case R.id.btndel: if (mid!= -1) { db.execsql("delete FROM today WHERE _id='" + mid + "';"); mdbhelper.close(); setresult(result_ok); case R.id.btncancel: setresult(result_canceled); 28

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); 29