헬린코린이
MVC 패턴 VO 2개 이용 본문
이번에도 많이 부족하지만
VO를 두 개 이용한 간단한 프로젝트를 작성했다.
package client;
import ctrl.Ctrl;
public class Client {
public static void main(String[] args) {
Ctrl app = new Ctrl();
app.startAPP();
}
}
model
memberVO
package model;
public class MemberVO {
private String id; //PK
private String pw; //apple1234
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "MemberVO [id=" + id + ", pw=" + pw + ", name=" + name + "]";
}
public MemberVO() {
}
public MemberVO(String id, String pw, String name) {
this.id = id;
this.pw= pw;
this.name=name;
}
}
ProductVO
package model;
public class ProductVO {
private int num; //PK
private String name;
private int price;
private int 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 "ProductVO [num=" + num + ", name=" + name + ", price=" + price + ", cnt=" + cnt + "]";
}
public ProductVO() {
}
public ProductVO(int num, String name, int price,int cnt) {
this.num=num;
this.name=name;
this.price=price;
this.cnt=cnt;
}
}
MemberDAO
package model;
import java.util.ArrayList;
public class MemberDAO {
ArrayList<MemberVO> mdatas;
public MemberDAO() {
mdatas=new ArrayList<MemberVO>();
//샘플 데이터
mdatas.add(new MemberVO("time","1234","티모"));
}
public MemberVO selectOne(MemberVO mvo) { //로그인
for(int i=0; i<mdatas.size(); i++) {
if(mdatas.get(i).getId().equals(mvo.getId())) {
System.out.println(" 로그: 아이디 존재함");
if(mdatas.get(i).getPw().equals(mvo.getPw())) {
System.out.println(" 로그: 비밀번호 일치함");
System.out.println(" 로그: 로그인 성공");
return mdatas.get(i);
}
}
}
System.out.println(" 로그: 로그인 실패");
return null;
}
//d
public boolean withdrawal(MemberVO mvo) { //회원탈퇴
for(int i=0; i<mdatas.size(); i++) {
if(mdatas.get(i).getId().equals(mvo.getId())) {
if(mdatas.get(i).getPw().equals(mvo.getPw())) {
mdatas.remove(i);
return true;
}
}
}
return false;
}
//u
public boolean update(MemberVO mvo) {
for(int i=0; i<mdatas.size(); i++) {
if(mvo.getName() != null) { //이름 변경
mdatas.get(i).setName(mvo.getName());
return true;
}else if(mvo.getPw() != null) { //비밀번호 변경
mdatas.get(i).setPw(mvo.getPw() );
return true;
}
}
return false;
}
//c
public boolean insert(MemberVO mvo) {
for(int i=0; i<mdatas.size(); i++) {
if(!mdatas.get(i).getId().equals(mvo.getId())) {
mdatas.add(new MemberVO(mvo.getId(),mvo.getPw(),mvo.getName()));//?
return true;
}
}
return false;
}
}
ProductDAO
package model;
import java.util.ArrayList;
public class ProductDAO {
ArrayList<ProductVO> pdatas;
int PK;
public ProductDAO() {
pdatas=new ArrayList<ProductVO>();
PK=1011;
pdatas.add(new ProductVO(PK++,"커피",2500,1));
pdatas.add(new ProductVO(PK++, "케이크",4700,0));
pdatas.add(new ProductVO(PK++, "홍차",3200,2));
}
public ArrayList<ProductVO> selectAll(ProductVO pvo){
return pdatas;
}
public ProductVO selectOne(ProductVO pvo){
for(int i=0; i<pdatas.size(); i++) {
if(pdatas.get(i).getNum()==pvo.getNum()) {
return pdatas.get(i);
}
}
return null;
}
// c
public boolean insert(ProductVO pvo) {
pdatas.add(new ProductVO(PK++,pvo.getName(),pvo.getPrice(),pvo.getCnt()));//?
return true;
}
//d
public boolean delete(ProductVO pvo) {
for(int i=0; i<pdatas.size(); i++) {
if(pdatas.get(i).getName().equals(pvo.getName())) {
pdatas.remove(i);
return true;
}
}
return false;
}
//u
public boolean update(ProductVO pvo) {
for(int i=0; i<pdatas.size(); i++) {
if(pvo.getName() != null) {
pdatas.get(i).setName(pvo.getName());
return true;
}else if(pvo.getPrice()!=0) { //?
pdatas.get(i).setPrice(pvo.getPrice());
return true;
}else if(pvo.getCnt() !=0) {
pdatas.get(i).setCnt(pvo.getCnt());
return true;
}
}
return false;
}
public boolean buy(ProductVO pvo) {
// 구매 로직
for(int i=0;i<pdatas.size();i++) {
if(pdatas.get(i).getNum()==pvo.getNum()) {
if(pdatas.get(i).getCnt()>0) {
pdatas.get(i).setCnt(pdatas.get(i).getCnt()-1);
return true;
}
}
}
return false;
}
}
view
package view;
import java.awt.Desktop.Action;
import java.util.ArrayList;
import java.util.Scanner;
import model.MemberVO;
import model.ProductVO;
public class View {
private Scanner sc;
public View() {
sc=new Scanner(System.in);
}
// DBxxx
public int printStart() {
// 1. 사용자의 입력값을 검사 == 유효성 검사
// 2. 사용자에게 상황을 안내 == 사용자 편의성 고려
int action;
while(true) {
try {
System.out.println();
System.out.println("=== 메인화면 ===");
System.out.println("1. 로그인");
System.out.println("2. 프로그램 종료");
System.out.println("3. 회원가입");
System.out.println("4. 회원탈퇴");
System.out.println("5. 회원정보 변경");
System.out.print(">>> ");
action = sc.nextInt();
}catch (Exception e){
sc.nextLine();
System.out.println("정수로 입력해주세요");
continue;
}
if(1<=action && action<=5) {//저ㅏㅇ확하게 입력했따면
break;
}
System.out.println("범위를 확인하고 다시 입력해주세요!");
}
return action; //유효성검사 뷰에서ㅗ 하는 거임
}
public void powerOff() {
for(int i=0; i<5; i++) {
System.out.println(".");
try {
Thread.sleep(250);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("프로그램 종료");
}
public MemberVO login() {
//아이디 String
//비밀번호 String
// 데이터를 2개이상 전달해야할떄,
// VO를 사용한다.
System.out.println();
System.out.println("=== 로그인 ===");
System.out.println("아이디 >> ");
String id = sc.next();
System.out.println("비밀번호 >>");
String pw = sc.next();
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPw(pw);
return vo;
}
public MemberVO joinMembership() {
//아이디 String
//비밀번호 String
// 데이터를 2개이상 전달해야할떄,
// VO를 사용한다.
System.out.println();
System.out.println("=== 회원가입 ===");
System.out.println("아이디 >>");
String id = sc.next();
System.out.println("비밀번호 >>");
String pw = sc.next();
System.out.println("비밀번호 확인 >>");
String pwCheck = sc.next();
if(pw.equals(pwCheck)) {
System.out.println("ㄴㄴ비밀번호 똑같은");
}
System.out.println("이름 >>");
String name = sc.next();
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPw(pw);
vo.setName(name);
return vo;
}
public void loginTrue(MemberVO vo) {
System.out.println(vo.getName()+"님, 안녕하세요! :D");
}
public void loginFalse() {
System.out.println("로그인 실패...");
System.out.println("아이디 or 비밀번호를 다시 확인해보세요!");
}
public void joinMembershipFalse() {
System.out.println("이미 있는 아이디입니다.");
}
public void logout() {
System.out.println("로그아웃 되었습니다.");
}
public int printMenu() {
int action;
while(true) {
try {
System.out.println();
System.out.println("=== 서비스 ===");
System.out.println("1. 상품 목록 출력");
System.out.println("2. 상품 선택 구매");
System.out.println("3. 로그아웃");
System.out.print(">>> ");
action = sc.nextInt();
}catch (Exception e) {
sc.nextLine();
System.out.println("정수로 다시 입력해주세요!");
continue;
}
if(1<=action && action<=3) {//올바른 입력
break;
}
System.out.println("범위를 확인하고 다시 입력해주세요!");
}
return action;
}
public int printProductMenu(ArrayList<ProductVO> datas) {
System.out.println();
System.out.println("=== 상품 목록 ===");
for(ProductVO v: datas) {
System.out.println(v.getNum()+"."+v.getName()+" "+v.getPrice()+"원 ["+v.getCnt()+"]");
//System.out.println("PK.상품명 0원 [2]");
}
System.out.println("0. 상품정보 변경");
System.out.println("1. 뒤로가기");
int action = sc.nextInt();
return action;
}
public int BuyProduct(ArrayList<ProductVO> datas) {
System.out.println();
System.out.println("=== 상품 목록 ===");
for(ProductVO v: datas) {
if(v.getCnt()==0) {//재고가 없으면
System.out.print("[X] ");
}else {
System.out.print(v.getNum()+". ");
}
System.out.println(v.getName()+" "+v.getPrice()+"원");
//System.out.println("1. 목도리 10000d원");
//System.out.println("[X] 목도리 10000d원");
}
int num=0;
while(true) {
try {
System.out.print("상품번호 >>");
num = sc.nextInt();
}catch (Exception e) {}
for(int i=0; i<datas.size(); i++) {
if(datas.get(i).getNum()==num) {
break;
}
}
return num;
}
}
public void buyTrue(MemberVO mvo, ProductVO pvo) {
System.out.println("");
System.out.println(" === 영수증 ===");
System.out.println(pvo.getName()+" "+pvo.getPrice()+"원");
System.out.println(mvo.getName()+"님, "+pvo.getName()+"을 구매완료했습니다.");
}
public void buyFalse() {
System.out.println("구매실패... 잠시후 다시 이용해주세요!");
}
public void success() {
System.out.println("성공했습니다.");
}
public void failed() {
System.out.println("실패했습니다.");
}
public int informationUpdate() {
System.out.println("1. 비밀번호 변경");
System.out.println("2. 이름 변경");
System.out.println(">> ");
int action = sc.nextInt();
return action;
}
public MemberVO mdaoPw() {
System.out.println("변경하실 비밀번호를 입력해주세요");
System.out.println(">> ");
String pw = sc.next();
MemberVO mvo = new MemberVO();
mvo.setPw(pw);
return mvo;
}
public MemberVO mdaoName() {
System.out.println("변경하실 이름을 입력해주세요");
System.out.println(">> ");
String name = sc.next();
MemberVO mvo = new MemberVO();
mvo.setName(name);
return mvo;
}
public ProductVO pdaoPrice() {
System.out.println("변경하실 가격을 입력해주세요");
System.out.println(">> ");
int price = sc.nextInt();
ProductVO pvo = new ProductVO();
pvo.setPrice(price);
return pvo;
}
public ProductVO pdaoName() {
System.out.println("변경하실 이름을 입력해주세요");
System.out.println(">> ");
String name = sc.next();
ProductVO pvo = new ProductVO();
pvo.setName(name);
return pvo;
}
public ProductVO pdaoCnt() {
System.out.println("변경하실 재고을 입력해주세요");
System.out.println(">> ");
int cnt = sc.nextInt();
ProductVO pvo = new ProductVO();
pvo.setCnt(cnt);
return pvo;
}
public int pdaoUpdate() {
System.out.println("변강할 상품을 입력해주세요");
System.out.println("1. 상품이름");
System.out.println("2. 상품가격");
System.out.println("3. 상품재고");
int action = sc.nextInt();
return action;
}
public int seachNum() {
System.out.print("변경할 상품번호 >>");
int num = sc.nextInt();
return num;
}
public void printProductMenuAll(ArrayList<ProductVO> datas) {
System.out.println();
System.out.println("=== 상품 목록 ===");
for(ProductVO v: datas) {
System.out.println(v.getNum()+"."+v.getName()+" "+v.getPrice()+"원 ["+v.getCnt()+"]");
//System.out.println("PK.상품명 0원 [2]");
}
}
public void replay() {
System.out.println("없는 번호입니다.");
}
public void list() {
System.out.println("상품목록을 다시 선택해주세요.");
}
}
ctrl
package ctrl;
import model.MemberDAO;
import model.MemberVO;
import model.ProductVO;
import model.ProductDAO;
import view.View;
public class Ctrl {
View view;
MemberDAO mdao;
ProductDAO pdao;
public Ctrl() {
view=new View();
mdao = new MemberDAO();
pdao= new ProductDAO();
}
public void startAPP() {
while(true) {
int action =view.printStart();
if(action==1) {
MemberVO mvo= view.login();
mvo=mdao.selectOne(mvo); //왜 저장해야하는지 선생님께 물어보기
if(mvo==null) {
//로그인 실패
view.loginFalse();
continue;
}
view.loginTrue(mvo);
while(true) {
action=view.printMenu();
if(action==1) {
action=view.printProductMenu(pdao.selectAll(null));
if(action==0) {
view.printProductMenuAll(pdao.selectAll(null));
action = view.seachNum();
ProductVO pvo = new ProductVO();
pvo.setNum(action);
pvo =pdao.selectOne(pvo);
if(pvo==null) {
view.list();
continue;
}
action = view.pdaoUpdate();
if(action==1) {
pvo = view.pdaoName();
if(pdao.update(pvo)) {
view.success();
continue;
}
}else if(action==2) {
ProductVO price =view.pdaoPrice();
if(pdao.update(price)) {
view.success();
continue;
}
}else if(action==3) {
ProductVO cnt =view.pdaoCnt();
if(pdao.update(cnt)) {
view.success();
continue;
}
}
view.failed();
}
}else if(action==2) {
int num =view.BuyProduct(pdao.selectAll(null));
ProductVO pvo = new ProductVO();
pvo.setNum(num);
pvo=pdao.selectOne(pvo);
if(pvo==null) {
view.replay();
continue;
}
if(pdao.buy(pvo)) {
view.buyTrue(mvo, pvo);
}else {
view.buyFalse();
}
}else if(action ==3) {
view.logout();
break;
}
}
}else if(action ==2) {
view.powerOff();
return;
}else if(action ==3) { //로직 구성
MemberVO mvo =view.joinMembership();
if(mdao.insert(mvo)) {
view.success();
}
view.joinMembershipFalse();
}else if(action ==4) {
MemberVO mvo = view.login();
if(mdao.withdrawal(mvo)) {
view.success();
continue;
}
view.loginFalse();
}else if(action ==5) {
MemberVO mvo = view.login();
mvo=mdao.selectOne(mvo);
if(mvo==null) {
view.loginFalse();
continue;
}
view.success();
action = view.informationUpdate();
if(action==1) {
MemberVO mvo1 = view.mdaoPw();
if(mdao.update(mvo1)) {
view.success();
continue;
}
}else if(action ==2) {
MemberVO mvo1 = view.mdaoName();
if(mdao.update(mvo1)) {
view.success();
continue;
}
}
view.buyFalse();
}
}
}
}
이렇게 하는게 좋은 코드 인지도 모르겠다.
더 좋은 코드를 작성하기위한 발판일지도 모른다.
열심히 하면 된다!
Comments