[JAVA][조별과제] 04 쇼핑몰 Crawling & MVC

stan·2023년 6월 4일
0

설계서

V View -> 이광원
M Model, Crawling -> 이진, 김지훈, 조재영, 이성모
C Controller -> 강승찬
--------------------------------------------------------------------------------------------

View

printProgramMsg()
---- 프로그램 메뉴 ----
1. 회원 가입
2. 회원 로그인
3. 프로그램 종료
----------------------

printClientMsg()
---- 사용자 메뉴 ----
1. 상품 목록출력
2. 상품 검색      
3. 상품 구매
4. 회원 탈퇴
5. 회원정보변경
6. 로그아웃
----------------------

printSearchMsg()
---- 검색 메뉴 ----
1. 이름 검색
2. 가격 검색
3. 구매횟수가 가장높은 제품
4. 메뉴종료
----------------------

printlientChangeMsg()
---- 회원정보변경 ----
1. 비밀번호변경
2. 이름 변경
3. 회원정보변경종료
-----------------------

Srtring getID()
String mid Scanner
아이디 입력)
return mid

String getPassword()
String mpw Scanner
비밀번호 입력)
return mpw


getName()
String mName Scanner
이름 입력)
return mName


createMember()
회원가입시작,종료
login()
회원 로그인
prinShoppringList()
상품 목록출력
searchShopping()
상품 검색 시작,종료
searchName()
이름으로검색 어쩌구
searchPrice()
가격으로검색 어쩌구
searchCnt()
구매횟수가 가장높은 상품 어쩌고
shopping()
상품 구매 시작,종료
memberOut()
회원 탈퇴 시작,종료
memberChange
회원정보변경 시작,종료
passwordChange()
비밀번호변경 시작,종료
nameChange()
이름 변경 시작,종료
--------------
start()
end()
<- 이거는 시작 종료에 따로 사용 

printProgramEnd()
프로그램을 종료합니다.
--------------------------------------------------------------------------------------------

Model

MemberVO
   아이디(PK)   String mid
   비밀번호    String mpw
   이름       String mName

MemberDAO
  selectAll -> 리턴데이터 
  selectOne -> 로그인
  insert -> 회원가입
  delete -> 회원탈퇴
  update -> 정보변경
  
ShoppingVO(상품,음악,기사)
   번호(PK)         int 1001번 
   이름 -> 크롤링해서 받아올것   String name
   가격 -> 크롤링해서 받아올것   String price
   구매횟수 -> 처음값 0      int cnt

ShoppingDAO
   selectAll -> 상품목록 전체 출력, 이름 검색, 가격검색
   selectOne -> 구매횟수가 가장높은 상품 검색 -> cnt가 가장높은 상품
   update -> 구매 -> cnt++
   insert -> X
   delete-> X
   
1. 검색기능이 존재해야함 ( 이름검색, 가격 검색(최고가, 최저가,가격 범위))
2. 가장 인기있는 ㅇㅇ이 무엇인지 출력할수있도록해야함
   -> 구매횟수가 가장 많은 상품
3. 회원가입시 PK 중복체크 필수

Controllor

while() {
     프로그램메뉴 출력
          1번입력시 // 회원가입
          2번입력시 // 로그인
   while(){
   사용자 메뉴 출력
   1번입력시 // 상품 목록출력
   2번입력시 // 상품 검색
       while(){
         검색메뉴 출력
      1번입력시 // 이름 검색
      2번입력시 // 가격 검색
      3번입력시 // 구매횟수가 가장높은 제품
      4번입력시 // 메뉴종료
       }
   3번입력시 // 상품 구매
   4번입력시 // 회원 탈퇴
   5번입력시 // 회원정보변경
   6번입력시 // 로그아웃
   }   
          3번입력시 // 프로그램 종료

}

View

package view;

import java.util.ArrayList;
import java.util.Scanner;

import model.MemberVO;
import model.ShoppingVO;

public class View {
	private static Scanner sc = new Scanner(System.in);
	// 자주사용하는 문구출력 모듈화 
	// #1 Program  프로그램 실행문구
	// =====================================================================================================================
	private static String pMenu1 = "회원 가입";
	private static String pMenu2 = "회원 로그인";
	private static String pMenu3 = "프로그램 종료"; // 프로그램 종료
	// #2 Client  로그인한후 실행문구
	// =====================================================================================================================
	private static String cMenu1 = "목록출력";
	private static String cMenu2 = "상품검색";
	private static String cMenu3 = "상품구매";
	private static String cMenu4 = "회원 탈퇴"; // 이전 메뉴(#1)로 돌아감
	private static String cMenu5 = "회원정보 변경";
	private static String cMenu6 = "로그아웃"; // 이전 메뉴(#1)로 돌아감
	// #2-2 Search  검색시 실행문구
	// =====================================================================================================================
	private static String sMenu1 = "이름검색";
	private static String sMenu2 = "가격검색";
	private static String sMenu3 = "가장 인기있는 상품";
	private static String sMenu4 = "검색 메뉴 종료"; // 이전 메뉴(#2)로 돌아감
	// #2-5 Update  회원정보 변경시 문구
	// =====================================================================================================================
	private static String uMenu1 = "이름변경";
	private static String uMenu2 = "비밀번호 변경";
	private static String uMenu3 = "개인정보 출력";
	private static String uMenu4 = "회원정보 변경 종료"; // 이전 메뉴(#2)로 돌아감

