Problem Solving

[Java] Requirements Q124: 회원 정보 파일의 주문 데이터 추출

Isaac S. Lee 2023. 8. 12. 21:06
package com.test.question;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Q124 {

	public static final String GUEST_FILE = "C:\\Class\\code\\java\\file\\파일_입출력_문제\\검색_회원.dat";
	public static final String ORDER_FILE = "C:\\Class\\code\\java\\file\\파일_입출력_문제\\검색_주문.dat";

	public static void main(String[] args) {
		try {
			Scanner scanner = new Scanner(System.in);
			String name = getNameFromUser(scanner); // 사용자로부터 이름을 입력받음
			String[] guestData = findGuestData(name); // 입력한 이름으로 회원 정보 검색

			if (guestData != null) {
				System.out.println("==== 구매내역 ====");
				System.out.println("[번호]\t[이름]\t[상품명]\t[개수]\t[배송지]");
				findAndPrintOrderData(name, guestData[0], guestData[2]); // 주문 정보 검색 및 출력
			}

			scanner.close();

		} catch (IOException e) {
			System.out.println("Error");
			e.printStackTrace();
		}
	}

	// 이름 입력 메소드
	private static String getNameFromUser(Scanner scanner) {
		System.out.print("이름: ");
		return scanner.nextLine();
	}

	// 주문 정보 출력 메소드
	private static void printOrderInfo(String name, String[] orderData, String address) {
		System.out.printf("%s\t%s\t%s\t\t%s\t%s\r\n", orderData[0], name, orderData[1], orderData[2], address);
	}
	
	// 회원 정보 검색 메소드
	private static String[] findGuestData(String name) throws IOException {
		try (BufferedReader guestReader = new BufferedReader(new FileReader(GUEST_FILE))) {
			String line;
			
			while ((line = guestReader.readLine()) != null) {
				String[] guestData = line.split(",");
				
				if (guestData[1].equals(name)) {
					return guestData; // 검색된 회원 정보 반환
				}
			}
		}
		return null; // 검색된 회원 정보 없을 시 null 반환
	}

	// 주문 정보 검색 및 출력 메소드
	private static void findAndPrintOrderData(String name, String guestNumber, String address) throws IOException {
		try (BufferedReader orderReader = new BufferedReader(new FileReader(ORDER_FILE))) {
			String line;
			
			while ((line = orderReader.readLine()) != null) {
				String[] orderData = line.split(",");
				if (orderData[3].equals(guestNumber)) {
					printOrderInfo(name, orderData, address); // 주문 정보 출력
				}
			}
		}
	}
}