-
※문제. 사원정보 관리하기
필드: 사번, 이름, 소속부서, 직급, 나이, 성별, 급여, 보너스포인트, 핸드폰, 주소
1. 키보드입력용 메소드 : empInput()
2. emp객체 모든 필드 출력용 메소드 : empOutput()
3. getter/setter메소드******* 사원 정보 관리 프로그램 ************
1. 새 사원 정보 입력 => empInput() 메소드 실행
2. 사원 정보 삭제 => 참조변수에 null대입할 것.
3. 사원정보 출력 => empOutput() 메소드 실행
9. 끝내기
********************************************더보기123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134public class Employee {private int empNo;private String empName;private String dept;private String job;private int age;private char gender;private int salary;private double bonusPoint;private String phone;private String address;public void setEmpNo(int empNo) {this.empNo = empNo;}public int getEmpNo() {return empNo;}public void setEmpName(String empName) {this.empName = empName;}public String getEmpName() {return empName;}public void setDept(String dept) {this.dept = dept;}public String getDept() {return dept;}public void setJob(String job) {this.job = job;}public String getJob() {return job;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void setGender(char gender) {this.gender = gender;}public char getGender() {return gender;}public void setSalary(int salary) {this.salary = salary;}public int getSalary() {return salary;}public void setBonusPoint(double bonusPoint) {this.bonusPoint = bonusPoint;}public double getBonusPoint() {return bonusPoint;}public void setPhone(String phone) {this.phone = phone;}public String getPhone() {return phone;}public void setAddress(String address) {this.address = address;}public String getAddress() {return address;}public void empInput() {Scanner sc = new Scanner(System.in);System.out.println("-------- 신입 사원 정보를 입력합니다 --------");System.out.println("사번을 입력하세요 : ");empNo = sc.nextInt();System.out.println("이름을 입력하세요 : ");empName = sc.next();System.out.println("소속부서를 입력하세요 : ");dept = sc.next();System.out.println("직급을 입력하세요 : ");job = sc.next();System.out.println("나이를 입력하세요 : ");age = sc.nextInt();System.out.println("성별을 입력하세요(M/F) : ");gender = sc.next().charAt(0);System.out.println("급여를 입력하세요 : ");salary = sc.nextInt();System.out.println("보너스포인트를 입력하세요 : ");bonusPoint = sc.nextDouble();sc.nextLine();System.out.println("핸드폰 번호를 입력하세요 : ");phone = sc.nextLine();System.out.println("주소를 입력하세요 : ");setAddress(sc.nextLine());}public void empOutput() {System.out.println("-------------신입 사원 정보를 출력합니다 -----------");System.out.println("사번 : " + this.empNo);System.out.println("이름 : " + this.empName);System.out.println("소속부서 : " + this.dept);System.out.println("직급 : " + this.job);System.out.println("나이 : " + this.age);System.out.println("성별 : " + this.gender);System.out.println("급여 : " + this.salary);System.out.println("보너스포인트 : " + this.bonusPoint);System.out.println("핸드폰 : " + this.phone);System.out.println("주소 : " + this.address);System.out.println("--------------------------------------------");}cs 원래는 사용자 입력값을 받을 때, setter메소드를 이용해서 받았다.
현재 주소 입력값을 받을 때처럼 setAddress(sc.nextLine()); 이렇게.
절차가 잘 보이도록 하려면 이렇게 해도 무방하다고 한다.
다만 클래스 안이라서 필드의 멤버변수 사용이 즉시 가능하고, 직접 접근이 가능하니 보통은 직접 접근을 추천한다고 한다.
123456789101112131415161718192021222324252627282930public void mainMenu_() {Employee e = new Employee();while(true) {System.out.println("********사원 정보 관리 프로그램********\n"+ "1. 새 사원 정보 입력\n"+ "2. 사원 정보 삭제\n"+ "3. 사원 정보 출력\n"+ "9. 끝내기\n"+ "***************************");System.out.print("입력 : ");int num = sc.nextInt();if(num != 1 && num != 2 && num != 3 && num != 9) {System.out.println("번호를 잘못 입력하셨습니다.");continue;}switch(num) {case 1 : e.empInput(); break;case 2 : e = new Employee(); break;//'참조변수에 null 대입할 것'이라고 하셨는데 NullPointerException나오는 게 싫어서 그냥 초기화 시켜버림// 객체 안의 값을 지운 것case 3 : e.empOutput(); break;default : return;}}}cs 실행메소드는 이렇게.
NullPointerException 나오는 게 싫어서 객체 자체를 초기화시켜 버렸는데 if문 사용해서 해결하는 방법이 있었다.
더보기123456789101112131415161718192021222324252627282930313233public void mainMenu() {String menu = "********사원 정보 관리 프로그램********\n"+ "1. 새 사원 정보 입력\n"+ "2. 사원 정보 삭제\n"+ "3. 사원 정보 출력\n"+ "9. 끝내기\n"+ "***************************";System.out.print("입력 : ");Employee e = null; // 공간만 만들어 놓고while(true) {System.out.print(menu);int choice = sc.nextInt();switch(choice) {case 1:e = new Employee(); // 실제 객체 할당은 여기서e.empInput();break;case 2:e = null; //참조주소값 제거. 객체의 연결고리를 끊은 것System.out.println("사원정보가 삭제되었습니다.");break;case 3:if(e != null)e.empOutput();//지역변수는 반드시 초기화(값대입) 후 사용해야 한다. 26에 Employee e;라고 선언만 하면 안되는 이유elseSystem.out.println("사원 정보를 먼저 입력하세요.");break;case 9: return;default : System.out.println("잘못 입력하셨습니다.");}}cs 참조주소값을 제거하느냐, 객체 안의 값을 제거하느냐의 차이.
※문제. 다음 코드에서 각 출력문에 찍히게 될 값을 작성하고, 실제 코드로 작성후 확인하세요.
12345678910111213141516171819202122232425262728293031323334353637public class Test {int a = 100;static int s = 99;public static void main(String[] args) {Test t = new Test();t.test1();t.test2();Test d = new Test();t.test3(d);System.out.println(d.a);t.test4(t);}public void test1() {int a = 1000;int s = 999;System.out.println(this.a);System.out.println(Test.s);}public void test2() {Test t = new Test();t.a = 1000;System.out.println(a);}public void test3(Test t) {t.a = 10;this.a = 200;System.out.println(t.a);}public void test4(Test t) {t.a = 1000;System.out.println(this.a);}cs 이거 정말 어려웠다... 풀다가 나중에는 이 t가 네 t이냐 test3메소드의 t이냐 상태가 되었다...
차근차근 풀어보아야 비로소 이해가 된다.


'혼자 있는 방 > Java' 카테고리의 다른 글
Homework(10) (0) 2021.07.02 Homework(9) (0) 2021.07.01 Test(1) (0) 2021.06.28 Homework(7) (0) 2021.06.25 Homework(6) (0) 2021.06.24 댓글