	// 각 메뉴번호의 범위
	private static final int pMaxMenuNum = 3;   //프로그램 실행문구 메뉴 수
	private static final int cMaxMenuNum = 6;   //로그인한후 실행문구 메뉴 수 
	private static final int sMaxMenuNum = 4;   //검색시 실행문구 메뉴 수 
	private static final int uMaxMenuNum = 4;   //회원정보 메뉴변경시 문구 수 

	//자주 사용하는 메세지 
	private static final String TRUE = " 성공";
	private static final String FALSE = " 실패";
	private static final String START = " 실행";
	private static final String END = " 되었습니다."; // (종료)
	private static final String RE = "다시 입력해주세요.."+"\n입력) "; 

	// 성공
	// =====================================================================================================================

	public void pTrue(int pAction) {
		if (pAction == 1) {
			System.out.println("\n" + pMenu1 + TRUE); // 회원가입 성공
		} else if (pAction == 2) {
			System.out.println("\n" + pMenu2 + TRUE); // 로그인 성공
		}
	}

	public void cTrue(int cAction) {
		if (cAction == 3) {
			System.out.println("\n" + cMenu3 + TRUE); // 상품구매 성공
		} else if (cAction == 4) {
			System.out.println("\n" + cMenu4 + END); // 탈퇴 완료
		}
	}

	public void uTrue(int uAction) {
		if (uAction == 1) {
			System.out.println("\n" + uMenu1 + TRUE); // 이름변경 성공
		} else if (uAction == 2) {
			System.out.println("\n" + uMenu2 + TRUE); // 비밀번호 변경 성공
		}
	}

	// 실패
	// =====================================================================================================================
	public void pFalse(int pAction) {
		if (pAction == 1) {
			System.out.println("\n" + pMenu1 + FALSE); // 회원가입 실패
		} else if (pAction == 2) {
			System.out.println("\n" + pMenu2 + FALSE); // 회원 로그인 실패
		}
	}

	public void cFalse(int cAction) {
		if (cAction == 2) {
			System.out.println("\n" + cMenu2 + FALSE); // 상품 검색 실패
		} else if (cAction == 3) {
			System.out.println("\n" + cMenu3 + FALSE); // 상품 구매 실패
		} else if (cAction == 4) {
			System.out.println("\n" + cMenu4 + FALSE); // 회원 탈퇴 실패
		}
	}

	public void sFalse(int sAction) {
		if (sAction == 1) {
			System.out.println("\n" + sMenu1 + FALSE); // 이름검색 실패
		} else if (sAction == 2) {
			System.out.println("\n" + sMenu2 + FALSE); // 가격검색 실패
		}
	}

	public void uFalse(int uAction) {
		if (uAction == 1) {
			System.out.println("\n" + uMenu1 + FALSE); // 이름변경 실패
		} else if (uAction == 2) {
			System.out.println("\n" + uMenu2 + FALSE); // 비밀번호 변경 실패
		}
	}

	// 실행
	// =====================================================================================================================
	public void pStart(int pAction) { // 로그인메뉴
		if (pAction == 1) {
			System.out.println("\n" + pMenu1 + START); // 회원 가입 실행
		} else if (pAction == 2) {
			System.out.println("\n" + pMenu2 + START); // 회원 로그인 실행
		}
	}

	public void cStart(int cAction) { // 사용자메뉴
		if (cAction == 1) {
			System.out.println("\n" + cMenu1 + START); // 목록출력 실행
		} else if (cAction == 2) {
			System.out.println("\n" + cMenu2 + START); // 상품검색 실행
		} else if (cAction == 3) {
			System.out.println("\n" + cMenu3 + START); // 상품구매 실행
		} else if (cAction == 4) {
			System.out.println("\n" + cMenu4 + START); // 회원탈퇴 실행
		} else if (cAction == 5) {
			System.out.println("\n" + cMenu5 + START); // 회원정보 변경 실행
		}
	}

	public void sStart(int sAction) { // 검색메뉴
		if (sAction == 1) {
			System.out.println("\n" + sMenu1 + START); // 이름검색 실행
		} else if (sAction == 2) {
			System.out.println("\n" + sMenu2 + START); // 가격검색 실행
		}
	}

