main.MainClass
package main;
import dao.StudentDao;
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// menu
StudentDao dao = new StudentDao();
while(true){
System.out.println("< 학생관리 프로그램 >");
System.out.println("1. 학생추가");
System.out.println("2. 학생삭제");
System.out.println("3. 학생검색");
System.out.println("4. 학생수정");
System.out.println("5. 모두출력");
System.out.println("6. 데이터불러오기");
System.out.println("7. 데이터저장");
System.out.print("메뉴번호를 입력 >> ");
int menu = sc.nextInt();
switch (menu){
case 1:
dao.insert();
break;
case 2:
dao.delete();
break;
case 3:
dao.select();
break;
case 4:
dao.update();
break;
case 5:
dao.print();
break;
case 6:
dao.dataLoad();
break;
case 7:
dao.dataSave();
break;
}
}
}
}
dao.StudentDao
package dao;
import dto.StudentDto;
import file.FileClass;
import java.util.Arrays;
import java.util.Scanner;
// Data Access Object
public class StudentDao {
// CRUD
private Scanner sc;
private StudentDto[] students;
private int count;
private FileClass fc;
public StudentDao() {
sc = new Scanner(System.in);
students = new StudentDto[10];
fc = new FileClass();
fc.create();
count = 0;
//students[0] = new StudentDto(1, "홍길동", 171.2, "서울시");
//students[1] = new StudentDto(2, "성춘향", 157.3, "남원시");
//students[2] = new StudentDto(3, "일지매", 180.1, "부산시");
}
public void insert(){ // 추가
System.out.println("학생추가 >>>" );
System.out.print("번호 = ");
int number = sc.nextInt();
System.out.print("이름 = ");
String name = sc.next();
System.out.print("키 = ");
double height = sc.nextDouble();
System.out.print("주소 = ");
String address = sc.next();
StudentDto dto = new StudentDto(number, name, height, address);
students[count] = dto;
count++;
}
public void delete(){ // 삭제
System.out.println("학생삭제 >>>" );
System.out.print("학생명 = ");
String name = sc.next();
// 검색
// index를 찾아서 삭제하는 방법
int index = -1;
index = search(name);
/*for (int i = 0;i < students.length; i++){
StudentDto dto = students[i];
if(dto != null && name.equals(dto.getName())){
index = i;
break;
}
}*/
// 삭제
if(index == -1){
System.out.println("학생정보를 찾을 수 없습니다");
return;
}
students[index] = null;
/*
StudentDto dto = null;
for (StudentDto st : students){
if(st != null && name.equals(st.getName())){
dto = st;
}
}
if(dto == null){
System.out.println("학생정보를 찾을 수 없습니다");
return;
}
for (int i = 0;i < students.length; i++){
if(dto == students[i]){
students[i] = null;
break;
}
}*/
System.out.println("학생데이터를 삭제하였습니다");
}
public void select(){ // 검색
System.out.println("학생검색 >>>" );
System.out.print("학생명 = ");
String name = sc.next();
int index = search(name);
if(index == -1){
System.out.println("학생정보를 찾을 수 없습니다");
return;
}
System.out.println("학생정보입니다 >> ");
System.out.println(students[index].toString());
}
public void update(){ // 수정
System.out.println("학생정보수정 >>>" );
System.out.print("학생명 = ");
String name = sc.next();
int index = search(name);
if(index == -1){
System.out.println("학생정보를 찾을 수 없습니다");
return;
}
System.out.println("학생정보입니다 >> ");
System.out.println(students[index].toString());
System.out.print("수정할 주소를 입력 = ");
String address = sc.next();
students[index].setAddress(address);
System.out.println("수정되었습니다");
}
public int search(String name){
int index = -1;
for (int i = 0;i < students.length; i++){
StudentDto dto = students[i];
if(dto != null && name.equals(dto.getName())){
index = i;
break;
}
}
return index;
}
public void print(){
for (int i = 0;i < students.length; i++){
StudentDto st = students[i];
if(st != null) {
System.out.println(st.toString());
}
}
}
public void dataLoad(){
String datas[] = fc.load();
/*for (String data : datas){
System.out.println(data);
}*/
// datas[0] = "1-홍길동-171.2-서울시"
for(int i = 0;i < datas.length; i++) {
String[] data = datas[i].split("-");
int number = Integer.parseInt(data[0]); // 1
String name = data[1]; // 홍길동
double height = Double.parseDouble(data[2]); // 171.2
String address = data[3]; // 서울시
StudentDto st = new StudentDto(number, name, height, address);
students[i] = st;
}
count = datas.length;
}
public void dataSave(){
String datas[] = new String[10];
//for (int i = 0;i < datas.length; i++) datas[i] = "";
int len = 0;
for(int i = 0;i < students.length; i++){
StudentDto dto = students[i];
if(dto != null){ // 1-홍길동-171.2-서울시
datas[len] = dto.getNumber() + "-" + dto.getName() + "-" + dto.getHeight() + "-" + dto.getAddress();
len++;
}
}
System.out.println(Arrays.toString(datas));
fc.save(datas);
}
}
/*
MyClass cls = null;
// 객체를 할당
cls = new MyClass();
// 배열만 생성
MyClass arr[] = new MyClass[3]; arr[0], arr[1], arr[2]
// 객체를 할당
arr[0] = new MyClass();
arr[1] = new MyClass();
arr[2] = new MyClass();
arr[0].setName("홍길동");
*/
dto.StudentDto
package dto;
// Data Transfer Object
public class StudentDto {
private int number;
private String name;
private double height;
private String address;
public StudentDto() {
}
public StudentDto(int number, String name, double height, String address) {
this.number = number;
this.name = name;
this.height = height;
this.address = address;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "StudentDto{" +
"number=" + number +
", name='" + name + '\'' +
", height=" + height +
", address='" + address + '\'' +
'}';
}
}
file.FileClass
package file;
import dto.StudentDto;
import java.io.*;
public class FileClass {
private File file;
public FileClass() {
file = new File("g:\\tmp\\students.txt");
}
public void create(){ // 파일
try {
if(file.createNewFile()){
System.out.println("파일 생성 성공!");
}else{
System.out.println("같은 파일명이 존재합니다");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public String[] load(){ // getter read
String[] datas = null;
try {
BufferedReader br = new BufferedReader(new FileReader(file));
// 데이터의 갯수
int count = 0;
String str = "";
while((str = br.readLine()) != null){
count++;
}
br.close();
// datas의 배열을 할당
datas = new String[count];
// 데이터를 파일로부터 저장
br = new BufferedReader(new FileReader(file));
int len = 0;
while((str = br.readLine()) != null){
datas[len] = str;
len++;
}
br.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
return datas;
}
public void save(String[] datas){ // setter write
// 1-홍길동-171.2-서울시 [0] row
// 2-성춘향-159.3-남원시 [1]
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
for (String s : datas){
if(s != null) {
pw.println(s);
}
}
pw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
'JAVA 프로그래밍' 카테고리의 다른 글
[JAVA] 풀스택 개발자 부트캠프 011일차 ② protected, over ride, super (0) | 2025.01.10 |
---|---|
[JAVA] 풀스택 개발자 부트캠프 011일차 ① 상속성 (0) | 2025.01.09 |
[JAVA] 풀스택 개발자 부트캠프 010일차 ① 학생 관리 프로그램(추가, 삭제, 검색, 수정, 모두 출력) (0) | 2025.01.07 |
[JAVA] 풀스택 개발자 부트캠프 009일차 ④ constructor와 destructor (1) | 2025.01.07 |
[JAVA] 풀스택 개발자 부트캠프 009일차 ③ Over Load (0) | 2025.01.07 |