학교/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() {
// 추가 구현 예정
}
}