1 팁
1.
2 복습
1.
스킵
3 이론
1. 입출력
4 실습
1. 파일 입출력 (저장, 불러오기)
package j0531;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class C0531_02 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 객체선언
StuProcess sp = new StuProcess();
List<Student> list = new ArrayList<Student>();
int choice = 0;
int stuCount = list.size() + 1;
; // 학번
// list.add(new Student(1, "홍길동", 100, 100, 99));
// list.add(new Student(2, "유관순", 99, 99, 98));
while (true) {
System.out.println("[학생 성적 처리 프로그램]");
System.out.println("1. 학생입력");
System.out.println("2. 학생출력");
System.out.println("8. 파일에서 가져오기");
System.out.println("9. 파일저장하기");
System.out.println("--------------------------");
System.out.println("원하는 번호를 입력하세요");
choice = scan.nextInt();
switch (choice) {
case 1:
// 메소드호출 후 데이터 전달 받음
stuCount = list.size() + 1;
Map<String, Object> map = sp.stuInput(list, stuCount);
list = (List<Student>) map.get("list");
stuCount = (int) map.get("stuCount");
break;
case 2:
// 메소드호출(매개변수 전달)- list
list = sp.stuOutput(list);
break;
case 8:
list = sp.stuRead();
System.out.println("파일 읽어오기가 완료되었습니다.");
System.out.println();
break;
case 9:
sp.stuSave(list);
System.out.println("[학생 성적이 저장 되었습니다]");
break;
}// switch
} // while
}// main
}
package j0531;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class StuProcess {
Scanner scan = new Scanner(System.in);
int stuNo;
String name;
int kor, eng, math;
// 파일 저장하기
void stuSave(List<Student> list) {
String data = "";
// System.out.printf("%d,%s,%d,%d,%d", list.get(0).getStuNo(),
// list.get(0).getName(), list.get(0).getKor(),
// list.get(0).getEng(), list.get(0).getMath());
for (int i = 0; i < list.size(); i++) {
data += String.format("%d,%s,%d,%d,%d \r \n", list.get(i).getStuNo(), list.get(i).getName().trim(),
list.get(i).getKor(),
list.get(i).getEng(), list.get(i).getMath());
}
// String data = "1,홍길동,100,100,99\r\n2,유관순,99,99,98 \r\n3,이순신,88,88,87 \r\n";
// 파일 저장
FileWriter fw = null;
try {
fw = new FileWriter("c:/savedata/student.txt");
fw.write(data);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fw.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
System.out.println("저장되었습니다.");
}
// 읽어오기
List<Student> stuRead() {
// int stuNo = 0;
// String name = "";
// int kor = 0, eng = 0, math = 0;
List<Student> list = new ArrayList<Student>();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("c:/savedata/student.txt"));
String data = "";
while (true) {
data = br.readLine();// data = "1,홍길동 ....."
String[] dataArr = data.split(","); // 1,홍길동,100 .....
if (data == null)
break;
stuNo = Integer.parseInt(dataArr[0]);
name = dataArr[1];
kor = Integer.parseInt(dataArr[2]); // 정수형으로 형변환
eng = Integer.parseInt(dataArr[3]); // 정수형으로 형변환
math = Integer.parseInt(dataArr[4]); // 정수형으로 형변환
list.add(new Student(stuNo, name, kor, eng, math));
}
} catch (
Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
br.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
return list;
}
// 리턴타입 메소드명
List<Student> stuOutput(List<Student> list) {
System.out.println("[학생성적 출력화면]");
//
String[] title = { "학번", "이름", "국어", "영어", "수학", "합계", "평균", "등수" };
// 출력
System.out.println("[학생성적 출력화면]");
System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s \n",
title[0], title[1], title[2], title[3], title[4], title[5], title[6], title[7]);
System.out.println("--------------------------------------------------");
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\t%d \n",
s.getStuNo(), s.getName(), s.getKor(), s.getEng(), s.getMath(),
s.getTotal(), s.getAvg(), s.getRank());
}
System.out.println();
return list;
}// stuOutput
// 리턴타입 메소드명 (학생성적 입력)
Map<String, Object> stuInput(List<Student> list, int stuCount) {
// 반복
while (true) {
System.out.println("[학생성적 입력]");
System.out.println(stuCount + "번째 이름을 입력하세요. (0.이전페이지 이동)");
name = scan.next();
if (name.equals("0")) {
System.out.println("[이전페이지 이동]");
break;
}
System.out.println("국어점수 입력하세요");
kor = scan.nextInt();
System.out.println("영어점수 입력하세요");
eng = scan.nextInt();
System.out.println("수학점수 입력하세요");
math = scan.nextInt();
// 새로운 Student 객체를 생성하여 입력 받은 값을 이용해 초기화하고, 리스트에 추가합니다.
// stuCount : 학생 학번
// ![]2023-05-31-17-01-04.png
list.add(new Student(stuCount, name, kor, eng, math));
stuCount++; // 1증가
} // while
System.out.println();
// list,stuCount 2개를 담는 Map 생성
// list : 학생 정보
// stuCount : 입력된 학생의 수를 나타내는 변수
// ![]2023-05-31-16-56-26.png
Map<String, Object> map = new HashMap<String, Object>();
map.put("list", list); // list=list
map.put("stuCount", stuCount); // stuCount=4
return map;
}// map
}
2. List 사용법
main
package j0531_02;
import java.util.ArrayList;
import java.util.List;
import j0531.Student;
public class C0531_08 {
public static void main(String[] args) { // throw exception 넣으면 try catch 필요 없음
// 객체선언
DataClass d = new DataClass();
int num1 = 10;
int num2 = 5;
int sum = d.numAdd(num1, num2);
System.out.println(sum * 2);
int kor = 100, eng = 100, math = 99;
Student s = d.stuAdd(kor, eng, math);
System.out.println(s.getTotal());
// 학번, 이름을 출력하시오.
List<Student> list = d.stuList(); // 리스트 형태에서 stuList 정보 선언하기
// int num = 0; (타입) (이름) = (정보) 선언
for (int i = 0; i < list.size(); i++) {
System.out.printf("%d, %s \n", list.get(i).getStuNo(), list.get(i).getName());
}
}
}
class
package j0531_02;
import java.util.ArrayList;
import java.util.List;
import j0531.Student;
public class DataClass {
int numAdd(int num1, int num2) { // 리턴 타입이 같아야 함
System.out.println("더하기");
int sum = num1 + num2;
return sum;
}
Student stuAdd(int kor, int eng, int math) {
System.out.println("학생성적추가");
int stuNo = 1;
String name = "홍길동";
Student s = new Student(stuNo, name, eng, math, kor);
return s;
}
List<Student> stuList() {
List<Student> list = new ArrayList<Student>(); // 다형성을 위해 사용
// ArrayList<Student> list = new ArrayList<Student>();
System.out.println("list");
list.add(new Student(1, "홍길동", 100, 100, 100));
list.add(new Student(2, "이순신", 90, 90, 90));
return list;
}
}
student (this, get, set 클래스)
package j0531;
import java.util.Properties;
import java.util.Objects;
public class Student {
Student() {
}
public Student(int stuNo, String name, int kor, int eng, int math) {
this.stuNo = stuNo;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
this.total = kor + eng + math;
this.avg = this.total / 3.0;
}
private int stuNo;
private String name;
private int kor;
private int eng;
private int math;
private int total;
private double avg;
private int rank;
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
if (kor > 100) {
return;
}
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public double getAvg() {
return avg;
}
public void setAvg(double avg) {
this.avg = avg;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
}
5 문제풀이
1.
6 단축키
1.
* 핵심
- 파일 불러오기, 저장하기에 대해 확실히 알기
* 0531 실습 링크
728x90
반응형
LIST
'배운 책들 정리 > 자바 완전 정복' 카테고리의 다른 글
자바의 정석 9,11,12 정리 - java.lang 패키지(Stringbuffer 클래스) , 컬렉션 프레임 워크, 쓰레드 (0) | 2023.05.30 |
---|---|
자바의 정석 9,11,12 - java.lang 패키지(Stringbuffer 클래스) , 컬렉션 프레임 워크, 쓰레드 (0) | 2023.05.30 |
자바의 정석 9 - java.lang 패키지 (String 클래스) (0) | 2023.05.30 |
자바의 정석 7,8 - 객체지향개념 (다형성,추상화,인터페이스), 예외 처리 (0) | 2023.05.25 |
자바의 정석 7-2 - 객체지향개념 2 (다형성,Arrraylist,제네릭,애너테이션) (0) | 2023.05.25 |