kh16일차(set,map,PointMgr7,StudentMgr5,Exception,io)

2022. 7. 11. 18:20코딩/Java

setTest

package kh.java.func;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;

public class SetTest {
	public void setTest() {
		HashSet<Integer> set = new HashSet<Integer>();
		System.out.println("set 의 길이 : " + set.size());
		set.add(10);
		System.out.println("set 의 길이 : " + set.size());
		System.out.println(set);
		set.add(20);
		System.out.println("set 의 길이 : " + set.size());
		System.out.println(set);
		set.add(30);
		System.out.println(set);
		set.add(10);
		System.out.println(set); // 중복을 허용하지않음 이미 10이 있기에 10 이란 데이터가 안들어감
		boolean bool1 = set.add(20);// 데이터 추가를 시도하고 그 결과를 리턴한다
		System.out.println(bool1);
		boolean bool2 = set.add(100);
		System.out.println(bool2);
		System.out.println(set);

		set.remove(100);// 매개변수로 받은 데이터와 일치하는 값을 찾아 삭제
		System.out.println(set);

		// set은 index로 관리하지 않기 때문에 꺼내는 방법이 필요
		// 1. foreach를 쓰는 방법
		for (Integer num : set) {
			System.out.println(num);
		}

		// 2.ArrayList를 이용한 방법
		// set에 저장된 데이터와 동일한 타입을 저장할 수 있는 ArrayList를 생성
		ArrayList<Integer> list = new ArrayList<Integer>(set);
		// 생성자에 set을 넣으면 set을 list로 변환
		System.out.println(list);

		// 3.반복자 (iterator)를 이용한 방법
		Iterator<Integer> iter = set.iterator();
		// hasNext() : 꺼내올 값이 남아있으면 t/ 없으면 f리턴
		// next(): 값 한개를 꺼내옴
		// 이 while문이 foreach문의 원리
		while (iter.hasNext()) {// 꺼내올것이 있는동안 반복
			Integer num = iter.next();
			System.out.println(num);
		}

	}

순서대로 나오지 않고 중복또한 허용하지않음

 

Lotto

	public void lotto() {
		Scanner sc = new Scanner(System.in);
		HashSet<Integer> userNum = new HashSet<Integer>();

		while (userNum.size() < 6) {

			System.out.println("사용자 번호 입력 [1~45] : ");
			int num = sc.nextInt();
			if (num > 0 && num < 46) {
				boolean bool = userNum.add(num);// 중복체크해줄것 true면 중복이 아니고 flase면 중복
				if (!bool) {
					System.out.println("중복된 숫자 입니다.");
				}
			} else {
				System.out.println("1~45 사이 숫자를 입력 하세요.");
			}
			ArrayList<Integer> userList = new ArrayList<Integer>(userNum);
			Collections.sort(userList);
			System.out.println(userList);
		}
	}
}

 

Maptest

package kh.java.func;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class Maptest {
	public void mapTest1() {

		ArrayList<String> list = new ArrayList<String>();
		list.add("hi");
		list.add("hello");
		list.add("bye");
		list.add("hi");
		System.out.println(list.get(1));
		// 정수를 통해서 문자열을 관리하는 맵생성
		HashMap<Integer, String> map = new HashMap<Integer, String>();
		map.put(0, "hi");
		map.put(1, "hello");
		map.put(2, "bye");
		map.put(3, "hi");
		System.out.println(map.get(1));
	}

	public void mapTest2() {
		HashMap<String, String> map = new HashMap<String, String>();
		// put(key,value) : map에 데이터를 삽입하는 메소드
		map.put("one", "hi");
		map.put("two", "hello");
		map.put("three", "bye");
		System.out.println(map);
		System.out.println(map.get("two"));
		System.out.println(map.get("three"));
		map.put("two", "집");// 키값이 겹치면 기존데이터가 날아가고 덮어씌움
		System.out.println(map.get("two"));
		System.out.println(map);
		map.put("zero", "hi");
		System.out.println(map);
		System.out.println(map.get("four"));
		//containsKey(param) :매개변수로 받은 데이터가 key로 사용중이면 true, 사용중이지 않으면 false 리턴
		boolean bool1 = map.containsKey("one");
		boolean bool2 = map.containsKey("four");
		System.out.println(bool1);
		System.out.println(bool2);
		//remove(key) : 키값에 해당하는 데이터를 삭제
		map.remove("two");
		System.out.println(map);
		//map에 있는 모든데이터를 꺼내오고 싶은경우
		//keySet() : 모든키값은 Set형태로 반환
		Set<String> keys = map.keySet();//map의 모든 key를 set형태로 가져오는것
		for(String key : keys) {
			System.out.println(map.get(key));
		}
		

	}
}

