본문 바로가기

Java/Codes

선풍기

일부러 팀원에게 class를 설명하기 위해 기능들을 하드하게 쪼갰다.

다음 코드는 싱글턴 패턴을 사용해서 이 코드를 수정하겠다.

 

import java.util.Scanner;

//[LED 선풍기]
//색상변경, 타이머설정 , 회전각도 설정 , 풍속조절(함수로 1단부터 4단), 전원 기능 구현	

class Fan_set
{
	boolean fan_power = false;//선풍기 전원 기본값 false로 설정
	int dan = 1;
	static int ang = 90;
	int tim = 0;
}

class LED//선풍기 LED색상 선택
{

	String led = "빨강";
	
	LED(){}//기본 생성자
	LED(String led)//생성자
	{
		this.led = led;
	}

}

class Power//켜고 끄기
{
	Boolean fan_power(String ans)//파라미터 ans을 main()으로부터 받아온다.
	{
		if(ans.equals("Y")||ans.equals("y"))//ans가 y라면
		{
			System.out.println("선풍기를 킬게요\n");
			return true;
		}
		
		
		else if(ans.equals("N")||ans.equals("n"))//ans가 n라면
		{	
			System.out.println("선풍기를 끌게요\n");
			return false;
		}
		else //디폴트값 false
		{
			return false;
		}
		
		
	}
}

class Timer// 타이머설정
{
	void timer(int time)//파라미터 time을 main()으로부터 받아온다.
	{
		System.out.println(time+"분으로 설정되었습니다.");
	}
}

class Turn_a//회전각도 설정 
{
	
	Scanner ac = new Scanner(System.in);//스캐너 클래스 사용
	void angle()//파라미터 ang을 main()으로부터 받아온다.
	{
		while(true)//무한반복
		{
			int ang = ac.nextInt();//사용자에게 ang값을 받는다.
			
			if(0<=ang&&ang<=180)//ang이 0도에서 180사이면 
			{
				System.out.println(ang+"도로 설정합니다.");
				Fan_set.ang = ang;
				break;//while문 종료
			}
			else//ang이 0도에서 180사이가 아니라면 
			{
				System.out.println("범위를 잘못 설정하였습니다. 재 입력 해주세요.");
			}
		}
	}
	
}

class Fan_s//풍속조절(함수로 1단부터 4단)
{
	void speed(int speed)//파라미터 speed를 main()으로부터 받아온다.
	{
		String[] dan_set = {"1단으로 변경합니다.","2단으로 변경합니다.","3단으로 변경합니다.","4단으로 변경합니다."};//배열 dan_set에 결과값 문자열 설정
		switch(speed)//speed를 조건으로 판단
		{
			case 1: 
				System.out.println(dan_set[0]);
				break;
			case 2: 
				System.out.println(dan_set[1]);
				break;
			case 3: 
				System.out.println(dan_set[2]);
				break;
			case 4: 
				System.out.println(dan_set[3]);
				break;
		}
		
	}
}

