수업

+15 객체 지향, 클래스 데이터형 제작

hs_developer 2022. 5. 23. 15:31

 

학생 3명 성적 관리
1. 국어
2. 영어
3. 수학
4. 총점
5. 평균
6. 학점

 

 

1. 데이터 저장 _ 일반 변수 

중복 코딩이 많고, 복잡

 

이름: 김가가
국어: 45
영어: 83
수학: 63
총점: 191
평균: 63.67
==================
이름: 김나나
국어: 82
영어: 43
수학: 100
총점: 225
평균: 75.00
==================
이름: 김다다
국어: 14
영어: 92
수학: 41
총점: 147
평균: 49.00
==================
public static void main(String[] args) {
		
		// 1. 국어 점수
		int kor1, kor2, kor3;
		
		// 2. 영어 점수
		int eng1, eng2, eng3;
		
		// 3. 수학 점수
		int math1, math2, math3;
		
		// 4. 총점
		int total1, total2, total3;
		
		// 5. 평균
		double avg1, avg2, avg3;
		String name1, name2, name3;
		
		// 데이터 모아서 관리 방법
		
		// 1명에 대한 정보
		name1 = "김가가";
		
		kor1 = (int)(Math.random()*101); // 1-100
		eng1 = (int)(Math.random()*101);
		math1 = (int)(Math.random()*101);
		
		total1 = kor1 + eng1 + math1;
		avg1 = total1/3.0;
		
		name2 = "김나나";
		
		kor2 = (int)(Math.random()*101); // 1-100
		eng2 = (int)(Math.random()*101);
		math2 = (int)(Math.random()*101);
		
		total2 = kor2 + eng2 + math2;
		avg2 = total2/3.0;
		
		name3 = "김다다";
		
		kor3 = (int)(Math.random()*101); // 1-100
		eng3 = (int)(Math.random()*101);
		math3 = (int)(Math.random()*101);
		
		total3 = kor3 + eng3 + math3;
		avg3 = total3/3.0;
		
		// 출력
		// 학생1
		System.out.println("이름: " + name1);
		System.out.println("국어: " + kor1);
		System.out.println("영어: " + eng1);
		System.out.println("수학: " + math1);
		System.out.println("총점: " + total1);
		System.out.printf("평균: %.2f\n", avg1);
		System.out.println("==================");
		
		// 학생2
		System.out.println("이름: " + name2);
		System.out.println("국어: " + kor2);
		System.out.println("영어: " + eng2);
		System.out.println("수학: " + math2);
		System.out.println("총점: " + total2);
		System.out.printf("평균: %.2f\n", avg2);
		System.out.println("==================");
		
		// 학생3
		System.out.println("이름: " + name3);
		System.out.println("국어: " + kor3);
		System.out.println("영어: " + eng3);
		System.out.println("수학: " + math3);
		System.out.println("총점: " + total3);
		System.out.printf("평균: %.2f\n", avg3);
		System.out.println("==================");
	}

 

 

2. 데이터 저장 _ 배열

ROW 변수로 인원 수 조절이 쉽다.

이름: 김
국어: 32
영어: 33
수학: 43
총점: 108
평균: 36.00
=============
이름: 이
국어: 22
영어: 34
수학: 44
총점: 100
평균: 33.33
=============
이름: 박
국어: 44
영어: 67
수학: 11
총점: 122
평균: 40.67
=============
이름: 최
국어: 99
영어: 54
수학: 8
총점: 161
평균: 53.67
=============
이름: 유
국어: 13
영어: 52
수학: 62
총점: 127
평균: 42.33
=============
public static void main(String[] args) {
		
        // 배열 : 같은 기능의 변수를 모아서 관리

        // 과목 수
        final int ROW=5; // 인원 수 변경 쉽게 한다
        int[] kor = new int[ROW];
        int[] eng = new int[ROW];
        int[] math = new int[ROW];
        int[] total = new int[ROW];
        double[] avg = new double[ROW];
        String[] name = new String[ROW];

        Scanner sc = new Scanner(System.in);

        for(int i=0; i<ROW; i++)
        {
            System.out.print("이름 입력: ");
            name[i] = sc.next();
            kor[i] = (int)(Math.random()*101);
            eng[i] = (int)(Math.random()*101);
            math[i] = (int)(Math.random()*101);
            total[i] = kor[i] + eng[i] + math[i];
            avg[i] = total[i]/3.0;
        }

        for(int i=0; i<ROW; i++)
        {
            System.out.println("이름: " + name[i]);
            System.out.println("국어: " + kor[i]);
            System.out.println("영어: " + eng[i]);
            System.out.println("수학: " + math[i]);
            System.out.println("총점: " + total[i]);
            System.out.printf("평균: %.2f\n", avg[i]);
            System.out.println("=============");
        }

    }

 

 