	public void uStart(int uAction) { // 회원정보변경 메뉴
		if (uAction == 1) {
			System.out.println("\n" + uMenu1 + START); // 이름변경 실행
		} else if (uAction == 2) {
			System.out.println("\n" + uMenu2 + START); // 비밀번호 변경 실행
		}
	}

	// 종료
	// =====================================================================================================================

	public void pEnd(int pAction) {
		if (pAction == 3) {
			System.out.println("\n" + pMenu3 + END); // 프로그램 종료 되었습니다.
		}
	}

	public void cEnd(int cAction) {
		if (cAction == 6) {
			System.out.println("\n" + cMenu6 + END); // 로그아웃 되었습니다.
		}
	}

	public void sEnd(int sAction) {
		if (sAction == 4) {
			System.out.println("\n" + sMenu4 + END); // 메뉴 종료 되었습니다.
		}
	}

	public void uEnd(int uAction) {
		if (uAction == 4) {
			System.out.println("\n" + uMenu4 + END); // 정보변경 종료 되었습니다.
		}
	}

	// 정수만 입력 받을수 있도록 유효성 검사
	public int tryCatch() {
		while (true) { // 정수 입력 받을때까지 실행
			try { // 정수로 입력했으면
				int action = sc.nextInt();
				if (action < 0) { // 0이하면 다시 입력
					System.out.println("0 이상만 입력해주세요..");
					System.out.print("입력) ");
					continue;
				}
				return action; // 정수 반환
			} catch (Exception e) { // 아닐경우 아래 출력문
				sc.nextLine();
				System.out.println("정수만 입력해주세요..");
				System.out.print("입력 ) ");

			}
		}
	}

	// 메뉴
	// =====================================================================================================================

	// 1.프로그램 메뉴
	public int printProgramMsg() {
		System.out.println();
		System.out.println("==== 프로그램 메뉴 ====");
		System.out.println("1. " + pMenu1); // 회원가입
		System.out.println("2. " + pMenu2); // 회원로그인
		System.out.println("3. " + pMenu3); // 프로그램 종료
		System.out.println("===================");
		System.out.print("번호 입력) ");
		while (true) {
			int pAction = tryCatch();
			if (pAction <= pMaxMenuNum && pAction >= 1) { // 1~배열의 길이까지만 입력
				return pAction;
			} else
				System.out.println(RE);

			continue;
		}
	}

	// 2.사용자 메뉴
	public int printClientMsg() {
		System.out.println();
		System.out.println("==== 사용자 메뉴 ====");
		System.out.println("1. " + cMenu1); // 목록출력
		System.out.println("2. " + cMenu2); // 상품검색 -> 3.검색 메뉴로 이동
		System.out.println("3. " + cMenu3); // 상품구매
		System.out.println("4. " + cMenu4); // 회원탈퇴 -> 성공 시 1.프로그램 메뉴로
		System.out.println("5. " + cMenu5); // 회원정보 변경 ->업데이트 메뉴로 이동
		System.out.println("6. " + cMenu6); // 메뉴종료 -> 1.프로그램 메뉴로 이동
		System.out.println("==================");
		System.out.print("번호 입력) ");
		while (true) {
			int cAction = tryCatch();
			if (cAction <= cMaxMenuNum && cAction >= 1) { // 1~배열의 길이까지만 입력
				return cAction;
			} else
				System.out.println(RE);
			continue;
		}
	}

	// 3.검색 메뉴
	public int printSearchMsg() {
		System.out.println();
		System.out.println("==== 검색 메뉴 ====");
		System.out.println("1. " + sMenu1); // 이름검색
		System.out.println("2. " + sMenu2); // 가격검색
		System.out.println("3. " + sMenu3); // 가장 인기있는 상품
		System.out.println("4. " + sMenu4); // 메뉴 종료 -> 이전 메뉴( 2.사용자 메뉴)로 이동
		System.out.println("================");
		System.out.print("번호 입력) ");
		while (true) {
			int sAction = tryCatch();
			if (sAction <= sMaxMenuNum && sAction >= 1) { // 1~배열의 길이까지만 입력
				return sAction;
			} else
				System.out.println(RE);
			continue;
		}
	}

	// 4.업데이트 메뉴
	public int printUpdateMsg() {
		System.out.println();
		System.out.println("=== 회원정보변경 메뉴 ===");
		System.out.println("1. " + uMenu1); // 이름변경
		System.out.println("2. " + uMenu2); // 비밀번호 변경
		System.out.println("3. " + uMenu3); // 회원정보 출력
		System.out.println("4. " + uMenu4); // 정보변경종료 -> 이전 메뉴( 2.사용자 메뉴)로 이동
		System.out.println("====================");
		System.out.print("번호 입력) ");
		while (true) {
			int uAction = tryCatch();
			if (uAction <= uMaxMenuNum && uAction >= 1) { // 1~배열의 길이까지만 입력
				return uAction;
			} else
				System.out.println(RE);
			continue;
		}
	}

