MainView 만들기.
package view;
import java.util.Scanner;
import dao.ProductDAO;
import dao.ProductDAO;
import dao.Session;
public class MainView {
public MainView() {
Scanner sc = new Scanner(System.in);
ProductDAO pdao = new ProductDAO();
while(true) {
//우리가 만든 프로젝트는 무조건 main()부터 시작하는 프로그램이다.
//즉 진입점이 한개이기 때문에 아래와 같은 코드를 생략 가능하다.
//*웹 상이나 다른 프로그램에서는 진입점이 여러개일 수 있으므로
//아래처럼 로그인 되어있는지를 먼저 검사해주는것이 필요하다.
if(Session.get("login_id") == null) {
System.out.println("로그인 후 이용하세요");
break;
}
System.out.println("☆★☆★☆★☆★"+Session.get("login_id")+"님 어서오세요~☆★☆★☆★☆★\n"
+ "1. 상품추가\n2. 상품수정\n3. 상품삭제\n"
+ "4. 내 상품 보기\n5. 상품 검색\n6. 내 정보 수정\n7. 로그아웃");
int choice = sc.nextInt();
if(choice == 7) {
//로그아웃
System.out.println(Session.get("login_id")+"님 안녕히가세요~");
//로그인한 정보를 담아주는 Session에서 login_id라는 KEY 와 쌍을 이루고 있는 값은
//로그아웃을 했다면 없애주어야 한다. 따라서 null로 초기화 해주어야 한다.
Session.put("login_id", null);
break;
}
switch(choice) {
case 1:
//상품추가
new AddProductView();
break;
case 2:
//상품수정
new ModifyProductView();
break;
case 3:
//상품삭제
//내 상품 목록 띄워주고 번호 입력받아서 삭제시키기
System.out.println(pdao.getList());
System.out.print("삭제할 상품 번호 : ");
int prodnum = sc.nextInt();
if(pdao.removeProduct(prodnum)) {
System.out.println(prodnum+"번 상품 삭제 성공!");
}
else {
System.out.println("알 수 없는 오류 / 다음에 다시 시도해 주세요.");
}
break;
case 4:
//내 상품 보기
System.out.println("===========내가 올린 상품 목록===========");
System.out.println(pdao.getList());
System.out.println("===================================");
break;
case 5:
//상품 검색
System.out.print("검색어를 입력하세요 : ");
sc = new Scanner(System.in);
String keyword = sc.nextLine();
System.out.println(pdao.search(keyword));
break;
case 6:
//내 정보 수정
new MyInfoView();
break;
}
}
}
}
상품 추가를 누른다면 AddProductView로 이동시켜 상품의 대한 내용을 입력 받고
ProductDAO의 addProduct 메소드를 호출하여 상품을 추가한다.
package view;
import java.util.Scanner;
import dao.ProductDAO;
import dao.Session;
import dto.ProductDTO;
public class AddProductView {
public AddProductView() {
//상품에 관련된 정보에 접근할 객체인 pdao 생성(상품 관련된 기능들이 선언되어 있다.)
ProductDAO pdao = new ProductDAO();
Scanner sc = new Scanner(System.in);
System.out.print("상품 이름 : ");
String prodname = sc.nextLine();
System.out.print("상품 가격 : ");
int prodprice = sc.nextInt();
System.out.print("상품 재고 : ");
int prodamount = sc.nextInt();
System.out.print("상품 소개 : ");
sc = new Scanner(System.in);
String prodinfo = sc.nextLine();
//지금 추가중인 상품의 상품번호는 현재 "추가되어 있는 마지막 상품의 번호"+1로 설정해 주어야 한다.
//pdao에 getLastNum()을 만들어서 리턴받고 +1 해준 것을 상품 번호로 사용한다.
ProductDTO product = new ProductDTO(pdao.getLastNum()+1, prodname, prodprice,
prodamount, prodinfo, Session.get("login_id"));//올린 사람은 현재
// 로그인 되어 있는 유저이므로 세션에서 아이디를 받아온 후 사용
//포장이 끝났다면 pdao의 메소드에 객체 넘겨주기
if(pdao.addProduct(product)) {
System.out.println(prodname+" 상품 추가 완료!");
}
else {
System.out.println("알 수 없는 오류 / 다음에 다시 시도해 주세요.");
}
}
}
상품 수정도 마찬가지로 ModifyProductView로 이동시켜서 유저의 상품 목록을 보여주고
수정할 상품 번호를 누르고 무엇을 수정할지와 새로운 내용을 입력하면
ProductDAO의 modifyProduct 메소드를 호출하여 수정을 완료한다.
package view;
import java.util.Scanner;
import dao.ProductDAO;
public class ModifyProductView {
public ModifyProductView() {
ProductDAO pdao = new ProductDAO();
Scanner sc = new Scanner(System.in);
//내가 올린 상품 목록 출력
System.out.println(pdao.getList());
System.out.print("수정할 상품 번호 : ");
int prodnum = sc.nextInt();
System.out.println("1. 가격수정\n2. 재고수정\n3. 설명수정");
int choice = sc.nextInt();
System.out.print("새로운 정보 : ");
sc = new Scanner(System.in);
String newData = sc.nextLine();
//세가지 입력받은 데이터를 DAO에 넘겨주기(행, 열, 새로운 데이터)
if(pdao.modifyProduct(prodnum,choice,newData)) {
System.out.println(prodnum+"번 상품이 정상적으로 수정되었습니다.");
}
else {
System.out.println("알 수 없는 오류 / 다음에 다시 시도해 주세요.");
}
}
}
상품 삭제는 따로 페이지 이동이 없고 바로 우리가 ProductDAO에 만들어둔 getList 메소드를
호출하여 유저의 상품 목록을 보여주고 상품 번호를 입력받게하여 입력받은 상품번호를 가지고 있는
상품을 삭제시켜준다.
내 상품보기도 마찬가지로 유저의 상품 목록을 보여주기 때문에 페이지 이동없이 우리가 ProductDAO에 만들어둔 getList 메소드를 호출하여 유저의 상품 목록을 보여준다.
상품 검색도 페이지 이동 없이 검색어를 입력 받은 후 입력받은 키워드를 가지고 그 키워드가 포함된 상품명을 찾아 목록을 띄워준다.
내 정보보기를 선택한다면 MyInfoView로 이동시켜 무엇을 수정할 것 인지 와 수정할 내용을 입력 받은 뒤 각각 알맞은 메소드를 호출하여 수정시켜 준다.
package view; import java.util.Scanner; import dao.ProductDAO; import dao.UserDAO; public class MyInfoView { public MyInfoView() { Scanner sc = new Scanner(System.in); UserDAO udao = new UserDAO(); ProductDAO pdao = new ProductDAO(); System.out.println(udao.myInfo()); System.out.println("1. 비밀번호 수정\n2. 핸드폰 번호 수정\n3. 주소 수정\n4. 수정 취소\n5. 회원탈퇴"); int choice = sc.nextInt(); if(choice == 4) { System.out.println("메인으로 돌아갑니다."); } else if(choice == 5) { System.out.print("비밀번호 재입력 : "); String userpw = sc.next(); //비밀번호 검사를 위해 udao의 checkPw() 호출 if(udao.checkPw(userpw)) { //회원탈퇴 진행 //탈퇴 진행 시 현재 탈퇴를 하려는 회원이 올린 모든 상품들도 삭제 혹은 사용불가 처리를 해주어야 한다. //후에 삽입될 데이터와 충돌이 발생할 수 있기 때문이다. 상품을 관리할 pdao를 통해 removeAll()을 //먼저 진행해준다. *실제 DB 환경에서도 상품 삭제가 먼저 되어야지만 회원을 탈퇴 시킬 수 있다. pdao.removeAll(); //상품까지 깨끗하게 처리되었으므로 실제 회원 데이터 삭제 진행 if(udao.leaveId()) { System.out.println("그동안 이용해 주셔서 감사합니다...☆"); } } //비밀번호 검사 실패 else { System.out.println("비밀번호 오류"); } } //무언가 회원 정보를 수정하려고 선택했을 때 else { System.out.print("새로운 정보 : "); sc = new Scanner(System.in); String newData = sc.nextLine(); boolean check = false; switch(choice) { case 1: check = udao.modifyUser(1,newData); break; case 2: case 3: check = udao.modifyUser(choice+2,newData); break; } if(check) { System.out.println("정보 수정 완료!"); } else { System.out.println("정보 수정 실패"); } } } }
ProductDAO
package dao;
import java.util.ArrayList;
import java.util.HashSet;
import dto.ProductDTO;
public class ProductDAO {
DBConnection conn = null;
public ProductDAO() {
conn = new DBConnection("database/ProductTable.txt");
}
public int getLastNum() {
String lastPK = conn.lastPK();
if(lastPK == null) {
return 0;
}
else {
return Integer.parseInt(lastPK);
}
}
public boolean addProduct(ProductDTO product) {
return conn.insert(product.toString());
}
public String getList() {
//상품 테이블의 6번 열 에는 상품의 주인이 누구인지 아이디로 담겨있다.
//select()를 통해 6번 열에서 세션의 아이디로 검색을 해온다.(세션이 올린 모든 상품이 담겨온다)
HashSet<String> rs = conn.select(6,Session.get("login_id"));
String result = "";
//1. 구찌 지우개 : 10000원(재고 : 3개)
//2. 루이비똥 연필 : 10000원(재고 : 3개)
//rs에서 한 줄씩 꺼내며 반복
for(String line : rs) {
//꺼내온 line을 split 해주면 데이터들이 담겨있는 배열로 리턴
String[] datas = line.split("\t");
//포매팅 한 후 result에 누적연결
result += String.format("%s. %s : %s원(재고 : %s개)\n", datas[0],datas[1],datas[2],datas[3]);
}
//모든 문자열이 연결된 result 리턴
return result;
}
public boolean removeProduct(int prodnum) {
return conn.delete(prodnum+"");
}
public boolean modifyProduct(int prodnum, int choice, String newData) {
//상품의 어떤 정보를 수정할 것인지가 choice에 담겨있는데, 그 수정되어야 하는 열 번호는
//choice+1번 열이다. 따라서 update()에 상품번호와 열 번호, 새로운 정보 세가지를 넘겨주며 수정시킨다.
return conn.update(prodnum+"", choice+1, newData);
}
public void removeAll() {
HashSet<String> rs = conn.select(6,Session.get("login_id"));
for(String line : rs) {
conn.delete(line.split("\t")[0]);
}
}
public String search(String keyword) {
HashSet<String> rs = conn.select();
ArrayList<String> result = new ArrayList<String>();
for(String line : rs) {
String[] datas = line.split("\t");
if(datas[1].contains(keyword)) {
result.add(line);
}
}
//"지우개"로 검색된 결과
String resultMsg = "\""+keyword+"\"로 검색된 결과\n";
if(result.size() == 0) {
resultMsg += "해당하는 상품이 없습니다\n";
}
else {
for(String line : result) {
String[] datas = line.split("\t");
//포매팅 한 후 result에 누적연결
resultMsg += String.format("%s. %s : %s원(재고 : %s개) - %s\n", datas[0],
datas[1],datas[2],datas[3],datas[6]);
}
}
return resultMsg;
}
}
ProductDTO
package dto;
public class ProductDTO {
int prodnum;
String prodname;
int prodprice;
int prodamount;
String prodinfo;
int likecnt;
//어떤 유저가 올린 상품인지를 같이 저장해야 하므로 외부의 테이블과 연결이 필요하다.
String userid; //FK(Foreign Key)
public ProductDTO(int prodnum, String prodname, int prodprice, int prodamount, String prodinfo,
String userid) {
this.prodnum = prodnum;
this.prodname = prodname;
this.prodprice = prodprice;
this.prodamount = prodamount;
this.prodinfo = prodinfo;
this.likecnt = 0;
this.userid = userid;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof ProductDTO) {
ProductDTO target = (ProductDTO)obj;
return target.hashCode() == this.hashCode();
}
return false;
}
@Override
public int hashCode() {
return prodnum;
}
@Override
public String toString() {
return prodnum+"\t"+prodname+"\t"+prodprice+"\t"+
prodamount+"\t"+prodinfo+"\t"+likecnt+"\t"+userid;
}
}
상품 추가에서 자세히 볼 상품번호를 선택했다면 그 번호에 해당하는 상품 정보를 띄워주는 ProductInfoView 만들기!
//내부메뉴
//1. 좋아요 누르기
//2. 판매자 연락처 보기
//3. 돌아가기
case 5:
//상품 검색
System.out.print("검색어를 입력하세요 : ");
sc = new Scanner(System.in);
String keyword = sc.nextLine();
System.out.println(pdao.search(keyword));
System.out.print("자세히 볼 상품 번호 : ");
int pro = sc.nextInt();
new ProductInfoView(pro);
//자세히 볼 상품번호를 선택했다면 그 번호에 해당하는 상품 정보를 띄워주는 ProductInfoView 만들기!
//내부메뉴
//1. 좋아요 누르기
//2. 판매자 연락처 보기
//3. 돌아가기
break;
ProductInfoView
package view;
import java.util.Scanner;
import dao.ProductDAO;
import dao.UserDAO;
public class ProductInfoView {
public ProductInfoView(int pro) {
Scanner sc = new Scanner(System.in);
ProductDAO pdao = new ProductDAO();
UserDAO udao = new UserDAO();
System.out.println("1. 좋아요 누르기/n2. 판매자 연락처 보기/n3. 돌아가기");
int choice = sc.nextInt();
if(choice == 3) {
System.out.println("메인으로 돌아갑니다.");
}else {
switch (choice) {
case 1:
if(pdao.likecntUp(pro)) {
System.out.println("좋아요 누르기 성공~!");
System.out.println("좋아요는 많이많이 눌러주세요");
}
else {
System.out.println("좋아요 누르기 실패");
}
break;
case 2:
String userid = pdao.getUserId(pro);
System.out.println(udao.getPone(userid));
break;
}
}
}
}
좋아요 누르기
public boolean likecntUp(int pro) {
//기존에 있는 좋아요 개수에서 +1을 해주는 것 이기 때문에 기존의 좋아요 수 부터 구해야한다
HashSet<String> like = conn.select(0, pro+"");
String result = "";
for(String line : like) {
String [] datas = line.split("\t");
result += datas[5];
}
int likecnt = Integer.parseInt(result) + 1;
return conn.update(pro+"", 5, likecnt+"");
}
판매자 연락처 보기는 상품번호로 판매자의 아이디를 찾아 return으로 넘긴다음
UserDAO에서 그 판매자의 아이디를 받아 판매자의 번호를 찾아 return 시켜준다.
public String getUserId(int pro) {
HashSet<String> str = conn.select(0,pro+"");
String result = "";
for(String line : str) {
String [] datas = line.split("\t");
result += datas[6];
}
return result;
}
public String getPone(String userid) {
HashSet<String> str = conn.select(0, userid);
String result = "";
for(String line : str) {
String [] datas = line.split("\t");
result += "판매자 연락처 : "+datas[4];
}
return result;
}