Java -FileWriter -2
Student class
public class Student {
private String no;
private String name;
private String tel;
private String address;
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return no + "," + name + "," + tel + "," + address + "\n";
}
}
StudentDAO class
import java.util.*;
import java.io.*;
public class StudentDAO {
File file = new File("c:/java/java2/Students.txt");
//학생 등록-------------------------------------------------------
public void insert(Student vo) {
try {
FileWriter writer = new FileWriter(file, true);
writer.write(vo.toString());
writer.flush();
writer.close();
System.out.println("학생등록완료!");
} catch (Exception e) {
System.out.println("오류:" + e.toString());
}
}
//학생 목록-------------------------------------------------------
public ArrayList<Student> list() {
ArrayList<Student> students = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line="";
while((line=reader.readLine()) !=null) {
String[] item = line.split(",");
Student vo =new Student();
vo.setNo(item[0]);
vo.setName(item[1]);
vo.setTel(item[2]);
vo.setAddress(item[3]);
students.add(vo);
}
}catch (Exception e) {
System.out.println("오류:" + e.toString());
}
return students;
}
//학생 수정-------------------------------------------------------
public void update (Student vo) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line="";
String newFile="";
while((line=reader.readLine()) !=null) {
String[] item = line.split(",");
if(vo.getNo().equals(item[0])) { //수정할 번호인경우
newFile = newFile + vo.toString();
}else { //수정할 번호가 아닌경우
Student temp = new Student();
temp.setNo(item[0]);
temp.setName(item[1]);
temp.setTel(item[2]);
temp.setAddress(item[3]);
newFile = newFile +temp.toString();
}
}
FileWriter writer = new FileWriter(file, false);
writer.write(newFile);
writer.flush();
writer.close();
System.out.println("수정 완료!");
}catch (Exception e) {
System.out.println("오류:" + e.toString());
}
}
// 학생검색 -------------------------------------------------------
public Student read (String no) {
Student vo =new Student();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line="";
while((line=reader.readLine()) !=null) {
String[] item = line.split(",");
if(no.equals(item[0])) {
vo.setNo(item[0]);
vo.setName(item[1]);
vo.setTel(item[2]);
vo.setAddress(item[3]);
}
}
}catch (Exception e) {
System.out.println("오류:" + e.toString());
}
return vo;
}
}
Score class
public class Score extends Student{
private String no;
private String date;
private int kor;
private int eng;
private int math;
private int tot;
private double avg;
private String grade;
public String getGrade() {
return grade;
}
public void setGrade() {
if(avg>=90) {
if(avg>=95) {
this.grade = "A+";
} else {
this.grade = "A0";
}
}else if(avg >=80) {
if(avg>=85) {
this.grade = "B+";
} else {
this.grade = "B0";
}
}else if(avg>=70){
if(avg>=75) {
this.grade = "C+";
} else {
this.grade = "C0";
}
}else if(avg>=60) {
if(avg>=65) {
this.grade = "D+";
} else {
this.grade = "D0";
}
}else {
this.grade ="F";
}
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
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 getTot() {
return tot;
}
public void setTot() {
this.tot = kor+eng+math;
}
public double getAvg() {
return avg;
}
public void setAvg() {
this.avg = tot/3.;
}
@Override
public String toString() {
return no + "," + date + "," + kor + "," + eng + "," + math + ","
+ tot + "," + avg + "," +grade+ "\n";
}
}
Score class
public class Score extends Student{
private String no;
private String date;
private int kor;
private int eng;
private int math;
private int tot;
private double avg;
private String grade;
public String getGrade() {
return grade;
}
public void setGrade() {
if(avg>=90) {
if(avg>=95) {
this.grade = "A+";
} else {
this.grade = "A0";
}
}else if(avg >=80) {
if(avg>=85) {
this.grade = "B+";
} else {
this.grade = "B0";
}
}else if(avg>=70){
if(avg>=75) {
this.grade = "C+";
} else {
this.grade = "C0";
}
}else if(avg>=60) {
if(avg>=65) {
this.grade = "D+";
} else {
this.grade = "D0";
}
}else {
this.grade ="F";
}
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
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 getTot() {
return tot;
}
public void setTot() {
this.tot = kor+eng+math;
}
public double getAvg() {
return avg;
}
public void setAvg() {
this.avg = tot/3.;
}
@Override
public String toString() {
return no + "," + date + "," + kor + "," + eng + "," + math + ","
+ tot + "," + avg + "," +grade+ "\n";
}
}
ScoreDAO class
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class ScoreDAO {
File file = new File("c:/java/java2/Score.txt");
public Score read(String date) {
Score vo = new Score();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while((line=reader.readLine()) != null) {
String[] item = line.split(",");
if(date.equals(item[1])) {
vo.setNo(item[0]);
vo.setDate(item[1]);
vo.setKor(Integer.parseInt(item[2]));
vo.setEng(Integer.parseInt(item[3]));
vo.setMath(Integer.parseInt(item[4]));
vo.setTot();
vo.setAvg();
vo.setGrade();
}
}
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
return vo;
}
//성적 목록
public ArrayList<Score> list(String no) {
ArrayList<Score> array = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while((line=reader.readLine()) !=null) {
String[] item = line.split(",");
if(no.equals(item[0])) {
Score vo= new Score();
vo.setNo(item[0]);
vo.setDate(item[1]);
vo.setKor(Integer.parseInt(item[2]));
vo.setEng(Integer.parseInt(item[3]));
vo.setMath(Integer.parseInt(item[4]));
vo.setTot(); vo.setAvg(); vo.setGrade();
array.add(vo);
}
}
} catch(Exception e) {
System.out.println("오류:" +e.toString());
}
return array;
}
// 성적 입력
public void insert(Score vo) {
try {
FileWriter writer = new FileWriter(file, true);
writer.write(vo.toString());
writer.flush();
writer.close();
System.out.println("성적입력완료!");
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
}
//성적삭제
public void delete(String date) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
String strFile ="";
while((line=reader.readLine()) != null) {
String[] item = line.split(",");
if(!date.equals(item[1])) {
Score vo = new Score();
vo.setNo(item[0]);
vo.setDate(item[1]);
vo.setKor(Integer.parseInt(item[2]));
vo.setEng(Integer.parseInt(item[3]));
vo.setMath(Integer.parseInt(item[4]));
vo.setTot(); vo.setAvg(); vo.setGrade();
strFile=strFile + vo.toString();
}
}
//삭제할 데이터를 제외하고 저장
FileWriter writer = new FileWriter(file, false);
writer.write(strFile);
writer.flush();
writer.close();
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
}
}
Main class
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean run =true;
StudentDAO sdao =new StudentDAO();
ScoreDAO cdao = new ScoreDAO();
while(run) {
System.out.println("┌──────────────────────────────────────────────────────────┐");
System.out.print("│1.등록 ");
System.out.print("2.목록 ");
System.out.print("3.수정 ");
System.out.print("4.검색 ");
System.out.print("5.성적등록 ");
System.out.print("6.성적조회 ");
System.out.print("7.성적삭제 ");
System.out.print("0.종료 │\n");
System.out.println("└──────────────────────────────────────────────────────────┘");
System.out.print("선택>");
String menu = scan.nextLine();
switch(menu) {
case "1":
Student svo = new Student();
System.out.print("학번☞"); String ino =scan.nextLine();
svo = sdao.read(ino);
if(svo.getName()==null) {
System.out.print("번호> "); svo.setNo(scan.nextLine());
System.out.print("이름> "); svo.setName(scan.nextLine());
System.out.print("☎전화번호>"); svo.setTel(scan.nextLine());
System.out.print("주소>"); svo.setAddress(scan.nextLine());
svo.setNo(ino);
sdao.insert(svo);
} else {
System.out.println(svo.getName() +"학생이 이미 존재해요!");
}
break;
case "2":
ArrayList<Student> array = sdao.list();
System.out.printf("%-3s\t%-10s\t%-15s\t%-10s\n","번호","이름","☎","주소");
for (Student vo:array) {
// System.out.println(vo.toString());
System.out.printf("%-3s\t%-10s%-15s%-10s\n",
vo.getNo(),vo.getName(),vo.getTel(),vo.getAddress());
}
break;
case "3":
System.out.print("수정할 학번☞"); String eno = scan.nextLine();
svo= sdao.read(eno);
if(svo.getName()==null) {
System.out.println("수정할 학생이 없습니다.");
}else {
System.out.print("성명 :" + svo.getName()+">");
String name = scan.nextLine();
if(!name.equals("")) svo.setName(name);
System.out.print("☎ :" + svo.getTel()+">");
String tel = scan.nextLine();
if(!tel.equals("")) svo.setTel(tel);
System.out.print("주소 :" + svo.getAddress()+">");
String address = scan.nextLine();
if(!address.equals("")) svo.setAddress(address);
System.out.println("──────────────────────");
System.out.print(svo.toString()+ "으로 수정하실래요 ? (Y/N) ☞");
String sel =scan.nextLine();
if(sel.equals("Y")||sel.equals("y")) {
sdao.update(svo);
}
}
break;
case "4":
System.out.print("검색할학번☞ "); String sno=scan.nextLine();
svo=sdao.read(sno);
System.out.println("──────────────────────");
if (svo.getNo()==null) {
System.out.println("※등록 학생이 없습니다.");
}else {
System.out.println("학생이름:" + svo.getName());
System.out.println("학생☎ :" + svo.getTel());
System.out.println("학생주소:" + svo.getAddress());
}
break;
case "5":
System.out.print("학번>");sno= scan.nextLine();
Student sv=sdao.read(sno);
if(sv.getName()==null) { //학생이 없는경우
System.out.println("학생이 존재하지 않습니다!");
}else { //학생이 있는경우
System.out.println("성명:" +sv.getName());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String fdate = sdf.format(new Date());
System.out.print("시험일:"+fdate+"> ");
String date = scan.nextLine();
if(!date.equals("")) fdate=date;
System.out.print("국어>");String kor=scan.nextLine();
System.out.print("영어>");String eng=scan.nextLine();
System.out.print("수학>");String math=scan.nextLine();
Score cvo= new Score();
cvo.setNo(sno);
cvo.setDate(fdate);
cvo.setKor(Integer.parseInt(kor));
cvo.setEng(Integer.parseInt(eng));
cvo.setMath(Integer.parseInt(math));
cvo.setTot();
cvo.setAvg();
cvo.setGrade();
// System.out.println(cvo.toString());
cdao.insert(cvo);
}
break;
case "6":
System.out.print("학번>"); sno=scan.nextLine();
svo = sdao.read(sno);
if(svo.getName()==null) { //학생이 있는경우
System.out.println("학생이 없습니다.");
}else { //학생이 없는경우
System.out.println("성명>" + svo.getName());
ArrayList<Score> scores =cdao.list(sno);
if(scores.size()==0) {
System.out.println("등록된 성적이 없습니다.");
}else {
for(Score c:scores) {
System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%s\n",
c.getDate(),c.getKor(),c.getEng(),
c.getMath(),c.getTot(),c.getAvg(),c.getGrade());
}
}
}
break;
case "7":
System.out.print("학번>"); sno=scan.nextLine();
svo = sdao.read(sno);
if(svo.getName()==null) {
System.out.println("학생이 없습니다.");
}else {
System.out.println("성명>" + svo.getName());
ArrayList<Score> scores =cdao.list(sno);
if(scores.size()==0) {
System.out.println("등록된 성적이 없습니다.");
}else {
for(Score c:scores) {
System.out.printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%s\n",
c.getDate(),c.getKor(),c.getEng(),
c.getMath(),c.getTot(),c.getAvg(),c.getGrade());
}
}
}
System.out.print("\n삭제할날짜>"); String date = scan.nextLine();
System.out.print(date + " 데이터를 삭제하실래요? (Y/N) >");
String sel =scan.nextLine();
Score c=cdao.read(date);
if(sel.equals("y") || sel.equals("Y") ) {
if(c.getDate()==null) {
System.out.println("해당 날짜에 시험이 없습니다. ");
} else {
cdao.delete(date);
System.out.println("삭제완료!");
}
}
break;
case "0":
run=false;
break;
default:
System.out.println("※0~6번 메뉴를 선택하세요!");
}
}
System.out.println("※프로그램종료※");
}
}
설명
클래스는 총 5 개 이다.
- Main method
- Score
- ScoreDAO
- Student
- StudentDAO
Student 클래스에서는 학생 등록,목록, 수정, 검색 을 처리할것이고.
Score 클래스에서는 학생 학번을 통해 성적을 등록 , 조회, 삭제를 처리할것이다.
-
Main method
- 무한 반복문을 통해서 0~7번까지 입력을 받는다.
-
case 1: 학생을 등록 외부 Student 클래스를 쓰기위해 불러준다. 학번을 입력값으로 받고 if문을 사용해서 StudentDAO값을 read 로 받아서 , 안에 들어있는 값이 없는경우에 번호,이름,전화번호,주소 를 넣어주고 학번을 주고 insert 해준다. 값이 있는경우에는 else 로 있다고 알려준다.
-
case 2: 학생목록출력 arrayList를 사용해서 목록을 출력한다.
-
case 3: 학생수정 수정할 학번을 받아서 if문을 사용해 수정할학생이있다면 값을 수정할수있게한다. 기존에 조회한 값을 보여주고 입력한 값이 있다면 새로운 값으로 넘겨주고 입력한 값이 없다면 공백을 넣어준다.
-
case 4: 학생검색 검색할 번호값을 받아서 read로 읽어서 getno에 값이 없으면 학생이없다가 찍히고 아니면 검색한 올바른 값을 출력해줄것이다.
-
case 5: 성적등록 StudentDAO 값을 read 해서 학생이 없는경우 존재하지않는다는것을 출력 학생이 있는경우에는 학번에 해당하는 학생의 시험일과 국,영,수 값을 입력받아서 ScoreDAO 에 insert 해준다.
-
case 6: 성적조회 검색 목록과 비슷하다. 학번을 입력받아서 sno에 넣었다. sno로 read한 결과를 svo에 넣었다. 만약에 학생이 있는경우에 이름을 출력해주고 arraylist에 list를 담아준다. 만약에 아무것도 등록되지않으면 등록되지않았다고 출력해주고 아니면 for문을 사용해서 저장된 값을 출력해준다.
-
case 7: 성적삭제 학번을 sno 로 입력받는다. sno로 read한결과를 sno에 넣어준다. 학생이 없는경우 와 학생이있다면 이름을 출력하고 arraylist 에 list 를 담아준다. 만약 아무것도 등록되지않았다면 등록된 성적이 없다고 출력하고 아니면 for문을 사용해서 저장된 값을 출력해준다. 그리고 그밑에 삭제하는 부분을 추가해줄건데, 삭제된 날짜를 date 로 받는다. 삭제할건지 아닌지 묻고 날짜 date를 read한 결과를 c에 넣었다. 데이타가 없는경우 해당 날짜에 시험이 없다고 출력해주고, 아닌경우에 날짜 date를 delete 해준다. 그리고 삭제완료를 출력해준다.
-
Score
Student 클래스를 상속받았다. (자식클래스임.) 성적에 관련된 필드가 있다. 학번, 시험날짜, 과목별점수, 총점, 평균, 학점 등 if문을 사용해서 학점이 나눠져있다.
-
ScoreDAO
- read 메서드 : 입력버퍼를 생성. 아무것도없는 라인을 만들어주고 라인단위로 읽어온 데이터가 null 이 아닌동안에 line에 담긴 item 을 “,” 단위로 쪼개준다. 만약에 날짜와 item[1]의 값이 일치한다면 그밑에 값을 출력해준다. 그리고 vo를 리턴한다.
- list 메서드 : arrayList를 만들어서 버퍼를 생성하고 학번이 item[0]과 일치한다면 밑에값을 array.add로해서 vo 에 담아준다. 그리고 array 를 return 한다.
- insert 메서드 : filewriter로 성적을 입력받는다.
- delete 메서드 : 버퍼를 생성한다. 빈 라인을 생성하고 담을 새로운 strFile을 만들어준다. 라인 단위로 읽어온 데이터가 null이 아닌동안에 line에 담긴 item 을 “,” 단위로 쪼개준다. 만약에 날짜와 item[1]의 값이 같지않은것만 strfile에 값을 저장해준다. 그리고나머지 삭제할 데이터를 제외하고 저장한다.
-
Student
학생정보에 관련된 필드가있다. 학번, 이름, 전화번호, 주소
-
StudentDAO
- update 메서드 : ( delete 메서드와 비슷하다.)
힘들다 호호.. 계속 수정 추가 예정 !
댓글남기기