	// 입력
	// =====================================================================================================================

	// 상품 번호 입력
	public int getNum() {
		System.out.print("상품번호 입력) ");
		while (true) { // 상품번호가 제대로 입력될때까지 반복
			int num = tryCatch(); // 정수만 통과
			
			
			return num;
		}
	}
	public void noItem() {
		System.out.println("해당 상품이 존재하지 않습니다.");
	}

	// 아이디 입력
	public String getID() {
		System.out.print("아이디 입력 ) ");
		String mid = sc.next();
		return mid;
	}

	// 패스워드입력
	public String getPassword() {
		System.out.print("비밀번호 입력 ) ");
		String mpw = sc.next();
		return mpw;
	}

	// 새로운 비밀번호 입력
	public String getNewPassword() {
		System.out.print("새로운 비밀번호 입력 ) ");
		String mpw = sc.next();
		return mpw;
	}

	// 이름 입력
	public String getName() {
		System.out.print("이름 입력 ) ");
		String mName = sc.next();
		return mName;
	}

	// 새로운 이름 입력
	public String getNewName() {
		System.out.print("새로운 이름 입력 ) ");
		String mName = sc.next();
		return mName;
	}

	// 가격으로 상품검색시 사용하기위해............★★가격입력 최저가와 최고가를 고객에게 입력 받아 전달★★굿!! 광원이형 짱!!
	public ShoppingVO getPrice() {
		System.out.print("최저가 입력 ) ");
		int minPrice = tryCatch();
		System.out.print("최고가 입력 ) ");
		int maxPrice = tryCatch();

		if (minPrice > maxPrice) {   //★★고객이 최저가 최고가를 바꿔서 입력 시 바꿔줌
			int tmpPrice = minPrice;//임시 저장변수 
			minPrice = maxPrice;
			maxPrice = tmpPrice;
		}
		ShoppingVO data = new ShoppingVO(0, "필터검색", minPrice, maxPrice);
		return data;
	}

	// 기능
	// =====================================================================================================================

	// 회원가입
	public MemberVO createMember() {
		System.out.println();
		System.out.print("아이디 입력 ) ");
		String mid = sc.next();
		System.out.print("비밀번호 입력 ) ");
		String mpw = sc.next();
		System.out.print("이름 입력 ) ");
		String mName = sc.next();

		return new MemberVO(mid, mpw, mName);
	}

	// 로그인
	public MemberVO login() {
		System.out.println();
		System.out.print("아이디 입력 ) ");
		String mid = sc.next();
		System.out.print("비밀번호 입력 ) ");
		String mpw = sc.next();
		return new MemberVO(mid, mpw, null);
	}


	// 상품 목록 출력
	public void printShoppingList(ArrayList<ShoppingVO> datas) { // 상품목록을 받아서
		if (datas.isEmpty()) {
			System.out.println("해당 상품이 없습니다.");
		}
		for (ShoppingVO v : datas) {
			System.out.println(v);
		}
	}

	// 상품 구매 출력
	public void printShopping(ShoppingVO data) { // 상품목록을 받아서
		System.out.println("구매하신 상품은 "); // 고객 확인용
		System.out.println(data.getName() + "의 가격은 :" + data.getPrice()+"원"); // 구매 품목의 이름과 가격만 출력
	}

	// 회원 정보 출력
	public void printMember(MemberVO mVO) {
		System.out.print("현재 로그인한 아이디는 :");
		System.out.println(mVO);
	}

	// 회원 비밀번호 변경
	public String pwUpdate(MemberVO mVO) {
		while (true) {
			System.out.print("비밀번호 입력 ) ");
			String mpw = sc.next();

			if (mVO.getMpw().equals(mpw)) {
				System.out.print("새로운 비밀번호 입력 ) ");
				String nMpw = sc.next();
				if (!nMpw.equals(mVO.getMpw())) {
					return nMpw;
				}
			} else {
				System.out.println(RE);
			}
		}
	}

	// 회원 이름 변경
	public String nameUpdate(MemberVO mVO) {
		while (true) {
			System.out.print("비밀번호 입력 ) ");
			String mpw = sc.next();

			if (mVO.getMpw().equals(mpw)) {
				System.out.print("새로운 이름 입력 ) ");
				String nMname = sc.next();
				
				if (!nMname.equals(mVO.getmName())) {
					return nMname;
				}
			} else {
				System.out.println(RE);
			}

		}
	}
}

Crawling

package model;


