코딩은 실력보다 시력이지

카테고리 없음

DAY 8. interface 및 stack, queue의 flow 구현

Listeria 2021. 2. 16. 02:20
package exam;
import java.util.Scanner;

public class AbsQuiz {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int select;
		int data;
		Scanner sc = new Scanner(System.in);
		
		MyQueue myQ = new MyQueue();
		MyStack myS = new MyStack()
				;
		
		Memory mem = null;
		
		do {    
		System.out.println("1. Stack\t2.Queue\t3.End");
		select = sc.nextInt();
		
		if(select == 1) 	{	mem = myS;	}
		else if(select ==2) {	mem = myQ;	}
		else break;

			do {
				System.out.println("1.Push\t2.Pop\t3.stop");
				select = sc.nextInt();
				if(select == 1) {
					System.out.println("숫자를 입력하세요.");
					mem.push(sc.nextInt());
				}
				
				else if(select == 2) {
					data = mem.pop();
					if(data!=-1) {
						System.out.println(data);		
					}
					else if(data == -1)
					{
						System.out.println("가 발생했습니다.");
					}
				}
				else {break;}
			}while(true);

		}while(true);

	}
}

package exam;

public class MyStack extends Memory {
	
	@Override
	public int pop() {

		if(end<=0) {
			System.out.print("underflow");
			return -1;
		}
		else {
			save=num[--end];
			return save;
		}
		
	}
}
package exam;

public class MyQueue extends Memory {
	
	private int front;

	@Override
	public int pop() {
		if(front>4) {
			System.out.print("overflow");
			return -1;
		}
		else {
			save = num[front++];
			return save;
		}
		
		
	}
}
package exam;

public abstract class Memory {

	protected int[] num ;
	protected int end;
	protected int save;
	
	public Memory() {
		num = new int[5];
		end =0;
	}
	
	public void push(int i) {
		if(end >4) {
			System.out.println("overflow가 발생했습니다");
		}
		else {
			num[end++] = i;									
			
		}
	}
	public abstract int pop();
	
}

 

 

정해진 수 이상(위 예시에선 5개) 숫자를 입력하거나 입력한 것 보다 많이 출력을 하게 되면 overflow 혹은 underflow가 발생했음을 알려준다.

 

 

 

 


package InterManage;

public interface ForInter {

	int ask(int numId);
	void add(int i);
	void correct();
	void del();
	void searchIndiv(int i);
	void searchEvery();
	void manage(String grade, int i);
	
}
package InterManage;
import java.util.Scanner;

public class Function implements ForInter {

	private Permanent pm = new Permanent();
	private TimeWorker time = new TimeWorker();
	private TermWorker term;
	
	private int select;
	
	public Function() {
		Permanent pm = new Permanent();
		TimeWorker time = new TimeWorker();
		TermWorker term = new TermWorker();
	}

	Scanner sc1 = new Scanner(System.in);

	public int getId(int i) {
		return pm.getId(i);
	}
	public int getPw(int i) {
		return pm.getPw(i);
	}
	public String getGrade(int i) {
		return pm.getGrade(i);
	}
	
	
	public int ask(int numId) {	//로그인
		int numChk, numPw = 0;
		int i=0;
		int chk =0;
		int answer = 0;
		do {

			for(i=0; i<100 ;i++) {	//사원번호가 존재하는지 조회
				numChk = getId(i);
				
				if(numId == numChk) {	//사원번호가 존재하면 그 번호를 저장
					chk =i;
					break;
				}
	
			}
			if(chk >0) {	//사원번호가 존재할때, 암호를 묻는 단계

				System.out.println("암호를 입력하세요");
				do {
					numPw = sc1.nextInt();
					
					if(numPw != getPw(chk)) {
					System.out.println("틀린 비밀번호 입니다. 다시 입력하세요");
					System.out.println("멈추시러면 0을 입력하세요");					
					}
					else if(numPw==0) { break;}	//0을 눌렀을때 멈춤
					
				}while(numPw !=getPw(chk));
			}else {
				System.out.println("틀린 사번입니다");
				chk++;			
			}	//존재하지 않는 사번을 입력하였을때
		}while(chk==0);
		if( numPw == getPw(chk)) { answer ++;}

		return answer;	//비밀번호가 일치하면 1이 일치하지 않으면 0이 반환된다.
	}
	
	
	public void add(int i) {
		int num;
		System.out.println("추가할 사원 번호를 입력하세요");
		num = sc1.nextInt();
		pm.setId(num,num);
		System.out.println("이름을 입력해 주세요");
		pm.setName(num,sc1.next());
		System.out.println("직급을 입력해 주세요.");
		System.out.println("1.과장, 2.팀장, 3.대리, 4.사원, 5. 비정규직");
		pm.setGrade(num,pm.getTxt((sc1.nextInt())));
		System.out.println("비밀번호를 입력하세요");
		pm.setPw(num, sc1.nextInt());
	}	//관리자 클래스가 입력된 값을 수정할 수 있음
	

	
	public void correct() {	//기본 값들 외에 급여, 근무시간 등을 관리자들이 수정할 수 있음.
		int numId,select;
		System.out.println("수정할 사람의 사번을 입력해주세요");
		numId = sc1.nextInt();
		
		if (pm.getGrade(numId)=="비정규직") {	//비정규직 관련항목
			System.out.println("수정할 사안을 입력해주세요");
			System.out.println("1. 이름, 2. 직급, 3. 급여, 4. 근무날짜, 5. 근무시간");
			
			select = sc1.nextInt();
			switch(select) {
			case 1:
				System.out.println("수정할 이름을 입력해 주세요");
				pm.setName(numId,sc1.next());
				break;
			case 2:
				System.out.println("수정할 직급을 입력해 주세요.");
				System.out.println("1.과장, 2.팀장, 3.대리, 4.사원, 5. 비정규직");
				pm.setGrade(numId,pm.getTxt((sc1.nextInt())));
				break;
			case 3:
				System.out.println("급여를 입력해 주세요.");
				pm.setSalary(numId,sc1.nextInt());
				
			case 4:
				System.out.println("근무날짜를 선택해주세요");
				System.out.println("1. sun, 2.mon, 3.tue, 4. wed, 5.thur, 6.fri, 7.sat");
				time.setDay(numId,sc1.nextInt());
			case 5:
				System.out.println("근무시간을 입력해주세요");
				time.setTime(numId, sc1.next());
				break;
			}
		}
		else {	//정규직 관련항목
			System.out.println("수정할 사안을 입력해주세요");
			System.out.println("1. 이름, 2. 직급, 3. 급여, 4. 보너스");
			
			select = sc1.nextInt();
			switch(select) {
			case 1:
				System.out.println("수정할 이름을 입력해 주세요");
				pm.setName(numId,sc1.next());
				break;
			case 2:
				System.out.println("수정할 직급을 입력해 주세요.");
				System.out.println("1.과장, 2.팀장, 3.대리, 4.사원, 5. 비정규직");
				pm.setGrade(numId,pm.getTxt((sc1.nextInt())));
				break;
			case 3:
				System.out.println("급여를 입력해 주세요.");
				pm.setSalary(numId,sc1.nextInt());
			case 4:
				System.out.println("보너스를 입력해 주세요.");
				pm.setBonus(numId,sc1.nextInt());
				break;
			}
		}
	}
	
