Backend/JAVA
[JAVA] 특강 19일차 : 코딩 훈련! 문제 풀이 (① 상속)
JOKUN
2022. 7. 15. 12:52
Person
📑문제
학생 / 사원 관리 프로그램
🔍풀이
Run
package com.kh.hw.person.run;
import com.kh.hw.person.view.PersonMenu;
public class Run {
public static void main(String[] args) {
new PersonMenu().mainMenu();
}
}
Person
package com.kh.hw.person.model.vo;
public class Person {
private String name;
private int age;
private double height;
private double weight;
public Person() {
}
public Person(String name, int age, double height, double weight) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
/**
* 각 필드 반환 메소드
* @return 강건강, 20, 178.2, 70.0, 1, 정보시스템공학과
*/
@Override
public String toString(){
return name + ", " + age + ", " + height + ", " + weight;
}
}
Student
package com.kh.hw.person.model.vo;
public class Student extends Person{
/**
* 학년
*/
private int grade;
/**
* 전공
*/
private String major;
public Student(){
}
public Student(String name, int age, double height, double weight, int grade, String major) {
super(name, age, height, weight);
this.grade = grade;
this.major = major;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@Override
public String toString(){
return super.toString() + ", " + grade + ", " + major;
}
}
Employee
package com.kh.hw.person.model.vo;
public class Employee extends Person{
/**
* 급여
*/
private int salary;
/**
* 부서
*/
private String dept;
public Employee(){
}
public Employee(String name, int age, double height, double weight, int salary, String dept) {
super(name, age, height, weight);
this.salary = salary;
this.dept = dept;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
@Override
public String toString(){
return super.toString() + ", " + salary + ", " + dept;
}
}
PersonController
package com.kh.hw.person.controller;
import com.kh.hw.person.model.vo.Employee;
import com.kh.hw.person.model.vo.Student;
public class PersonController {
// 담을 수 있는 학생,사원 수
public static final int S_LIMIT = 3;
public static final int E_LIMIT = 10;
/**
* 학생 배열 관리 인덱스
*/
public int sIndex = -1;
/**
* 직원 배열 관리 인덱스
*/
public int eIndex = -1;
private Student[] sArr = new Student[S_LIMIT];
private Employee[] eArr = new Employee[E_LIMIT];
/**
* 각 객체배열에 저장된 객체의 수를 정수배열에 담아 반환하는 메소드
* @return [0]학생 수, [1] 직원 수
*/
public int[] personCount(){
int[] resultCount = new int[2];
int count = 0;
for (Student st : sArr) {
if(st != null && st.getName() != null && st.getName().length() > 0){
count++;
}
}
resultCount[0] = count;
count = 0;
for (Employee em : eArr) {
if(em != null && em.getName() != null && em.getName().length() > 0){
count++;
}
}
resultCount[1] = count;
return resultCount;
}
/**
* 매개변수로 받아온 데이터를 학생 객체 배열 중 빈 곳에 저장하는 메소드
* @param name
* @param age
* @param height
* @param weight
* @param grade
* @param major
*/
public boolean insertStudent(String name, int age, double height, double weight, int grade, String major){
sArr[++sIndex] = new Student(name, age, height, weight, grade, major);
return sIndex < S_LIMIT - 1;
}
public Student[] printStudent(){
return sArr;
}
public boolean insertEmployee(String name, int age, double height, double weight, int salary, String dept){
eArr[++eIndex] = new Employee(name, age, height, weight, salary, dept);
return eIndex < E_LIMIT - 1;
}
public Employee[] printEmplyee(){
return eArr;
}
}
PersonMenu
package com.kh.hw.person.view;
import com.kh.hw.person.controller.PersonController;
import com.kh.hw.person.model.vo.Employee;
import com.kh.hw.person.model.vo.Student;
import java.util.Scanner;
public class PersonMenu {
private Scanner sc;
private PersonController pc;
public PersonMenu(){
sc = new Scanner(System.in);
pc = new PersonController();
}
public void mainMenu(){
while (true) {
int[] personCount = pc.personCount();
System.out.println("학생은 최대 " + PersonController.S_LIMIT +"명까지 저장할 수 있습니다.");
System.out.println("현재 저장된 학생은 " + personCount[0] + "명입니다.");
System.out.println("사원은 최대 "+ PersonController.E_LIMIT +"명까지 저장할 수 있습니다.");
System.out.println("현재 저장된 사원은 " + personCount[1] + "명입니다.");
System.out.println("1. 학생 메뉴");
System.out.println("2. 사원 메뉴");
System.out.println("9. 끝내기");
System.out.print("메뉴 번호 : ");
int menuNum = sc.nextInt();
switch (menuNum){
case 1:
studentMenu();
break;
case 2:
employeeMenu();
break;
case 9:
System.out.println("종료합니다.");
return;
default:
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
}
}
public void studentMenu(){
while (true){
System.out.println("1. 학생 추가");
System.out.println("2. 학생 보기");
System.out.println("9. 메인으로");
boolean isStudentLimit = (pc.sIndex + 1) == PersonController.S_LIMIT;
if (isStudentLimit){
System.out.println("학생을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가 메뉴는 더 이상 활성화 되지 않습니다.");
}
System.out.print("메뉴 번호 : ");
int menuNum = sc.nextInt();
switch (menuNum){
case 1:
if(isStudentLimit){
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}else {
insertStudent();
}
break;
case 2:
printStudent();
break;
case 9:
System.out.println("메인으로 돌아갑니다..");
return;
default:
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
}
}
public void employeeMenu(){
while (true) {
System.out.println("1. 사원 추가");
System.out.println("2. 사원 보기");
System.out.println("9. 메인으로");
boolean isEmployeeLimit = (pc.eIndex + 1) == PersonController.E_LIMIT;
if (isEmployeeLimit){
System.out.println("사원을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가 메뉴는 더 이상 활성화 되지 않습니다.");
}
System.out.print("메뉴 번호 : ");
int menuNum = sc.nextInt();
switch (menuNum){
case 1:
if(isEmployeeLimit){
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}else {
insertEmployee();
}
break;
case 2:
printEmployee();
break;
case 9:
System.out.println("메인으로 돌아갑니다..");
return;
default:
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
}
}
public void insertStudent(){
while (true){
System.out.print("학생 이름 : ");
String name = sc.next();
System.out.print("학생 나이 : ");
int age = sc.nextInt();
System.out.print("학생 키 : ");
double height = sc.nextDouble();
System.out.print("학생 몸무게 : ");
double weight = sc.nextDouble();
System.out.print("학생 학년 : ");
int grade = sc.nextInt();
System.out.print("학생 전공 : ");
String major = sc.next();
boolean insertStudent = pc.insertStudent(name, age, height, weight, grade, major);
if(insertStudent){
System.out.print("그만하시려면 N(또는 n), 이어하시려면 아무 키나 누르세요 : ");
sc.nextLine();
String yn = sc.nextLine();
yn = yn.toLowerCase();
if(yn.equals("n")){
return;
}
}else {
System.out.println("학생을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가를 종료하고 학생메뉴로 돌아갑니다.");
return;
}
}
}
public void printStudent(){
Student[] printStudent = pc.printStudent();
for (Student s : printStudent) {
if(s != null){
System.out.println(s.toString());
}
}
}
public void insertEmployee(){
while (true){
System.out.print("사원 이름 : ");
String name = sc.next();
System.out.print("사원 나이 : ");
int age = sc.nextInt();
System.out.print("사원 키 : ");
double height = sc.nextDouble();
System.out.print("사원 몸무게 : ");
double weight = sc.nextDouble();
System.out.print("사원 급여 : ");
int salary = sc.nextInt();
System.out.print("사원 부서 : ");
String dept = sc.next();
boolean insertEmployee = pc.insertEmployee(name, age, height, weight, salary, dept);
if(insertEmployee){
System.out.print("그만하시려면 N(또는 n), 이어하시려면 아무 키나 누르세요 : ");
sc.nextLine();
String yn = sc.nextLine();
yn = yn.toLowerCase();
if(yn.equals("n")){
return;
}
}else {
System.out.println("사원을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가를 종료하고 사원 메뉴로 돌아갑니다.");
return;
}
}
}
public void printEmployee(){
Employee[] printEmployee = pc.printEmplyee();
for (Employee s : printEmployee) {
if(s != null){
System.out.println(s.toString());
}
}
}
}