SlideShare a Scribd company logo
개요 
개발 
환경 
개발 
일정 
업무 
분담 
업무 
분담 
Project 
개 요 
Project 
시 연 
Usecase 
Diagram 
Usecase 
정 의 서 
Project 
설 계 
설계 
단계 
분석 
단계 
요구사항 
정 의 서 
Sequence 
Diagram 
화면 
설계 
데이터 
설 계
개요 
뭐먹지? 
재료구매? 레시피?
개발환경 
개발환경 개발도구
개발일정표 
날짜 
내용 
4월 
2주차 3주차 4주차 
날짜 
정보수집 
유즈 케이스 
모델링 
분석 클래스 
모델링 
설계클래스 
모델링 
프로그램구현 
5월 
9 12 13 14 15 
TABLE설계 
DAO / DTO 
설계 
Controller 
설계 
프로그램 
구현 
문서작업
개발 업무 분담표 
이름 : 장 성봉 
업무 : 
프로젝트 업무 총괄 
이름 : 김 대곤 
업무 : 
클래스 다이어그램 관리 
이름 : 박 홍근 
업무 : 
코드 통합 
이름 : 양 진영 
업무 : 
코드 버전관리 
문서관리 
이름 : 김 영한 
업무 : 
클래스 다이어그램 관리
벤치마킹 
Survey Web Site & Application
벤치마킹 Survey 
요리할 때, 어려움을 겪는 사람의 비율 
92% 
8% 
있다 
없다
벤치마킹 Survey 
28 
18 
4 
18 
1 0 
30 
25 
20 
15 
10 
5 
0 
요리를 할 때 겪는 어려움 
메뉴선정 
식재료구입 
재정상태 
요리법을 잘 
몰라서 
기타 
없음
벤치마킹 Survey 
요리도우미에게 제공받고 싶은 서비스 
49% 
17% 
10% 
20% 
4% 
요리법제공 
대신장보기 
음식메뉴선정 
영양소/열량계산 
기타
벤치마킹 Web Site & Application 
벤치마킹 대상 벤치마킹 기능 
다나와 가격대 검색,배송지 변경, 배송예약, 기본배송지 
지마켓 회원로그인, 아이디 저장, 기본 배송지 수정 
롯데마트 비회원로그인,주문 배송 조회, 배송지 관리 
이마트 가까운 배송 지 찾기, 배송정보 조회 
미즈쿡 요리 카테고리, 음식정보, 요리법제공,댓 글,레시피 추가 
메뉴판 닷컴 음식정보 목록, 재료정보, , 구매/소유 재료 체크, 체크리스트, 
계량정보, 별 점, 
만개의 레시피 회원가입,요리법 제공, 별 점, 요리카테고리 
오마이 쉐프 아이디/비밀번호 찾기,재료정보
회원 
로그인 
요구사항 정의서 
기본 
서비스 
특화기능 
회원가입 
요리 
추천 
요리정보 
제공 
사용자 
레시피 
추가 
레시피 
정보 
Stop watch 기능
정보수집단계 키추출 
명사 동사 
명사 명사 
사용자 수령인 
시스템 주부 
비회원 제공자 
작성자 주문자 
회원 이용자 
세프 대상 
주사용자 여성 
고수 비사용자 
네티즌 
요리도우 
미 
관리자 
요리블로 
거 
받으실분 배송자 
사람 올린이 
초보 에디터 
동사 
(가격대를)검색하다 
(가격대를)선택하다 
(가격대를)입력하다 
(가까운매장을)찾는다 
(개인노트카테고리를)선택하다 
(계량선택을)선택하다 
(계량수치를)제공하다 
(계정을)복구하다 
(계정을)설정하다 
(공감수가)증가한다 
(구매장소를)설정하다 
(구매장소를)파악하다 
(국가별레시피를)선택하다 
(글자수를)제한하다 
(금액을)구분하다 
(금액을)선택하다 
(기본배송지를)설정하다 
(날짜를)선택하다 
(날짜와예약가능시간을)선택하다 
(낮은가격순으로)선택하다 
(높은가격순으로)선택하다 
(다음페이지로)이동한다 
(단위를)표시하다 
(댓글을)작성하다 
(덧글을)선택하다 
동사 
(덧글을)수정하다 
(덧글을)입력하다 
(덧글을)정렬하다 
(레시피를)검색하다 
(레시피를)선택하다 
(레시피를)스크랩하다 
(레시피를)입력하다 
(레시피를)작성하다 
(레시피를)제공하다 
(레시피를)조회하다 
(레시피를)조회한다 
(레시피를)찜하다 
(레시피를)추천하다 
(레시피를)확인한다 
(레시피목록을)제공하다 
(레시피의내용을)입력하다 
(로그인을)취소하다 
(메일주소를)입력한다 
(배달가능시간을)선택하다 
(배송시간을)수정하다 
(배송시간을)예약하다 
(배송시간을)조회하다 
(배송정보를)조회하다 
(배송지를)등록하다 
(배송지를)삭제하다 
동사 
(요리를)선택하다 
(요리리스트를)제공하다 
(요리명을)보여주다 
(요리명을)입력하다 
(요리목록을)선택하다 
(요리목적에따라)선택한다 
(요리목적을)선택하다 
(요리목적을)제공한다 
(요리사진을)보여준다 
(요리사진을)분류하다 
(요리사진을)선택하다 
(요리사진을)제공하다 
(요리의목적을)선택하다 
(요리이름을)선택한다 
(요리이름을)조회하다 
(요리재료를)입력하다 
(요리재료를)제공하다 
(요리정보를)공유하다 
(요리정보를)보여준다 
(요리정보를)선택하다 
(우편번호를)검색하다 
(우편번호를)선택하다 
(우편번호를)입력하다 
(음식사진을)선택하다 
(음식사진을)제공한다 
동사 
(음식사진을)첨부하다 
(음식재료를)확인하다 
(의견을)입력하다 
(이름을)입력하다 
(이미지를)선택하다 
(인기상품순을)선택한다 
(인기순으로)검색하다 
(인기순으로)정렬하다 
(인기순으로)출력하다 
(입력정보를)초기화하다 
(장보기목록을)선택하다 
(재료계량정보를)제공하다 
(재료를)구매하다 
(재료를)확인하다 
(재료별레시피를)선택하다 
(재료수량을)확인하다 
(재료의양을)제공하다 
(재료의양을)확인하다 
(재료정보를)제공하다 
(정보를)조회하다 
(조리과정을)확인한다 
(조리시간을)확인한다 
(조회수를)보여준다 
(주문을)조회하다 
(주문자정보항목을)입력하다 
동사 
(주문하기를)선택하다 
(주소를)입력하다 
(주재료를)제공한다 
(주재료를)확인한다 
(집에있는재료를)구분하다 
(체크리스트를)수정하다 
(체크리스트를)입력하다 
(체크리스트를)조회하다 
(총결제금액을)출력한다 
(총판매가를)출력한다 
(총포장비를)출력한다 
(총할인금액을)보여준다 
(최근알림메시지를)확인한다 
(최신순으로)보다 
(추천수를)보여준다 
(카테고리를)선택하다 
(카테고리를)추천하다 
(카테고리에)등록하다 
(테마를)추천하다 
(평점을기준으로)조회하다 
(항목의내용을)초기화하다 
(회원만족도를)확인하다 
(회원프로필을)설정하다 
로그인하다 
회원가입하다 
동사 
(배송지를)선택하다 
(배송지를)설정하다 
(배송지를)수정하다 
(배송지를)입력하다 
(배송지를)추가하다 
(배송지정보를)수정하다 
(배송지정보를)저장하다 
(별점을)추가하다 
(보안문자를)선택하다 
(보안문자를)입력하다 
(보안문자를)제공하다 
(본인인증을)하다 
(비밀번호를)입력하다 
(비밀번호를)찾다 
(비밀번호를)확인하다 
(사진을)제공하다 
(상품을)검색하다 
(상품을)선택하다 
(새배송지를)추가하다 
(셰프를)등록하다 
(예약가능시간을)확인하다 
(요리건수를)제공한다 
(요리단계를)제공한다 
(요리대상을)확인하다 
(요리레시피를)조회하다 
엑터후보 유즈케이스 후보
UseCase 다이어그램 
사용자 
회원가입 
음식 명으로 
검색 
음식추천받기 
재료를 입력하여 
검색 
가격대 검색 
음식정보 
등록 
조리과정조회 
재료등록 
조리과정등록 
로그인 
<<extends>> 
<<include>>
UseCase 정의서 
유즈케이스 정의서(UC001) 
시스템명 요조숙녀 작성일자 2014.04.30 페이지 1/1 
UseCase 명 음식추천받기 작성자 김대곤 
3.1 Main Flows 
1. 사용자는 음식 추천 받기를 요청한다. 
2. 시스템은 사용자에게 키워드(N-1) 입력을 요청한다. 
3. 사용자는 키워드를 입력하고 음식 추천 받기를 요청한다(A-1)(E-1). 
4. 시스템은 음식 검색 결과를 사용자에게 보여주고 Use Case를 종료한다. 
3.2 Alternative Flows 
A-1. 검색결과가 존재하지 않은 경우 
1. “검색결과가 존재하지 않습니다. 다시 입력해주세요.” 라는 메시지를 보여준다. 
-> Main Flow의 2번으로 
4. Note 
N-1. 키워드 : 기분, 상태 등 
3.3 Exception Flows 
E-1. 사용자가 키워드 입력을 하지 않고 창을 닫은 경우 
->Use Case를 종료한다.
UseCase 정의서 
유즈케이스 정의서(UC002) 
시스템명 요조숙녀 작성일자 2014.04.30 페이지 1/1 
UseCase 명 음식정보등록 작성자 장성봉 
3.1 Main Flows 
1. 사용자는 음식정보 등록을 요청한다. 
2. 시스템은 사용자에게 음식정보(N-1), 조리정보(N-2) 입력을 요청한다. 
3. 사용자는 음식정보, 조리정보를 입력한다. (E-1) 
4. 사용자는 조리과정 등록하기를 요청한다. 
5. 시스템은 사용자에게 조리과정 등록정보(N-3) 입력을 요청한다. 
6. 사용자는 조리과정 등록정보를 입력하고 완료를 선택한다(A-1). 
7. 사용자는 재료 등록하기를 요청한다. 
8. 시스템은 사용자에게 재료정보(N-4) 입력을 요청한다. 
9. 사용자는 재료정보를 입력하고 재료 등록하기를 선택한다. 
10. 시스템은 성공적으로 재료를 등록하고 Use Case를 종료한다. 
3.2 Alternative Flows 
A-1. 사용자가 등록을 선택한 경우 
-> Main Flow의 5번으로 
4. Note 
N-1. 음식정보 : 음식이름, 음식칼로리, 음식사진(경로), 음식소개 
N-2. 조리정보 : 조리시간, 분량, 난이도, 총 재료개수, 조리팁 
N-3. 조리과정 등록정보 : 단계시간(초), 사진경로, 설명 
N-4. 재료정보 : 재료명, 수량
UseCase정의서 키추출 
명사키추출 동사키추출
분석단계 클래스다이어그램(한글)
분석단계 클래스다이어그램(영문-전체) 
IngredientInfoList 
-ingredientInfoList: Collection<IngredientInfo> 
-foodName: String 
+IngredientInfoList() 
+IngredientInfoList(list: Collection<IngredientInfo>, foodName: String) 
+getIngredientInfoList(): Collection<IngredientInfo> 
+getFoodName(): String 
+setIngredientInfoList(list: Collection<IngredientInfo>) 
+setFoodName(foodName: String) 
+addIngredienInfoList(ingredientInfo: IngredientInfo): IngredientInfo 
+reviseIngredientInfoList(ingredientCode: String, ingredientInfo: IngredientInfo): IngredientInfo 
+removeIngredientInfoList(ingredientCode: String): IngredientInfo 
+searchIngredientInfo(ingredientCode: String): IngredientInfo 
+searchIngredientInfoList(ingredientName: String): Collection<IngredientInfo> 
IngredientInfo 
-ingrdientName: String 
-ingredientCode: String 
-unit: String 
+IngredientInfo() 
+IngredientInfo(ingredientName: String, ingredientCode: String, unit: String) 
+IngredientInfo(ingredientName: String, ingredientCode: String) 
+IngredientInfo(ingredientCode: String) 
+getIngredientName(): String 
+getIngredientCode(): String 
+getUnit(): String 
+setIngredientName(ingredientName: String) 
+setIngredientCode(ingredientCode: String) 
+setUnit(unit: String) 
RecipeIngreInfo 
-ingredientName: String 
-ingredientCode: String 
-ingredientNum: int 
+RecipeIngreInfo() 
+RecipeIngreInfo(ingredientName: String, ingredientCode: String, ingredientNum: int) 
+getIngredientName(): String 
+getIngredientCode(): String 
+getIngredientNum(): int 
+setIngredientName(ingredientName: String) 
+setIngredientCode(ingredientCode: String) 
+setIngredientNum(ingredientNum: int) 
RecipeIngreInfoList 
-foodName: String 
-foodCode: String 
-recipeIngreInfoList: Collection<RecipeIngreInfo> 
+RecipeIngreInfoList() 
+RecipeIngreInfoList(foodName: String, foodCode: String, recipeIngreInfoList: Collection<RecipeIngreInfo>) 
+getFoodName(): String 
+getFoodCode(): String 
+getRecipeIngreInfoList(): Collection<RecipeIngreInfo> 
+setFoodName(foodName: String) 
+setFoodCode(foodCode: String) 
+setRecipeInfoList(recipeIngreInfoList: Collection<RecipeIngreInfo>) 
+addRecipeIngreInfoList(recipeIngreInfo: RecipeIngreInfo): RecipeIngreInfo 
+reviseRecipeIngreInfoList(ingredientCode: String, recipeIngreInfo: RecipeIngreInfo): RecipeIngreInfo 
+removeRecipeIngreInfoList(ingredientCode: String): RecipeIngreInfo 
+searchRecipeIngreInfo(ingredientCode: String): RecipeIngreInfo 
+searchRecipeIngreInfoList(ingredientName: String): Collection<RecipeIngreInfo> 
+searchRecipeIngreInfo(ingredientName: String): RecipeIngreInfo 
CookingCourse 
-cookingPhoto: String 
-cookingTime: int 
-cookingInst: String 
+CookingCourse() 
+CookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) 
+CookingCourse(cookingTime: int, cookingInst: String) 
+getCookingPhoto(): String 
+getCookingTime(): int 
+getCookingInst(): String 
+setCookingPhoto(cookingPhoto: String) 
+setCookingTime(cookingTime: int) 
+setCookingInst(cookingInst: String) 
LoginInfo 
-id: String 
-password: String 
-loginState: boolean 
+LoginInfo() 
+LoginInfo(id: String, password: String) 
+getId(): String 
+getPassword(): String 
+getLoginState(): boolean 
+setId(id: String) 
+setPassword(password: String) 
+setLoginState(loginState: boolean) 
FoodInfo 
-foodCode: String 
-foodName: String 
-foodIntro: String 
-foodPhoto: String 
-foodCalorie: int 
+FoodInfo() 
+FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String) 
+FoodInfo(foodCode: String, foodName: String) 
+getFoodCode(): String 
+getFoodName(): String 
+getFoodIntro(): String 
+getFoodPhoto(): String 
+getFoodCalorie(): int 
+setFoodCode(foodCode: String) 
+setFoodName(foodName: String) 
+setFoodIntro(foodIntro: String) 
+setFoodPhoto(foodPhoto: String) 
+setFoodCalorie(foodCalorie: int) 
SoldItemInfo 
-soldItemName: String 
-soldItemNum: int 
-soldItemCode: String 
-placeOfOrisin: String 
-price: double 
+SoldItemInfo() 
+SoldItemInfo(name: String, num: int, code: String, placeOfOrisin: String, price: double) 
+getSoldItemName(): String 
+getSoldItemNum(): int 
+getSoldItemCode(): String 
+getPlaceOfOrisin(): String 
+getPrice(): double 
+setSoldItemName(name: String) 
+setSoldItemNum(num: int) 
+setSoldItemCode(code: String) 
+setPlaceOfOrisin(placeOfOrisin: String) 
+setPrice(price: double) 
RecipeInfo 
-foodName: String 
-cookingTotalTime: int 
-tip: String 
-portion: int 
-level: Level <<enum>> 
-foodCode: String 
-cookingCourseList: CookingCourseList 
-recipeIngreInfoList: RecipeIngreInfoList 
+RecipeInfo() 
+RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) 
+RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, foodCode: String, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) 
+getFoodeName(): String 
+getCookingTotalTime(): int 
+getTip(): String 
+getPortion(): int 
+getLevel(): Level 
+getFoodCode(): String 
+getCookingCourseList(): CookingCourseList 
+getRecipeIngreInfoList(): RecipeIngreInfoList 
+setFoodName(foodName: String) 
+setCookingTotalTime(cookingTotalTime: int) 
+setTip(tip: String) 
+setPortion(portion: int) 
+setLevel(level: Level) 
+setFoodCode(foodCode: String) 
+setCookingCourseList(cookingCourseList: CookingCourseList) 
+setIngredientInfoList(recipeIngreInfoList: RecipeIngreInfoList) 
+check(ingred1: String, ingred2: String, ingred3: String): boolean 
CookingCourseList 
-cookingCourseList: Collection<CookingCourse> 
-foodName: String 
-foodCode: String 
+CookingCourseList() 
+CookingCourseList(foodName: String, foodCode: String) 
+CookingCourseList(cookingCourseList: Collection<CookingCourse>, foodName: String, foodCode: String) 
+getCookingCourseList(): Collection<CookingCourse> 
+getFoodName(): String 
+getFoodCode(): String 
+setCookingCourseList(list: Collection<CookingCourse>) 
+setFoodName(foodName: String) 
+setFoodCode(foodCode: String) 
+searchCookingCourse(step: int): CookingCourse 
+addCookingCourse(cookingCourse: CookingCourse): CookingCourse 
+addCookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) 
+searchCookingCourse(step: int): CookingCourse 
+searchCookingCourse(cookingCourse: CookingCourse): CookingCourse 
+removeCookingCourse(cookingCourse: CookingCourse): CookingCourse 
+removeCookingCourse(step: int): CookingCourse 
+reviseCookingCourse(searchData: CookingCourse, reviseData: CookingCourse): CookingCourse 
+reviseCookingCourseList(step: int, reviseData: CookingCourse): CookingCourse 
MemberInfo 
-name: String 
-id: String 
-password: String 
-address: String 
-phone: String 
-zipCode: String 
+MemberInfo() 
+MemberInfo(name: String, id: String) 
+MemberInfo(name: String, id: String, password: Stirng, address: String, phone: String, zipCode: String) 
+getName(): String 
+getId(): String 
+getPassword(): String 
+getAddress(): String 
+getPhone(): String 
+getZipCode(): String 
+setName(name: String) 
+setId(id: String) 
+setPassword(password: String) 
+setAddress(address: String) 
+setPhone(phone: String) 
+setZipCode(zipCode: String) 
FoodInfoList 
-foodInfoList: Collection<FoodInfo> 
+FoodInfoList() 
+FoodInfoList(list: Collection<FoodInfo>) 
+getFoodInfoList(): Collection<FoodInfo> 
+setFoodInfoList(list: Collection<FoodInfo>) 
+addFoodInfoList(foodInfo: FoodInfo): FoodInfo 
+reviseFoodInfoList(foodCode: String, reviseData: FoodInfo): FoodInfo 
+removeFoodInfoList(foodCode: String): FoodInfo 
+searchFoodInfo(foodCode: String): FoodInfo 
+searchFoodInfoList(foodName: String): Collection<FoodInfo> 
SoldItemInfoList 
-soldItemInfoList: Collection<SoldItemInfo> 
+SoldItemInfoList() 
+SoldItemInfoList(soldItemInfoList: Collection<SoldItemInfo>) 
+getSoldItemInfoList(): Collection<SoldItemInfo> 
+setSoldItemInfoList(soldItemInfoList: Collection<SoldItemInfo>) 
+addSoldItemInfoList(soldItemInfo: SoldItemInfo): SoldItemInfo 
+reviseSoldItemInfoList(soldItemCode: String, soldItemInfo: SoldItemInfo): SoldItemInfo 
+removeSoldItemInfoList(soldItemCode: String): SoldItemInfo 
+searchSoldItemInfoList(soldItemCode: String): SoldItemInfo 
StoreInfo 
-storeName: String 
-storeCode: String 
-storeAddress: String 
-storePhone: String 
+StoreInfo() 
+StoreInfo(storeName: String, storeCode: String, storeAddress: String, storePhone: String) 
+getStoreName(): String 
+getStoreCode(): String 
+getStoreAddress(): String 
+getStorePhone(): String 
+setStoreName(storeName: String) 
+setStoreCode(storeCode: String) 
+setStoreAddress(storeAddress: String) 
+setStorePhone(storePhone: String) 
StoreInfoList 
-list: Collection<StoreInfo> 
+StoreInfoList() 
+StoreInfoList(list: Collection<StoreInfo>) 
+getList(): Collection<StoreInfo> 
+setList(list: Collection<StoreInfo>) 
+addStoreInfoList(storeInfo: StoreInfo): StoreInfo 
+reviseStoreInfoList(code: String, storeInfo: StoreInfo): StoreInfo 
+removeStoreInfoList(code: String): StoreInfo 
+searchStoreInfo(code: String): StoreInfo
분석단계 클래스다이어그램(영문) 
MemberInfo 
-name: String 
-id: String 
-password: String 
-address: String 
-phone: String 
-zipCode: String 
+MemberInfo() 
+MemberInfo(name: String, id: String) 
+MemberInfo(name: String, id: String, password: Stirng, address: String, phone: String, zipCode: String) 
+getName(): String 
+getId(): String 
+getPassword(): String 
+getAddress(): String 
+getPhone(): String 
+getZipCode(): String 
+setName(name: String) 
+setId(id: String) 
+setPassword(password: String) 
+setAddress(address: String) 
+setPhone(phone: String) 
+setZipCode(zipCode: String)
분석단계 클래스다이어그램(영문) 
RecipeIngreInfo 
-ingredientName: String 
-ingredientCode: String 
-ingredientNum: int 
+RecipeIngreInfo() 
+RecipeIngreInfo(ingredientName: String, ingredientCode: String, ingredientNum: int) 
+getIngredientName(): String 
+getIngredientCode(): String 
+getIngredientNum(): int 
+setIngredientName(ingredientName: String) 
+setIngredientCode(ingredientCode: String) 
+setIngredientNum(ingredientNum: int) 
CookingCourse 
-cookingPhoto: String 
-cookingTime: int 
-cookingInst: String 
+CookingCourse() 
+CookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) 
+CookingCourse(cookingTime: int, cookingInst: String) 
+getCookingPhoto(): String 
+getCookingTime(): int 
+getCookingInst(): String 
+setCookingPhoto(cookingPhoto: String) 
+setCookingTime(cookingTime: int) 
+setCookingInst(cookingInst: String)
분석단계 클래스다이어그램(영문) 
RecipeInfo 
-foodName: String 
-cookingTotalTime: int 
-tip: String 
-portion: int 
-level: Level <<enum>> 
-foodCode: String 
-cookingCourseList: CookingCourseList 
-recipeIngreInfoList: RecipeIngreInfoList 
+RecipeInfo() 
+RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) 
+RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, foodCode: String, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) 
+getFoodeName(): String 
+getCookingTotalTime(): int 
+getTip(): String 
+getPortion(): int 
+getLevel(): Level 
+getFoodCode(): String 
+getCookingCourseList(): CookingCourseList 
+getRecipeIngreInfoList(): RecipeIngreInfoList 
+setFoodName(foodName: String) 
+setCookingTotalTime(cookingTotalTime: int) 
+setTip(tip: String) 
+setPortion(portion: int) 
+setLevel(level: Level) 
+setFoodCode(foodCode: String) 
+setCookingCourseList(cookingCourseList: CookingCourseList) 
+setIngredientInfoList(recipeIngreInfoList: RecipeIngreInfoList) 
+check(ingred1: String, ingred2: String, ingred3: String): boolean
분석단계 클래스다이어그램(영문) 
StoreInfo 
-storeName: String 
-storeCode: String 
-storeAddress: String 
-storePhone: String 
SoldItemInfo 
-soldItemName: String 
-soldItemNum: int 
-soldItemCode: String 
-placeOfOrisin: String 
-price: double 
+SoldItemInfo() 
+SoldItemInfo(name: String, num: int, code: String, placeOfOrisin: String, price: double) 
+getSoldItemName(): String 
+getSoldItemNum(): int 
+getSoldItemCode(): String 
+getPlaceOfOrisin(): String 
+getPrice(): double 
+setSoldItemName(name: String) 
+setSoldItemNum(num: int) 
+setSoldItemCode(code: String) 
+setPlaceOfOrisin(placeOfOrisin: String) 
+setPrice(price: double) 
+StoreInfo() 
+StoreInfo(storeName: String, storeCode: String, storeAddress: String, storePhone: String) 
+getStoreName(): String 
+getStoreCode(): String 
+getStoreAddress(): String 
+getStorePhone(): String 
+setStoreName(storeName: String) 
+setStoreCode(storeCode: String) 
+setStoreAddress(storeAddress: String) 
+setStorePhone(storePhone: String) 
FoodInfo 
-foodCode: String 
-foodName: String 
-foodIntro: String 
-foodPhoto: String 
-foodCalorie: int 
+FoodInfo() 
+FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String) 
+FoodInfo(foodCode: String, foodName: String) 
+getFoodCode(): String 
+getFoodName(): String 
+getFoodIntro(): String 
+getFoodPhoto(): String 
+getFoodCalorie(): int 
+setFoodCode(foodCode: String) 
+setFoodName(foodName: String) 
+setFoodIntro(foodIntro: String) 
+setFoodPhoto(foodPhoto: String) 
+setFoodCalorie(foodCalorie: int)
로그인 
요조숙녀~ 
음식검색 뭐먹지? 레시피등록 주문내역확인 
메인화면
검색 
요조숙녀~ 
음식검색 
요리명 
음식목록
요조숙녀~ 
음식설명 
요 리 명 : 짜장밥 
재료 : 
밥,춘장,돼지고기,양파,간장 
조리시간 : 0시간 10분 0초 
건강정보 : 서민의 음식! 
재료주문 요리시작
요조숙녀~ 
조리법 
00:04:43.29 
재료 잘게 깍뚝 썰고 청주, 소금 후추로 
밑간한다. 
이전 일시정지 시작 다음
레시피등록 
레시피등록 
음식 정보 
음 식 이 름 : 
음 식 칼 로 리 : 
음 식 사 진 (경로) 
음 식 :소 개 : 
조리 정보 
조 리 시 간 : 
분 량 : 
난 이 도 : 
총 재 료 개 수 : 
조 리 팁 : 
kcal 
sec 
인분 
개 
사진가져오기 
조리과정등록하기 재료등록하기 레시피등록하기 돌아가기
조리과정등록 
조리과정등록 
단계시간(초) 
사진경로 사진선택 
설 
명 
등록 완료
예시)볶음밥 
재료 등록하기 돌아가기 
재료1 재료명: 
재료2 재료명: 
재료3 재료명: 
수량: 
수량: 
수량: 
개(g) 
개(g) 
개(g) 
재료등록
파일설계 
CookingCourseListData.txt 조리과정 
FoodInfoData.txt 
MemberInfoData.txt 
RecipeIngreInfoData.txt 
RecipeInfoData.txt 
StoreInfoList.txt 
StoreItemInfoList.txt 
음식정보 
회원정보 
요리재료정보 
요리정보 
판매처정보 
판매물품정보
파일설계 
전체음식정보목록 
파일형식 : *.txt 
구분자 : 개행 
파일명 : FoodInfoData 
저장내용 : 음식코드, 음식명, 음식소개, 음식사진, 
열량
DB설계 논리적 설계
DB설계 물리적 설계
클래스다이어그램 
RegistRecipeActionListener 
OrderedRecordActionListener 
MainFrameUI 
RecipeRegistrationUI 
M C V 
LoginUI 
TodayEatUI 
LoginButtonActionListener 
FoodSearchActionListener 
SpecialRecommendFoodActionListener 
LoginCheckController 
LoginContorller LoginActionListener 
LoginJoinActionListener 
CheckActionListener 
JoinActionListener JoinUI 
CancelActionListener 
IdCheckController 
JoinDBController 
FoodSearchFrameUI 
FoodNameActionListener 
CategoryActionListener 
RecommandActionListener 
FoodNameSearchController SearchActionListener FoodNameFrameUI 
PhtotoActionListener 
PhotoController 
FoodInfoUI 
CategoryFrameUI 
CategorySearchActionListener 
ComboBoxStateListener 
IngredSrchActionListener FoodRecommendUI 
IngredSrchController IngredSrchBtnListener 
MoneySrchActionListener 
MoneySrchBtnListener 
MoneySrchController 
TodayController TodayActionListener 
OrderRecordListUI 
StepInputListener 
IngredientButtonListener 
RecipeInputListener 
RecipeCourseUI 
FileSelListener 
RegistListener 
EndButtonListener 
PhotoButtonController 
CookingCourseRegistController 
IngredientRegisterController IngredientRegisterListener IngredientInputUI 
RegisterDBController 
TempCookingCourseList CookingCourse 
RecipeIngreInfo 
FoodRecipeInfoList 
RecipeIngreInfoList 
FoodInfo 
RecipeInfo 
TempRecipeIngreInfoList 
FoodDAO 
FoodDTO 
FoodList 
FoodRecipeInfo FoodRecipeInfoList 
RecipeDAO 
RecipeDTO 
RecipeList 
CookingCourseList 
RecipeCourseDAO 
RecipeCourseDTO 
RecipeCourseList 
RecipeIngredientDAO 
RecipeIngredientDTO 
RecipeIngredientList 
IngredientDAO 
IngredientDTO 
IngredientList 
MemberInfoList 
ManagerInfo 
LoginInfo 
RecipeIngreInfo 
SoldItemInfo 
SoldItemInfoList 
RecipeIngreInfoList
Data Loading - File 
FoodFileIO 
-cookingCourseListData: CookingCourseListData 
-recipeIngreInfoListData: RecipeIngreInfoListData 
-recipeInfoList: RecipeInfoList 
-foodInfoList: FoodInfoList 
+FoodFileIO() 
+FoodFileIO(cookingCourseListData: CookingCourseListData, recipeIngreInfoListData: RecipeIngreInfoListData, recipeIngoList: RecipeInfoList, foodInfoList: FoodInfoList) 
+getCookingCourseListData(): CookingCourseListData 
+getRecipeIngreInfoListData(): RecipeIngreInfoListData 
+getRecipeInfoList(): RecipeInfoList 
+getFoodInfoList(): FoodInfoList 
+setCookingCourseListData(cookingCourseListData: CookingCourseListData) 
+setRecipeIngreInfoListData(recipeIngreInfoListData: RecipeIngreInfoListData) 
+setRecipeInfoList(recipeInfoList: RecipeInfoList) 
+setFoodInfo(foodInfoList: FoodInfoList) 
+readFoodInfo() 
+load() 
RecipeIngreInfoListData 
-recipeIngreInfoListData: Collection<RecipeIngreInfoList> 
+RecipeIngreInfoListData() 
+RecipeIngreInfoListData(recipeIngreInfoListData: Collection<RecipeIngreInfoList>) 
+getRecipeIngreInfoList(): Collection<RecipeIngreInfoList> 
+setRecipeIngreInfoList(recipeIngreInfoListData: Collection<RecipeIngreInfoList>) 
+addRecipeIngreInfoList(recipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList 
+reviseRecipeIngreInfoList(searchRecipeIngreInfoList: RecipeIngreInfoList, changeRecipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList 
+removeRecipeIngreInfoList(recipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList 
+searchRecipeIngreIngoList(recipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList 
CookingCourseListData 
-cookingCourseListData: Collection<CookingCoureseList> 
+CookingCourseListData() 
+CookingCourseListData(cookingCourseListData: Collection<CookingCoureseList>) 
+getCookingCourseListData(): Collection<CookingCoureList> 
+setCookingCoureListData(cookingCourseListData: Collection<CookingCourseListData>) 
+addCookingCourseList(cookingCourseList) 
+reviseCookingCourseList(searchData, reviseData) 
+removeCookingCourseList(cookingCourseList) 
+searchCookingCourseList(cookingCourseList) 
RecipeInfoList 
-recipeInfoList: Collection<RecipeInfo> 
+RecipeInfoList() 
+RecipeInfoList(list: Collection<RecipeInfo>) 
+getRecipeInfoList(): Collection<RecipeInfo> 
+setRecipeInfoList(recipeInfoList: Collection<RecipeInfo>) 
+addRecipeInfoList(recipeInfo) 
+reviseRecipeInfoList(foodCode: String, recipeInfo) 
+removeRecipeInfoList(foodCode: String) 
+searchRecipeInfo(foodCode: String) 
+searchRecipeInfoList(foodName: String): Collection<RecipeInfo> 
FoodInfoList 
-foodInfoList: Collection<FoodInfo> 
+FoodInfoList() 
+FoodInfoList(list: Collection<FoodInfo>) 
+getFoodInfoList(): Collection<FoodInfo> 
+setFoodInfoList(list: Collection<FoodInfo>) 
+addFoodInfoList(foodInfo) 
+reviseFoodInfoList(foodCode: String, reviseData) 
+removeFoodInfoList(foodCode: String) 
+searchFoodInfo(foodCode: String) 
+searchFoodInfoList(foodName: String): Collection<FoodInfo> 
FoodRecipeInfoList 
+foodRecipeInfoList: Collection<FoodRecipeInfo> 
+getFoodRecipeInfoList(): Collection<FoodRecipeInfo> 
+setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) 
+addFoodRecipeInfoList(foodRecipeInfo) 
+reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo) 
+removeFoodRecipeInfoList(foodCode: String) 
+searchFoodRecipeInfo(foodCode: String) 
+searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> 
+searchTodayFood(keyword: String): Collection<FoodRecipeInfo> 
+searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo>
FoodRecipeInfoList 
FoodFileIO 
Data Loading - File 
CookingCourseListData FoodInfoList 
RecipeIngreInfoListData RecipeInfoList
Data Loading - DB 
RecipeCourseDAO 
-conn: Connection 
+RecipeCourseDAO() 
+getConn(): Connection 
+setConn(conn: Connection) 
-connect() 
+disconnect() 
+insert(courseLevel: int, recipeCode: int, recipeCoursePhoto: String, recipeCourseTime: int, recipeCourseIntro: String): int 
+selectAll(): RecipeCourseList 
+selectCourseLevelRecipeCode(courseLevel: int, recipeCode: int): RecipeCourseDTO 
+selectCourseLevel(courseLevel: int): RecipeCourseList 
+selectRecipeCode(recipeCode: int): RecipeCourseList 
+selectRecipeCoursePhoto(recipeCoursePhoto: String): RecipeCourseDTO 
+selectRecipeCourseTime(recipeCourseTime: int): RecipeCourseList 
+selectRecipeCourseIntro(recipeCourseIntro: String): RecipeCourseDTO 
+selectCourse(): CourseList 
+updateAll(courseLevel: int, recipeCode: int, recipeCoursePhoto: String, recipeCourseTime: int, recipeCourseIntro: String): int 
+updateRecipeCoursePhoto(courseLevel: int, recipeCode: int, recipeCoursePhoto: String): int 
+updateRecipeCourseTime(courseLevel: int, recipeCode: int, recipeCourseTime: int): int 
+updateRecipeCourseIntro(courseLevel: int, recipeCode: int, recipeCourseIntro: String): int 
+deleteAll(): int 
+deleteCourseLevel(courseLevel: int): int 
+deleteRecipeCode(recipeCode: int): int 
+deleteCourseLevelRecipeCode(courseLevel: int, recipeCode: int): int 
+deleteRecipeCourseTime(recipeCourseTime: int): int 
+deleteRecipeCourseIntro(recipeCourseIntro: String): int 
+deleteRecipeCoursePhoto(recipeCoursePhoto: String): int 
CourseDTO 
-foodCode: int 
-foodName: String 
-recipeCoursePhoto: String 
-recipeCourseTime: int 
-recipeCourseIntro: String 
+CourseDTO() 
+CourseDTO(foodCode: int, foodName: Stiring, recipeCoursePhoto: String, recipeCourseTime: int, recipeCourseIntro: String) 
+getFoodCode(): int 
+getFoodName(): String 
+getRecipeCoursePhoto(): String 
+getRecipeCourseTime(): int 
+getRecipeCourseIntro(): String 
+setFoodCode(foodCode: int) 
+setFoodName(foodName: String) 
+setRecipeCoursePhoto(recipeCoursePhoto: String) 
+setRecipeCourseTime(recipeCourseTime: int) 
+setRecipeCourseIntro(recipeCourseIntro: String) 
+toString(): String 
RecipeIngredientDAO 
-conn: Connection 
+RecipeIngredientDAO() 
-connect() 
+disconnect() 
+insert(recipeIngredientCode: int, ingredientCode: int, recipeCode: int, recipeIngredientNum: int): int 
+selectAll(): RecipeIngredientList 
+selectRecipeIngredientCode(recipeIngredientCode: int): RecipeIngredientDTO 
+selectIngredientCode(ingredientCode: int): RecipeIngredientList 
+selectRecipeCode(recipeCode: int): RecipeIngredientList 
+selectRecipeIngredientNum(recipeIngredientNum: int): RecipeIngredientList 
+selectMaxRecipeIngredientCode(): RecipeIngredientDTO 
+selectIngre(): RecipeIngreInfoDTOList 
+updateAll(recipeIngredientCode: int, ingredientCode: int, recipeCode: int, recipeIngredientNum: int): int 
+updateIngredientCode(recipeIngredientCode: int, ingredientCode: int): int 
+updateRecipeCode(recipeIngredientCode: int, recipeCode: int): int 
+updateRecipeIngredientNum(recipeIngredientCode: int, recipeIngredientNum: int): int 
+deleteAll(): int 
+deleteRecipeIngredientCode(recipeIngredientCode: int): int 
+deleteIngredientCode(ingredientCode: int): int 
+deleteRecipeCode(recipeCode: int): int 
+deleteRecipeIngredientNum(recipeIngredientNum: int): int 
+getConn(): Connection 
+setConn(conn: Connection) 
RecipeIngreInfoDTO 
-foodCode: int 
-foodName: String 
-ingredientName: String 
-ingredientCode: int 
-ingredientNum: int 
+RecipeIngreInfoDTO() 
+RecipeIngreInfoDTO(foodCode: int, foodName: String, ingredientName: String, ingredientCode: int, ingredientNum: int) 
+getFoodCode(): int 
+getFoodName(): String 
+getIngredientName(): String 
+getIngredientCode(): int 
+getIngredientNum(): int 
+setFoodCode(foodCode: int) 
+setFoodName(foodName: String) 
+setIngredientName(ingredientName: String) 
+setIngredientCode(ingredientCode: int) 
+setIngredientNum(ingredient: int) 
+toString(): String 
FoodRecipeDBManager 
-cokkingCourseListData: CookingCourseListData 
-recipeIngreInfoListData: RecipeIngreInfoListData 
-recipeInfoList: RecipeInfoList 
-foodInfoList: FoodInfoList 
+FoodRecipeDBManager() 
+FoodRecipeDBManager(cookingCourseListData: CookingCourseListData, recipeIngreInfoListData: RecipeIngreInfoListData, recipeInfoList: RecipeInfoList, foodInfoList: FoodInfoList) 
+getCookingCourseListData(): CookingCourseListData 
+getRecipeIngreInfoListData(): RecipeIngreInfoListData 
+getRecipeInfoList(): RecipeInfoList 
+getFoodInfoList(): FoodInfoList 
+setCookingCourseListData(cookingCourseListData: CookingCourseListData) 
+setRecipeIngreInfoListData(recipeIngreInfoListData: RecipeIngreInfoListData) 
+setRecipeInfoList(recipeInfoList: RecipeInfoList) 
+setFoodInfoList(foodInfoList: FoodInfoList) 
+readFoodInfo() 
+readCookingCourse() 
+readIngredient() 
+readRecipe() 
+load() 
FoodRecipeInfoList 
-foodRecipeInfoList: Collection<FoodRecipeInfo> 
+getFoodRecipeInfoList(): Collection<FoodRecipeInfo> 
+setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) 
+addFoodRecipeInfoList(foodRecipeInfo: FoodRecipeInfo) 
+reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo: FoodRecipeInfo): FoodRecipeInfo 
+removeFoodRecipeInfoList(foodCode: String): FoodRecipeInfo 
+searchFoodRecipeInfo(foodCode: String): FoodRecipeInfo 
+searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> 
+searchTodayFood(keyword: String): Collection<FoodRecipeInfo> 
+searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo>
FoodRecipeInfoList 
Data Loading - DB 
FoodRecipeDBManager 
RecipeIngreInfoDAO CourseDAO 
RecipeIngredientDTO RecipeCourseDTO
MVC 구조 
음식추천받기(오늘 뭐먹지?) 
TodayEatUI 
-text: JTextField 
+TodayEatUI() 
+TodayEatUI(text: JTextField) 
+showUI() 
+getText(): JTextField 
+setText(text: JTextField) 
TodayController 
+TodayController() 
+TodayController(foodName: String) 
+verifyFoodName(): Collection<FoodRecipeInfo> 
+getFoodName(): String 
+setFoodCode(foodName: String) 
PhotoController 
-foodName: String 
-foodCode: String 
+PhotoController() 
+PhotoController(foodCode: String) 
+verifyFoodCode(): FoodRecipeInfo 
+getFoodCode(): String 
+setFoodCode(foodCode: String) 
TodayActionListener 
-frame: JFrame 
-text: JTextField 
-scrollPane: JScrollPane 
+TodayActionListener() 
+TodayActionListener(frame: JFrame, text: JTextField, scrollPane: JScrollPane) 
+actionPerforemd(e: ActionEvent) 
+showResult() 
+getFrame(): JFrame 
+getText(): JTextField 
+getScrollPane(): JScrollPane 
+setFrame(frame: JFrame) 
+setText(text: JTextField) 
+setScrollPane(scrollPane: JScrollPane) 
PhtotoActionListener 
-text: String 
+PhtotoActionListener() 
+PhtotoActionListener(text: String) 
+actionPerformed(e: ActionEvent) 
+moveUI() 
+getText(): String 
+setText(text: String) 
FoodRecipeInfoList 
-foodRecipeInfoList: Collection<FoodRecipeInfo> 
+getFoodRecipeInfoList(): Collection<FoodRecipeInfo> 
+setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) 
+addFoodRecipeInfoList(foodRecipeInfo) 
+reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo) 
+removeFoodRecipeInfoList(foodCode: String) 
+searchFoodRecipeInfo(foodCode: String) 
+searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> 
+searchTodayFood(keyword: String): Collection<FoodRecipeInfo> 
+searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo> 
FoodRecipeInfo 
-foodInfo: FoodInfo 
-recipeInfo: RecipeInfo 
+FoodRecipeInfo() 
+FoodRecipeInfo(foodInfo, recipeInfo) 
+getFoodInfo() 
+getRecipeInfo() 
+setFoodinfo(foodInfo) 
+setRecipeInfo(recipeInfo) 
FoodInfo 
-foodCode: String 
-foodName: String 
-foodIntro: String 
-foodPhoto: String 
-foodCalorie: int 
+FoodInfo() 
+FoodInfo(foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) 
+FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) 
+getFoodCode(): String 
+getFoodName(): String 
+getFoodIntro(): String 
+getFoodPhoto(): String 
+getFoodCalorie(): int 
+setFoodCode(foodCode: String) 
+setFoodName(foodName: String) 
+setFoodIntro(foodIntro: String) 
+setFoodPhoto(foodPhoto: String) 
+setFoodCalorie(foodCalorie: int)
MVC 구조 
레시피등록 
+RecipeRegistrationUI() 
+RecipeRegistrationUI(foodName: String, foodCalorie: int, foodPhoto: String, foodIntro: String, cookingTotalTime: int, porton: int, level: String[], totalIngredient: int, tip: String) 
+createContentPane(): Container 
+showUI() 
+getFrame(): JFrame 
+getFoodName(): JTextField 
+getFoodCalorie(): JTextField 
+getFoodPhoto(): JTextField 
+getFoodIntro(): JTextArea 
+getCookingTotalTime(): JTextField 
+getPorton(): JTextField 
+getLevelComboBox(): JComboBox<String> 
+getTotalIngredient(): JTextField 
+getTip(): JTextArea 
+setFrame(frame: JFrame) 
+setFoodName(foodName: JTextField) 
+setFoodCalorie(foodCalorie: JTextField) 
+setFoodPhoto(foodPhoto: JTextField) 
+setFoodIntro(foodIntro: JTextArea) 
+setCookingTotalTime(cookingTotalTime: JTextField) 
+setPorton(porton: JTextField) 
+setLevelComboBox(levelComboBox: JComboBox<String>) 
+setTotalIngredient(totalIngredient: JTextField) 
+setTip(tip: JTextArea) 
RecipeInputListener 
+frame: JFrame 
+foodName: JTextField 
+foodCalorie: JTextField 
+foodPhoto: JTextField 
+foodIntro: JTextArea 
+cookingTotalTime: JTextField 
+porton: JTextField 
+levelComboBox: JComboBox<String> 
+totalIngredient: JTextField 
+tip: JTextArea 
RecipeRegistrationUI 
-frame: JFrame 
-foodName: JTextField 
-foodCalorie: JTextField 
-foodPhoto: JTextField 
-foodIntro: JTextArea 
-cookingTotalTime: JTextField 
-porton: JTextField 
-levelComboBox: JComboBox<String> 
-totalIngredient: JTextField 
-tip: JTextArea 
+RecipeInputListener() 
+RecipeInputListener(frame: JFrame, foodName: JTextField, foodCalorie: JTextField, foodPhoto: JTextField, foodIntro: JTextArea, cookingTotalTime: JTextField, porton: JTextField, levelComboBox: JComboBox<String>[], totalIngredient: JTextField, tip: JTextArea) 
+actionPerformed(e: ActionEvent) 
+Register() 
+getFrame(): JFrame 
+getFoodName(): JTextField 
+getFoodCalorie(): JTextField 
+getFoodPhoto(): JTextField 
+getFoodIntro(): JTextArea 
+getCookingTotalTime(): JTextField 
+getPorton(): JTextField 
+getLevelComboBox(): JComboBox<String> 
+getTotalIngredient(): JTextField 
+getTip(): JTextField 
+setFrame(frame: JFrame) 
+setFoodName(foodName: JTextField) 
+setFoodCalorie(foodCalorie: JTextField) 
+setFoodPhoto(foodPhoto: JTextField) 
+setFoodIntro(foodIntro: JTextArea) 
+setCookingTotalTime(cookingTotalTime: JTextField) 
+setPorton(porton: JTextField) 
+setLevelComboBox(levelComboBox: JComboBox<String>) 
+setTotalIngredient(totalIngredient: JTextField) 
+setTip(tip: JTextArea) 
FoodInfo 
-foodCode: String 
-foodName: String 
-foodIntro: String 
-foodPhoto: String 
-foodCalorie: int 
+FoodInfo() 
+FoodInfo(foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) 
+FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) 
+getFoodCode(): String 
+getFoodName(): String 
+getFoodIntro(): String 
+getFoodPhoto(): String 
+getFoodCalorie(): int 
+setFoodCode(foodCode: String) 
+setFoodName(foodName: String) 
+setFoodIntro(foodIntro: String) 
+setFoodPhoto(foodPhoto: String) 
+setFoodCalorie(foodCalorie: int) 
RecipeInfo 
-foodName: String 
-cookingTotalTime: int 
-tip: String 
-portion: int 
-level: Level <<enum>> 
-foodCode: String 
-cookingCourseList: CookingCourseList 
-recipeIngreInfoList: RecipeIngreInfoList 
+RecipeInfo() 
+RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level, cookingCourseList, recipeIngreInfoList) 
+RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level, foodCode: String, cookingCourseList, recipeIngreInfoList) 
+getFoodeName(): String 
+getCookingTotalTime(): int 
+getTip(): String 
+getPortion(): int 
+getLevel(): Level 
+getFoodCode(): String 
+getCookingCourseList() 
+getRecipeIngreInfoList() 
+setFoodName(foodName: String) 
+setCookingTotalTime(cookingTotalTime: int) 
+setTip(tip: String) 
+setPortion(portion: int) 
+setLevel(level: Level) 
+setFoodCode(foodCode: String) 
+setCookingCourseList(cookingCourseList) 
+setIngredientInfoList(recipeIngreInfoList) 
+check(ingred1: String, ingred2: String, ingred3: String): boolean 
TempCookingCourseList 
+cookingCourseList: Collection<CookingCourse> 
+foodName: String 
+foodCode: String 
+getCookingCourseList(): Collection<CookingCourse> 
+getFoodName(): String 
+getFoodCode(): String 
+setCookingCourseList(list: Collection<CookingCourse>) 
+setFoodName(foodName: String) 
+setFoodCode(foodCode: String) 
+searchCookingCourse(step: int) 
+addCookingCourse(cookingCourse) 
+addCookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) 
+searchCookingCourse(step: int) 
+searchCookingCourse(cookingCourse) 
+removeCookingCourse(cookingCourse) 
+removeCookingCourse(step: int) 
+reviseCookingCourse(searchData, reviseData) 
+reviseCookingCourseList(step: int, reviseData) 
CookingCourseList 
-cookingCourseList: Collection<CookingCourse> 
-foodName: String 
-foodCode: String 
+CookingCourseList() 
+CookingCourseList(foodName: String, foodCode: String) 
+CookingCourseList(cookingCourseList: Collection<CookingCourse>, foodName: String, foodCode: String) 
+getCookingCourseList(): Collection<CookingCourse> 
+getFoodName(): String 
+getFoodCode(): String 
+setCookingCourseList(list: Collection<CookingCourse>) 
+setFoodName(foodName: String) 
+setFoodCode(foodCode: String) 
+searchCookingCourse(step: int) 
+addCookingCourse(cookingCourse) 
+addCookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) 
+searchCookingCourse(step: int) 
+searchCookingCourse(cookingCourse) 
+removeCookingCourse(cookingCourse) 
+removeCookingCourse(step: int) 
+reviseCookingCourse(searchData, reviseData) 
+reviseCookingCourseList(step: int, reviseData) 
RecipeIngreInfoList 
-foodName: String 
-foodCode: String 
-recipeIngreInfoList: Collection<RecipeIngreInfo> 
+RecipeIngreInfoList() 
+RecipeIngreInfoList(foodName: String, foodCode: String, recipeIngreInfoList: Collection<RecipeIngreInfo>) 
+getFoodName(): String 
+getFoodCode(): String 
+getRecipeIngreInfoList(): Collection<RecipeIngreInfo> 
+setFoodName(foodName: String) 
+setFoodCode(foodCode: String) 
+setRecipeInfoList(recipeIngreInfoList: Collection<RecipeIngreInfo>) 
+addRecipeIngreInfoList(recipeIngreInfo) 
+reviseRecipeIngreInfoList(ingredientCode: String, recipeIngreInfo) 
+removeRecipeIngreInfoList(ingredientCode: String) 
+searchRecipeIngreInfo(ingredientCode: String) 
+searchRecipeIngreInfoList(ingredientName: String): Collection<RecipeIngreInfo> 
+searchRecipeIngreInfo(ingredientName: String) 
TempRecipeIngreInfoList 
+foodName: String 
+foodCode: String 
+recipeIngreInfoList: Collection<RecipeIngreInfo> 
+getFoodName(): String 
+getFoodCode(): String 
+getRecipeIngreInfoList(): Collection<RecipeIngreInfo> 
+setFoodName(foodName: String) 
+setFoodCode(foodCode: String) 
+setRecipeInfoList(recipeIngreInfoList: Collection<RecipeIngreInfo>) 
+addRecipeIngreInfoList(recipeIngreInfo) 
+reviseRecipeIngreInfoList(ingredientCode: String, recipeIngreInfo) 
+removeRecipeIngreInfoList(ingredientCode: String) 
+searchRecipeIngreInfo(ingredientCode: String) 
+searchRecipeIngreInfoList(ingredientName: String): Collection<RecipeIngreInfo> 
+searchRecipeIngreInfo(ingredientName: String) 
FoodRecipeInfo 
-foodInfo: FoodInfo 
-recipeInfo: RecipeInfo 
+FoodRecipeInfo() 
+FoodRecipeInfo(foodInfo, recipeInfo) 
+getFoodInfo() 
+getRecipeInfo() 
+setFoodinfo(foodInfo) 
+setRecipeInfo(recipeInfo) 
FoodRecipeInfoList 
-foodRecipeInfoList: Collection<FoodRecipeInfo> 
+getFoodRecipeInfoList(): Collection<FoodRecipeInfo> 
+setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) 
+addFoodRecipeInfoList(foodRecipeInfo) 
+reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo) 
+removeFoodRecipeInfoList(foodCode: String) 
+searchFoodRecipeInfo(foodCode: String) 
+searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> 
+searchTodayFood(keyword: String): Collection<FoodRecipeInfo> 
+searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo> 
RegisterDBController 
-foodInfo: FoodInfo 
-recipeInfo: RecipeInfo 
+RegisterDBController() 
+RegisterDBController(foodName: JTextField, foodCalorie: JTextField, foodPhoto: JTextField, foodIntro: JTextField, cookingTotalTime: JTextField, portion: JTextField, levelComboBox: JComboBox<String>, totalIngredient: JTextField, tip: :JTextArea) 
+register() 
+getFoodInfo() 
+getRecipeInfo() 
+setFoodInfo(foodInfo: FoodInfo) 
+setRecipeInfo(recipeInfo: RecipeInfo)
SequenceDiagram(레시피등록 ) 
RegiserDBController RecipeInfo CookingCourseList FoodRecipeInfoList FoodDAO RecipeDAO RecipeCourseDAO RecipeIngredientDAO RecipeIngredientDTO 
sd데이터베이스 저장 
sd for문 
sd for문 
23 : addFoodRecipeInfo(foodRecipeInfo:FoodRecipeInfo) 
<<create>> 
24 
25 : insert() 
26 : disconnect() 
<<create>> 
27 
28 : insert() 
29 : CookingCourseList := getCookingCourseList() 
30 : Collection<CookingCourse>:=getCookingCourseList() 
<<create>> 
31 
32 : insert() 
33 : disconnect() 
<<create>> 
34 
35 : Collection<RecipeIngreInfo>:=getRecipeIngreInfoList() 
36 : RecipeIngredientDTO := selectMaxRecipeIngredientCode() 
37 : int := getRecipeIngredientCode() 
38 : insert() 
39 : disconnect() 
23번, static 클래스(음식조리정보리스트)에 저장 
36번, 37번 가장 낮은 음식코드 불러온다. 
레시피 등록 버튼 리스너 
RecipeInputListener 
레시피 정보 조리과정목록 음식조리정보리스트 음식 DAO 조리법 DAO 조리과정DAO 조리재료 DAO 조리재료 DTO 
21 : register()
: 사용자 
음식추천받기UI 음식추천받기 리스너 음식추천받기 콘트롤러 음식조리법정보리스트 음식정보 및 사진 출력리스너 
음식정보 및 사진 
콘트롤러 
TodayEatUI TodayActionListener TodayController FoodRecipreInfoList PhtoActionListener PhotoController FoodInfoUI 
1 : 본인의기분 또는 날씨 등을 입력 후 검색 요청() 
2 : void := actionPerformed(e:ActionEvent) 
3 : showResult() 
<<create>> 
4 
5 : Collection<FoodRecipeInfo> := verifyFoodName() 
조건에 맞는 음식정보, 조리법 정보를 for문을 
이용하여 패널에 각종 정보를 넣기 시작 
6 : Collection<FoodRecipeInfo> := searchFoodRecipeList(foodName:String) 
7 : 음식 사진 클릭() 
8 : void := actionPerformed(e:ActionEvent) 
음식코드에 맞는 UI 생성하기 
9 : moveUI() 
<<create>> 
10 
11 : FoodRecipeInfo := searchFoodRecipeList(foodCode:String) 
12 : FoodInfo := verifyFoodCode() 
TodayController객체 생성시, 사용자가 입력한 검색값 중 
첫번째 문자만으로 객체를 생성한다. 
<<create>> 
13 
검색값이 존재하는 경우 
14 : void := showUI() 
음식정보UI 
SequenceDiagram(음식추천받기 )