3. 데이터 저장 _ 클래스 (**실무 방식)

1명 정보 클래스로 한 번에 저장

 

이름 입력: 
김
이름 입력: 
이
이름 입력: 
박
이름: 김
국어 점수: 19
영어 점수: 51
수학 점수: 98
총점: 168
평균: 56.00
=================
이름: 이
국어 점수: 4
영어 점수: 17
수학 점수: 12
총점: 33
평균: 11.00
=================
이름: 박
국어 점수: 11
영어 점수: 99
수학 점수: 13
총점: 123
평균: 41.00
=================
class Student
{
	String name;
	int kor;
	int eng;
	int math;
	int total;
	double avg;
}

public class 클래스 {

	public static void main(String[] args) {
		
		final int ROW=3;
		
		// 사용자 정의 데이터형
		Student[] std = new Student[ROW];
		Scanner sc = new Scanner(System.in);
		
		// 초기 값, 처리
		for(int i=0; i<ROW; i++)
		{
			std[i] = new Student(); // 클래스 먼저 저장하고 시작
			
			System.out.println("이름 입력: ");
			
			std[i].name = sc.next();
			std[i].kor = (int)(Math.random()*101);
			std[i].eng = (int)(Math.random()*101);
			std[i].math = (int)(Math.random()*101);
			std[i].total = std[i].kor + std[i].eng + std[i].math;
			std[i].avg = std[i].total/3.0;
		}
		
		// 출력
		for(int i=0; i<ROW; i++)
		{
			System.out.println("이름: " + std[i].name);
			System.out.println("국어 점수: " + std[i].kor);
			System.out.println("영어 점수: " + std[i].eng);
			System.out.println("수학 점수: " + std[i].math);
			System.out.println("총점: " + std[i].total);
			System.out.printf("평균: %.2f\n", std[i].avg);
			System.out.println("=================");
		}
	}

 

 

 


 

데이터 저장 _ 뮤직 배열

 

1. 뮤직데이터베이스.java 생성

 

music.txt
0.01MB

 

 

 

2. 페이지 당 음악 10개 출력

페이지 입력(1-5): 
2
나로 바꾸자 (Duet With JYP)
순위: 11
곡명: 나로 바꾸자 (Duet With JYP)
가수명: 나로 바꾸자 (Duet With JYP)
앨범: 나로 바꾸자
상태: ▼ 1
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
.
.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
취기를 빌려 (취향저격 그녀 X 산들)
순위: 20
곡명: 취기를 빌려 (취향저격 그녀 X 산들)
가수명: 취기를 빌려 (취향저격 그녀 X 산들)
앨범: 취기를 빌려 (취향저격 그녀 X 산들)
상태: ▼ 4
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
	// 가수명 목록 출력 → 페이지 나누기
	static void musicList(int page)
	{
		int j=0; // 10개씩 나누는 변수 → 10개씩 가져와라
		int pageCnt=(page*10)-10; // 1페이지 시작 위치
		
		for(int i=0; i<뮤직데이터베이스.title.length; i++)
		{
			if(j<10 && i>=pageCnt)
			{
				System.out.println(뮤직데이터베이스.title[i]);
				System.out.println("순위: " + (i+1));
				System.out.println("곡명: " + 뮤직데이터베이스.title[i]);
				System.out.println("가수명: " + 뮤직데이터베이스.title[i]);
				System.out.println("앨범: " + 뮤직데이터베이스.album[i]);
				
				String s="";
				if(뮤직데이터베이스.state[i].equals("상승"))
				{
					s="▲";
				}
				else if(뮤직데이터베이스.state[i].equals("하강"))
				{
					s="▼";
				}
				else
				{
					s="-";
				}
				// 상태 변화가 없으면 공백 출력
				System.out.println("상태: " + s + " " + (뮤직데이터베이스.modify[i]==0?"":뮤직데이터베이스.modify[i]));
				System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
				j++;
			}
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int totalPage = (int)(Math.ceil(뮤직데이터베이스.title.length/10.0));
		
		System.out.println("페이지 입력(1-" + totalPage + "): ");
		int page = sc.nextInt();
		
		musicList(page);
	}

 

1페이지 : 0-9
→ 1*10 -10 : 0

2페이지 : 10-19 
→ 2*10 -10 : 10

3페이지 : 20-29
→ 3*10 -20 : 20

 

 

데이터 저장 _ 뮤직 클래스

검색어 입력 추가

 

1.Your Lights
이수 (엠씨더맥스)
Your Lights (바이크 원정대 OST Part.1)
유지
0
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2.겨울잠
장덕철
겨울잠
유지
0
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
.
.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
검색어 입력: 
A
14.ON AIR (Feat. 로꼬 & 박재범 & GRAY)
릴보이 (lIlBOI)
쇼미더머니 9 Final
상승
7
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
46.에잇 (Prod. & Feat. SUGA of BTS)
아이유 (IU)
에잇
상승
30
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
49.Achoo (Feat. pH-1 & HAON) (Prod. by GroovyRoom)
미란이 (Mirani)
쇼미더머니 9 Episode 3
상승
34
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
class Music{
	int rank;
	String title;
	String singer;
	String album;
	String state;
	int modify;
}

public class 뮤직클래스 {

	// call by reference
	static void musicDataInput(Music[] m)
	{
		for(int i=0; i<m.length; i++)
		{
			m[i] = new Music(); // 50개 공간 만듬, 먼저 선언해야 됨
			m[i].rank = i+1;
			m[i].title = 뮤직데이터베이스.title[i];
			m[i].singer = 뮤직데이터베이스.singer[i];
			m[i].album = 뮤직데이터베이스.album[i];
			m[i].state = 뮤직데이터베이스.state[i];
			m[i].modify = 뮤직데이터베이스.modify[i];
			
		}
	}
	
	// 찾기
	static void musicFind(Music[] music, String ss) // 뮤직 클래스, 찾는 단어
	{
		for(Music m:music)
		{
			if(m.title.contains(ss))
			{
				System.out.println(m.rank + "." + m.title);
				System.out.println(m.singer);
				System.out.println(m.album);
				System.out.println(m.state);
				System.out.println(m.modify);
				System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
			}
		}
	}
	
	
	public static void main(String[] args) {
	
		Music[] music = new Music[50]; // ArrayList<music> (컬렉션)
		musicDataInput(music); // 값을 넣어 줌
		
		// 데이터 출력
		for(Music m:music)
		{
			System.out.println(m.rank + "." + m.title);
			System.out.println(m.singer);
			System.out.println(m.album);
			System.out.println(m.state);
			System.out.println(m.modify);
			System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		}
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("검색어 입력: ");
		String ss = sc.next();
		
		musicFind(music, ss);
		
	}

 

 

 


 

사원 클래스

 

class Sawon
{
	int sabun;
	String name;
	String dept;
	String job;
	String loc;
	int pay;
}

public class 뮤직클래스2 {
	
	public static void main(String[] args) {
		
		String[] name = {"김가가", "김나나", "김다다"};
		String[] dept = {"개발부", "영업부", "총무부"};
		String[] job = {"과장", "대리", "사원"};
		String[] loc = {"서울", "부산", "인천"};
		int[] pay = {4500, 3500, 3000};
		
		Sawon[] sawon = new Sawon[5]; // 사원 5명, 저장 공간은 아직 생성 안 됨
		
		Scanner sc = new Scanner(System.in);
		
		for(int i=0; i<3; i++)
		{
//			System.out.println(sawon[i]); // 주소 값X
			sawon[i] = new Sawon(); // 저장 공간 생성 되고(**)
//			System.out.println(sawon[i]); // 주소 값(데이터 값) 생성 됨
			
			sawon[i].sabun = i+1;
			sawon[i].name = name[i];
			sawon[i].dept = dept[i];
			sawon[i].job = job[i];
			sawon[i].loc = loc[i];
			sawon[i].pay = pay[i];

			
		}
	}

 

 

배열 개수인 i<3 으로 수정 후 에러 해결

 

 

 


 

클래스 데이터형 제작

 

클래스의 용도


변수 : 데이터형으로 사용
캡슐화 : 데이터 보호
메소드 : 기능형으로 사용

 

클래스 사용 시 데이터 먼저 저장한다. (new)

 

class Category
{
	int cno; // 카테고리 구분
	String title;
	String subject;
	String poster;
}

 

 

class Food
{
	int no; // 맛집 구분
	int cno; // 카테고리별 분류
	String poster;
	String name;
	double score; // 평점
	String address;
	String tel;
	String type;
	String price;
	String parking;
	String time;
	String homePage;
	String menu;
}

 

 

 

class Recipe
{
	int rno; // 레시피 구분
	String poster;
	String chefName;
	String chefPoster;
	String title;
	String content; // 설명
	String info1, info2, info3; // 몇 인분, 몇 분내, 난이도
	String etc; // 재료
	String foodMake; // 조리 방법
	String images; // 조리 방법의 이미지
	// 조회수 → 나중에 trigger로 세기 때문에 지금은 필요X
	// 사이트에 필요한 내용만 잡는다 → 전체X
}

 

'수업' 카테고리의 다른 글

+17 멤버 메소드  (1) 2022.05.25
+16 멤버 변수(static, instance)  (0) 2022.05.24
+14 메소드 활용  (0) 2022.05.20
+14 메소드 정리(매개변수)  (0) 2022.05.20
+13 사용자 정의 클래스, 변수 설정 예제  (0) 2022.05.19