본문 바로가기

IT일반과목/java

MVC패턴으로 소스 짜보기2



=======================================================================

package kh.java.run;


import kh.java.view.View;


public class Run {

public static void main(String[] args) {

View v = new View();

v.main();


 

 

}

}


--------------------------------------------------------------------------------------------
package kh.java.view;

import java.util.Scanner;

import kh.java.controller.Controller;
import kh.java.model.vo.Gold;
import kh.java.model.vo.Grade;
import kh.java.model.vo.Silver;
import kh.java.model.vo.Vip;

public class View implements ViewInter{

Scanner sc = new Scanner(System.in);
Controller c = new Controller();

@Override
public void main() {
// TODO Auto-generated method stub
while (true) {
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("0. 프로그램 종료");
System.out.print("선택 : ");
int sel = sc.nextInt();

switch (sel) {// 내가 선택한걸 쓴다.
case 1:
insertData();
break;// 데이터삽입
case 2:
printData();
break;// 보여주는것
case 3:
modifyData();
break;// 변형하는것
case 4:
deleteData();
break;// 삭제하는것
default:
return;// 종료시키는것
}
}



}

@Override
public void insertData() {
System.out.print("등급 입력(Silver/Gold/Vip) : ");
String rank = sc.next();
System.out.print("이름입력 : ");
String name = sc.next();
System.out.print("포인트입력 : ");
int point = sc.nextInt();
// 처음에 값을 다 입력 받았다.
c.insertData(name, rank, point);

}




@Override
public void modifyData() {
System.out.print("검색될 회원 이름 입력 : ");
String sel = sc.next();
int result = c.searchData(sel);//몇번째배열에있는지
System.out.print("수정될 등급 입력(Silver/Gold/Vip) : ");
String rank = sc.next();
System.out.print("수정될 이름 입력 : ");
String name = sc.next();
System.out.print("수정될 점수 입력 : ");
int point = sc.nextInt();
c.modifiData(sel, result, name, rank, point);
// Grade g = null;
// if(rank.equals("Silver")) {
// g=new Silver(name,rank,point);
// }else if(rank.equals("Gold")) {
// g=new Gold(name,rank,point);
// }else if(rank.equals("Vip")) {
// g=new Vip(name,rank,point);
// }
//
// c.modifiData(g, result);
//
//이거인경우에 Grade라는 g라는 객체를 생성후 silver에는 실버를, 골드엔 골드에, Vip에는 골드를 넣어줬다.
}

@Override
public void deleteData() {
System.out.print("검색될 회원 이름 입력 : ");
String sel = sc.next();
int result=c.searchData(sel);
c.deleteData(result);
System.out.println("삭제가 성공했습니다.");

}

@Override
public void printData() {
System.out.println("=====학생출력=====");
System.out.println("이름\t 등급\t 포인트\t 이자포인트");
for(int i=0; i<c.count(); i++) {//Controller의 count를 갖고왔다.
Grade g = c.printData(i);//주소값 저장하기 위해 잠깐 만든것이다.

System.out.printf("%s \t\t %s \t %d \t\t %.1f\n", g.getName(),g.getRank(), g.getPoint(),
g.getEija());


}
}
}

-------------------------------------------------------------------------------
package kh.java.view;

public interface ViewInter {
public void main();
public void insertData();
public void modifyData();
public void deleteData();
public void printData();
}

---------------------------------------------
package kh.java.model.vo;

public class Gold extends Grade {

public Gold() {
}//기본생성자
public Gold(String name, String rank, int point) {
super(name,rank,point);
}
@Override//부모객체에있는 Eija를 내가 명시해서 쓸꺼야.
public double getEija() {
return getPoint()*0.03;//정수랑 실수연산하면 어차피 자동형변환이라 강제형변환 안해줘도 된다.
}//this안써도된다.
//Grade에서 추상화되어있다면 무조건 에러뜬다.
// private String name;//이름
// private String rank;//등급
// private int point;//등급
//
// public Gold(String name, String rank, int point) {
// this.name = name;
// this.rank=rank;
// this.point=point;
// }
//
//
//
//
// public String getName() {
// return name;
// }
// public void setName(String name) {
// this.name = name;
// }
// public String getRank() {
// return rank;
// }
// public void setRank(String rank) {
// this.rank = rank;
// }
// public int getPoint() {
// return point;
// }
// public void setPoint(int point) {
// this.point = point;
// }
}

-------------------------------------------------------------------------------
package kh.java.model.vo;

public abstract class Grade {
private String name;
private String rank;
private int point;
public Grade() {

}//기본생성자
public Grade(String name, String rank, int point) {
this.name = name;
this.rank = rank;
this.point = point;
}


public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
public abstract double getEija();
//다른 곳에서 실제 무조건 상속받아 쓰라는 것이다.







}

--------------------------------------------------------------
package kh.java.model.vo;