More Related Content

What's hot

DFD ระบบจองรีสอร์ทออนไลน์
DFD ระบบจองรีสอร์ทออนไลน์DFD ระบบจองรีสอร์ทออนไลน์
DFD ระบบจองรีสอร์ทออนไลน์
rubtumproject.com
 
8 Алгоритми з розгалуженнями для опрацювання величин
8 Алгоритми з розгалуженнями для опрацювання величин8 Алгоритми з розгалуженнями для опрацювання величин
8 Алгоритми з розгалуженнями для опрацювання величин
Сергій Каляфіцький
 
Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...
Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...
Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...
VsimPPT
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
beom kyun choi
 
การขึ้นโมเดลเก้าอี้
การขึ้นโมเดลเก้าอี้การขึ้นโมเดลเก้าอี้
การขึ้นโมเดลเก้าอี้
Kyo Chiro
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
Eugene Jeon
 
[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천
[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천
[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천
BOAZ Bigdata
 
векторна і растрова графіка
векторна і растрова графікавекторна і растрова графіка
векторна і растрова графіка
Алина Тихоненко
 
ใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventor
ใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventorใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventor
ใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventor
Nattapon
 
สแตกและคิว (Stack & queue)
สแตกและคิว (Stack & queue)สแตกและคิว (Stack & queue)
สแตกและคิว (Stack & queue)
tumetr
 
横隔膜筋力低下
横隔膜筋力低下横隔膜筋力低下
横隔膜筋力低下
Takayoshi Shimohata
 
Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.
Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.
Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.
VsimPPT
 
LeapMotionとpythonで遊ぶ
LeapMotionとpythonで遊ぶLeapMotionとpythonで遊ぶ
LeapMotionとpythonで遊ぶ
monochrojazz
 
본격 유니티 마개조 프로젝트
본격 유니티 마개조 프로젝트본격 유니티 마개조 프로젝트
본격 유니티 마개조 프로젝트
SeungJik Lee
 

What's hot (14)

DFD ระบบจองรีสอร์ทออนไลน์
DFD ระบบจองรีสอร์ทออนไลน์DFD ระบบจองรีสอร์ทออนไลน์
DFD ระบบจองรีสอร์ทออนไลน์
 
8 Алгоритми з розгалуженнями для опрацювання величин
8 Алгоритми з розгалуженнями для опрацювання величин8 Алгоритми з розгалуженнями для опрацювання величин
8 Алгоритми з розгалуженнями для опрацювання величин
 
Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...
Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...
Урок 32 для 10-11 класу (Модуль "Веб-технолгії") - Проектна діяльність. Розби...
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
การขึ้นโมเดลเก้าอี้
การขึ้นโมเดลเก้าอี้การขึ้นโมเดลเก้าอี้
การขึ้นโมเดลเก้าอี้
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 
[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천
[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천
[분석]워드임베딩과 인공신경망을 이용한 개인 맞춤형 레시피 추천
 
векторна і растрова графіка
векторна і растрова графікавекторна і растрова графіка
векторна і растрова графіка
 
ใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventor
ใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventorใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventor
ใบความรู้ที่ 5 ส่วนประกอบของโปรแกรม mit app inventor
 
สแตกและคิว (Stack & queue)
สแตกและคิว (Stack & queue)สแตกและคิว (Stack & queue)
สแตกและคิว (Stack & queue)
 
横隔膜筋力低下
横隔膜筋力低下横隔膜筋力低下
横隔膜筋力低下
 
Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.
Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.
Урок 34 для 6 класу - Розробка сценарію майбутнього програмного проекту.
 
LeapMotionとpythonで遊ぶ
LeapMotionとpythonで遊ぶLeapMotionとpythonで遊ぶ
LeapMotionとpythonで遊ぶ
 
본격 유니티 마개조 프로젝트
본격 유니티 마개조 프로젝트본격 유니티 마개조 프로젝트
본격 유니티 마개조 프로젝트
 

Viewers also liked

영화 예매 프로그램 (DB 설계, 프로그램 연동)
영화 예매 프로그램 (DB 설계, 프로그램 연동)영화 예매 프로그램 (DB 설계, 프로그램 연동)
영화 예매 프로그램 (DB 설계, 프로그램 연동)
_ce
 
항공예약시스템
항공예약시스템항공예약시스템
항공예약시스템
gsduifhs
 
스토리텔링
스토리텔링스토리텔링
스토리텔링Cathy
 
[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜
[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜
[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜ChangeON@
 
스토리텔링
스토리텔링스토리텔링
스토리텔링
홍민 박
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
복연 이
 
스토리공작소
스토리공작소스토리공작소
스토리공작소
Sunggon Jung
 
기말레포트
기말레포트기말레포트
기말레포트Miri Kim
 
울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보
울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보
울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보
풀싸롱 울
 
농촌은스토리다01
농촌은스토리다01농촌은스토리다01
온라인 영화예매 서비스3
온라인 영화예매 서비스3온라인 영화예매 서비스3
온라인 영화예매 서비스3
희윤 김
 
Web Planning Story 4 Shopping Reservation 고딕
Web Planning   Story 4 Shopping Reservation 고딕Web Planning   Story 4 Shopping Reservation 고딕
Web Planning Story 4 Shopping Reservation 고딕ahnsunggon
 
DB 설계 과제
DB 설계 과제DB 설계 과제
DB 설계 과제
Dong-Jin Park
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기종빈 오
 
[경영하는 개발자] Ep5 시골빵집과 자본론
[경영하는 개발자] Ep5 시골빵집과 자본론[경영하는 개발자] Ep5 시골빵집과 자본론
[경영하는 개발자] Ep5 시골빵집과 자본론
Byunglim Park
 
[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료
[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료
[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료
opencontentslab
 
DB Project - Gmarket
DB Project - Gmarket DB Project - Gmarket
DB Project - Gmarket
Han Sung Kim
 
시분설.Pptx [복구]
시분설.Pptx [복구]시분설.Pptx [복구]
시분설.Pptx [복구]Donwon Kim
 
서비스 디자인 24k
서비스 디자인 24k서비스 디자인 24k
서비스 디자인 24k
Seungkwan Kim
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
Haeil Yi
 

Viewers also liked (20)

영화 예매 프로그램 (DB 설계, 프로그램 연동)
영화 예매 프로그램 (DB 설계, 프로그램 연동)영화 예매 프로그램 (DB 설계, 프로그램 연동)
영화 예매 프로그램 (DB 설계, 프로그램 연동)
 
항공예약시스템
항공예약시스템항공예약시스템
항공예약시스템
 
스토리텔링
스토리텔링스토리텔링
스토리텔링
 
[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜
[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜
[2012 ChangeON@천사협] 스토리텔링 활용의 좋은 예 - 임가혜
 
스토리텔링
스토리텔링스토리텔링
스토리텔링
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
 
스토리공작소
스토리공작소스토리공작소
스토리공작소
 
기말레포트
기말레포트기말레포트
기말레포트
 
울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보
울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보
울산풀싸롱『◑◐』 삼산풀싸롱 O1O-7189-1243 시즌3 예약/가격정보
 
농촌은스토리다01
농촌은스토리다01농촌은스토리다01
농촌은스토리다01
 
온라인 영화예매 서비스3
온라인 영화예매 서비스3온라인 영화예매 서비스3
온라인 영화예매 서비스3
 
Web Planning Story 4 Shopping Reservation 고딕
Web Planning   Story 4 Shopping Reservation 고딕Web Planning   Story 4 Shopping Reservation 고딕
Web Planning Story 4 Shopping Reservation 고딕
 
DB 설계 과제
DB 설계 과제DB 설계 과제
DB 설계 과제
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기
 
[경영하는 개발자] Ep5 시골빵집과 자본론
[경영하는 개발자] Ep5 시골빵집과 자본론[경영하는 개발자] Ep5 시골빵집과 자본론
[경영하는 개발자] Ep5 시골빵집과 자본론
 
[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료
[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료
[오픈콘텐츠랩/김용석님] 불량 파워포인트 대량생산 실습 강의자료
 
DB Project - Gmarket
DB Project - Gmarket DB Project - Gmarket
DB Project - Gmarket
 
시분설.Pptx [복구]
시분설.Pptx [복구]시분설.Pptx [복구]
시분설.Pptx [복구]
 
서비스 디자인 24k
서비스 디자인 24k서비스 디자인 24k
서비스 디자인 24k
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
 

Similar to 요조숙녀

Django O/R Mapper
Django O/R MapperDjango O/R Mapper
Django O/R Mapper
Ian Lewis
 
Practical Generative Testing Patterns
Practical Generative Testing PatternsPractical Generative Testing Patterns
Practical Generative Testing Patterns
Srihari Sriraman
 
Django Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
Django Introduction Osscamp Delhi September 08 09 2007 Mir NazimDjango Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
Django Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
Mir Nazim
 
Angular js quickstart
Angular js quickstartAngular js quickstart
Angular js quickstartLinkMe Srl
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
Mike Lively
 
Qtp 92 Tutorial Anil
Qtp 92 Tutorial AnilQtp 92 Tutorial Anil
Qtp 92 Tutorial Anilguest3373d3
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
subhasis100
 
Qtp 9.2 Tutorial
Qtp 9.2 TutorialQtp 9.2 Tutorial
Qtp 9.2 Tutorialguest37ae7f
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
subhasis100
 
qtp 9.2 features
qtp 9.2 featuresqtp 9.2 features
qtp 9.2 featureskrishna3032
 
Qtp 92 Tutorial
Qtp 92 TutorialQtp 92 Tutorial
Qtp 92 Tutorial
sasidhar
 
Ppt Qtp
Ppt QtpPpt Qtp
Ppt Qtp
rosaleenm
 
DataCamp Cheat Sheets 4 Python Users (2020)
DataCamp Cheat Sheets 4 Python Users (2020)DataCamp Cheat Sheets 4 Python Users (2020)
DataCamp Cheat Sheets 4 Python Users (2020)
EMRE AKCAOGLU
 
Unit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnitUnit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnit
Michelangelo van Dam
 
Opm mac subledger
Opm mac subledgerOpm mac subledger
Opm mac subledger
Naresh Hanchate
 
7171
71717171
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
Michelangelo van Dam
 
Xomia_20220602.pptx
Xomia_20220602.pptxXomia_20220602.pptx
Xomia_20220602.pptx
Longhow Lam
 

Similar to 요조숙녀 (20)

Django O/R Mapper
Django O/R MapperDjango O/R Mapper
Django O/R Mapper
 
Practical Generative Testing Patterns
Practical Generative Testing PatternsPractical Generative Testing Patterns
Practical Generative Testing Patterns
 
Qtp day 3
Qtp day 3Qtp day 3
Qtp day 3
 
Django Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
Django Introduction Osscamp Delhi September 08 09 2007 Mir NazimDjango Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
Django Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
 
Angular js quickstart
Angular js quickstartAngular js quickstart
Angular js quickstart
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
 
Qtp 92 Tutorial Anil
Qtp 92 Tutorial AnilQtp 92 Tutorial Anil
Qtp 92 Tutorial Anil
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
 
Qtp 9.2 Tutorial
Qtp 9.2 TutorialQtp 9.2 Tutorial
Qtp 9.2 Tutorial
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
 
qtp 9.2 features
qtp 9.2 featuresqtp 9.2 features
qtp 9.2 features
 
Qtp 92 Tutorial
Qtp 92 TutorialQtp 92 Tutorial
Qtp 92 Tutorial
 
Ppt Qtp
Ppt QtpPpt Qtp
Ppt Qtp
 
DataCamp Cheat Sheets 4 Python Users (2020)
DataCamp Cheat Sheets 4 Python Users (2020)DataCamp Cheat Sheets 4 Python Users (2020)
DataCamp Cheat Sheets 4 Python Users (2020)
 
Unit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnitUnit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnit
 
Opm mac subledger
Opm mac subledgerOpm mac subledger
Opm mac subledger
 
7171
71717171
7171
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Xomia_20220602.pptx
Xomia_20220602.pptxXomia_20220602.pptx
Xomia_20220602.pptx
 

Recently uploaded

Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
ayushiqss
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
varshanayak241
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
Sharepoint Designs
 

Recently uploaded (20)

Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
 

요조숙녀

  • 1.
  • 2. 개요 개발 환경 개발 일정 업무 분담 업무 분담 Project 개 요 Project 시 연 Usecase Diagram Usecase 정 의 서 Project 설 계 설계 단계 분석 단계 요구사항 정 의 서 Sequence Diagram 화면 설계 데이터 설 계
  • 5. 개발일정표 날짜 내용 4월 2주차 3주차 4주차 날짜 정보수집 유즈 케이스 모델링 분석 클래스 모델링 설계클래스 모델링 프로그램구현 5월 9 12 13 14 15 TABLE설계 DAO / DTO 설계 Controller 설계 프로그램 구현 문서작업
  • 6. 개발 업무 분담표 이름 : 장 성봉 업무 : 프로젝트 업무 총괄 이름 : 김 대곤 업무 : 클래스 다이어그램 관리 이름 : 박 홍근 업무 : 코드 통합 이름 : 양 진영 업무 : 코드 버전관리 문서관리 이름 : 김 영한 업무 : 클래스 다이어그램 관리
  • 7. 벤치마킹 Survey Web Site & Application
  • 8. 벤치마킹 Survey 요리할 때, 어려움을 겪는 사람의 비율 92% 8% 있다 없다
  • 9. 벤치마킹 Survey 28 18 4 18 1 0 30 25 20 15 10 5 0 요리를 할 때 겪는 어려움 메뉴선정 식재료구입 재정상태 요리법을 잘 몰라서 기타 없음
  • 10. 벤치마킹 Survey 요리도우미에게 제공받고 싶은 서비스 49% 17% 10% 20% 4% 요리법제공 대신장보기 음식메뉴선정 영양소/열량계산 기타
  • 11. 벤치마킹 Web Site & Application 벤치마킹 대상 벤치마킹 기능 다나와 가격대 검색,배송지 변경, 배송예약, 기본배송지 지마켓 회원로그인, 아이디 저장, 기본 배송지 수정 롯데마트 비회원로그인,주문 배송 조회, 배송지 관리 이마트 가까운 배송 지 찾기, 배송정보 조회 미즈쿡 요리 카테고리, 음식정보, 요리법제공,댓 글,레시피 추가 메뉴판 닷컴 음식정보 목록, 재료정보, , 구매/소유 재료 체크, 체크리스트, 계량정보, 별 점, 만개의 레시피 회원가입,요리법 제공, 별 점, 요리카테고리 오마이 쉐프 아이디/비밀번호 찾기,재료정보
  • 12. 회원 로그인 요구사항 정의서 기본 서비스 특화기능 회원가입 요리 추천 요리정보 제공 사용자 레시피 추가 레시피 정보 Stop watch 기능
  • 13. 정보수집단계 키추출 명사 동사 명사 명사 사용자 수령인 시스템 주부 비회원 제공자 작성자 주문자 회원 이용자 세프 대상 주사용자 여성 고수 비사용자 네티즌 요리도우 미 관리자 요리블로 거 받으실분 배송자 사람 올린이 초보 에디터 동사 (가격대를)검색하다 (가격대를)선택하다 (가격대를)입력하다 (가까운매장을)찾는다 (개인노트카테고리를)선택하다 (계량선택을)선택하다 (계량수치를)제공하다 (계정을)복구하다 (계정을)설정하다 (공감수가)증가한다 (구매장소를)설정하다 (구매장소를)파악하다 (국가별레시피를)선택하다 (글자수를)제한하다 (금액을)구분하다 (금액을)선택하다 (기본배송지를)설정하다 (날짜를)선택하다 (날짜와예약가능시간을)선택하다 (낮은가격순으로)선택하다 (높은가격순으로)선택하다 (다음페이지로)이동한다 (단위를)표시하다 (댓글을)작성하다 (덧글을)선택하다 동사 (덧글을)수정하다 (덧글을)입력하다 (덧글을)정렬하다 (레시피를)검색하다 (레시피를)선택하다 (레시피를)스크랩하다 (레시피를)입력하다 (레시피를)작성하다 (레시피를)제공하다 (레시피를)조회하다 (레시피를)조회한다 (레시피를)찜하다 (레시피를)추천하다 (레시피를)확인한다 (레시피목록을)제공하다 (레시피의내용을)입력하다 (로그인을)취소하다 (메일주소를)입력한다 (배달가능시간을)선택하다 (배송시간을)수정하다 (배송시간을)예약하다 (배송시간을)조회하다 (배송정보를)조회하다 (배송지를)등록하다 (배송지를)삭제하다 동사 (요리를)선택하다 (요리리스트를)제공하다 (요리명을)보여주다 (요리명을)입력하다 (요리목록을)선택하다 (요리목적에따라)선택한다 (요리목적을)선택하다 (요리목적을)제공한다 (요리사진을)보여준다 (요리사진을)분류하다 (요리사진을)선택하다 (요리사진을)제공하다 (요리의목적을)선택하다 (요리이름을)선택한다 (요리이름을)조회하다 (요리재료를)입력하다 (요리재료를)제공하다 (요리정보를)공유하다 (요리정보를)보여준다 (요리정보를)선택하다 (우편번호를)검색하다 (우편번호를)선택하다 (우편번호를)입력하다 (음식사진을)선택하다 (음식사진을)제공한다 동사 (음식사진을)첨부하다 (음식재료를)확인하다 (의견을)입력하다 (이름을)입력하다 (이미지를)선택하다 (인기상품순을)선택한다 (인기순으로)검색하다 (인기순으로)정렬하다 (인기순으로)출력하다 (입력정보를)초기화하다 (장보기목록을)선택하다 (재료계량정보를)제공하다 (재료를)구매하다 (재료를)확인하다 (재료별레시피를)선택하다 (재료수량을)확인하다 (재료의양을)제공하다 (재료의양을)확인하다 (재료정보를)제공하다 (정보를)조회하다 (조리과정을)확인한다 (조리시간을)확인한다 (조회수를)보여준다 (주문을)조회하다 (주문자정보항목을)입력하다 동사 (주문하기를)선택하다 (주소를)입력하다 (주재료를)제공한다 (주재료를)확인한다 (집에있는재료를)구분하다 (체크리스트를)수정하다 (체크리스트를)입력하다 (체크리스트를)조회하다 (총결제금액을)출력한다 (총판매가를)출력한다 (총포장비를)출력한다 (총할인금액을)보여준다 (최근알림메시지를)확인한다 (최신순으로)보다 (추천수를)보여준다 (카테고리를)선택하다 (카테고리를)추천하다 (카테고리에)등록하다 (테마를)추천하다 (평점을기준으로)조회하다 (항목의내용을)초기화하다 (회원만족도를)확인하다 (회원프로필을)설정하다 로그인하다 회원가입하다 동사 (배송지를)선택하다 (배송지를)설정하다 (배송지를)수정하다 (배송지를)입력하다 (배송지를)추가하다 (배송지정보를)수정하다 (배송지정보를)저장하다 (별점을)추가하다 (보안문자를)선택하다 (보안문자를)입력하다 (보안문자를)제공하다 (본인인증을)하다 (비밀번호를)입력하다 (비밀번호를)찾다 (비밀번호를)확인하다 (사진을)제공하다 (상품을)검색하다 (상품을)선택하다 (새배송지를)추가하다 (셰프를)등록하다 (예약가능시간을)확인하다 (요리건수를)제공한다 (요리단계를)제공한다 (요리대상을)확인하다 (요리레시피를)조회하다 엑터후보 유즈케이스 후보
  • 14. UseCase 다이어그램 사용자 회원가입 음식 명으로 검색 음식추천받기 재료를 입력하여 검색 가격대 검색 음식정보 등록 조리과정조회 재료등록 조리과정등록 로그인 <<extends>> <<include>>
  • 15. UseCase 정의서 유즈케이스 정의서(UC001) 시스템명 요조숙녀 작성일자 2014.04.30 페이지 1/1 UseCase 명 음식추천받기 작성자 김대곤 3.1 Main Flows 1. 사용자는 음식 추천 받기를 요청한다. 2. 시스템은 사용자에게 키워드(N-1) 입력을 요청한다. 3. 사용자는 키워드를 입력하고 음식 추천 받기를 요청한다(A-1)(E-1). 4. 시스템은 음식 검색 결과를 사용자에게 보여주고 Use Case를 종료한다. 3.2 Alternative Flows A-1. 검색결과가 존재하지 않은 경우 1. “검색결과가 존재하지 않습니다. 다시 입력해주세요.” 라는 메시지를 보여준다. -> Main Flow의 2번으로 4. Note N-1. 키워드 : 기분, 상태 등 3.3 Exception Flows E-1. 사용자가 키워드 입력을 하지 않고 창을 닫은 경우 ->Use Case를 종료한다.
  • 16. UseCase 정의서 유즈케이스 정의서(UC002) 시스템명 요조숙녀 작성일자 2014.04.30 페이지 1/1 UseCase 명 음식정보등록 작성자 장성봉 3.1 Main Flows 1. 사용자는 음식정보 등록을 요청한다. 2. 시스템은 사용자에게 음식정보(N-1), 조리정보(N-2) 입력을 요청한다. 3. 사용자는 음식정보, 조리정보를 입력한다. (E-1) 4. 사용자는 조리과정 등록하기를 요청한다. 5. 시스템은 사용자에게 조리과정 등록정보(N-3) 입력을 요청한다. 6. 사용자는 조리과정 등록정보를 입력하고 완료를 선택한다(A-1). 7. 사용자는 재료 등록하기를 요청한다. 8. 시스템은 사용자에게 재료정보(N-4) 입력을 요청한다. 9. 사용자는 재료정보를 입력하고 재료 등록하기를 선택한다. 10. 시스템은 성공적으로 재료를 등록하고 Use Case를 종료한다. 3.2 Alternative Flows A-1. 사용자가 등록을 선택한 경우 -> Main Flow의 5번으로 4. Note N-1. 음식정보 : 음식이름, 음식칼로리, 음식사진(경로), 음식소개 N-2. 조리정보 : 조리시간, 분량, 난이도, 총 재료개수, 조리팁 N-3. 조리과정 등록정보 : 단계시간(초), 사진경로, 설명 N-4. 재료정보 : 재료명, 수량
  • 19. 분석단계 클래스다이어그램(영문-전체) IngredientInfoList -ingredientInfoList: Collection<IngredientInfo> -foodName: String +IngredientInfoList() +IngredientInfoList(list: Collection<IngredientInfo>, foodName: String) +getIngredientInfoList(): Collection<IngredientInfo> +getFoodName(): String +setIngredientInfoList(list: Collection<IngredientInfo>) +setFoodName(foodName: String) +addIngredienInfoList(ingredientInfo: IngredientInfo): IngredientInfo +reviseIngredientInfoList(ingredientCode: String, ingredientInfo: IngredientInfo): IngredientInfo +removeIngredientInfoList(ingredientCode: String): IngredientInfo +searchIngredientInfo(ingredientCode: String): IngredientInfo +searchIngredientInfoList(ingredientName: String): Collection<IngredientInfo> IngredientInfo -ingrdientName: String -ingredientCode: String -unit: String +IngredientInfo() +IngredientInfo(ingredientName: String, ingredientCode: String, unit: String) +IngredientInfo(ingredientName: String, ingredientCode: String) +IngredientInfo(ingredientCode: String) +getIngredientName(): String +getIngredientCode(): String +getUnit(): String +setIngredientName(ingredientName: String) +setIngredientCode(ingredientCode: String) +setUnit(unit: String) RecipeIngreInfo -ingredientName: String -ingredientCode: String -ingredientNum: int +RecipeIngreInfo() +RecipeIngreInfo(ingredientName: String, ingredientCode: String, ingredientNum: int) +getIngredientName(): String +getIngredientCode(): String +getIngredientNum(): int +setIngredientName(ingredientName: String) +setIngredientCode(ingredientCode: String) +setIngredientNum(ingredientNum: int) RecipeIngreInfoList -foodName: String -foodCode: String -recipeIngreInfoList: Collection<RecipeIngreInfo> +RecipeIngreInfoList() +RecipeIngreInfoList(foodName: String, foodCode: String, recipeIngreInfoList: Collection<RecipeIngreInfo>) +getFoodName(): String +getFoodCode(): String +getRecipeIngreInfoList(): Collection<RecipeIngreInfo> +setFoodName(foodName: String) +setFoodCode(foodCode: String) +setRecipeInfoList(recipeIngreInfoList: Collection<RecipeIngreInfo>) +addRecipeIngreInfoList(recipeIngreInfo: RecipeIngreInfo): RecipeIngreInfo +reviseRecipeIngreInfoList(ingredientCode: String, recipeIngreInfo: RecipeIngreInfo): RecipeIngreInfo +removeRecipeIngreInfoList(ingredientCode: String): RecipeIngreInfo +searchRecipeIngreInfo(ingredientCode: String): RecipeIngreInfo +searchRecipeIngreInfoList(ingredientName: String): Collection<RecipeIngreInfo> +searchRecipeIngreInfo(ingredientName: String): RecipeIngreInfo CookingCourse -cookingPhoto: String -cookingTime: int -cookingInst: String +CookingCourse() +CookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) +CookingCourse(cookingTime: int, cookingInst: String) +getCookingPhoto(): String +getCookingTime(): int +getCookingInst(): String +setCookingPhoto(cookingPhoto: String) +setCookingTime(cookingTime: int) +setCookingInst(cookingInst: String) LoginInfo -id: String -password: String -loginState: boolean +LoginInfo() +LoginInfo(id: String, password: String) +getId(): String +getPassword(): String +getLoginState(): boolean +setId(id: String) +setPassword(password: String) +setLoginState(loginState: boolean) FoodInfo -foodCode: String -foodName: String -foodIntro: String -foodPhoto: String -foodCalorie: int +FoodInfo() +FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String) +FoodInfo(foodCode: String, foodName: String) +getFoodCode(): String +getFoodName(): String +getFoodIntro(): String +getFoodPhoto(): String +getFoodCalorie(): int +setFoodCode(foodCode: String) +setFoodName(foodName: String) +setFoodIntro(foodIntro: String) +setFoodPhoto(foodPhoto: String) +setFoodCalorie(foodCalorie: int) SoldItemInfo -soldItemName: String -soldItemNum: int -soldItemCode: String -placeOfOrisin: String -price: double +SoldItemInfo() +SoldItemInfo(name: String, num: int, code: String, placeOfOrisin: String, price: double) +getSoldItemName(): String +getSoldItemNum(): int +getSoldItemCode(): String +getPlaceOfOrisin(): String +getPrice(): double +setSoldItemName(name: String) +setSoldItemNum(num: int) +setSoldItemCode(code: String) +setPlaceOfOrisin(placeOfOrisin: String) +setPrice(price: double) RecipeInfo -foodName: String -cookingTotalTime: int -tip: String -portion: int -level: Level <<enum>> -foodCode: String -cookingCourseList: CookingCourseList -recipeIngreInfoList: RecipeIngreInfoList +RecipeInfo() +RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) +RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, foodCode: String, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) +getFoodeName(): String +getCookingTotalTime(): int +getTip(): String +getPortion(): int +getLevel(): Level +getFoodCode(): String +getCookingCourseList(): CookingCourseList +getRecipeIngreInfoList(): RecipeIngreInfoList +setFoodName(foodName: String) +setCookingTotalTime(cookingTotalTime: int) +setTip(tip: String) +setPortion(portion: int) +setLevel(level: Level) +setFoodCode(foodCode: String) +setCookingCourseList(cookingCourseList: CookingCourseList) +setIngredientInfoList(recipeIngreInfoList: RecipeIngreInfoList) +check(ingred1: String, ingred2: String, ingred3: String): boolean CookingCourseList -cookingCourseList: Collection<CookingCourse> -foodName: String -foodCode: String +CookingCourseList() +CookingCourseList(foodName: String, foodCode: String) +CookingCourseList(cookingCourseList: Collection<CookingCourse>, foodName: String, foodCode: String) +getCookingCourseList(): Collection<CookingCourse> +getFoodName(): String +getFoodCode(): String +setCookingCourseList(list: Collection<CookingCourse>) +setFoodName(foodName: String) +setFoodCode(foodCode: String) +searchCookingCourse(step: int): CookingCourse +addCookingCourse(cookingCourse: CookingCourse): CookingCourse +addCookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) +searchCookingCourse(step: int): CookingCourse +searchCookingCourse(cookingCourse: CookingCourse): CookingCourse +removeCookingCourse(cookingCourse: CookingCourse): CookingCourse +removeCookingCourse(step: int): CookingCourse +reviseCookingCourse(searchData: CookingCourse, reviseData: CookingCourse): CookingCourse +reviseCookingCourseList(step: int, reviseData: CookingCourse): CookingCourse MemberInfo -name: String -id: String -password: String -address: String -phone: String -zipCode: String +MemberInfo() +MemberInfo(name: String, id: String) +MemberInfo(name: String, id: String, password: Stirng, address: String, phone: String, zipCode: String) +getName(): String +getId(): String +getPassword(): String +getAddress(): String +getPhone(): String +getZipCode(): String +setName(name: String) +setId(id: String) +setPassword(password: String) +setAddress(address: String) +setPhone(phone: String) +setZipCode(zipCode: String) FoodInfoList -foodInfoList: Collection<FoodInfo> +FoodInfoList() +FoodInfoList(list: Collection<FoodInfo>) +getFoodInfoList(): Collection<FoodInfo> +setFoodInfoList(list: Collection<FoodInfo>) +addFoodInfoList(foodInfo: FoodInfo): FoodInfo +reviseFoodInfoList(foodCode: String, reviseData: FoodInfo): FoodInfo +removeFoodInfoList(foodCode: String): FoodInfo +searchFoodInfo(foodCode: String): FoodInfo +searchFoodInfoList(foodName: String): Collection<FoodInfo> SoldItemInfoList -soldItemInfoList: Collection<SoldItemInfo> +SoldItemInfoList() +SoldItemInfoList(soldItemInfoList: Collection<SoldItemInfo>) +getSoldItemInfoList(): Collection<SoldItemInfo> +setSoldItemInfoList(soldItemInfoList: Collection<SoldItemInfo>) +addSoldItemInfoList(soldItemInfo: SoldItemInfo): SoldItemInfo +reviseSoldItemInfoList(soldItemCode: String, soldItemInfo: SoldItemInfo): SoldItemInfo +removeSoldItemInfoList(soldItemCode: String): SoldItemInfo +searchSoldItemInfoList(soldItemCode: String): SoldItemInfo StoreInfo -storeName: String -storeCode: String -storeAddress: String -storePhone: String +StoreInfo() +StoreInfo(storeName: String, storeCode: String, storeAddress: String, storePhone: String) +getStoreName(): String +getStoreCode(): String +getStoreAddress(): String +getStorePhone(): String +setStoreName(storeName: String) +setStoreCode(storeCode: String) +setStoreAddress(storeAddress: String) +setStorePhone(storePhone: String) StoreInfoList -list: Collection<StoreInfo> +StoreInfoList() +StoreInfoList(list: Collection<StoreInfo>) +getList(): Collection<StoreInfo> +setList(list: Collection<StoreInfo>) +addStoreInfoList(storeInfo: StoreInfo): StoreInfo +reviseStoreInfoList(code: String, storeInfo: StoreInfo): StoreInfo +removeStoreInfoList(code: String): StoreInfo +searchStoreInfo(code: String): StoreInfo
  • 20. 분석단계 클래스다이어그램(영문) MemberInfo -name: String -id: String -password: String -address: String -phone: String -zipCode: String +MemberInfo() +MemberInfo(name: String, id: String) +MemberInfo(name: String, id: String, password: Stirng, address: String, phone: String, zipCode: String) +getName(): String +getId(): String +getPassword(): String +getAddress(): String +getPhone(): String +getZipCode(): String +setName(name: String) +setId(id: String) +setPassword(password: String) +setAddress(address: String) +setPhone(phone: String) +setZipCode(zipCode: String)
  • 21. 분석단계 클래스다이어그램(영문) RecipeIngreInfo -ingredientName: String -ingredientCode: String -ingredientNum: int +RecipeIngreInfo() +RecipeIngreInfo(ingredientName: String, ingredientCode: String, ingredientNum: int) +getIngredientName(): String +getIngredientCode(): String +getIngredientNum(): int +setIngredientName(ingredientName: String) +setIngredientCode(ingredientCode: String) +setIngredientNum(ingredientNum: int) CookingCourse -cookingPhoto: String -cookingTime: int -cookingInst: String +CookingCourse() +CookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) +CookingCourse(cookingTime: int, cookingInst: String) +getCookingPhoto(): String +getCookingTime(): int +getCookingInst(): String +setCookingPhoto(cookingPhoto: String) +setCookingTime(cookingTime: int) +setCookingInst(cookingInst: String)
  • 22. 분석단계 클래스다이어그램(영문) RecipeInfo -foodName: String -cookingTotalTime: int -tip: String -portion: int -level: Level <<enum>> -foodCode: String -cookingCourseList: CookingCourseList -recipeIngreInfoList: RecipeIngreInfoList +RecipeInfo() +RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) +RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level: Level, foodCode: String, cookingCourseList: CookingCourseList, recipeIngreInfoList: RecipeIngreInfoList) +getFoodeName(): String +getCookingTotalTime(): int +getTip(): String +getPortion(): int +getLevel(): Level +getFoodCode(): String +getCookingCourseList(): CookingCourseList +getRecipeIngreInfoList(): RecipeIngreInfoList +setFoodName(foodName: String) +setCookingTotalTime(cookingTotalTime: int) +setTip(tip: String) +setPortion(portion: int) +setLevel(level: Level) +setFoodCode(foodCode: String) +setCookingCourseList(cookingCourseList: CookingCourseList) +setIngredientInfoList(recipeIngreInfoList: RecipeIngreInfoList) +check(ingred1: String, ingred2: String, ingred3: String): boolean
  • 23. 분석단계 클래스다이어그램(영문) StoreInfo -storeName: String -storeCode: String -storeAddress: String -storePhone: String SoldItemInfo -soldItemName: String -soldItemNum: int -soldItemCode: String -placeOfOrisin: String -price: double +SoldItemInfo() +SoldItemInfo(name: String, num: int, code: String, placeOfOrisin: String, price: double) +getSoldItemName(): String +getSoldItemNum(): int +getSoldItemCode(): String +getPlaceOfOrisin(): String +getPrice(): double +setSoldItemName(name: String) +setSoldItemNum(num: int) +setSoldItemCode(code: String) +setPlaceOfOrisin(placeOfOrisin: String) +setPrice(price: double) +StoreInfo() +StoreInfo(storeName: String, storeCode: String, storeAddress: String, storePhone: String) +getStoreName(): String +getStoreCode(): String +getStoreAddress(): String +getStorePhone(): String +setStoreName(storeName: String) +setStoreCode(storeCode: String) +setStoreAddress(storeAddress: String) +setStorePhone(storePhone: String) FoodInfo -foodCode: String -foodName: String -foodIntro: String -foodPhoto: String -foodCalorie: int +FoodInfo() +FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String) +FoodInfo(foodCode: String, foodName: String) +getFoodCode(): String +getFoodName(): String +getFoodIntro(): String +getFoodPhoto(): String +getFoodCalorie(): int +setFoodCode(foodCode: String) +setFoodName(foodName: String) +setFoodIntro(foodIntro: String) +setFoodPhoto(foodPhoto: String) +setFoodCalorie(foodCalorie: int)
  • 24. 로그인 요조숙녀~ 음식검색 뭐먹지? 레시피등록 주문내역확인 메인화면
  • 25. 검색 요조숙녀~ 음식검색 요리명 음식목록
  • 26. 요조숙녀~ 음식설명 요 리 명 : 짜장밥 재료 : 밥,춘장,돼지고기,양파,간장 조리시간 : 0시간 10분 0초 건강정보 : 서민의 음식! 재료주문 요리시작
  • 27. 요조숙녀~ 조리법 00:04:43.29 재료 잘게 깍뚝 썰고 청주, 소금 후추로 밑간한다. 이전 일시정지 시작 다음
  • 28. 레시피등록 레시피등록 음식 정보 음 식 이 름 : 음 식 칼 로 리 : 음 식 사 진 (경로) 음 식 :소 개 : 조리 정보 조 리 시 간 : 분 량 : 난 이 도 : 총 재 료 개 수 : 조 리 팁 : kcal sec 인분 개 사진가져오기 조리과정등록하기 재료등록하기 레시피등록하기 돌아가기
  • 29. 조리과정등록 조리과정등록 단계시간(초) 사진경로 사진선택 설 명 등록 완료
  • 30. 예시)볶음밥 재료 등록하기 돌아가기 재료1 재료명: 재료2 재료명: 재료3 재료명: 수량: 수량: 수량: 개(g) 개(g) 개(g) 재료등록
  • 31. 파일설계 CookingCourseListData.txt 조리과정 FoodInfoData.txt MemberInfoData.txt RecipeIngreInfoData.txt RecipeInfoData.txt StoreInfoList.txt StoreItemInfoList.txt 음식정보 회원정보 요리재료정보 요리정보 판매처정보 판매물품정보
  • 32. 파일설계 전체음식정보목록 파일형식 : *.txt 구분자 : 개행 파일명 : FoodInfoData 저장내용 : 음식코드, 음식명, 음식소개, 음식사진, 열량
  • 35. 클래스다이어그램 RegistRecipeActionListener OrderedRecordActionListener MainFrameUI RecipeRegistrationUI M C V LoginUI TodayEatUI LoginButtonActionListener FoodSearchActionListener SpecialRecommendFoodActionListener LoginCheckController LoginContorller LoginActionListener LoginJoinActionListener CheckActionListener JoinActionListener JoinUI CancelActionListener IdCheckController JoinDBController FoodSearchFrameUI FoodNameActionListener CategoryActionListener RecommandActionListener FoodNameSearchController SearchActionListener FoodNameFrameUI PhtotoActionListener PhotoController FoodInfoUI CategoryFrameUI CategorySearchActionListener ComboBoxStateListener IngredSrchActionListener FoodRecommendUI IngredSrchController IngredSrchBtnListener MoneySrchActionListener MoneySrchBtnListener MoneySrchController TodayController TodayActionListener OrderRecordListUI StepInputListener IngredientButtonListener RecipeInputListener RecipeCourseUI FileSelListener RegistListener EndButtonListener PhotoButtonController CookingCourseRegistController IngredientRegisterController IngredientRegisterListener IngredientInputUI RegisterDBController TempCookingCourseList CookingCourse RecipeIngreInfo FoodRecipeInfoList RecipeIngreInfoList FoodInfo RecipeInfo TempRecipeIngreInfoList FoodDAO FoodDTO FoodList FoodRecipeInfo FoodRecipeInfoList RecipeDAO RecipeDTO RecipeList CookingCourseList RecipeCourseDAO RecipeCourseDTO RecipeCourseList RecipeIngredientDAO RecipeIngredientDTO RecipeIngredientList IngredientDAO IngredientDTO IngredientList MemberInfoList ManagerInfo LoginInfo RecipeIngreInfo SoldItemInfo SoldItemInfoList RecipeIngreInfoList
  • 36. Data Loading - File FoodFileIO -cookingCourseListData: CookingCourseListData -recipeIngreInfoListData: RecipeIngreInfoListData -recipeInfoList: RecipeInfoList -foodInfoList: FoodInfoList +FoodFileIO() +FoodFileIO(cookingCourseListData: CookingCourseListData, recipeIngreInfoListData: RecipeIngreInfoListData, recipeIngoList: RecipeInfoList, foodInfoList: FoodInfoList) +getCookingCourseListData(): CookingCourseListData +getRecipeIngreInfoListData(): RecipeIngreInfoListData +getRecipeInfoList(): RecipeInfoList +getFoodInfoList(): FoodInfoList +setCookingCourseListData(cookingCourseListData: CookingCourseListData) +setRecipeIngreInfoListData(recipeIngreInfoListData: RecipeIngreInfoListData) +setRecipeInfoList(recipeInfoList: RecipeInfoList) +setFoodInfo(foodInfoList: FoodInfoList) +readFoodInfo() +load() RecipeIngreInfoListData -recipeIngreInfoListData: Collection<RecipeIngreInfoList> +RecipeIngreInfoListData() +RecipeIngreInfoListData(recipeIngreInfoListData: Collection<RecipeIngreInfoList>) +getRecipeIngreInfoList(): Collection<RecipeIngreInfoList> +setRecipeIngreInfoList(recipeIngreInfoListData: Collection<RecipeIngreInfoList>) +addRecipeIngreInfoList(recipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList +reviseRecipeIngreInfoList(searchRecipeIngreInfoList: RecipeIngreInfoList, changeRecipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList +removeRecipeIngreInfoList(recipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList +searchRecipeIngreIngoList(recipeIngreInfoList: RecipeIngreInfoList): RecipeIngreInfoList CookingCourseListData -cookingCourseListData: Collection<CookingCoureseList> +CookingCourseListData() +CookingCourseListData(cookingCourseListData: Collection<CookingCoureseList>) +getCookingCourseListData(): Collection<CookingCoureList> +setCookingCoureListData(cookingCourseListData: Collection<CookingCourseListData>) +addCookingCourseList(cookingCourseList) +reviseCookingCourseList(searchData, reviseData) +removeCookingCourseList(cookingCourseList) +searchCookingCourseList(cookingCourseList) RecipeInfoList -recipeInfoList: Collection<RecipeInfo> +RecipeInfoList() +RecipeInfoList(list: Collection<RecipeInfo>) +getRecipeInfoList(): Collection<RecipeInfo> +setRecipeInfoList(recipeInfoList: Collection<RecipeInfo>) +addRecipeInfoList(recipeInfo) +reviseRecipeInfoList(foodCode: String, recipeInfo) +removeRecipeInfoList(foodCode: String) +searchRecipeInfo(foodCode: String) +searchRecipeInfoList(foodName: String): Collection<RecipeInfo> FoodInfoList -foodInfoList: Collection<FoodInfo> +FoodInfoList() +FoodInfoList(list: Collection<FoodInfo>) +getFoodInfoList(): Collection<FoodInfo> +setFoodInfoList(list: Collection<FoodInfo>) +addFoodInfoList(foodInfo) +reviseFoodInfoList(foodCode: String, reviseData) +removeFoodInfoList(foodCode: String) +searchFoodInfo(foodCode: String) +searchFoodInfoList(foodName: String): Collection<FoodInfo> FoodRecipeInfoList +foodRecipeInfoList: Collection<FoodRecipeInfo> +getFoodRecipeInfoList(): Collection<FoodRecipeInfo> +setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) +addFoodRecipeInfoList(foodRecipeInfo) +reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo) +removeFoodRecipeInfoList(foodCode: String) +searchFoodRecipeInfo(foodCode: String) +searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> +searchTodayFood(keyword: String): Collection<FoodRecipeInfo> +searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo>
  • 37. FoodRecipeInfoList FoodFileIO Data Loading - File CookingCourseListData FoodInfoList RecipeIngreInfoListData RecipeInfoList
  • 38. Data Loading - DB RecipeCourseDAO -conn: Connection +RecipeCourseDAO() +getConn(): Connection +setConn(conn: Connection) -connect() +disconnect() +insert(courseLevel: int, recipeCode: int, recipeCoursePhoto: String, recipeCourseTime: int, recipeCourseIntro: String): int +selectAll(): RecipeCourseList +selectCourseLevelRecipeCode(courseLevel: int, recipeCode: int): RecipeCourseDTO +selectCourseLevel(courseLevel: int): RecipeCourseList +selectRecipeCode(recipeCode: int): RecipeCourseList +selectRecipeCoursePhoto(recipeCoursePhoto: String): RecipeCourseDTO +selectRecipeCourseTime(recipeCourseTime: int): RecipeCourseList +selectRecipeCourseIntro(recipeCourseIntro: String): RecipeCourseDTO +selectCourse(): CourseList +updateAll(courseLevel: int, recipeCode: int, recipeCoursePhoto: String, recipeCourseTime: int, recipeCourseIntro: String): int +updateRecipeCoursePhoto(courseLevel: int, recipeCode: int, recipeCoursePhoto: String): int +updateRecipeCourseTime(courseLevel: int, recipeCode: int, recipeCourseTime: int): int +updateRecipeCourseIntro(courseLevel: int, recipeCode: int, recipeCourseIntro: String): int +deleteAll(): int +deleteCourseLevel(courseLevel: int): int +deleteRecipeCode(recipeCode: int): int +deleteCourseLevelRecipeCode(courseLevel: int, recipeCode: int): int +deleteRecipeCourseTime(recipeCourseTime: int): int +deleteRecipeCourseIntro(recipeCourseIntro: String): int +deleteRecipeCoursePhoto(recipeCoursePhoto: String): int CourseDTO -foodCode: int -foodName: String -recipeCoursePhoto: String -recipeCourseTime: int -recipeCourseIntro: String +CourseDTO() +CourseDTO(foodCode: int, foodName: Stiring, recipeCoursePhoto: String, recipeCourseTime: int, recipeCourseIntro: String) +getFoodCode(): int +getFoodName(): String +getRecipeCoursePhoto(): String +getRecipeCourseTime(): int +getRecipeCourseIntro(): String +setFoodCode(foodCode: int) +setFoodName(foodName: String) +setRecipeCoursePhoto(recipeCoursePhoto: String) +setRecipeCourseTime(recipeCourseTime: int) +setRecipeCourseIntro(recipeCourseIntro: String) +toString(): String RecipeIngredientDAO -conn: Connection +RecipeIngredientDAO() -connect() +disconnect() +insert(recipeIngredientCode: int, ingredientCode: int, recipeCode: int, recipeIngredientNum: int): int +selectAll(): RecipeIngredientList +selectRecipeIngredientCode(recipeIngredientCode: int): RecipeIngredientDTO +selectIngredientCode(ingredientCode: int): RecipeIngredientList +selectRecipeCode(recipeCode: int): RecipeIngredientList +selectRecipeIngredientNum(recipeIngredientNum: int): RecipeIngredientList +selectMaxRecipeIngredientCode(): RecipeIngredientDTO +selectIngre(): RecipeIngreInfoDTOList +updateAll(recipeIngredientCode: int, ingredientCode: int, recipeCode: int, recipeIngredientNum: int): int +updateIngredientCode(recipeIngredientCode: int, ingredientCode: int): int +updateRecipeCode(recipeIngredientCode: int, recipeCode: int): int +updateRecipeIngredientNum(recipeIngredientCode: int, recipeIngredientNum: int): int +deleteAll(): int +deleteRecipeIngredientCode(recipeIngredientCode: int): int +deleteIngredientCode(ingredientCode: int): int +deleteRecipeCode(recipeCode: int): int +deleteRecipeIngredientNum(recipeIngredientNum: int): int +getConn(): Connection +setConn(conn: Connection) RecipeIngreInfoDTO -foodCode: int -foodName: String -ingredientName: String -ingredientCode: int -ingredientNum: int +RecipeIngreInfoDTO() +RecipeIngreInfoDTO(foodCode: int, foodName: String, ingredientName: String, ingredientCode: int, ingredientNum: int) +getFoodCode(): int +getFoodName(): String +getIngredientName(): String +getIngredientCode(): int +getIngredientNum(): int +setFoodCode(foodCode: int) +setFoodName(foodName: String) +setIngredientName(ingredientName: String) +setIngredientCode(ingredientCode: int) +setIngredientNum(ingredient: int) +toString(): String FoodRecipeDBManager -cokkingCourseListData: CookingCourseListData -recipeIngreInfoListData: RecipeIngreInfoListData -recipeInfoList: RecipeInfoList -foodInfoList: FoodInfoList +FoodRecipeDBManager() +FoodRecipeDBManager(cookingCourseListData: CookingCourseListData, recipeIngreInfoListData: RecipeIngreInfoListData, recipeInfoList: RecipeInfoList, foodInfoList: FoodInfoList) +getCookingCourseListData(): CookingCourseListData +getRecipeIngreInfoListData(): RecipeIngreInfoListData +getRecipeInfoList(): RecipeInfoList +getFoodInfoList(): FoodInfoList +setCookingCourseListData(cookingCourseListData: CookingCourseListData) +setRecipeIngreInfoListData(recipeIngreInfoListData: RecipeIngreInfoListData) +setRecipeInfoList(recipeInfoList: RecipeInfoList) +setFoodInfoList(foodInfoList: FoodInfoList) +readFoodInfo() +readCookingCourse() +readIngredient() +readRecipe() +load() FoodRecipeInfoList -foodRecipeInfoList: Collection<FoodRecipeInfo> +getFoodRecipeInfoList(): Collection<FoodRecipeInfo> +setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) +addFoodRecipeInfoList(foodRecipeInfo: FoodRecipeInfo) +reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo: FoodRecipeInfo): FoodRecipeInfo +removeFoodRecipeInfoList(foodCode: String): FoodRecipeInfo +searchFoodRecipeInfo(foodCode: String): FoodRecipeInfo +searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> +searchTodayFood(keyword: String): Collection<FoodRecipeInfo> +searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo>
  • 39. FoodRecipeInfoList Data Loading - DB FoodRecipeDBManager RecipeIngreInfoDAO CourseDAO RecipeIngredientDTO RecipeCourseDTO
  • 40. MVC 구조 음식추천받기(오늘 뭐먹지?) TodayEatUI -text: JTextField +TodayEatUI() +TodayEatUI(text: JTextField) +showUI() +getText(): JTextField +setText(text: JTextField) TodayController +TodayController() +TodayController(foodName: String) +verifyFoodName(): Collection<FoodRecipeInfo> +getFoodName(): String +setFoodCode(foodName: String) PhotoController -foodName: String -foodCode: String +PhotoController() +PhotoController(foodCode: String) +verifyFoodCode(): FoodRecipeInfo +getFoodCode(): String +setFoodCode(foodCode: String) TodayActionListener -frame: JFrame -text: JTextField -scrollPane: JScrollPane +TodayActionListener() +TodayActionListener(frame: JFrame, text: JTextField, scrollPane: JScrollPane) +actionPerforemd(e: ActionEvent) +showResult() +getFrame(): JFrame +getText(): JTextField +getScrollPane(): JScrollPane +setFrame(frame: JFrame) +setText(text: JTextField) +setScrollPane(scrollPane: JScrollPane) PhtotoActionListener -text: String +PhtotoActionListener() +PhtotoActionListener(text: String) +actionPerformed(e: ActionEvent) +moveUI() +getText(): String +setText(text: String) FoodRecipeInfoList -foodRecipeInfoList: Collection<FoodRecipeInfo> +getFoodRecipeInfoList(): Collection<FoodRecipeInfo> +setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) +addFoodRecipeInfoList(foodRecipeInfo) +reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo) +removeFoodRecipeInfoList(foodCode: String) +searchFoodRecipeInfo(foodCode: String) +searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> +searchTodayFood(keyword: String): Collection<FoodRecipeInfo> +searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo> FoodRecipeInfo -foodInfo: FoodInfo -recipeInfo: RecipeInfo +FoodRecipeInfo() +FoodRecipeInfo(foodInfo, recipeInfo) +getFoodInfo() +getRecipeInfo() +setFoodinfo(foodInfo) +setRecipeInfo(recipeInfo) FoodInfo -foodCode: String -foodName: String -foodIntro: String -foodPhoto: String -foodCalorie: int +FoodInfo() +FoodInfo(foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) +FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) +getFoodCode(): String +getFoodName(): String +getFoodIntro(): String +getFoodPhoto(): String +getFoodCalorie(): int +setFoodCode(foodCode: String) +setFoodName(foodName: String) +setFoodIntro(foodIntro: String) +setFoodPhoto(foodPhoto: String) +setFoodCalorie(foodCalorie: int)
  • 41. MVC 구조 레시피등록 +RecipeRegistrationUI() +RecipeRegistrationUI(foodName: String, foodCalorie: int, foodPhoto: String, foodIntro: String, cookingTotalTime: int, porton: int, level: String[], totalIngredient: int, tip: String) +createContentPane(): Container +showUI() +getFrame(): JFrame +getFoodName(): JTextField +getFoodCalorie(): JTextField +getFoodPhoto(): JTextField +getFoodIntro(): JTextArea +getCookingTotalTime(): JTextField +getPorton(): JTextField +getLevelComboBox(): JComboBox<String> +getTotalIngredient(): JTextField +getTip(): JTextArea +setFrame(frame: JFrame) +setFoodName(foodName: JTextField) +setFoodCalorie(foodCalorie: JTextField) +setFoodPhoto(foodPhoto: JTextField) +setFoodIntro(foodIntro: JTextArea) +setCookingTotalTime(cookingTotalTime: JTextField) +setPorton(porton: JTextField) +setLevelComboBox(levelComboBox: JComboBox<String>) +setTotalIngredient(totalIngredient: JTextField) +setTip(tip: JTextArea) RecipeInputListener +frame: JFrame +foodName: JTextField +foodCalorie: JTextField +foodPhoto: JTextField +foodIntro: JTextArea +cookingTotalTime: JTextField +porton: JTextField +levelComboBox: JComboBox<String> +totalIngredient: JTextField +tip: JTextArea RecipeRegistrationUI -frame: JFrame -foodName: JTextField -foodCalorie: JTextField -foodPhoto: JTextField -foodIntro: JTextArea -cookingTotalTime: JTextField -porton: JTextField -levelComboBox: JComboBox<String> -totalIngredient: JTextField -tip: JTextArea +RecipeInputListener() +RecipeInputListener(frame: JFrame, foodName: JTextField, foodCalorie: JTextField, foodPhoto: JTextField, foodIntro: JTextArea, cookingTotalTime: JTextField, porton: JTextField, levelComboBox: JComboBox<String>[], totalIngredient: JTextField, tip: JTextArea) +actionPerformed(e: ActionEvent) +Register() +getFrame(): JFrame +getFoodName(): JTextField +getFoodCalorie(): JTextField +getFoodPhoto(): JTextField +getFoodIntro(): JTextArea +getCookingTotalTime(): JTextField +getPorton(): JTextField +getLevelComboBox(): JComboBox<String> +getTotalIngredient(): JTextField +getTip(): JTextField +setFrame(frame: JFrame) +setFoodName(foodName: JTextField) +setFoodCalorie(foodCalorie: JTextField) +setFoodPhoto(foodPhoto: JTextField) +setFoodIntro(foodIntro: JTextArea) +setCookingTotalTime(cookingTotalTime: JTextField) +setPorton(porton: JTextField) +setLevelComboBox(levelComboBox: JComboBox<String>) +setTotalIngredient(totalIngredient: JTextField) +setTip(tip: JTextArea) FoodInfo -foodCode: String -foodName: String -foodIntro: String -foodPhoto: String -foodCalorie: int +FoodInfo() +FoodInfo(foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) +FoodInfo(foodCode: String, foodName: String, foodIntro: String, foodPhoto: String, foodCalorie: int) +getFoodCode(): String +getFoodName(): String +getFoodIntro(): String +getFoodPhoto(): String +getFoodCalorie(): int +setFoodCode(foodCode: String) +setFoodName(foodName: String) +setFoodIntro(foodIntro: String) +setFoodPhoto(foodPhoto: String) +setFoodCalorie(foodCalorie: int) RecipeInfo -foodName: String -cookingTotalTime: int -tip: String -portion: int -level: Level <<enum>> -foodCode: String -cookingCourseList: CookingCourseList -recipeIngreInfoList: RecipeIngreInfoList +RecipeInfo() +RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level, cookingCourseList, recipeIngreInfoList) +RecipeInfo(foodName: String, cookingTotalTime: int, tip: String, portion: int, level, foodCode: String, cookingCourseList, recipeIngreInfoList) +getFoodeName(): String +getCookingTotalTime(): int +getTip(): String +getPortion(): int +getLevel(): Level +getFoodCode(): String +getCookingCourseList() +getRecipeIngreInfoList() +setFoodName(foodName: String) +setCookingTotalTime(cookingTotalTime: int) +setTip(tip: String) +setPortion(portion: int) +setLevel(level: Level) +setFoodCode(foodCode: String) +setCookingCourseList(cookingCourseList) +setIngredientInfoList(recipeIngreInfoList) +check(ingred1: String, ingred2: String, ingred3: String): boolean TempCookingCourseList +cookingCourseList: Collection<CookingCourse> +foodName: String +foodCode: String +getCookingCourseList(): Collection<CookingCourse> +getFoodName(): String +getFoodCode(): String +setCookingCourseList(list: Collection<CookingCourse>) +setFoodName(foodName: String) +setFoodCode(foodCode: String) +searchCookingCourse(step: int) +addCookingCourse(cookingCourse) +addCookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) +searchCookingCourse(step: int) +searchCookingCourse(cookingCourse) +removeCookingCourse(cookingCourse) +removeCookingCourse(step: int) +reviseCookingCourse(searchData, reviseData) +reviseCookingCourseList(step: int, reviseData) CookingCourseList -cookingCourseList: Collection<CookingCourse> -foodName: String -foodCode: String +CookingCourseList() +CookingCourseList(foodName: String, foodCode: String) +CookingCourseList(cookingCourseList: Collection<CookingCourse>, foodName: String, foodCode: String) +getCookingCourseList(): Collection<CookingCourse> +getFoodName(): String +getFoodCode(): String +setCookingCourseList(list: Collection<CookingCourse>) +setFoodName(foodName: String) +setFoodCode(foodCode: String) +searchCookingCourse(step: int) +addCookingCourse(cookingCourse) +addCookingCourse(cookingPhoto: String, cookingTime: int, cookingInst: String) +searchCookingCourse(step: int) +searchCookingCourse(cookingCourse) +removeCookingCourse(cookingCourse) +removeCookingCourse(step: int) +reviseCookingCourse(searchData, reviseData) +reviseCookingCourseList(step: int, reviseData) RecipeIngreInfoList -foodName: String -foodCode: String -recipeIngreInfoList: Collection<RecipeIngreInfo> +RecipeIngreInfoList() +RecipeIngreInfoList(foodName: String, foodCode: String, recipeIngreInfoList: Collection<RecipeIngreInfo>) +getFoodName(): String +getFoodCode(): String +getRecipeIngreInfoList(): Collection<RecipeIngreInfo> +setFoodName(foodName: String) +setFoodCode(foodCode: String) +setRecipeInfoList(recipeIngreInfoList: Collection<RecipeIngreInfo>) +addRecipeIngreInfoList(recipeIngreInfo) +reviseRecipeIngreInfoList(ingredientCode: String, recipeIngreInfo) +removeRecipeIngreInfoList(ingredientCode: String) +searchRecipeIngreInfo(ingredientCode: String) +searchRecipeIngreInfoList(ingredientName: String): Collection<RecipeIngreInfo> +searchRecipeIngreInfo(ingredientName: String) TempRecipeIngreInfoList +foodName: String +foodCode: String +recipeIngreInfoList: Collection<RecipeIngreInfo> +getFoodName(): String +getFoodCode(): String +getRecipeIngreInfoList(): Collection<RecipeIngreInfo> +setFoodName(foodName: String) +setFoodCode(foodCode: String) +setRecipeInfoList(recipeIngreInfoList: Collection<RecipeIngreInfo>) +addRecipeIngreInfoList(recipeIngreInfo) +reviseRecipeIngreInfoList(ingredientCode: String, recipeIngreInfo) +removeRecipeIngreInfoList(ingredientCode: String) +searchRecipeIngreInfo(ingredientCode: String) +searchRecipeIngreInfoList(ingredientName: String): Collection<RecipeIngreInfo> +searchRecipeIngreInfo(ingredientName: String) FoodRecipeInfo -foodInfo: FoodInfo -recipeInfo: RecipeInfo +FoodRecipeInfo() +FoodRecipeInfo(foodInfo, recipeInfo) +getFoodInfo() +getRecipeInfo() +setFoodinfo(foodInfo) +setRecipeInfo(recipeInfo) FoodRecipeInfoList -foodRecipeInfoList: Collection<FoodRecipeInfo> +getFoodRecipeInfoList(): Collection<FoodRecipeInfo> +setFoodRecipeInfoList(foodRecipeInfoList: Collection<FoodRecipeInfo>) +addFoodRecipeInfoList(foodRecipeInfo) +reviseFoodRecipeInfoList(foodCode: String, foodRecipeInfo) +removeFoodRecipeInfoList(foodCode: String) +searchFoodRecipeInfo(foodCode: String) +searchFoodRecipeInfoList(foodName: String): Collection<FoodRecipeInfo> +searchTodayFood(keyword: String): Collection<FoodRecipeInfo> +searchFoodRecipeInfoList(ingred1: String, ingred2: String, ingred3: String): Collection<FoodRecipeInfo> RegisterDBController -foodInfo: FoodInfo -recipeInfo: RecipeInfo +RegisterDBController() +RegisterDBController(foodName: JTextField, foodCalorie: JTextField, foodPhoto: JTextField, foodIntro: JTextField, cookingTotalTime: JTextField, portion: JTextField, levelComboBox: JComboBox<String>, totalIngredient: JTextField, tip: :JTextArea) +register() +getFoodInfo() +getRecipeInfo() +setFoodInfo(foodInfo: FoodInfo) +setRecipeInfo(recipeInfo: RecipeInfo)
  • 42. SequenceDiagram(레시피등록 ) RegiserDBController RecipeInfo CookingCourseList FoodRecipeInfoList FoodDAO RecipeDAO RecipeCourseDAO RecipeIngredientDAO RecipeIngredientDTO sd데이터베이스 저장 sd for문 sd for문 23 : addFoodRecipeInfo(foodRecipeInfo:FoodRecipeInfo) <<create>> 24 25 : insert() 26 : disconnect() <<create>> 27 28 : insert() 29 : CookingCourseList := getCookingCourseList() 30 : Collection<CookingCourse>:=getCookingCourseList() <<create>> 31 32 : insert() 33 : disconnect() <<create>> 34 35 : Collection<RecipeIngreInfo>:=getRecipeIngreInfoList() 36 : RecipeIngredientDTO := selectMaxRecipeIngredientCode() 37 : int := getRecipeIngredientCode() 38 : insert() 39 : disconnect() 23번, static 클래스(음식조리정보리스트)에 저장 36번, 37번 가장 낮은 음식코드 불러온다. 레시피 등록 버튼 리스너 RecipeInputListener 레시피 정보 조리과정목록 음식조리정보리스트 음식 DAO 조리법 DAO 조리과정DAO 조리재료 DAO 조리재료 DTO 21 : register()
  • 43. : 사용자 음식추천받기UI 음식추천받기 리스너 음식추천받기 콘트롤러 음식조리법정보리스트 음식정보 및 사진 출력리스너 음식정보 및 사진 콘트롤러 TodayEatUI TodayActionListener TodayController FoodRecipreInfoList PhtoActionListener PhotoController FoodInfoUI 1 : 본인의기분 또는 날씨 등을 입력 후 검색 요청() 2 : void := actionPerformed(e:ActionEvent) 3 : showResult() <<create>> 4 5 : Collection<FoodRecipeInfo> := verifyFoodName() 조건에 맞는 음식정보, 조리법 정보를 for문을 이용하여 패널에 각종 정보를 넣기 시작 6 : Collection<FoodRecipeInfo> := searchFoodRecipeList(foodName:String) 7 : 음식 사진 클릭() 8 : void := actionPerformed(e:ActionEvent) 음식코드에 맞는 UI 생성하기 9 : moveUI() <<create>> 10 11 : FoodRecipeInfo := searchFoodRecipeList(foodCode:String) 12 : FoodInfo := verifyFoodCode() TodayController객체 생성시, 사용자가 입력한 검색값 중 첫번째 문자만으로 객체를 생성한다. <<create>> 13 검색값이 존재하는 경우 14 : void := showUI() 음식정보UI SequenceDiagram(음식추천받기 )

