구인구직 관리 프로그램을 만들어 보자.
-- Package 1개(my.day11.a.inheritance)와 Class 4개(MainApp, Company, Member, Gujikja)를 생성한다.
▶▶ Member 클래스
package my.day11.a.inheritance;
public class Member {
String id;
String passwd;
String name;
boolean isExists(String id, String passwd) {
if(this.id.equals(id) && this.passwd.equals(passwd))
return true;
else
return false;
}
}
-- Member 클래스는 Gujikja 클래스와 Company 클래스의 공통 field와 공통 method를 정의해주는 클래스로 사용
-- 공통으로 사용하는 id, passwd(password), name을 선언하고 새로 입력 받은 id와 passwd가 이미 있는 값과 같은지 비교하는 함수(isExists)를 생성한다.
-- 입력 받은 id와 passwd와 같다면 true, 같지 않다면 false를 반환한다. (로그인할 때 필요)
▶▶ Company 클래스
package my.day11.a.inheritance;
public class Company extends Member{
long seedMoney;
String jobType;
public Company() {
}
public Company(String id, String passwd, String name, long seedMoney, String jobType) {
this.id = id;
this.passwd = passwd;
this.name = name;
this.seedMoney = seedMoney;
this.jobType = jobType;
}
void showCompanyInfo() {
String result = "";
result += "1. 아이디 : " + super.id + "\n";
result += "2. 암 호 : " + super.passwd + "\n";
result += "3. 회사명 : " + super.name + "\n";
result += "4. 자본금 : " + seedMoney + "\n";
result += "5. 업종명 : " + jobType + "\n";
System.out.println(result);
}
}
-- Member 클래스를 상속 받아 Member 클래스의 field와 method를 사용할 수 있다.
-- Member 클래스에서 받아올 수 없는 변수 seedMoney(자본금), jobType(업종명)을 선언한다.
-- 파라미터(id, passwd, name, seedMoney, jobType)가 있는 생성자를 만든다.
-- 파라미터가 있는 생성자를 생성하였으므로 기본 생성자도 만들어 줘야 한다.
-- showCompanyInfo() 이름으로 아이디, 암호, 회사명, 자본금, 업종명을 출력하는 함수를 만든다.
▶▶ Gujikja 클래스
package my.day11.a.inheritance;
import java.util.Calendar;
public class Gujikja extends Member{
String birthday;
int gender;
int school;
int hopeMoney;
public Gujikja(String id, String passwd, String name, String birthday, int gender, int school,
int hopeMoney) {
this.id = id;
this.passwd = passwd;
this.name = name;
this.birthday = birthday;
this.gender = gender;
this.school = school;
this.hopeMoney = hopeMoney;
}
public Gujikja() { }
}
-- Member 클래스를 상속 받아 Member 클래스의 field와 method를 사용할 수 있다.
-- Member 클래스에서 받아올 수 없는 변수 birthday(생일), gender(성별), school(학력), hopeMoney(희망연봉) 을 선언한다.
-- 파라미터가 있는 생성자와 기본 생성자도 만든다.
void showGujikInfo() {
String result = "";
result += "1. 아이디 : " + super.id + "\n";
result += "2. 암 호 : " + super.passwd + "\n";
result += "3. 성 명 : " + super.name + "\n";
result += "4. 생년월일 : " + birthday.substring(0,4) + "-" +
birthday.substring(4,6) + "-" +
birthday.substring(6) + "\n";
String strGender = "";
if(gender == 1)
strGender = "남";
else
strGender = "여";
result += "5. 성 별 : " + strGender + "\n";
String strSchool = "";
if(school == 1)
strSchool = "대졸이상";
else if(school == 2)
strSchool = "초대졸";
else if(school == 3)
strSchool = "고졸";
else
strSchool = "고졸미만";
result += "6. 학 력 : " + strSchool + "\n";
result += "7. 희망연봉 : " + hopeMoney + "만원\n";
System.out.println(result);
}
-- showGujikjaInfo() 이름으로 아이디, 암호, 성명, 생년월일, 성별, 학력, 희망연봉을 출력하는 함수를 만든다.
-- gender는 int로 선언하여 남자는 1, 여자는 2로만 받을 수 있게 만들었으므로 출력을 할 때에는 1을 입력했을 때 "남자", 2를 입력했을 때 "여자"라는 문자열이 출력되도록 한다.
-- 학력도 int로 선언하였으므로 1은 "대졸이상", 2는 "초대졸", 3은 "고졸", 4는 "고졸미만"이라는 문자열이 출력되도록 한다.
int getAgeLine() {
Calendar currentDate = Calendar.getInstance();
int currentYear = currentDate.get(Calendar.YEAR);
int birthYear = Integer.parseInt(birthday.substring(0,4));
int currentAge = currentYear - birthYear +1;
return (currentAge/10)*10;
}
-- getAgeLine() 이름의 생년월일로 연령대를 알 수 있는 함수를 만든다.
-- java.util.Calendar를 import하여 현재의 년도를 받아온다.
-- 생년월일에서 생년만 잘라서 (현재 년도-구직자의 생년+1)을 연산하여 현재 나이를 구한다.
-- 데이터 타입이 int형이므로 현재 나이를 10으로 나누고 10을 다시 곱해 일의 자리를 버린다.
예> 24 ÷ 10 = 2.4 → int는 정수만 받아오므로 2로 변한다. 다시 10을 곱하면 2 × 10 = 20
▶▶ MainApp 클래스(main method 안)
package my.day11.a.inheritance;
import java.util.Scanner;
public class MainApp {
public static void main(String[] args) {
Gujikja[] gujaArr = new Gujikja[5];
gujaArr[0] = new Gujikja("hongkd", "1234", "홍길동", "19930311", 1, 1, 4000);
gujaArr[1] = new Gujikja("eom", "9876", "엄정화", "19830311", 2, 2, 5000);
gujaArr[2] = new Gujikja("leess", "abcd", "이순신", "20010919", 1, 2, 3000);
Company[] compArr = new Company[4];
compArr[0] = new Company("samsung","1234","삼성",300000000000L,"제조업");
compArr[1] = new Company("LG","1234","엘지",250000000000L,"서비스업");
Scanner sc = new Scanner(System.in);
String strMenuNo = "";
Gujikja loginUser = null;
Company loginCompany = null;
do {
showMenu(loginUser);
System.out.print("▷ 메뉴번호 선택 => ");
strMenuNo = sc.nextLine();
switch (strMenuNo) {
case "1":
Gujikja guja = registerGujikja(sc);
saveGujaArr(guja, gujaArr);
break;
case "2":
loginUser = loginGujikja(sc, gujaArr);
break;
case "3":
if(loginUser == null) {
System.out.println(">> 로그인을 한 후에 로그아웃을 할 수 있습니다.\n");
}
else {
loginUser = null;
System.out.println(">> 로그아웃 되었습니다\n");
}
break;
case "4":
if(loginUser == null) {
System.out.println(">> 먼저 로그인 하세요!!\n");
}
else {
loginUser.showGujikInfo();
}
break;
case "5":
if(loginUser == null) {
System.out.println(">> 먼저 로그인 하세요!!\n");
}
else {
for(int i=0; i<gujaArr.length; i++) {
if(gujaArr[i] != null)
gujaArr[i].showGujikInfo();
}
}
break;
case "6":
searchSubMenu(sc, gujaArr);
break;
case "7":
Company comp = registerCompany(sc);
saveCompArr(comp, compArr);
case "8":
loginCompany = loginCompany(sc, compArr);
break;
case "9":
break;
default:
System.out.println(">>> 메뉴에 없는 번호 입니다.\n");
break;
}
} while ( !("9".equals(strMenuNo)) );
sc.close();
System.out.println("\n== 프로그램 종료 ==");
}
}
-- 구직자와 구인회사 정보를 저장하는 배열에 값을 넣는다.
-- Scanner와 switch case를 사용하여 값을 입력 받고 1~9번까지 입력했을 때 메뉴 번호에 맞는 함수를 호출하게 한다.
-- case "3" : 이미 로그아웃 된 상태라면 "로그인을 한 후에 로그아웃을 할 수 있습니다" 출력, 로그인 되어있는 상태라면 로그아웃 후 "로그아웃 되었습니다." 메시지를 출력한다.
-- case "4", "5" : 로그인하지 않은 상태라면 "먼저 로그인 하세요!!" 메시지를 출력한다.
-- case "9" : 9번을 입력하면 메뉴 번호 입력 받는 것을 멈추고 "==프로그램 종료=="를 출력한다.
▶▶ MainApp 클래스(main method 밖)
static void showMenu(Gujikja loginUser) {
String str = "";
if (loginUser != null) {
str = "["+loginUser.name + "님 환영합니다]";
}
System.out.println(" == 메뉴"+str+" ==\n"
+ " 1.구직자 가입 2.구직자로그인 3.로그아웃 4.나의정보조회"
+ "5.모든구직자정보조회 \n6.검색에 따른 조회 7.구인회사가입"
+ "8.구인회사로그인 9.프로그램종료\n");
}
-- showMenu method : 메뉴를 보여준다.
-- 만약 로그인이 되어있다면 로그인 한 member의 name을 "님 환영합니다"라는 메시지와 함께 출력한다.
static Gujikja registerGujikja(Scanner sc) {
System.out.println("=== 구직자 가입하기 ===");
System.out.print("◆ 아이디 : ");
String id = sc.nextLine();
System.out.print("◆ 암호 : ");
String passwd = sc.nextLine();
System.out.print("◆ 성명 : ");
String name = sc.nextLine();
System.out.print("◆ 생년월일(예: 19930820) : ");
String birthday = sc.nextLine();
String strGender = "";
do {
System.out.print("◆ 성별[ 남(1) / 여(2)] : ");
strGender = sc.nextLine();
if("1".equals(strGender) || "2".equals(strGender)) {
break;
}
else {
System.out.println(">> 성별은 1 또는 2 만 입력하세요!!\n");
}
} while (true);
String strSchool = "";
do {
System.out.print("◆ 학력[ 대졸이상(1) / 초대졸(2) / 고졸(3) / 고졸미만(4)] : ");
strSchool = sc.nextLine();
if("1".equals(strSchool) ||
"2".equals(strSchool) ||
"3".equals(strSchool) ||
"4".equals(strSchool) ) {
break;
}
else {
System.out.println(">> 학력은 1,2,3,4 중에 하나만 입력하세요!!\n");
}
} while (true);
int hopeMoney = 0;
do {
System.out.print("◆ 희망급여 : ");
try {
hopeMoney = Integer.parseInt(sc.nextLine());
if(hopeMoney > 0)
break;
else
System.out.println(">> 희망연봉은 0 보다 커야 합니다.\n");
} catch(NumberFormatException e) {
System.out.println(">> 숫자로만 입력하세요!!\n");
}
} while(true);
Gujikja guja = new Gujikja();
guja.id = id;
guja.passwd = passwd;
guja.name = name;
guja.birthday = birthday;
guja.gender = Integer.parseInt(strGender);
guja.school = Integer.parseInt(strSchool);
guja.hopeMoney = hopeMoney;
return guja;
}
-- registerGujikja() 라는 구직자의 아이디, 암호, 성명, 생년월일, 성별(숫자), 학력(숫자), 희망연봉을 받아오는 함수를 만든다.
static void saveGujaArr(Gujikja guja, Gujikja[] gujaArr) {
boolean flag = false;
for(int i=0; i<gujaArr.length; i++) {
if( gujaArr[i] == null ) {
gujaArr[i] = guja;
flag = true;
break;
}
}
if(flag)
System.out.println(">> 회원가입 성공!!\n");
else
System.out.println(">> 회원가입 만료가 되어 더이상 신규회원 가입불가합니다.\n");
}
-- 입력 받은 구직자의 정보를 gujaArr라는 배열에 대입한다.
-- 만약 배열에 남는 공간이 없다면 "회원가입 만료가 되어 더이상 신규회원 가입불가합니다."라는 메시지를 출력한다.
static Gujikja loginGujikja(Scanner sc, Gujikja[] gujaArr) {
Gujikja loginUser = null;
System.out.print("◆ 아이디 : ");
String userid = sc.nextLine();
System.out.print("◆ 암호 : ");
String passwd = sc.nextLine();
boolean flag = false;
for(int i=0; i<gujaArr.length; i++) {
if( gujaArr[i] != null &&
gujaArr[i].isExists(userid, passwd) ) {
flag = true;
loginUser = gujaArr[i];
break;
}
}
if(flag==true)
System.out.println(">> 로그인 성공!! <<\n");
else
System.out.println(">> 로그인 실패!! <<\n");
return loginUser;
}
-- isExists 함수를 호출하여 아이디와 암호를 입력받은 값과 비교하고 깃발(boolean flag)를 선언하여 같은 아이디와 암호가 있을 때 true, 아니면 계속 false를 유지한다.
-- flag가 true로 바뀌었으면 "로그인 성공", 계속 false라면 "로그인 실패"라는 메시지를 출력한다.
static void searchSubMenu(Scanner sc, Gujikja[] gujaArr) {
String menuNo = "";
do {
System.out.println(" == 검색 조회 메뉴 ==\n1.이름으로 검색 2.학력으로 검색 3.연령대검색 4.처음메뉴로 돌아가기\n");
System.out.print("▶ 메뉴번호 선택 => ");
menuNo = sc.nextLine();
switch (menuNo) {
case "1":
searchByName(sc, gujaArr);
break;
case "2":
searchBySchool(sc, gujaArr);
break;
case "3":
searchByAgeLine(sc, gujaArr);
break;
case "4":
break;
default:
System.out.println(">> 메뉴번호에 존재하지 않는 값을 입력하셨습니다\n");
break;
}
} while( !("4".equals(menuNo) ) );
}
static void searchByName(Scanner sc, Gujikja[] gujaArr) {
System.out.print("▶검색할 성명 => ");
String searchName = sc.nextLine(); // 홍
boolean flag = false;
for(int i=0; i<gujaArr.length; i++) {
if(gujaArr[i] != null &&
gujaArr[i].name.startsWith(searchName) ) {
flag = true;
gujaArr[i].showGujikInfo();
}
}
if(!flag)
System.out.println(">> 검색하려는 "+searchName+"은 존재하지 않습니다\n");
}
static void searchBySchool(Scanner sc, Gujikja[] gujaArr) {
System.out.print("▶검색할 학력[대졸이상(1), 초대졸(2), 고졸(3), 고졸미만(4)] => ");
String schoolType = sc.nextLine(); // "2"
boolean flag = false;
for(int i=0; i<gujaArr.length; i++) {
if( gujaArr[i] != null &&
String.valueOf(gujaArr[i].school).equals(schoolType) ) {
flag = true;
gujaArr[i].showGujikInfo();
}
}
if(!flag)
System.out.println(">> 검색하려는 학력의 구직자는 존재하지 않습니다\n");
}
static void searchByAgeLine(Scanner sc, Gujikja[] gujaArr) {
boolean flag = false;
do {
System.out.print("▶검색할 연령대 => ");
try {
int ageLine = Integer.parseInt(sc.nextLine()); // 20
if(ageLine < 0) {
System.out.println(">> 검색할 연령대는 음수는 불가합니다!!\n");
}
else {
for(int i=0; i<gujaArr.length; i++) {
if(gujaArr[i] != null &&
gujaArr[i].getAgeLine() == ageLine) {
flag = true;
gujaArr[i].showGujikInfo();
}
}
break;
}
} catch(NumberFormatException e) {
System.out.println(">> 숫자로 입력하세요!!\n");
}
} while(true);
if(!flag)
System.out.println(">> 검색하고자 한 연령대의 구직자는 없습니다.\n");
}
-- 6번을 입력했을 때 검색 조회 메뉴를 출력하고 번호를 선택하여 여러 방법으로 검색할 수 있도록 한다. (1. 이름으로 검색, 2. 학력으로 검색, 3. 연령대로 검색)
-- searchByName(), searchBySchool(), searchByAgeLine() 함수를 생성하고, 그 함수에서 gujaArr에 저장된 값을 비교하여 일치한 구직자 정보를 나타내어 준다.
static Company registerCompany(Scanner sc) {
Company comp = null;
System.out.println("=== 구인회사 가입하기 ===");
System.out.print("◆ 아이디 : ");
String id = sc.nextLine();
System.out.print("◆ 암호 : ");
String passwd = sc.nextLine();
System.out.print("◆ 회사명 : ");
String name = sc.nextLine();
long seedMoney = 0;
do {
System.out.print("◆ 자본금 : ");
try {
seedMoney = Long.parseLong(sc.nextLine());
} catch(NumberFormatException e) {
System.out.println(">> 자본금은 숫자로만 입력하세요\n");
continue;
}
if(seedMoney > 0)
break;
else
System.out.println(">> 자본금은 0 보다 커야 합니다\n");
} while(true);
System.out.print("◆ 업종명 : ");
String jobType = sc.nextLine();
comp = new Company(id, passwd, name, seedMoney, jobType);
return comp;
}
static void saveCompArr(Company comp, Company[] compArr) {
boolean flag = false;
for(int i=0; i<compArr.length; i++) {
if(compArr[i] == null) {
compArr[i] = comp;
flag = true;
break;
}
}
if(flag)
System.out.println(">> 구인회사 가입 성공!!\n");
else
System.out.println(">> 구인회사 엔트리가 포화상태라서 신규회사 가입불가함!!\n");
}
static Company loginCompany(Scanner sc, Company[] compArr) {
Company loginComp = null;
System.out.print("▶아이디 : ");
String id = sc.nextLine();
System.out.print("▶암 호 : ");
String passwd = sc.nextLine();
boolean flag = false;
for(int i=0; i<compArr.length; i++) {
if(compArr[i] != null &&
compArr[i].isExists(id, passwd) ) {
loginComp = compArr[i];
flag = true;
break;
}
}
if(flag)
System.out.println(">> 구인회사로 로그인 성공!!");
else
System.out.println(">> 구인회사로 로그인 실패!!");
return loginComp;
}
-- 구직자의 회원가입, 로그인 함수와 마찬가지로 구인회사 회원가입(registerCompany), 로그인(loginCompany) 함수를 만들어 메인 함수에서 호출될 수 있도록 한다.
'수업내용' 카테고리의 다른 글
[Day12][Java] 다형성 / 추상 메소드 / 추상 클래스 (0) | 2019.09.04 |
---|---|
[Day11][Java] 캡슐화 / 다형성 (0) | 2019.09.03 |
[Day9][Java] 이차원 배열 / String 클래스 메소드 / 로또 당첨 프로그램 / Calendar / OOP(Object Oriented Programming) (0) | 2019.09.01 |
[Day8][Java] 가위바위보 게임 / 숫자 맞히는 게임 / 레이블 / 배열 / 확장된 for문 / Random / 로또 당첨번호 / 버블 정렬 (0) | 2019.09.01 |
[Day7][Java] while문 / do~while문 / Math.random / equals / 가위바위보 프로그램 (0) | 2019.09.01 |