1출력

2출력

 

 

PointMgr7

PointController

package kr.or.iei.point.controller;

import java.util.HashMap;

import kr.or.iei.point.view.PointView;
import kr.or.iei.point.vo.Grade;

public class PointController {
	private HashMap<String, Grade> members;//HashMap<String, Grade> 형식에 members라는 객체생성
	private PointView view;					//PointView 형식의 view 객체생성

	public PointController() {
		super();
		members = new HashMap<String, Grade>();//members 에 new HashMap<String, Grade>형태생성 
		view = new PointView();					//view 에 new PointView();형태생성
	}

	public void main() {
		while (true) {
			int sel = view.showMenu();//showMenu에 있는print문 보여주고 받은 입력값 sel에 저장
			switch (sel) {//받은 sel 값에 따라 아래 case문 실행
			case 1:
				insertMember();
				break;
			case 2:
				printAllMember();
				break;
			case 3:
				printOneMember();
				break;
			case 4:
				updateMember();
				break;
			case 5:
				deleteMember();
				break;
			case 0:
				return;

			}// case
		} // while
	}// 메인

	public void insertMember() {
		Grade g = view.insertMember();
		// insertMember에서 Grade형식으로 값을 받아와 Grade g에 저장
		members.put(g.getName(), g);
		// Grade g에 저장한 것중 이름을 key로 사용하고 Grade g에 저장한 모든것을 value로 설정해 map에 저장
	}

	public void printAllMember() {//printAllMember
		view.printAllMember(members);
	}

	public void printOneMember() {
		String name = view.getName("조회");//조회할이름을 입력받아서 name에 넣는다
		if (members.containsKey(name)) {//name에 들어간 이름이 name(key)값에 있는지 조회한다 있다면
			Grade g = members.get(name);//g에 얻은 이름에 저장된 데이터를 넣는다
			view.printOneMember(g);//그 g에 있는 데이터를 출력한다.
		} else {
			view.noSearchMembers();
		}
	}
	
	public void updateMember() {
		String name = view.getName("수정");//수정할 이름을 입력받아서 name에 넣는다
		if(members.containsKey(name)) {//name에 들어간 이름이 name(key)값에 있는지 조회 있다면 안으로
			Grade g = view.updateMember();//조회된 객체의 데이터를 변경후 Grade g에 대입
			members.put(g.getName(), g);//key값에 이름을 넣고 value에 Grade g에 저장된 데이터를 넣는다 
										//이때 이름이 같다면 덮어씌우지만 다를경우에는 그냥 추가되기때문에 후속조치가 필요하다.
			if(!name.equals(g.getName())) {//검색한 이름이 업데이트한 이름과 다르다면
				members.remove(name);	//검색한 이름 삭제.
			}
		}else {
			view.noSearchMembers();
		}
	}
	
	public void deleteMember() {
		String name = view.getName("삭제");
		if(members.containsKey(name)) {
			members.remove(name);
		}else {
			view.noSearchMembers();
		}
	}

}// 끝

 

PointView

package kr.or.iei.point.view;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

import kr.or.iei.point.vo.Gold;
import kr.or.iei.point.vo.Grade;
import kr.or.iei.point.vo.Silver;
import kr.or.iei.point.vo.Vip;
import kr.or.iei.point.vo.Vvip;

public class PointView {
	private Scanner sc;

	public PointView() {
		super();
		// TODO Auto-generated constructor stub
		sc = new Scanner(System.in);
	}

	public int showMenu() {
		// TODO Auto-generated method stub
		System.out.println("=====회원 관리 프로그램=====");
		System.out.println("1.회원 등록");
		System.out.println("2.회원 전체 출력");
		System.out.println("3.회원 한명 출력");
		System.out.println("4.회원 정보 수정");
		System.out.println("5.회원 정보 삭제");
		System.out.println("0.프로그램 종료");
		int sel = sc.nextInt();
		return sel;
	}

