본문 바로가기

IT일반과목/java

포인트관리프로그램(다형성)

 


package kh.java.point.controller;

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

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

public class PntMgr2 implements PntMgrInterface {// PntMgrInterface를 implements 하였다.

 public PntMgr2() {

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

 
 int c;
 char mun;
 int nn;

 
 //-----------------------------------------------------------------------
 //다형성을 쓴다면
 private Grade [] g = new Grade[30];
 private int index=0;
 
 //-------------------------------------------------------------------
 
 
 public void start() {// 시작화면이며 나는 Run에서 이걸 호출할것이다.기존의 main과 같은역할이다.
  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;// 종료시키는것
   }
  }

 }// -> 포인트 관리프로그램 운영

 public int searchData() {// 찾는값이다.난 이걸 리턴값은 배열의 순서로 리턴받고 캐릭터형으로 값을 받았다.
  System.out.print("검색될 회원 이름 입력 : ");
  String sel = sc.next();
  for (int i = 0; i < index; i++) {
   if (sel.equals(g[i].getName()) == true) {// String는 참조형이다 그러므로 이름하고 비교를 equals로해서 true인지 false인지 비교하였다.
    c = i;// 위에if문이 맞다면 c에다가 i값을 넣어라
    break;
   }
  }
 
  System.out.print("");
  return c; // 배열의 몇번째인지를 리턴받는다.

 }// -> 삽입하는 메소드

 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();
  // 처음에 값을 다 입력 받았다.
  
  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;

  }

 }// -> 회원 가입하는 메소드

 public void modifyData() {// 변형하는 것이다.

  nn = searchData();// 검색데이터에서 값을 불러왔다.
//  System.out.println("몇번째 배열 : " + nn);// 몇번째 배열에 있는지 나타내는 숫자
//  System.out.println("몇번째 순위 : " + mun);// 어디rank에 있는지 나타내는것
  System.out.print("수정될 등급 입력(Silver/Gold/Vip) : ");
  String rank = sc.next();
  System.out.print("수정될 이름 입력 : ");
  String name = sc.next();
  System.out.print("수정될 점수 입력 : ");
  int point = sc.nextInt();

  
   if (rank.equals("Silver")) {// String형태이므로 equals를 썼다.
    System.out.println("실버에서실버");// 실버에서 실버일경우
    
    g[nn]=new Silver(name,rank,point);
    

   }

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

   }

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

  }


 }// -> 회원수정하는 메소드

 public void deleteData() {// 삭제하는 것이다.

  nn = searchData();// 처음에 검색을 해서 값을 받아온다.
  System.out.println("회원정보가 삭제되었습니다.");// 삭제출력이 먼저 뜨도록 하였다.
  // nn -> 배열순서
  // mun -> 어떤클래스인지
  
   for (int i = 0; i < index; i++) {
    if (g[i].getName() == g[nn].getName()) {// 실버의 이름이 값은거를 찾는다.
     g[i] = g[i + 1];// 찾고나면 뒤에꺼를 앞으로 하나씩 밀어준다.
    }

   }

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

 
  

 }// -> 회원삭제하는 메소드

 public void printData() {// Silver,Gold,Vip각각 다르므로 썻고 출력을 인덱스까지 출력하도록 하였다.

  System.out.println("<< =================== information =================== >>");
  System.out.println("이름 \t\t 등급 \t\t 포인트 \t 이자포인트 \t");
  for (int i = 0; i < index; i++) {
   System.out.printf("%s \t\t %s \t %d \t\t %.1f\n", g[i].getName(), g[i].getRank(), g[i].getPoint(),
     g[i].getEija());
  }


 }

}
---------------------------------------------------------------------------------------------------------------------------

package kh.java.point.controller;

public interface PntMgrInterface {
 public void insertData() ; // -> 회원 가입하는 메소드
 public void start(); // -> 포인트 관리프로그램 운영
 public int searchData(); // -> 회원정보 검색
 public void modifyData(); // -> 회원수정하는 메소드
 public void deleteData(); // -> 회원삭제하는 메소드
}

 

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

package kh.java.point.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.point.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.point.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.point.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.point.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.point.run;

import kh.java.point.controller.PntMgr2;

public class Run {
 public static void main(String[] args) {
   PntMgr2 mgr = new PntMgr2();
   mgr.start();
//   mgr.insertData(new Silver("홍길동","Silver",1000));
//   mgr.insertData(new Silver("김말똥","Silver",2000));
//   mgr.insertData(new Silver("고길똥","Silver",3000));
//  
//   mgr.insertData(new Gold("홍길동","Gold",1000));
//   mgr.insertData(new Gold("김말똥","Gold",2000));
//   mgr.insertData(new Gold("고길똥","Gold",3000));
//  
//   mgr.insertData(new Vip("홍길동","Vip",1000));
//   mgr.insertData(new Vip("김말똥","Vip",2000));
//   mgr.insertData(new Vip("고길똥","Vip",3000));
//  
//   mgr.insertData(new Vvip("홍길동","Vvip",1000));
//   mgr.insertData(new Vvip("김말똥","Vvip",2000));
//   mgr.insertData(new Vvip("고길똥","Vvip",3000));
//   mgr.printData();
  
  
  
 }
}