JAVA_주소록(추가,삭제,검색,수정) 만들기

박예린·2022년 12월 28일
0

Java

목록 보기
23/23

class

  • mainclass
  • DAOclass
  • DTOclss
  • fileclass(데이터 저장, 불러오기)

dto(Data Transfer Object)코드

//주소록의 한명의 데이터를 담는 object

public class HumanDto{

//사람의 정보에 항목(column)
//이름, 나이, 전화번호, 주소, 메모
	private String name;
    private int age;
	private String phone;
	private String address;
	private String memo;
    
    //기본 생성자
    public HumanDto(){
    }
    
    //매개변수 생성자
    public HumanDto(String name, int age, String phone, String address, String memo) {
		this.name = name;
		this.age = age;
		this.phone = phone;
		this.address = address;
		this.memo = memo;
	}
    
    //private -> 은닉성 접근을 위해 getter,setter 사용
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getMemo() {
		return memo;
	}

	public void setMemo(String memo) {
		this.memo = memo;
	}

	//확인용
	@Override
	public String toString() {
		return name + "*" + age + "*" + phone + "*" + address + "*" + memo;
	}
	
}

dao(Data Access Object)코드

//데이터를 접근하고 편집하는 object
//추가, 삭제, 검색, 수정

//클래스
public class AddressDao {
	
	Scanner sc = new Scanner(System.in);

	// 변수를 100개 생성 (변수들을 생성)
	private HumanDto humanArr[] = new HumanDto[100];
	//멤버변수
	private int count;
	
	private FileProc fp = null;
    
    //생성자
	public AddressDao() {
		// 변수들에 객체를 생성
		/*
		for (int i = 0; i < humanArr.length; i++) {
			humanArr[i] = new HumanDto();
		}
		*/
		
		fp = new FileProc("address");
		
		humanArr[0] = new HumanDto("홍길동", 24, "123-4567", "서울시", "절친");
		humanArr[1] = new HumanDto("성춘향", 16, "234-5678", "남원시", "여사친");
		humanArr[2] = new HumanDto("일지매", 22, "345-6789", "부산시", "동호회");
		humanArr[3] = new HumanDto("홍길동", 20, "555-5555", "춘천시", "친구");
		
		count = 0;
	}
    
    //////////////////////////////////////////////////////////////////////////////////////////////
	//함수 이름 : insert
	//목적 : 주소록에 추가
	public void insert() {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //공백 지원(* - 등)
		
		System.out.println("지인을 추가합니다");
		
		System.out.print("이름 = ");
		String name = sc.next();//주소록에 추가할 이름 user input
		
		System.out.print("나이 = ");
		int age = sc.nextInt();
		
		System.out.print("전화번호 = ");
		String phone = sc.next();
		
		System.out.print("주소 = ");
		String address = "";
		
		try { //예외 핸들링
			address = br.readLine();
		} catch (IOException e) {			
			e.printStackTrace();
		}
		
		System.out.print("메모 = ");
		String memo = sc.next();
		
		/*
		humanArr[0].setName(name);
		humanArr[0].setAge(age);
		humanArr[0].setPhone(phone);
		humanArr[0].setAddress(address);
		humanArr[0].setMemo(memo);
		*/
		
		//count - index 위에 user input value 저장
		humanArr[count] = new HumanDto(name, age, phone, address, memo);
		count++; //user input 저장 -> 인덱스 증가
	}
    
    //////////////////////////////////////////////////////////////////////////////////////////////
	//함수 이름 : delete
	//목적 : 주소록에 있는 정보 삭제
	public void delete() {
		System.out.print("삭제할 지인의 이름 = ");
		String name = sc.next(); //삭제할 정보(이름) user input 
		
		// 검색
		int index = search(name);
		/*
		int index = -1;
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null 
					&& name.equals(humanArr[i].getName())) {
				index = i;
				break;
			}
		}
		*/
		
		if(index == -1) { //인덱스가 -1이라면 정보를 찾을 수 없음 호출
			System.out.println("지인의 정보를 찾을 수 없습니다");
		}
		//인덱스가 -1이 아닌 그 외
		else {			
			// 삭제
			humanArr[index].setName("");
			humanArr[index].setAge(0);
			humanArr[index].setPhone("");
			humanArr[index].setAddress("");
			humanArr[index].setMemo("");
			
			System.out.println("지정한 지인을 삭제하였습니다");
		}
	}
    
