학교/2-2학기(Java)

[텀프로젝트] 11/14 기록

C0MPAS 2024. 11. 14. 22:14

11/11(월) 과제로 제출한 코드

import java.util.*;
import java.io.*;

public class MileageManager {
	public static void main(String[] args) {
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		Scanner sc = new Scanner(System.in);

		System.out.println("*** 마일리지 관리 프로그램입니다.***");

		// 마일리지 합산 및 차감
		while(true)
		{
			System.out.print("이름과 마일리지>>");
			String name = sc.next();
			if(name.equals("그만"))
			{
				break;
			}
			int mileage = sc.nextInt();

			if(map.containsKey(name))
			{
				int sum_Mileage = map.get(name);
				sum_Mileage += mileage;
				map.put(name, sum_Mileage);
			}
			else
			{
				map.put(name, mileage);
			}
		}

		
		// 전체출력
		Set<String> keys = map.keySet();
		Iterator<String> it = keys.iterator();
		while(it.hasNext())
		{
			String name = it.next();
			Integer mileage = map.get(name);
			System.out.print("(" + name + ":" + mileage +")");
		}		

		// 검색
		System.out.println();
		while(true)
		{
			System.out.print("검색할 이름>>");
			String name = sc.next();
			if(name.equals("그만"))
			{
				break;
			}
			Integer mileage = map.get(name);
			// int 가 아닌 Integer를 사용하여서 null과 비교가능하도록 구현
			
			if(mileage == null)
			{
				System.out.println(name + " 고객은 마일리지가 없습니다.");
				continue;
			}
			else
			{
				System.out.println(mileage);
			}
		}

		System.out.println("\n프로그램을 종료합니다.");
		sc.close();
	}
}

11/14(목) 수정 코드

- 향후 추가적인 구현을 계속 추가할 예정이므로 main으로부터 HashMap을 분리함

 

- main이 너무 방대해진 관계로, MileageManager manager로 선언한 뒤, 메소드로 따로 구현하도록 수정함

- main 안에 존재하던 합산 및 차감, 검색 기능을 메소드로 따로 분리함 -> .control_Mileage();

- 전체출력 기능의 경우, 파일로부터 읽어온 이후 초기 마일리지를 출력하며 1회 /

   검색까지 끝난 이후 최종 마일리지를 출력하며 1회 /

   이처럼 중복으로 활용해야함 -> show_Mileage()로 따로 분리하여서 사용하도록 구현

 

- mileage.txt 파일로부터 이름과 마일리지를 읽어와야하므로 File file = new File("경로")를 활용 -> .get_Mileaege();

  try - catch 구조는 교수님 강의에서 참고

  while문 안의 내용 구현을 위해서 .getOrDefault 메소드 추가

- 월요일날 구현하지 못했던 "가장 마일리지가 높은 고객을 출력" 부분도 따로 분리 -> highest_Mileage();

import java.util.*;
import java.io.*;

public class MileageManager {
    HashMap<String, Integer> mileageMap = new HashMap<>();

    public static void main(String[] args) {
        System.out.println("*** 마일리지 관리 프로그램입니다.***");

        MileageManager manager = new MileageManager();        
        manager.get_Mileage();
        manager.control_Mileage();
        manager.highest_Mileage();
        
        System.out.println("프로그램을 종료합니다.");
    }


	// mileage.txt 파일로부터 초기 마일리지 데이터 읽어오기
    public void get_Mileage() {
        try{
        	File file = new File("C:\\tempjava\\mileage.txt");
        	Scanner sc = new Scanner(file);
        	
            while (sc.hasNext())
            {
                String name = sc.next();
                if (name.equals("그만"))
                {
                	break;
                }
                int mileage = sc.nextInt();
                mileageMap.put(name, mileageMap.getOrDefault(name, 0) + mileage);
                // getOrDefault 메소드 추가 구현
            }
            sc.close();
        } 
        
        catch (FileNotFoundException e)
        {
        	System.out.println("FileNotFoundException");
        }
        catch (IOException e)
        {
            System.out.println("IOException");
        }
        catch (Exception e)
        {
        	System.out.println("Exception occured");
        }

        // 초기 마일리지 출력
        System.out.println("\n초기 마일리지 정보:");
        show_Mileage();
    }


    // 마일리지 누적, 합산, 차감 / 새로운 이름과 마일리지 추가 / 검색 기능
    public void control_Mileage() {
       Scanner sc = new Scanner(System.in);
       while (true)
       {
           System.out.print("\n이름과 마일리지>> ");
           
           String name = sc.next();
			if(name.equals("그만"))
			{
				break;
			}
			int mileage = sc.nextInt();

			if(mileageMap.containsKey(name))
			{
				int sum_Mileage = mileageMap.get(name);
				sum_Mileage += mileage;
				mileageMap.put(name, sum_Mileage);
			}
			else
			{
				mileageMap.put(name, mileage);
			}
       }

       // 최종 마일리지 출력
       System.out.println("\n최종 마일리지 정보:");
       show_Mileage();

       // 검색 기능
       while (true)
       {
           System.out.print("\n검색할 이름>> ");
           
           String name = sc.next();
           if (name.equals("그만"))
           {
           	break;
           }
           Integer mileage = mileageMap.get(name);
           
           if (mileage == null)
           {
               System.out.println(name + " 고객은 마일리지가 없습니다.");
           } 
           else
           {
               System.out.println(name + "의 마일리지: " + mileage);
           }
       }
       sc.close();
    }


    // (이름:마일리지) 형태로 모든 마일리지 정보 출력
    public void show_Mileage() {
    	Set<String> keys = mileageMap.keySet();
	Iterator<String> it = keys.iterator();
	while(it.hasNext())
	{
		String name = it.next();
		Integer mileage = mileageMap.get(name);
		System.out.print("(" + name + ":" + mileage +")");
	}		
    	System.out.println();
    }


    // 검색까지 종료된 이후, 프로그램 종료 전에, 가장 마일리지가 높은 고객을 출력
    public void highest_Mileage() {
        
        // 추가 구현 예정
        
    }
}