public class Silver extends Grade {

public Silver() {
}
public Silver(String name, String rank, int point) {
super(name,rank,point);
}//내 생성자를 호출했을때 값3개를 전달해준다. 그럼 grade에 생성자로 바로 간다.
@Override//부모객체에있는 Eija를 내가 명시해서 쓸꺼야.
public double getEija() {
return getPoint()*0.02;
}//실버의 이자포인트를 썼다.
//이렇게 하면 실버 객체가 끝난다.
//Grade에서 추상화되어있다면 무조건 에러뜬다.
public void print() {
System.out.println("내등급은 Silver");
}
//
// public Silver(String name, String rank, int point) {
//
// this.name=name;
// this.rank=rank;
// this.point=point;
// }
//
//
//
// private String name;//이름
// private String rank;//등급
// private int point;//등급
//
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public String getRank() {
// return rank;
// }
//
// public void setRank(String rank) {
// this.rank = rank;
// }
//
// public int getPoint() {
// return point;
// }
//
// public void setPoint(int point) {
// this.point = point;
// }
//
// public double getEija() {
// return (point*0.02);//정수랑 실수연산하면 어차피 자동형변환이라 강제형변환 안해줘도 된다.
// }
// public void setEija(int point) {
// this.point = point;
// }
//
//
// public Silver() {
//
// }//기본생성자
//


}

------------------------------------------------------------------
package kh.java.model.vo;

public class Vip extends Grade {

public Vip() {
}
public Vip(String name, String rank, int point) {
super(name,rank,point);
}
@Override
public double getEija() {
return getPoint()*0.05;
}
//Grade에서 추상화되어있다면 무조건 에러뜬다.
}

------------------------------------------------------------------------------

package kh.java.model.vo;


public class Vvip extends Grade {


public Vvip() {

}

public Vvip(String name, String rank, int point) {

super(name,rank,point);

}

@Override

public double getEija() {

return getPoint()*0.07;

}

}


---------------------------------------------------------------------------

package kh.java.controller;

import java.util.Scanner;//Scanner를 쓰기위해 하였다.

import kh.java.model.vo.Gold;
import kh.java.model.vo.Grade;
import kh.java.model.vo.Silver;
import kh.java.model.vo.Vip;

public class Controller implements ContIter {// PntMgrInterface를 implements 하였다.

public Controller() {

}// 기본 생성자를 만들어주었다.
Scanner sc = new Scanner(System.in);

Grade [] g = new Grade[30];
int index=0;
@Override
public void insertData(String name, String rank, int point) {
// TODO Auto-generated method stub
switch (rank) {
case "Silver":
g[index++]=new Silver(name,rank,point);
break;

case "Gold": 
g[index++] = new Gold(name, rank, point);
break;

case "Vip":
g[index++] = new Vip(name, rank, point);
break;

default:
System.out.println("잘못 입력하셨습니다. (회원 추가를 종료합니다.)");
break;

}
}
@Override
public int searchData(String name) {
// System.out.print("검색될 회원 이름 입력 : ");
// String sel = sc.next();
for(int i=0; i<index; i++) {
if(g[i].getName().equals(name)) {
return i;
}
}
return -1; // 배열의 몇번째인지를 리턴받는다.

}
@Override
public void modifiData(Grade g, int result) {
this.g[result]=g;
}
//매개변수가 다른것이다.
@Override
public void modifiData(String sel, int result,String name, String rank, int point) {
if (rank.equals("Silver")) {// String형태이므로 equals를 썼다.
g[result]= new Silver(name,rank,point);
}

else if (rank.equals("Gold")) {// String형태이므로 equals를 썼다.
//System.out.println("실버에서골드");
g[result]= new Silver(name,rank,point);

}

else if (rank.equals("Vip")) {// String형태이므로 equals를 썼다.
//System.out.println("실버에서브이아이피");
g[result] = new Vip(name, rank, point);

}
}
@Override
public void deleteData(int result) {
for (int i = 0; i < index; i++) {
if (g[i].getName() == g[result].getName()) {
g[i] = g[i + 1];// 찾고나면 뒤에꺼를 앞으로 하나씩 밀어준다.
}

}

index--;// 하나를 삭제했으니 마이너스를 해준다.


}
@Override
public int count() {
// TODO Auto-generated method stub
return index;
}//index라는걸 넘겨주기 위해 만들었다.

@Override
public Grade printData(int i) {
// TODO Auto-generated method stub
return g[i];//요청한인덱스번호의 주소를 리턴해줄께 Student타입으로 리턴해줄께
}
}

-----------------------------------------------------------------------------
package kh.java.controller;
import kh.java.model.vo.Grade;
public interface ContIter {
public void insertData(String name, String grade, int point);
public int searchData(String name);
public void modifiData(String sel, int result,String name, String grade, int point);
public void modifiData(Grade g, int result);
public void deleteData(int result);
public int count();
public Grade printData(int i);
}


'IT일반과목 > java' 카테고리의 다른 글

자바 제너릭(Generic)2  (0) 2018.08.03
자바 제너릭(Generic)  (0) 2018.08.03
MVC패턴으로 소스 짜보기  (0) 2018.08.02
자바 Collections 2  (0) 2018.08.01
자바 Collections  (0) 2018.08.01