import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Crawling {
   public static ArrayList<ShoppingVO> sample(){//크롤링위해 sample() 메서드 만듬
      //쿠팡 상품목록 페이지 
      final String url="https://pages.coupang.com/p/89143?from=home_C1&traid=home_C1&trcid=11262476";
      // 불러오는 페이지 
      Connection conn=Jsoup.connect(url);
      // 페이지 불러온걸 연결시킴
      Document doc=null;
      try {
         doc=conn.get();
      } catch (IOException e) {
         e.printStackTrace();
      }
      // 해당페이지 받아와서 try-catch
      Elements elems=doc.select("span.info_section__title");
      // 파싱
      // elems에 저장
      Iterator<Element> itr=elems.iterator();
      // Iterator를 사용해서 elems를 나뉘어서 저장
      
      Elements elems1=doc.select("span.price_info__discount");
      
      Iterator<Element> itr1=elems1.iterator();
      
      ArrayList<ShoppingVO> datas=new ArrayList<ShoppingVO>();
      int PK=1001;
      
      while(itr.hasNext() && itr1.hasNext()) {
         String str=itr.next().toString();// String으로 변환시켜줌    [상품이름]
         int index=str.indexOf(">");
         str=str.substring(index+1);
         index=str.indexOf("<");
         str=str.substring(0,index);
         
         String str1=itr1.next().toString();  // String으로 변환시켜줌    [상품가격]  
         int index1=str1.indexOf(">");
         str1=str1.substring(index1+1);
         index1=str1.indexOf("<");
         str1=str1.substring(0,index1);
         // String값이 10,300이런식으로 나와서 ,때문에 인트값 변환시켜줄수없음
         String str2=str1.replace(",",""); // 구글 검색 으로 찾음,을 없애줌
         int price = Integer.parseInt(str2);//스트링값(가격)을 인트값으로 변환시켜줌
        
         //ex) 어뮤즈키친 오로라 월드와인 2p, 350ml, 1세트의 가격 :10320원
         
         datas.add(new ShoppingVO(PK++,str,price,0));   //형 변환된 값 ShoppingVO datas에 저장 
      }
      return datas;
      
   }
}

MemberVO

package model;

public class MemberVO {

   private String mid;//pk 사용자 아이디
   private String mpw;//비밀번호
   private String mName;//사용자 이름
   
   public MemberVO(String mid,String mpw,String mName) {
      this.mid=mid;
      this.mpw=mpw;
      this.mName=mName;

   }

   public String getMid() {
      return mid;
   }

   public void setMid(String mid) {
      this.mid = mid;
   }

   public String getMpw() {
      return mpw;
   }

   public void setMpw(String mpw) {
      this.mpw = mpw;
   }

   public String getmName() {
      return mName;
   }

   public void setmName(String mName) {
      this.mName = mName;
   }
   @Override
   public boolean equals(Object obj) {      
      // 아이디(mid)가 같다면, 같은객체!
      MemberVO mVO=(MemberVO)obj;
      if(this.mid.equals(mVO.mid)) {
         // PK값이 같다면, 동일한 객체이다!!!
         return true;
      }
      return false;
   }
   
   @Override
   public String toString() {
      return this.mid+"님의 \n 비밀번호 :"+this.mpw+"\n 사용자의 이름 :"+this.mName;
   }

}

MemberDAO

package model;
import java.util.ArrayList;

//회원목록출력
//회원가입,로그인,로그아웃,마이페이지,회원탈퇴
public class MemberDAO {
   private ArrayList<MemberVO> datas;
   //=============================생성자======================
   public MemberDAO() {
      datas=new ArrayList<MemberVO>();

   }
   //R 가입자 목록 출력 (이름)    selectAll
   public ArrayList<MemberVO> selectAll(MemberVO mVO){
      return datas;
   }
   //R 로그인 할 떄 가입자 아이디 일치 하는지 확인 후 비밀번호 확인  selectOne

   public MemberVO selectOne(MemberVO mVO){
      for(MemberVO v:datas) {
         if(mVO.getMid().equals(v.getMid())) {
            if(mVO.getMpw().equals(v.getMpw())) {
               return v;
            }
            return null;
         }
      }
      return null;
   }
   //C 회원가입   insert
   public boolean insert(MemberVO mVO) {
      boolean flag=false;
      for(MemberVO data:datas) {
         if(data.getMid().equals(mVO.getMid())) {//신규 가입자가 입력한 아이디가 중복 아닌지 확인; 
            flag=true;
            break;
         }
      }
      if(flag) {
         return false;
      }
      else {
         datas.add(new MemberVO(mVO.getMid(),mVO.getMpw(),mVO.getmName()));
      }
      return true;
   }
   //U 가입자의 정보를 데이터와 확인 후 사용자가 입력한 새로운 비밀번호로 비밀번호 변경    update
   public boolean update(MemberVO mVO) {
      if(mVO.getmName().equals("비번 변경")) {
         for(MemberVO v:datas) {
            if(v.equals(mVO)) {
               v.setMpw(mVO.getMpw());
               return true;
            }
         }
      }
      if(mVO.getMpw().equals("이름 변경")) {
         for(MemberVO v:datas) {
            if(v.equals(mVO)) {
               v.setmName(mVO.getmName());
               return true;
            }
         }
      }
      return false;
   }
   //D 가입자 회원정보를 member로 전달받아서 datas에 있는 정보인지 확인후 일치하면 remove를 통해 삭제
   public boolean delete(MemberVO mVO) {
      for(int i=0;i<datas.size();i++) {
         if(datas.get(i).equals(mVO)) {
            datas.remove(i);
            return true;
         }
      }
      return false;
   }
}

