ABOUT ME

Today
Yesterday
Total
  • [Java] Set 성적관리 프로그램
    Java 2022. 9. 19. 01:39

    Student.java

    package Set;
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    import java.util.Set;
    import java.util.Scanner;
    
    class Student {
    	private int id;
    	private String name;
    	private LinkedHashSet<String> subject;
    	private int[] grade;
    	private int total;
    	private float avg;
    	private String flag;
    	private Scanner scan;
    	private Iterator<String> sb;
    	
    	public Student(int id) {
    		scan = new Scanner(System.in);
    		subject = new LinkedHashSet<String>();
    		
    		this.id = id;
    		
    		System.out.println("이름을 입력해주세요");
    		name = scan.next();
    		
    		do {
    			System.out.println("과목 이름을 입력해주세요");
    			subject.add(scan.next());
    			System.out.println("계속 입력하시겠습니까? Y/N");
    			flag = scan.next();
    			sb = subject.iterator();
    		}while(flag.equals("Y") || flag.equals("y"));
    		
    		int j = 0;
    		if(subject.isEmpty() == false) {
    			grade = new int[subject.size()];
    			while(sb.hasNext()) {
    				System.out.println(sb.next() + "점수를 입력해주세요");
    				int score = scan.nextInt();
    				grade[j++] = score;
    				total += score;
    			}
    		}
    		
    		avg = (float) total / subject.size();
    	}	
    	
    	public void disp() {
    		sb = subject.iterator();
    		
    		System.out.println("학번: " + getId());
    		System.out.println("이름: " + getName());
    		
    		int j = 0;
    		if(subject.isEmpty() == false) {
    			while(sb.hasNext()) {
    				System.out.print(sb.next() + ": ");
    	    		System.out.println(grade[j++] + "점");
    			}
    		}
    
    		System.out.println("총점: " + getTotal());
    		System.out.println("평균: " + getAvg());
    		System.out.println();
    	}
    	
    	public int[] getGrade() {
    		return grade;
    	}
    
    	public void setGrade(int[] grade) {
    		this.grade = grade;
    	}
    	
    	public String[] getSubject() {
    		String sbsb;
    		String[] sub = new String[subject.size()];
    		sb = subject.iterator();
    		int j = 0;
    		while(sb.hasNext()) {
    			sbsb = sb.next();
    			sub[j++] = sbsb;
    		}
    		return sub;
    	}
    
    	public void setSubject(LinkedHashSet<String> subject) {
    		this.subject = subject;
    	}
    
    	
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public float getAvg() {
    		return avg;
    	}
    
    	public void setAvg(float avg) {
    		this.avg = avg;
    	}
    
    	public int getTotal() {
    		return total;
    	}
    
    	public void setTotal(int total) {
    		this.total = total;
    	}
    	
    }

     

    Main.java

    package Set;
    
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    import java.util.Set;
    import java.util.Scanner;
    
    public class Main {
    	private LinkedHashSet<Student> stu;
    	private Iterator<Student> subject;
    	private Object[] obj;
    	
    	
    	public Main() {
    		stu = new LinkedHashSet<Student>();
    	}
    	
    	public static void main(String[] args) {
    		Main m = new Main();
    		
    		Scanner scan = new Scanner(System.in);
    		String name;
    		int[] grade;
    		
    		Loop1:
    		while(true) {
    			System.out.println("번호를 입력하세요(1. 입력, 2. 출력, 3. 검색, 4. 삭제, 5. 종료)");
                int num = scan.nextInt();
                m.subject = m.stu.iterator();
                int id = 0;
                
                switch(num) {
                case 1:        
                	int point = 0;
                	if(!m.subject.hasNext()) {
                		System.out.println("학번을 입력해주세요");
                		id = scan.nextInt();
                	}
                	while(m.subject.hasNext()) {	
                		if(point == 0) {	// m.subject.hasNext() 여러번 반복하니까 1번만 출력하기 위해서
                    		System.out.println("학번을 입력해주세요");
                    		id = scan.nextInt();
                    		point ++;	
                		}
                		Student s = m.subject.next();       				
        				if(s.getId() == id) {
        					System.out.println("이미 존재하는 학번입니다.");
        					continue Loop1;
                    	}
                	}
                	m.stu.add(new Student(id));
                	break;
                case 2:
                	// 전체 출력(반, 이름, 과목, 점수, 총점, 평균) 
                	while(m.subject.hasNext()){
                		m.subject.next().disp();
                	}
                	break;
                case 3:
                	System.out.println("1. 학번 검색, 2. 이름 검색, 3. 점수 검색");
                	int inputNum = scan.nextInt();
                	// 학번 검색
                	if(inputNum == 1) {
                		System.out.println("검색하실 학번을 입력해주세요");
                		id = scan.nextInt();
                		
            			while(m.subject.hasNext()) {
            				Student s = m.subject.next();
            				if(s.getId() == id) {
            					s.disp();
            				}
                    	}
                		break;
                	}
                	// 이름 검색
                	else if(inputNum == 2) {
                		System.out.println("검색하실 이름을 입력해주세요");
                		name = scan.next();
                		while(m.subject.hasNext()) {
            				Student s = m.subject.next();
            				if(s.getName().equals(name)) {
            					s.disp();
            				}
                    	}
                		break;
                	}
                	// 점수 검색
                	else if(inputNum == 3) {
                		System.out.println("1. 평균, 2. 과목점수");
                		int inputNum2 = scan.nextInt();
                		// 평균
                		if(inputNum2 == 1) {
                			System.out.println("검색하실 평균을 입력해주세요");
            				int avg = scan.nextInt();
            				while(m.subject.hasNext()) {
                				Student s = m.subject.next();
                				if(s.getAvg() >= avg) {
                					s.disp();
                				}
                        	}
                			break;
                		}
                		// 과목 당
                		else if(inputNum2 == 2) {
                			System.out.println("검색하실 과목을 입력해주세요");
                			String sb = scan.next();
                			int k = 0;		// 포인터
                			int score = 0;	// 값 입력받을 예정
                			while(m.subject.hasNext()) {
                				Student s = m.subject.next();	// 첫 번째 원소 값부터 저장
                				String[] subArray = s.getSubject();		// 현재 값의 과목 이름 배열과 ubArray 배열 위치값 공유
                				for(int j=0 ; j < subArray.length; j++) {	// 과목 수만큼 반복
                					if(subArray[j].equals(sb)) {	// subArray[i]가 입력한 과목 이름이랑 같으면
                						if(k == 0) {
                							System.out.println("검색하실 점수를 입력해주세요"); 
                							score = scan.nextInt(); 
                							k++;		// 한 번만 출력하기 위해서 k값을 1 증가시킴
                						}
                						grade = s.getGrade();		// 현재 값의 점수배열과 grade 배열 위치값 공유
            							if(grade[j] >= score) {		// 입력한 과목 점수보다 grade[j]값이 크면 출력
                							s.disp();}
                    				}
                				}	
                        	}
                		}
                		break;
                	}
                case 4:	// 삭제
                	System.out.println("삭제하실 학생의 학번을 입력해주세요");
                	id = scan.nextInt();
    				while(m.subject.hasNext()) {
        				Student s = m.subject.next();
        				if(s.getId() == id) {
        					m.stu.remove(s);
        					break;
        				}
                	}
                	break;
                case 5:	   	
                	System.exit(-1);
                default:
                	System.out.println("다시 입력해주세요");
                }
    		}
    	}
    }
    728x90

    'Java' 카테고리의 다른 글

    [Java] BigInteger 다루기  (0) 2022.10.02
    [Java] Map 성적관리 프로그램  (0) 2022.09.19
    [Java] ArrayList 성적관리 프로그램  (0) 2022.09.19
    [Java] 참조 자료형  (0) 2022.07.09
    [Java] 제어문  (0) 2022.07.08
Designed by Tistory.