	public Grade insertMember() {
		System.out.println("=====회원 정보 등록=====");
		System.out.print("등급 입력[silver/gold/vip/vvip] : ");
		String grade = sc.next();

		System.out.print("이름 입력 : ");
		sc.nextLine();
		String name = sc.nextLine();

		System.out.print("포인트 입력 : ");
		int point = sc.nextInt();

		Grade gra = null;
		switch (grade) {
		case "silver":
			Silver s = new Silver(grade, name, point);
			gra = (Grade) s;
			break;
		case "gold":
			Gold g = new Gold(grade, name, point);
			gra = (Grade) g;
			break;
		case "vip":
			Vip v = new Vip(grade, name, point);
			gra = (Grade) v;
			break;
		case "vvip":
			Vvip vv = new Vvip(grade, name, point);
			gra = (Grade) vv;
			break;
		}
		return gra;
	}

	public void printAllMember(HashMap<String, Grade> members) {
		System.out.println("=====전체 회원 출력=====");
		System.out.println("등급\t이름\t포인트\t보너스");
		Set<String> names = members.keySet();// members에 키로 등록된걸 전부 꺼내서 names에 String형식으로 등록
		for (String name : names) {// names에 등록되있는걸 전부 name부분에 집어넣는다.
			Grade g = members.get(name);
			System.out.println(g.getGrade() + "\t" + g.getName() + "\t" + g.getPoint() + "\t" + g.getBonus());
		}
	}

	public String getName(String str) {
		System.out.println("=====회원 정보 " + str + "=====");
		System.out.print(str + "할 이름 입력 : ");
		String name = sc.next();
		return name;
	}

	public void noSearchMembers() {
		System.out.println("회원 정보를 찾을 수 없습니다.");
	}

	public void printOneMember(Grade g) {
		// TODO Auto-generated method stub
		System.out.println("등급 :" + g.getGrade());
		System.out.println("이름 :" + g.getName());
		System.out.println("포인트 :" + g.getPoint());
		System.out.println("보너스 :" + g.getBonus());
	}

	public Grade updateMember() {
		System.out.println("=====수정 할 회원 정보 등록=====	");
		System.out.print("등급 입력 [silver/gold/vip/vvip] : ");
		String grade = sc.next();

		System.out.print("이름 입력 : ");
		sc.nextLine();
		String name = sc.next();

		System.out.print("포인트 입력 : ");
		int point = sc.nextInt();

		switch (grade) {
		case "silver":
			Silver s = new Silver(grade, name, point);
			return s;
		case "gold":
			Gold g = new Gold(grade, name, point);
			return g;
		case "vip":
			Vip v = new Vip(grade, name, point);
			return v;
		case "vvip":
			Vvip vv = new Vvip(grade, name, point);
			return vv;
		}
		return null;
	}
}

StudentMgr5

controller

package kr.or.student.controller;

import java.util.HashMap;

import kr.or.iei.student.vo.Student;
import kr.or.student.view.StudentView;

public class StudentController {
	// 키값으로 이름을 사용하고 , value는 학생객체사용
	private HashMap<String, Student> students;
	private StudentView view;

	public StudentController() {
		super();
		students = new HashMap<String, Student>();
		view = new StudentView();
	}

	public void main() {
		while (true) {
			int sel = view.showMenu();
			switch (sel) {
			case 1:
				insertStudent();
				break;
			case 2:
				printAllStudent();
				break;
			case 3:
				printOneStudent();
				break;
			case 4:
				updateStudent();
				break;
			case 5:
				deleteStudent();
				break;
			case 0:
				return;
			}

		}
	}

	public void updateStudent() {
		String name = view.getName("수정");
		if(students.containsKey(name)) {//입력받은 이름이 있는지 조회
			Student s = view.updateStudent();
			students.put(s.getName(), s);//put 데이터 삽입//key가 겹치면 덮어씌움
			if(!name.equals(s.getName())) {//추가를 하고난뒤 기존것을 지워서 수정하는것 안지우면 그냥 추가임
				students.remove(name);
			}
		}else {
			view.noSearchStudent();
		}
	}