ShoppingVO

package model;
/*
 */
public class ShoppingVO {
	//[멤버변수]
	private int num; //1001번 번호(PK)          
	private String name; //이름 -> 크롤링해서 받아올것   
	private int price; //가격 -> 크롤링해서 받아올것   
	private int cnt; //구매횟수 -> 처음값 0   
	//[생성자] 
	//맴버변수 초기화 
	public ShoppingVO (int num, String name, int price, int cnt) {
		this.num = num;
		this.name = name;
		this.price = price;
		this.cnt = cnt;
	}

	//[메서드]
	//- getter / setter

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public int getCnt() {
		return cnt;
	}

	public void setCnt(int cnt) {
		this.cnt = cnt;
	}

	//기능 : 쇼핑물 상품 이름과 구매횟수 출력 
	//INPUT : 없음
	//OUTPUT : 없음
	@Override
	public String toString() {
		return this.num+"번 상품 "+this.name+"의 가격 :"+this.price+"원 구매횟수 :"+this.cnt;
	}

}

ShoppingDAO

package model;

import java.util.ArrayList;

/*
 */
public class ShoppingDAO {
   //[멤버변수]
   ArrayList<ShoppingVO> datas;
   //[생성자] 
   public ShoppingDAO () {
      //크롤링해서 가져올거임 
      this.datas=Crawling.sample();//크롤링 한 데이터 smple()메서드 통해서 data에 대입 
   }

   //[메서드]=====================================================================


   public ArrayList<ShoppingVO> selectAll(ShoppingVO sVO) {
      //전체출력
      if(sVO==null) {
         return datas;
      }
      //가격검색 -필터검색  
      else if(sVO.getName().equals("필터검색")) { // searchCondition
         ArrayList<ShoppingVO> mdatas=new ArrayList<ShoppingVO>();
         for(ShoppingVO data:datas) {
            if(sVO.getPrice() <= data.getPrice() && data.getPrice() <= sVO.getCnt())  {
               mdatas.add(data);//가격 최저 최고 사이  view 에서 잘못입력해도 바꿔주는 메서드 있음
            }
         }
         return mdatas;  // 입력한 가격 사이에 있는 상품들 반환해줌
      }
      else if(sVO.getNum()==1) {
         ArrayList<ShoppingVO> mdatas=new ArrayList<ShoppingVO>();
         int mcnt=0; // 최고구매횟수
         int maxIndex=0;//최고구매상품 번호
         for(int i=1;i<datas.size();i++) {
            if(datas.get(maxIndex).getCnt()<datas.get(i).getCnt())  {
               maxIndex=i;
            }//최대값 구해서 
         }
         mcnt=datas.get(maxIndex).getCnt();//maxIndex에 해당하는 구매횟수를 mcnt에 저장 
         
         for(ShoppingVO data:datas) {
            if(mcnt==data.getCnt())  {//mcnt랑 같은 구매횟수를 가진 모든 데이터를 비교하여 같으면 추가한다.
               mdatas.add(data);
            }
         }
         return mdatas;//변경된 데이터 반환
      }
      else {
         // pVO가 null이 아니라면 '이름으로검색'임!
         ArrayList<ShoppingVO> mdatas=new ArrayList<ShoppingVO>();
         for(ShoppingVO data:datas) {
            if(data.getName().contains(sVO.getName())) {//검색한 단어 포함되면 그 데이터 mdatas에 저장후 반환해준다.
               // sVO.getName) == 사용자가 검색한 단어
               mdatas.add(data);
            }
         }         
         return mdatas;
      }
   }

   //구매성공시 구매한 품목 출력 메서드
   public ShoppingVO selectOne(ShoppingVO sVO) {
      for(ShoppingVO data:datas) {
         if(data.getNum()==sVO.getNum()) {
            ShoppingVO s2VO=new ShoppingVO(data.getNum(),data.getName(),data.getPrice(),data.getCnt());            
            return s2VO;
            // 실제 DB 데이터(==datas)를 전송 xxxxx
            // 새로 vo객체를 new(객체화)해서 전송 O
         }
      }
      return null;
   }

   //기능 : 크롤링해서 가져옴 
   //크롤링해서 데이터 가져오기 때문에 필요없는 기능
   public boolean insert(ShoppingVO sVO) {
      return false;
   }