    //////////////////////////////////////////////////////////////////////////////////////////////
	//함수 이름 : select
	//목적 : 동명이인 찾기
	public void select() { // 동명이인을 찾는다
		// 검색
		System.out.print("검색할 지인의 이름 = ");
		String name = sc.next(); //검색할 지인 이름 user input
		
		/*
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null 
			//입력한 사람 이름과 humanArr[i]에 있는 이름과 같을 때는 이렇게만 하면 되지만
					&& name.equals(humanArr[i].getName())) {
				System.out.println(humanArr[i].toString());
			}
		}
		*/
		
		// 찾을 사람이 몇명인지?
		int count = 0;
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null 
					&& name.equals(humanArr[i].getName())) {
				count++; 
			}
		}
		//ex)동명이인이라면 2명이 나올테니까 count < 1는 false조건 -> 즉 검색할 수 x
		if(count < 1) {
			System.out.println("검색한 지인은 찾을 수 없습니다");
			return;
		}
		
		//찾은 데이터를 보관하는 배열
		HumanDto hdto[] = new HumanDto[count];
		
		int n = 0;
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null 
					&& name.equals(humanArr[i].getName())) {
				hdto[n] = humanArr[i];
				n++; //n -> 1 다시 for문 돌아감
			}
		}
		
		// 찾은 데이터의 배열(동명이인들의 집합들을 출력)
		for (int i = 0; i < hdto.length; i++) {
			System.out.println(hdto[i].toString());
		}
	}
    
    //////////////////////////////////////////////////////////////////////////////////////////////	
	//함수 이름 : update
	//목적 : 주소록 특정 지인을 검색하여 phone, address 수정
	public void update() {
		System.out.print("수정할 지인의 이름 = ");
		String name = sc.next(); //수정할 지인의 이름 user input
		// 검색
		int index = search(name);
		
		//인덱스가 -1이면 찾을 수 없음 print 호출
		if(index == -1) {
			System.out.println("지인의 정보를 찾을 수 없습니다");
			return;
		}
		
		// 수정
		// phone
		// address
		System.out.println("데이터를 찾았습니다");
		System.out.print("전화번호 = ");
		String phone = sc.next(); //수정할 전화번호 user input
		
		System.out.print("주소 = ");
		String address = sc.next(); //수정할 주소 user input
		
		humanArr[index].setPhone(phone); //수정한 전화번호 humanArr[]배열에 정보 저장
		humanArr[index].setAddress(address); //수정한 주소 humanArr[]배열에 정보 저장
		
		System.out.println("정상적으로 수정되었습니다"); //정상 수정 print문 호출
	}
	
	//////////////////////////////////////////////////////////////////////////////////////////////
	//select함수가 아닌 다른 update, delete와 같은 함수에거 검색을 위해 활용되는 함수
	//search는 동명이인을 찾는 것이고 다른 함수들에서 활용되는 select는 한명만 찾음
	public int search(String name) {
		int index = -1;
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null 
					&& name.equals(humanArr[i].getName())) {
				index = i;
				break;
			}
		}
		return index;
	}
	
	//확인용
	public void allDataPrint() {
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null 
					&& humanArr[i].getName().equals("") == false) {
				System.out.println(humanArr[i].toString());
			}			
		}
	}	
	
	public void filesave() {
		// 실제 배열에 들어 있는 데이터
		int count = 0;
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null && !humanArr[i].getName().equals("")) {
				count++;
			}
		}
		
		String dataArr[] = new String[count];
		/*
			이름나이전화번호주소메모
			홍길동24123-4567서울시친구
			홍길동*24*123-4567*서울시*친구
		*/
		
		count = 0;
		for (int i = 0; i < humanArr.length; i++) {
			if(humanArr[i] != null && 
				!humanArr[i].getName().equals("")) {
				
				dataArr[count] = humanArr[i].toString();
				count++;
			}
		}
		
		fp.write(dataArr);
		
	}
}

mainclass코드

public class MainClass {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		AddressDao dao = new AddressDao();
		
		// menu
		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 choice = sc.nextInt();
			
			switch(choice) {
				case 1:
					dao.insert();
					break;
				case 2:
					dao.delete();
					break;
				case 3:
					dao.select();
					break;
				case 4:
					dao.update();
					break;
				case 5:
					dao.allDataPrint();
					break;
				case 6:	
					dao.filesave();
					break;
				case 7:					
					break;
				default:
					
			}
		}
     }
}

(추가)fileproc코드

public class FileProc {

	// 파일 쓰기, 읽기
	private File file = null;
	
	public FileProc(String filename) {
		file = new File("c:\\tmp\\" + filename + ".txt");
		
		try {
			if(file.createNewFile()) {
				System.out.println("파일 생성 성공!");
			}else {
				System.out.println("기존의 파일이 있습니다");
			}
		} catch (IOException e) {			
			e.printStackTrace();
		}
	}
	
	public void read() {
		
	}
	
	public void write(String datas[]) {
		
		try {
			PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
			
			for (int i = 0; i < datas.length; i++) {
				pw.println(datas[i]);
			}
			
			pw.close();
			
		} catch (IOException e) {			
			e.printStackTrace();
		}	
		
		System.out.println("파일에 저장되었습니다");
	}
		
}
profile
개발자를 꿈꾸는 귀여운 나

0개의 댓글