	public void insertStudent() {
		Student s = view.insertStudent();
		// 입력 받은 값 중 이름을 key
		// Student 객체를 value로 설정하여 map에 저장
		students.put(s.getName(), s);
	}

	public void printAllStudent() {
		view.printAllStudent(students);// students는 맵이름
	}

	public void printOneStudent() {
		String name = view.getName("조회");
		if (students.containsKey(name)) {// 입력받은 이름(키값)이 있는 지 조회
			Student s = students.get(name);
			view.printOneStudent(s);
		} else {
			view.noSearchStudent();
		}
	}

	public void deleteStudent() {
		String name = view.getName("삭제");
		if (students.containsKey(name)) {
			students.remove(name);
		} else {
			view.noSearchStudent();
		}
	}
}

view

package kr.or.student.view;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;

import kr.or.iei.student.vo.Student;

public class StudentView {
	private Scanner sc;

	public StudentView() {
		super();
		// TODO Auto-generated constructor stub
		sc = new Scanner(System.in);
	}

	public int showMenu() {
		// TODO Auto-generated method stub
		System.out.println("=====학생관리 프로그램5=====");
		System.out.println("1. 학생 정보 등록");
		System.out.println("2. 전체 학생 출력");
		System.out.println("3. 학생 1명 출력");
		System.out.println("4. 학생 정보 수정");
		System.out.println("5. 학생 정보 삭제");
		System.out.println("0. 프로그램 종료");
		System.out.println("선택 > ");
		int sel = sc.nextInt();
		return sel;
	}

	public Student insertStudent() {
		System.out.println("=====학생 정보 등록=====");
		System.out.print("이름 입력 : ");
		String name = sc.next();

		System.out.print("나이 입력 : ");
		int age = sc.nextInt();

		System.out.print("주소 입력 : ");
		sc.nextLine();
		String addr = sc.nextLine();

		Student s = new Student(name, age, addr);

		return s;
	}

	public void printAllStudent(HashMap<String, Student> students) {
		System.out.println("=====전체 학생 출력=====");
		System.out.println("이름\t나이\t주소");
		Set<String> names = students.keySet();// students에 키로 등록된걸 다꺼내서 names에 저장
		for (String name : names) {
			Student s = students.get(name);
			System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getAddr());
		}
	}

	public String getName(String str) {
		System.out.println("=====학생 정보 "+str+"=====");
		System.out.print(str + "할 이름 입력 : ");
		String name = sc.next();
		return name;
	}

	public void noSearchStudent() {
		// TODO Auto-generated method stub
		System.out.println("학생 정보를 찾을 수 없습니다.");
	}

	public void printOneStudent(Student s) {
		System.out.println("이름 : "+s.getName());
		System.out.println("나이 : "+s.getAge());
		System.out.println("주소 : "+s.getAddr());
	}

	public Student updateStudent() {
		System.out.print("수정 이름 입력 : ");
		String name = sc.next();
		
		System.out.print("수정 나이 입력 : ");
		int age = sc.nextInt();
		
		System.out.print("수정 주소 입력 : ");
		sc.nextLine();
		String addr = sc.nextLine();
		
		Student s = new Student(name, age, addr);
		return s;
	}

}

ByteStreamTest

package kh.java.func;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class ByteStreamTest {
	Scanner sc;

	public ByteStreamTest() {
		super();
		sc = new Scanner(System.in);
		// TODO Auto-generated constructor stub
	}

	public void PrimaryStream() {
		// 1.스트림생성 -> 2.메소드를 통한 입/출력 ->3.자원반환
		System.out.println("저장할 파일명 입력 : ");
		String filename = sc.nextLine();

		FileOutputStream fos = null;
		
		
		try {
			//입력받은 파일명으로 파일생성
			//생성된 파일과 프로그램이 stream연결
			fos = new FileOutputStream("C:\\Users\\user1\\Desktop\\"+filename);//저장 경로 변환
			String str = "hello";
			byte[]arr = str.getBytes();//문자열을 바이트 배열로 변환
			//write메소드의 매개변수가 byte[]타입이기때문에
			fos.write(arr);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}