   //기능 : 구매할때 마다 해당 제품 구매수++
   //구매시 구매횟수 1개씩 올려주는 메서드 
   public boolean update(ShoppingVO sVO) {

      //- 구매할때 그 상품 ++
      for(int i =0; i<datas.size();i++) {// : 나의 상품데이터 전체 반복비교.
         if(datas.get(i).getNum()==sVO.getNum()) {// : 상품구매
            int cnt=datas.get(i).getCnt();//해당상품의 구매횟수를 cnt에 대입
            cnt++;//그걸 ++;==>새로운 구매횟수
            datas.get(i).setCnt(cnt);//새로운 구매횟수로 set
            return true;
         }
      }
      return false;
   }

   //크롤링해서 데이터 가져오기 때문에 필요없는 기능
   public boolean delete(ShoppingVO sVO) {
      return false;
   }

}

Ctrl

package ctrl;

import java.util.ArrayList;

import model.MemberDAO;
import model.MemberVO;
import model.ShoppingDAO;
import model.ShoppingVO;
import view.View;

public class Ctrl {
   private ShoppingDAO sDAO;
   private MemberDAO mDAO;
   private View view;
   private MemberVO member; // 현재 로그인한 회원

   public Ctrl() {
      sDAO=new ShoppingDAO();
      mDAO=new MemberDAO();
      view=new View();
      member=null; // 아직 로그인 전이기때문에 null로 해준다.
   }
   public void startApp() {
      while(true) {
         int pAction=view.printProgramMsg();
         if(pAction==1) {  // 1번입력시 회원가입
            view.pStart(pAction);// 회원가입 실행
            if(mDAO.insert(view.createMember())) { 
               // view에서 회원정보를 받아, 
               // mDAO에 넘겨주고 insert실행
               view.pTrue(pAction); // 성공 문구
            }
            else {
               view.pFalse(pAction); // 실패 문구
            }
         }
         else if(pAction==2) {  // 2번입력시 로그인
            view.pStart(pAction); // 로그인 실행
            MemberVO mVO=view.login(); // view에서 로그인정보를 받아 mVO에 저장
            member=mDAO.selectOne(mVO); 
            // mVO를 이용해 mDAO에서 selectOne실행
            // 반환된 값을 member에 저장 ( 로그인한 회원의 정보 )
            if(member==null) { 
               view.pFalse(pAction);   // 로그인 실패 문구
               continue;    // 프로그램 모드에 계속 존재
            }
            view.pTrue(pAction); // 로그인 성공 문구
            //로그인 성공=======================================================================
            while(true){
               int cAction=view.printClientMsg();
               if( cAction ==1 ) { // 상품 목록출력
                  view.cStart(cAction); // 시작문구
                  ArrayList<ShoppingVO> datas=sDAO.selectAll(null); //null 입력시 전체목록 출력 
                  // sDAO에서 selectAll을 실행해
                  // 반환된값을 datas에 저장
                  view.printShoppingList(datas); // view를 통해 datas에 저장된값을 출력
               }
               else if ( cAction==2 ) { // 상품검색
                  while(true){
                     int sAction=view.printSearchMsg(); // 상품검색메뉴 출력
                     if(sAction==1) { // 이름검색
                        view.sStart(sAction); // 이름검색 시작 문구
                        String name=view.getName(); // 이름을 입력받아 name에 저장
                        ArrayList<ShoppingVO> datas=sDAO.selectAll(new ShoppingVO(0,name,0,0)); 
                        // 저장받은 이름으로 ShoppingVO에 만들고
                        // datas에 저장
                        view.printShoppingList(datas);
                        // datas에 들어가있는것 다 보여줘 
                     }
                     else if(sAction==2) { // 가격검색
                        view.sStart(sAction); // 가격검색 시작 문구
                        ShoppingVO sVO=view.getPrice();// view에서 ( 0, "필터검색", 최저가, 최고가 )를 입력받아 sVO에 저장
                        ArrayList<ShoppingVO> datas=sDAO.selectAll(sVO); // sVO를 통해 selectAll을 실행해 범위에 해당하는 값을 받아서 datas에 저장
                        view.printShoppingList(datas); // datas에 저장된것들 다 보여줘
                     }
                     else if(sAction==3) { // 판매량 제일 높은 상품
                        ArrayList<ShoppingVO> datas=sDAO.selectAll(new ShoppingVO(1,"최고검색",0,0)); 
                        // ShoppingVO의 PKnum을 1로 만들어 보내줘서 해당 if문에 들어갈수있도록 해줌
                        // sDAO에서 selectall을 진행해 datas에 저장
                        view.printShoppingList(datas);// datas에 저장된것들 다 보여줘
                     }
                     else{ // 검색메뉴 종료
                        view.sEnd(sAction);
                        break;
                     }
                  }
               }
               //==========================================================================
               else if ( cAction==3 ) { // 상품구매
                   view.cStart(cAction); // 상품 구매 시작문구
                   while(true) {
                      int num=view.getNum(); //번호 입력받아서 num에 저장
                      ShoppingVO data=new ShoppingVO(num,null,0,0);
                      // ShoppingVO에 num를 저장해서 sDAO에 selectOne를 실행 반환값을 data에 저장
                      if(sDAO.update(data)) { // data를 이용해 sDAO에서 update 실행
                         view.cTrue(cAction);
                         ShoppingVO sVO=sDAO.selectOne(data);
                         view.printShopping(sVO); // data의 이름과 가격을 사용자에게 보여줌
                         view.cEnd(cAction); // 구매완료 문구
                         break;
                      }
                      view.noItem();
                      continue;
                   }
                }
               //========================================================================
               else if ( cAction==4 ) { // 회원 탈퇴
                  view.cStart(cAction); // 회원탈퇴 시작문구
                  String mpw=view.getPassword(); // view를 통해 비밀번호를 입력받아 mpw에 저장
                  if(member.getMpw().equals(mpw)) { // 현재 로그인한 사람의 비밀번호와 mpw가 같은지 검사 
                     if(mDAO.delete(member)) { // 같다면 현재 로그인한 사람의 데이터로 mDAO에서 delete실행
                        view.cTrue(cAction); // 성공한다면 회원탈퇴 안내문구
                        break;
                     }
                  }
                  view.cFalse(cAction); //실패한다면 실패문구
               }
               //==========================================================================
               else if ( cAction==5 ) { // 회원정보 변경
                  while(true) {
                     int uAction=view.printUpdateMsg(); // 회원정보 변경 메뉴 출력
                     if(uAction==1) { // 이름변경
                         view.uStart(uAction); // 이름변경 시작 문구
                         String mpw=view.getPassword(); // 현재 비밀번호 입력 받아 mpw에 저장
                         if(member.getMpw().equals(mpw)) { // 현재 로그인한(member)의 비밀번호와 mpw가 같으면 진행
                            String newName=view.getNewName(); // 사용자에게 변경하고 싶은 새로운 이름을 입력받아 newName에 저장
                            MemberVO mVO1=new MemberVO(member.getMid(),"이름 변경",newName); // searchcondition을 사용 
                            if(mDAO.update(mVO1)) { // 저장된 mVO1을 사용해 mDAO의 updata를 실행 성공한다면
                               view.uTrue(uAction); // 이름변경 성공문구 
                            }
                            else {
                               view.uFalse(uAction);// 실패시 실패문구
                            }
                         }
                         else {
                            view.uFalse(uAction);// 실패시 실패문구
                         }
                      }
                      else if(uAction==2) { // 비밀번호 변경
                         view.uStart(uAction);// 비밀번호 변경 시작 문구
                         String mpw=view.getPassword(); // 현재 비밀번호 입력 받아 mpw에 저장
                         if(member.getMpw().equals(mpw)) { // 현재 로그인한(member)의 비밀번호와 mpw가 같으면 진행
                            String newMpw=view.getNewPassword(); // 사용자에게 변경하고 싶은 새로운 비밀번호을 입력받아 newMpw에 저장
                            MemberVO mVO1=new MemberVO(member.getMid(),newMpw,"비번 변경"); // searchcondition을 사용 
                            if(mDAO.update(mVO1)) { // 저장된 mVO1을 사용해 mDAO의 updata를 실행
                               view.uTrue(uAction); // 비밀번호 변경 성공문구 
                            }
                            else {
                               view.uFalse(uAction);// 실패시 실패문구
                            }
                         }
                         else {
                            view.uFalse(uAction);// 실패시 실패문구
                         }
                      }
                     else if(uAction==3) { // 개인정보 출력
                        MemberVO mVO1=new MemberVO(member.getMid(),member.getMpw(),member.getmName());
                        // mVO1에 현재 로그인한 회원의 ( 아이디, 비밀번호, 이름)을 저장해서
                        view.printMember(mDAO.selectOne(mVO1));
                        // mVO1을 사용해 mDAO에서 selectOne를 실행해 반환된 정보를
                        // view를 통해 사용자에게 보여줌
                     }
                     else{ // 회원정보변경 메뉴 종료
                        view.uEnd(uAction);
                        break;
                     }
                  }
               }
               else { // 6번입력시 종료
                  view.cEnd(cAction);
                  break;
               }
            }
         }
         else { // 3번입력시 프로그램 종료
            view.pEnd(pAction);
            break;
         }
      }
   }
}

Client

package client;

import ctrl.Ctrl;

public class Client {
	public static void main(String[] args) {
		Ctrl app=new Ctrl();
		app.startApp();
		
	}
}
profile
이진 입니다

0개의 댓글