Editor's Notes

  1. 1. 안녕하세요. 요리하고 조리하는 숙녀들을 위한 프로그램 “요조숙녀”의 발표할 PloyMen’s의 팀입니다. 발표에 앞서 팀원 소개를 하겠습니다. 팀장 장성봉입니다. ….. 지금부터 요조숙녀 프로그램에 대한 발표를 시작하도록 하겠습니다.
  2. 2. 발표는 개요, 설계, 시연 순으로 발표를 하겠습니다.
  3. 3. 먼저 “요조숙녀”프로그램에 대해서 간단히 소개하자면 “요조숙녀” 프로그램은 요리 할 때 메뉴선정/ 요리법/ 재료구매에 어려움을 겪는 사람들을 돕기 위한 프로그램입니다.
  4. 4. 요조숙녀 프로그램은 JAVA Standard edition 과 10g 기반으로 개발 되었으며, 개발 툴로 ERWIN과 StarUml, Edit plus를 이용하였습니다.
  5. 5. 다음은 “요조숙녀” 프로그램의 개발 일정입니다. 먼저 4월 2주에서 4주까지 file기반의 1차 프로젝트 개발을 진행하였으며, 5월에 9일부터 15일 까지 5일간 데이터베이스를 기반으로 프로그램 refactoring을 하였습니다.
  6. 6. 개발 업무는 보시는 것과 같이 업무총괄, 클래스 다이어그램 관리, 문서관리, 코드통합으로 분담하였습니다.
  7. 7. 프로그램 개발에 앞서, 이수 역 근처 백화점 및 시장에서 20~60대 까지의 여성을 주 대상으로 83명의 시민들에게 설문조사를 실시하였습니다. 또한 공신력 있는 사이트의 추천을 기준으로 Web site와 application을 선정하여 벤치마킹 작업을 하였습니다.
  8. 8. 설문조사 결과 총 83명의 대상들 중에서 92%(78명)가 요리를 할 때. 어려움을 겪고 있었습니다.
  9. 9. 그리고 어려움을 겪는 대상들은, 메뉴선정에 가장 어려움을 겪으며 이어서 요리법, 식 재료 구입 순으로 어려움을 겪는 것으로 조사결과가 나왔습니다.
  10. 10. 해당 조사의 결과를 바탕으로 어려움을 겪는 대상들이 요리 도우미가 있다면 실제로 어떤 서비스를 제공 받고 싶은지 조사하였습니다. 그 결과 49%가 요리법제공 서비스를 희망하였고, 20%가 음식메뉴 선정 서비스를 희망하였습니다. 저희 팀은 이 설문조사 결과를 토대로 사용자의 Needs를 확인할 수 있었습니다.
  11. 11. 설문조사 다음으로 Web Site와 Application을 대상으로 벤치마킹 작업을 하였습니다. 대상은 WebSite 6개와 Application 2개 였으며, 총 27개의 서비스 기능을 벤치마킹 하였습니다.
  12. 12. 벤치마킹을 토대로 요조숙녀 프로그램은 서비스를 크게 기본서비스와 특화서비스를 제공합니다. 로그인, 회원가입 등 6개의 서비스를 기본서비스로 제공하며, 스탑워치 기능을 특화기능으로 제공합니다.
  13. 13. 다음으로 요구사항 정의서를 토대로 명사와 동사를 키 추출하였고, 키 추출 결과에서 엑터 후보와 유즈케이스 후보를 추출하였습니다.
  14. 14. 엑터와 유즈케이스는 화면에 보이는 것과 같이 선정되었습니다. 사용자는 ‘회원가입’, ‘음식 명으로 검색’ 을 비롯한 10개의 서비스를 받을 수 있습니다. 단, 음식정보 등록과 주문내역 확인은 로그 인이 되어야만 서비스를 제공 받을 수 있습니다.
  15. 15.유즈케이스 정의서 입니다. 대표적인 유즈케이스 2개를 소개 하도록 하겠습니다. 첫번째 유즈케이스는 음식추천 받기 입니다. 1)사용자가 음식추천 받기를 요청합니다. 2)시스템의 사용자의 요청에 따라 키워드 입력을 요청합니다. 3)사용자는 키워드를 입력하고 음식추천 받기를 요청합니다. 4)시스템은 입력된 키워드에 따른 검색결과를 보여주고 유즈케이스를 종료합니다.
  16. 16. 두번쨰 유즈케이스는 음식정보 등록입니다. 1)사용자가 음식정보 등록을 요청하면, 2) 시스템은 음식정보와 조리정보입력을 요청합니다. 3)사용자는 음식정보와 조리정보를 입력하고 조리과정등록을 요청할 수 있습니다. 4)사용자가 조리과정 등록을 요청하면 5)시스템은 조리과정등록정보 입력을 요청하비다. 6) 사용자는 조리과정 등록정보를 입력하고 완료를 선택합니다. 7)조리과정 등록정보입력을 완료하면 재료를 등록할 수 있습니다. 8) 사용자가 재료등록하기를 요청하면 시스템은 재료정보입력을 요청합니다. 9) 사용자가 재료정보를 입력하고등록하기를 선택하면 시스템은 재료등록을하고 usecase를 종료합니다.  
  17. 다음은 저희조의 구체적인 동.명사 추출과정에 대해 설명드리겠습니다. 해당화면은 저희조의 usecase 정의서에서 추출한 명사,동사 목록입니다. Key추출을통하여 , 750여개의 명사와 150여개의 동사를 추출하였습니다. 보시는 것처럼 음식정보와 같은 명사는 class후보로, 찾다 와 같은 동사는 목적어에 해당하는 메소드후보로 추출하였습니다. 이러한 과정을 통하여 클래스후보군과 멤버필드 후보군 메소드 후보군을 추출하였습니다.
  18. 다음으로 한글 분석단계 class 다이어그램입니다. 최종클래스 후보군을 통하여, 보시는바와 같이 총 15개의 클래스를 설계하였습니다. 최종후보군에 들어있던 음식정보 명사를 통해 음식정보 클래스를 설계하였스며, 단위,난위도와 같은 명사들은 멤버필드로 배치하였습니다. 저희조는 한글분석단계 다이어그램에서는 클래스와 멤버필드의 설계만 하였으며, 영문화 분석단계 클래스 다이어그램에서 메소드를 설계하였습니다.
  19. 다음으로 영문 분석단계 클래스 다이어그램입니다. 여기서는 가장 중요하고 기본이 되는 7개의 클래스들에 대해 설명드리겠습니다. 처음으로 memberInfo 클래스 입니다. 명사 회원을 통하여 캡슐화한 클래스로, 이름,아이디,비밀번호,주소,연락처,우편번호를 멤버필드로 배치하였습니다. 기본 정보클래스로 get/set메소드로만 구성하였습니다. 물론 이 메소드들고, 이름을 검색하다, 주소를 입력하다와 같은 추출된 동사를 통해 근거있게 배치하였습니다. 다음은 판매물품 정보를 가지고잇는 soldItemInfo클래스,판매처의 정보를 가지고있는 storeInfo클래스, 음식정보를 가지고있는 foodInfo클래스입니다. 앞서 설명은 memberInfo클래스와 같은 원리로 설계하였습니다. 다음은 1가지의 재료정보를 가지고있는 recipeIngreInfo클래스, 조리과정 한단계를 가지고있는 cookingCourse클래스입니다. 캡슐화 원리는 앞선 클래스들과 같으나, 한음식에 대해, 여러조리과정과, 여러 재료를 포함하고있는 레시피정보를 추상화하기위해, recipeInfo클래스를 설계하였습니다. 이 클래스는 여러 기본 정보필드들과 함께, 해당음식의 여러 조리단계와, 여러 재료를 캡슐화하고있습니다. 또한 이클래스는 기본정보클래스가 아니기때문에, check라는 특별한 메소드가 존재합니다. 해당메소드는 3개의 재료를 입력받아, 해당 음식 레시피에 그 재료가있으면 ,true를, 없으면 false를 리턴해주는 메소드입니다. Usecase정의서의 재료를 찾다 라는 동사를 배치한 메소드입니다.
  20. 다음으로 영문 분석단계 클래스 다이어그램입니다. 여기서는 가장 중요하고 기본이 되는 7개의 클래스들에 대해 설명드리겠습니다. 처음으로 memberInfo 클래스 입니다. 명사 회원을 통하여 캡슐화한 클래스로, 이름,아이디,비밀번호,주소,연락처,우편번호를 멤버필드로 배치하였습니다. 기본 정보클래스로 get/set메소드로만 구성하였습니다. 물론 이 메소드들고, 이름을 검색하다, 주소를 입력하다와 같은 추출된 동사를 통해 근거있게 배치하였습니다. 다음은 판매물품 정보를 가지고잇는 soldItemInfo클래스,판매처의 정보를 가지고있는 storeInfo클래스, 음식정보를 가지고있는 foodInfo클래스입니다. 앞서 설명은 memberInfo클래스와 같은 원리로 설계하였습니다. 다음은 1가지의 재료정보를 가지고있는 recipeIngreInfo클래스, 조리과정 한단계를 가지고있는 cookingCourse클래스입니다. 캡슐화 원리는 앞선 클래스들과 같으나, 한음식에 대해, 여러조리과정과, 여러 재료를 포함하고있는 레시피정보를 추상화하기위해, recipeInfo클래스를 설계하였습니다. 이 클래스는 여러 기본 정보필드들과 함께, 해당음식의 여러 조리단계와, 여러 재료를 캡슐화하고있습니다. 또한 이클래스는 기본정보클래스가 아니기때문에, check라는 특별한 메소드가 존재합니다. 해당메소드는 3개의 재료를 입력받아, 해당 음식 레시피에 그 재료가있으면 ,true를, 없으면 false를 리턴해주는 메소드입니다. Usecase정의서의 재료를 찾다 라는 동사를 배치한 메소드입니다.
  21. 다음으로 영문 분석단계 클래스 다이어그램입니다. 여기서는 가장 중요하고 기본이 되는 7개의 클래스들에 대해 설명드리겠습니다. 처음으로 memberInfo 클래스 입니다. 명사 회원을 통하여 캡슐화한 클래스로, 이름,아이디,비밀번호,주소,연락처,우편번호를 멤버필드로 배치하였습니다. 기본 정보클래스로 get/set메소드로만 구성하였습니다. 물론 이 메소드들고, 이름을 검색하다, 주소를 입력하다와 같은 추출된 동사를 통해 근거있게 배치하였습니다. 다음은 판매물품 정보를 가지고잇는 soldItemInfo클래스,판매처의 정보를 가지고있는 storeInfo클래스, 음식정보를 가지고있는 foodInfo클래스입니다. 앞서 설명은 memberInfo클래스와 같은 원리로 설계하였습니다. 다음은 1가지의 재료정보를 가지고있는 recipeIngreInfo클래스, 조리과정 한단계를 가지고있는 cookingCourse클래스입니다. 캡슐화 원리는 앞선 클래스들과 같으나, 한음식에 대해, 여러조리과정과, 여러 재료를 포함하고있는 레시피정보를 추상화하기위해, recipeInfo클래스를 설계하였습니다. 이 클래스는 여러 기본 정보필드들과 함께, 해당음식의 여러 조리단계와, 여러 재료를 캡슐화하고있습니다. 또한 이클래스는 기본정보클래스가 아니기때문에, check라는 특별한 메소드가 존재합니다. 해당메소드는 3개의 재료를 입력받아, 해당 음식 레시피에 그 재료가있으면 ,true를, 없으면 false를 리턴해주는 메소드입니다. Usecase정의서의 재료를 찾다 라는 동사를 배치한 메소드입니다.
  22. 다음으로 영문 분석단계 클래스 다이어그램입니다. 여기서는 가장 중요하고 기본이 되는 7개의 클래스들에 대해 설명드리겠습니다. 처음으로 memberInfo 클래스 입니다. 명사 회원을 통하여 캡슐화한 클래스로, 이름,아이디,비밀번호,주소,연락처,우편번호를 멤버필드로 배치하였습니다. 기본 정보클래스로 get/set메소드로만 구성하였습니다. 물론 이 메소드들고, 이름을 검색하다, 주소를 입력하다와 같은 추출된 동사를 통해 근거있게 배치하였습니다. 다음은 판매물품 정보를 가지고잇는 soldItemInfo클래스,판매처의 정보를 가지고있는 storeInfo클래스, 음식정보를 가지고있는 foodInfo클래스입니다. 앞서 설명은 memberInfo클래스와 같은 원리로 설계하였습니다. 다음은 1가지의 재료정보를 가지고있는 recipeIngreInfo클래스, 조리과정 한단계를 가지고있는 cookingCourse클래스입니다. 캡슐화 원리는 앞선 클래스들과 같으나, 한음식에 대해, 여러조리과정과, 여러 재료를 포함하고있는 레시피정보를 추상화하기위해, recipeInfo클래스를 설계하였습니다. 이 클래스는 여러 기본 정보필드들과 함께, 해당음식의 여러 조리단계와, 여러 재료를 캡슐화하고있습니다. 또한 이클래스는 기본정보클래스가 아니기때문에, check라는 특별한 메소드가 존재합니다. 해당메소드는 3개의 재료를 입력받아, 해당 음식 레시피에 그 재료가있으면 ,true를, 없으면 false를 리턴해주는 메소드입니다. Usecase정의서의 재료를 찾다 라는 동사를 배치한 메소드입니다.
  23. 다음으로 영문 분석단계 클래스 다이어그램입니다. 여기서는 가장 중요하고 기본이 되는 7개의 클래스들에 대해 설명드리겠습니다. 처음으로 memberInfo 클래스 입니다. 명사 회원을 통하여 캡슐화한 클래스로, 이름,아이디,비밀번호,주소,연락처,우편번호를 멤버필드로 배치하였습니다. 기본 정보클래스로 get/set메소드로만 구성하였습니다. 물론 이 메소드들고, 이름을 검색하다, 주소를 입력하다와 같은 추출된 동사를 통해 근거있게 배치하였습니다. 다음은 판매물품 정보를 가지고잇는 soldItemInfo클래스,판매처의 정보를 가지고있는 storeInfo클래스, 음식정보를 가지고있는 foodInfo클래스입니다. 앞서 설명은 memberInfo클래스와 같은 원리로 설계하였습니다. 다음은 1가지의 재료정보를 가지고있는 recipeIngreInfo클래스, 조리과정 한단계를 가지고있는 cookingCourse클래스입니다. 캡슐화 원리는 앞선 클래스들과 같으나, 한음식에 대해, 여러조리과정과, 여러 재료를 포함하고있는 레시피정보를 추상화하기위해, recipeInfo클래스를 설계하였습니다. 이 클래스는 여러 기본 정보필드들과 함께, 해당음식의 여러 조리단계와, 여러 재료를 캡슐화하고있습니다. 또한 이클래스는 기본정보클래스가 아니기때문에, check라는 특별한 메소드가 존재합니다. 해당메소드는 3개의 재료를 입력받아, 해당 음식 레시피에 그 재료가있으면 ,true를, 없으면 false를 리턴해주는 메소드입니다. Usecase정의서의 재료를 찾다 라는 동사를 배치한 메소드입니다.
  24. 파일설계, DB설계, MVC구조 설명을 맡은 김영한입니다. 1) CookingCourseListData 텍스트파일부터 StoreItemInfoList 파일까지 총 7개의 텍스트파일에 2) 조리과정, 음식정보, 회원정보, 요리재료정보, 요리정보, 판매처정보, 판매물품정보를 저장하도록 설계하였습니다.
  25. FoodInfoData 파일은 .txt 파일 형식을 갖고 음식코드, 음식명, 음식소개, 음식사진, 열량의 데이터를 개행으로 구분하여 저장되어있습니다. 나머지 여섯개의 파일도 같은 형식으로 저장되어있습니다.
  26.   다음으로 DB설계에 대해서 설명 드리겠습니다. 저희는 분석단계 클래스다이어그램을 토대로 주요 entity를 결정하고 엔티티 간의 관계를 맺는 과정에서 정규화를 통해 데이터의 중복을 최소화하고 데이터의 안정성을 주었습니다. 음식을 중심으로 개체를 살펴보겠습니다. 음식은 음식분류와 레시피의 부모테이블로 음식코드를 기본키로 갖고 음식이름, 소개,사진,열량,아이디를 갖고 있습니다. 음식은 음식분류를 여러 개 갖을 수 있다고 생각하여 일대 다 관계를 맺었고 음식과 레시피의 관계에서는 하나의 음식에 하나의 레시피를 갖기 위해 일대일 관계를 맺었습니다. 그래서 음식분류와 레시피에는 음식코드를 Foreign key로 갖고 있습니다. 레시피는 조리과정과 조리재료의 부모테이블로 레시피 코드를 기본키로 갖고 음식코드, 전체 요리시간, 도움말, 난이도, 분량을 갖고 있습니다. 레시피는 조리과정을 여러 개 갖을 수도 있지만 갖지 않을 수 있다하여 일대다 관계를 맺었고 레시피와 조리재료 관계에서 레시피는 여러 조리재료를 갖을 수 있기 때문이 일대다 관계로 정했습니다.
  27. 물리적 설계에서 테이블명, 데이터 타입, 제약조건을 정했습니다. 모든 데이터는 NOT NULL제약 조건이고 FOOD _TB에 칼로리는 음수가 되지 않도록 CHECK제약 조건을 갖고 있습니다. Recipe_tb에서는 조리시간이 음수가 되지 않도록하고, recipeLevel은 ‘어려움’, ‘보통’, ‘쉬움’ 중에 하나가 입력되도록하고, 분량은 양수, foodCode는 음식테이블과 일대일 관계이기 때문에 foreign key이면서 unique 제약조건을 걸었습니다. RecipeCourse_tb에서 CourseLevel은 양수이고, RecipeCourseTime은 음수가 되지 않도록 하고 RecipeIngredient_tb에서 재료의 수량을 양수로 했습니다.
  28.  지금부터 M . V . C 구조에 대해서 설명하겠습니다.
  29. File으로 데이터를 읽어오는 구조 입니다.
  30. FoodFileIo는 데이터를 파일에서 읽어와 RecipeIngreInfoListData와 CookingCourseListData를 이용해서 RecipeInfoList를 만들고 RecipeInfoList와 FoodInfoList를 이용하여 FoodRecipeInfoList에 저장하게 됩니다.
  31.   데이터베이스에서 데이터가 로딩되는 과정입니다.
  32.  RecipeIngredientDAO와 RecipeIngreInfoDTO를 이용하여 데이터베이스에서 조리재료의 데이터를 가져오고 RecipeCourseDAO와 CourseDTO를 이용하여 조리과정의 데이터를 가져오게 됩니다. 데이터베이스에서 가져온 자료들은 FoodRecipeDBmanager를 통해 static클래스인 FoodRecipeInfoList에 저장되게 됩니다. 프로그램 최초 시작 시 로딩되는 데이터로 static 리스트에 데이터를 한번에 읽어와 저장하여 데이터에 빠르게 접근할 수 있도록 했습니다.
  33.  PT순서 FoodRecipeInfo -> FoodRecipeInfoList -> TodayController -> PhotoController 1.첫 번째로 음식추천 기능입니다. FoodRecipeInfo 클래스는 하나의 음식정보를 가지고 있는FoodInfo클래스와 그 요리에 대한 조리법을 가지고 있는 RecipeInfo클래스를 필드로 가지고 있습니다. FoodRecipeInfoList 클래스는 FoodRecipeInfo 클래스를 리스트 형태로 가지고 있는 클래스로 이전에 설명드린 데이터베이스에서 가져온 모든 음식에 대한 정보와 조리법에 대한 정보를 가지고 있는 클래스 입니다. 대부분 해당 클래스에 접근하여 데이터를 사용합니다. TodayController는 음식명을 필드로 갖고 음식조리정보에 접근하는 클래스이고, PhotoController는 음식코드값으로 음식조리정보를 찾아주는 클래스 입니다.
  34.    PT순서 FoodInfo -> RecipeInfo -> RegisterDBController -> FoodRecipeInfoList 2.두번째 레시피등록기능 입니다. 사용자가 입력한 음식정보(foodInfo)와 조리정보(RecipeInfo)를 이용하여 RegisterDBController클래스는 FoodRecipeInfoList에 추가하고, 데이터베이스에 레시피데이터를 추가합니다. 이것으로 mvc구조 설명을 마치겠습니다.
  35. 안녕하십니까? 시퀀스 다이어그램 발표를 맡은 김대곤입니다. 첫 번째 시퀀스 다이어그램은 레시피 등록입니다. 첫 번째로 레시피 등록을 위한 각종 정보 입력입니다. 8번까지의 과정을 통해 레시피 등록UI와 레시피 등록 버튼 리스너가 생성됩니다. 이후 사용자는 음식정보를 입력합니다. 음식정보는 아래와 같습니다. 다음으로 조리정보를 입력합니다. 조리정보 또한 아래와 같습니다. 마지막으로 사용자는 레시피 등록하기 버튼을 클릭하여 레시피를 등록합니다. 두 번째로, DB에 레시피 정보를 입력하겠습니다. 먼저 입력받은 레시피를 등록하는 register메소드가 호출됩니다. 이때, RegisterDBController는 레시피를 static인 음식조리정보리스트와 DB에추가하기 위한 콘트롤러입니다. 그 다음, 사용자가 입력한 음식정보와 조리정보를 static인 음식조리정보 리스트에 저장합니다. 그런 다음 음식DAO에 음식정보를, 조리법 DAO에 조리법 정보를 생성 후 DB에 입력합니다. 이후, 레시피정보 클래스와 조리과정목록 클래스에서 레시피정보, 조리과정정보를 받아온 후, 조리과정 DAO에 저장합니다. 이때 32번의 조리과정 DAO의 경우, 한 가지의 조리과정 정보만 입력하는 것이 아니므로 for문을 이용하여 여러 번 DB에 저장합니다. 35번에서는 조리재료정보목록이 저장된 RecipeIngreInfoList에서 조리재료정보목록을 반환 받습니다. 36번에서는 selectMaxRecipeIngrdientCode 메소드를 통해 조리재료 정보 중에서 가장 큰 조리재료 코드를 반환 받습니다. 38번인 조리재료의 경우도 음식 하나에 해당되는 여러가지 재료를 저장받습니다. 이것으로 첫번째 시퀀스다이어그램인 레시피 등록을 마치겠습니다.
  36. 다음 시퀀스 다이어그램은 음식 추천 받기입니다. 사용자는 먼저 본인의 기분 또는 날씨 등을 입력한 후 검색을 요청합니다. 이후 TodayActionListener를 통해 검색결과를 찾는 showResult 메소드가 실행됩니다. 음식추천받기 리스너는 TodayController를 생성하고 키워드에 맞는 음식정보목록을 가져오는 verifyFoodName메소드를 실행합니다. TodayController는 static인 FoodRecipeInfoList에서 Data검색조건에 맞는 음식정보목록을 UI로 전달해주는 컨트롤러입니다. 그럼 사용자가 입력한 키워드 중 첫 글자가 포함된 음식목록을 FoodRecipeInfoList에서 검색하여 사용자에게 보여줍니다. 두 번째로 선택한 음식 사진의 상세설명 기능입니다. 여러 음식 중 사용자가 하나의 음식을 선택하면, PhotoActionListener의 moveUI를 통해 PhotoController가 생성됩니다. 그런 다음, 11번의 verifyFoodCode와 12번의 searchFoodRecipeList메소드가 실행됩니다. FoodRecipeInfoList는 프로그램 내 모든 음식정보를 가지고 있는 static목록입니다. 사진 컨트롤러는 FoodRecipeInfoList에 있는 searchFoodRecipeList메소드를 실행하여 코드값과 일치하는 음식정보를 반환 받습니다. 13번, 14번의 시퀀스를 통해 반환 받은 음식정보객체를 멤버변수로 하는 음식정보 UI를 생성합니다. 그럼 이것으로 시퀀스다이어그램을 마치겠습니다. 다음 순서는 양진영 팀원이 전체 프로그램 시연 동영상을 발표하겠습니다.