public class fan 
{
	public static void main(String[] args)//main() static이 있어서 여기서부터 실행
	{

		int set_ch;//선풍기 설정 선택
		
		Fan_set fan_s = new Fan_set();//선풍기 정보를 담은 클래스
		LED le = new LED();
		Power po = new Power();//[전원기능] Power클래스 선언 (참조변수 po)
		Timer ti = new Timer();//[타이머 기능] Timer클래스 선언 (참조변수 ti)
		Turn_a ta = new Turn_a();//[회전각도 기능]Turn_a클래스 선언 (참조변수 ta)
		Fan_s fs = new Fan_s();//[풍속조절 기능] Fan_s클래스 선언 (참조변수 fs)
		
		Scanner sc = new Scanner(System.in);//문자열용 스캐너 선언
		Scanner ac = new Scanner(System.in);//정수용 스캐너 선언
		
		System.out.println("[LED 선풍기]");
		System.out.printf("선풍기를 켜시겠습니까? (Y/N) : ");
		String ans = sc.nextLine();//사용자에게 Y/N 둘중하나 입력받아서 ans에 값을 넣는다
		System.out.println();
	
		
		if(ans.equals("Y")||ans.equals("y"))//ans값이 y이면 실행
		{
			po.fan_power(ans);//Power클래스 안의 fan_power함수를 호출할 때, ans를 넘겨준다.
			
			while(true)
			{
				System.out.println("<선풍기 상태>");
				System.out.printf("LED색상 : %s색, 풍속 : %d단, 회전각도 : %d도, 타이머 : %d분\n\n",le.led, fan_s.dan, fan_s.ang,  fan_s.tim);
				
				System.out.println("선풍기 기능을 설정합니다.");
				System.out.println("1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기");
				set_ch = ac.nextInt();//사용자에게 받은 값을 set_ch에 저장 적도록 한다.
				
				if(set_ch == 1)
				{
					System.out.printf("LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : ");
					String led = sc.nextLine();//사용자에게 색상을 적도록 한다.
					if(led.length()<1)//적은 값이 없다(디폴트)면
					{
						le = new LED();//[LED색상 변경] LED 클래스 선언 (참조변수 le) / 기본생성자에 접근							
						System.out.println(le.led+"색으로 선택되었습니다.");
					}
					else//색상을 적은게 있다면
					{
						le = new LED(led);//[LED색상 변경] LED 클래스 선언 (참조변수 le) / 생성자에 접근	
						System.out.println(le.led+"색으로 선택되었습니다.");
					}
					System.out.println();
				}
				else if(set_ch == 2) 
				{
					System.out.printf("몇단으로 설정 하시겠습니까? (1, 2, 3, 4) : ");
					fan_s.dan = ac.nextInt();//사용자에게 받은값을 dan에 저장
					fs.speed(fan_s.dan);//Fan_s클래스 안의 speed함수를 호출할 때, dan을 넘겨준다.
					System.out.println();
				}
				else if(set_ch == 3) 
				{
					System.out.println("각도를 얼마로 설정하시겠습니까? (단, 0도 이하, 180이상은 불가능합니다.)");
					ta.angle();//Turn_a클래스 안의 angle함수를 호출할 때, ang을 넘겨준다.
					System.out.println();
				}
				else if(set_ch == 4) 
				{
					System.out.printf("설정할 시간을 입력하세요. : ");
					fan_s.tim = ac.nextInt();//사용자에게 받은값을 tim에 저장	
					ti.timer(fan_s.tim);//Timer클래스 안의 timer함수를 호출할 때, tim을 넘겨준다.
					System.out.println();
				}
				else if(set_ch == 5) 
				{
					System.out.println("선풍기 설정을 종료합니다.");
					break;//while문 빠져나감
				}
				else
				{
					System.out.println("잘못 입력하였습니다. 다시 입력해주세요\n");
				}
				
			}
			
		}
/*====================================================================================*/		
		else if(ans.equals("N")||ans.equals("n")) //ans을 n으로 설정
		{
			po.fan_power(ans);
			System.out.println("선풍기를 종료합니다.");
		}
		else 
		{
			System.out.println("잘못 입력하셨습니다,선풍기를 종료합니다");
			
		}
		
		
		
	}

}

 

실행결과는 다음과 같다.

 

[LED 선풍기]
선풍기를 켜시겠습니까? (Y/N) : y

선풍기를 킬게요

<선풍기 상태>
LED색상 : 빨강색, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
1
LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : 
빨강색으로 선택되었습니다.

<선풍기 상태>
LED색상 : 빨강색, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
1
LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : 파랑
파랑색으로 선택되었습니다.

<선풍기 상태>
LED색상 : 파랑색, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
5
선풍기 설정을 종료합니다.

 

 

'Java > Codes' 카테고리의 다른 글

선풍기 (스레드)  (0) 2022.03.24
선풍기 (싱글턴)  (0) 2022.03.23
함수를 사용하여 사칙연산 계산기 만들기  (0) 2022.03.14
2022 대선 투표 프로그램  (0) 2022.03.14
함수를 이용한 구구단 제작  (0) 2022.03.14