	public void del() {	//삭제를 할때.
		int numId;
		System.out.println("삭제할 사람의 사번을 입력해주세요");
		numId = sc1.nextInt();
		pm.setName(numId, null);
		pm.setGrade(numId, null);
		pm.setId(numId, 0);

	}
	public void searchIndiv(int i) {	//개인의 급여 내역을조회
		if(pm.getGrade(i)=="비정규직") {
			System.out.print("이름 : "+ pm.getName(i));
			System.out.print("\t"+"직급 : "+ pm.getGrade(i));
			System.out.print("\t기본급 : "+pm.getSalary(i));
			System.out.print("\t근무날짜 : "+time.getDay(i));
			System.out.println("\t근무시간 : "+time.getTime(i));
		}else {
			System.out.print("이름 : "+ pm.getName(i));
			System.out.print("\t직급 : "+ pm.getGrade(i));
			System.out.print("\t기본급 : "+pm.getSalary(i));
			System.out.println("\t보너스 : "+pm.getBonus(i));
				
		}
	}
	public void searchEvery() {
		for (int i = 0; i<100;i++) {
			if(pm.getName(i) != null) {	//비어있는 사번은 출력하지 않음.
				if(pm.getGrade(i)=="비정규직") {
					System.out.print("이름 : "+ pm.getName(i));
					System.out.print("\t"+"직급 : "+ pm.getGrade(i));
					System.out.print("\t기본급 : "+pm.getSalary(i));
					System.out.print("\t근무날짜 : "+time.getDay(i));
					System.out.println("\t근무시간 : "+time.getTime(i));
					System.out.println("----------------------------------------");
				}else {
					System.out.print("이름 : "+ pm.getName(i));
					System.out.print("\t직급 : "+ pm.getGrade(i));
					System.out.print("\t기본급 : "+pm.getSalary(i));
					System.out.println("\t보너스 : "+pm.getBonus(i));
					System.out.println("----------------------------------------");
						
				}
			}
		}
	}
	
	public void manage(String grade,int i) {

	
		if (grade.equals("과장")||grade.equals("팀장")){
			
			System.out.println("작업을 선택해 주세요");
			System.out.println("1. 추가, 2. 수정, 3. 삭제, 4. 개별 조회, 5. 전체 조회");
			select = sc1.nextInt();
			
			switch (select) {
				case 1 : {	add(i);	}break;
				case 2 : {	correct();	}break;
				case 3 : {	del();	}break;
				case 4 : {	
					System.out.println("검색하려는 사람의 사번을 입력하세요");
					i = sc1.nextInt();
					searchIndiv(i);	}break;
				case 5 : {	searchEvery();	}break;	
				default : System.out.println("wrong");
			}
			
		}else {
			searchIndiv(i);	//관리자가 아닌 사람이 로그인 하였을때는 본인의 급여 내역이 조회됨.
		}
			
	}
}

 

 

지난번에 작성한 급여관리 프로그램의 function 부분의 함수들을 interface를 활용해 의무적으로 Override를 하게 하였다.