설계서
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);
private static String pMenu1 = "회원 가입";
private static String pMenu2 = "회원 로그인";
private static String pMenu3 = "프로그램 종료";
private static String cMenu1 = "목록출력";
private static String cMenu2 = "상품검색";
private static String cMenu3 = "상품구매";
private static String cMenu4 = "회원 탈퇴";
private static String cMenu5 = "회원정보 변경";
private static String cMenu6 = "로그아웃";
private static String sMenu1 = "이름검색";
private static String sMenu2 = "가격검색";
private static String sMenu3 = "가장 인기있는 상품";
private static String sMenu4 = "검색 메뉴 종료";
private static String uMenu1 = "이름변경";
private static String uMenu2 = "비밀번호 변경";
private static String uMenu3 = "개인정보 출력";
private static String uMenu4 = "회원정보 변경 종료";
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) {
System.out.println("0 이상만 입력해주세요..");
System.out.print("입력) ");
continue;
}
return action;
} catch (Exception e) {
sc.nextLine();
System.out.println("정수만 입력해주세요..");
System.out.print("입력 ) ");
}
}
}
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) {
return pAction;
} else
System.out.println(RE);
continue;
}
}
public int printClientMsg() {
System.out.println();
System.out.println("==== 사용자 메뉴 ====");
System.out.println("1. " + cMenu1);
System.out.println("2. " + cMenu2);
System.out.println("3. " + cMenu3);
System.out.println("4. " + cMenu4);
System.out.println("5. " + cMenu5);
System.out.println("6. " + cMenu6);
System.out.println("==================");
System.out.print("번호 입력) ");
while (true) {
int cAction = tryCatch();
if (cAction <= cMaxMenuNum && cAction >= 1) {
return cAction;
} else
System.out.println(RE);
continue;
}
}
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);
System.out.println("================");
System.out.print("번호 입력) ");
while (true) {
int sAction = tryCatch();
if (sAction <= sMaxMenuNum && sAction >= 1) {
return sAction;
} else
System.out.println(RE);
continue;
}
}
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);
System.out.println("====================");
System.out.print("번호 입력) ");
while (true) {
int uAction = tryCatch();
if (uAction <= uMaxMenuNum && uAction >= 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(){
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();
}
Elements elems=doc.select("span.info_section__title");
Iterator<Element> itr=elems.iterator();
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();
int index=str.indexOf(">");
str=str.substring(index+1);
index=str.indexOf("<");
str=str.substring(0,index);
String str1=itr1.next().toString();
int index1=str1.indexOf(">");
str1=str1.substring(index1+1);
index1=str1.indexOf("<");
str1=str1.substring(0,index1);
String str2=str1.replace(",","");
int price = Integer.parseInt(str2);
datas.add(new ShoppingVO(PK++,str,price,0));
}
return datas;
}
}
MemberVO
package model;
public class MemberVO {
private String mid;
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) {
MemberVO mVO=(MemberVO)obj;
if(this.mid.equals(mVO.mid)) {
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>();
}
public ArrayList<MemberVO> selectAll(MemberVO mVO){
return datas;
}
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;
}
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;
}
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;
}
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;
}
}
package model;
public class ShoppingVO {
private int num;
private String name;
private int price;
private int cnt;
public ShoppingVO (int num, String name, int price, int cnt) {
this.num = num;
this.name = name;
this.price = price;
this.cnt = cnt;
}
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;
}
@Override
public String toString() {
return this.num+"번 상품 "+this.name+"의 가격 :"+this.price+"원 구매횟수 :"+this.cnt;
}
}
package model;
import java.util.ArrayList;
public class ShoppingDAO {
ArrayList<ShoppingVO> datas;
public ShoppingDAO () {
this.datas=Crawling.sample();
}
public ArrayList<ShoppingVO> selectAll(ShoppingVO sVO) {
if(sVO==null) {
return datas;
}
else if(sVO.getName().equals("필터검색")) {
ArrayList<ShoppingVO> mdatas=new ArrayList<ShoppingVO>();
for(ShoppingVO data:datas) {
if(sVO.getPrice() <= data.getPrice() && data.getPrice() <= sVO.getCnt()) {
mdatas.add(data);
}
}
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();
for(ShoppingVO data:datas) {
if(mcnt==data.getCnt()) {
mdatas.add(data);
}
}
return mdatas;
}
else {
ArrayList<ShoppingVO> mdatas=new ArrayList<ShoppingVO>();
for(ShoppingVO data:datas) {
if(data.getName().contains(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;
}
}
return null;
}
public boolean insert(ShoppingVO sVO) {
return false;
}
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++;
datas.get(i).setCnt(cnt);
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;
}
public void startApp() {
while(true) {
int pAction=view.printProgramMsg();
if(pAction==1) {
view.pStart(pAction);
if(mDAO.insert(view.createMember())) {
view.pTrue(pAction);
}
else {
view.pFalse(pAction);
}
}
else if(pAction==2) {
view.pStart(pAction);
MemberVO mVO=view.login();
member=mDAO.selectOne(mVO);
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);
view.printShoppingList(datas);
}
else if ( cAction==2 ) {
while(true){
int sAction=view.printSearchMsg();
if(sAction==1) {
view.sStart(sAction);
String name=view.getName();
ArrayList<ShoppingVO> datas=sDAO.selectAll(new ShoppingVO(0,name,0,0));
view.printShoppingList(datas);
}
else if(sAction==2) {
view.sStart(sAction);
ShoppingVO sVO=view.getPrice();
ArrayList<ShoppingVO> datas=sDAO.selectAll(sVO);
view.printShoppingList(datas);
}
else if(sAction==3) {
ArrayList<ShoppingVO> datas=sDAO.selectAll(new ShoppingVO(1,"최고검색",0,0));
view.printShoppingList(datas);
}
else{
view.sEnd(sAction);
break;
}
}
}
else if ( cAction==3 ) {
view.cStart(cAction);
while(true) {
int num=view.getNum();
ShoppingVO data=new ShoppingVO(num,null,0,0);
if(sDAO.update(data)) {
view.cTrue(cAction);
ShoppingVO sVO=sDAO.selectOne(data);
view.printShopping(sVO);
view.cEnd(cAction);
break;
}
view.noItem();
continue;
}
}
else if ( cAction==4 ) {
view.cStart(cAction);
String mpw=view.getPassword();
if(member.getMpw().equals(mpw)) {
if(mDAO.delete(member)) {
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();
if(member.getMpw().equals(mpw)) {
String newName=view.getNewName();
MemberVO mVO1=new MemberVO(member.getMid(),"이름 변경",newName);
if(mDAO.update(mVO1)) {
view.uTrue(uAction);
}
else {
view.uFalse(uAction);
}
}
else {
view.uFalse(uAction);
}
}
else if(uAction==2) {
view.uStart(uAction);
String mpw=view.getPassword();
if(member.getMpw().equals(mpw)) {
String newMpw=view.getNewPassword();
MemberVO mVO1=new MemberVO(member.getMid(),newMpw,"비번 변경");
if(mDAO.update(mVO1)) {
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());
view.printMember(mDAO.selectOne(mVO1));
}
else{
view.uEnd(uAction);
break;
}
}
}
else {
view.cEnd(cAction);
break;
}
}
}
else {
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();
}
}