연락처 관리 프로그램 [ver.5.0]

6193 단어 JavaprojectJava

연락처 관리 프로그램 ver.5.0

DAO 인터페이스, DAOImple 클래스, Main 클래스, VO 클래스로 구성됨.

  • 데이터 모델 : name, phone, email
  • 기능 : 연락처 등록, 전체검색, 상세검색, 연락처 수정, 연락처 삭제
  • UI 구조 :
  • 업그레이드 내용 : 콘솔창이 아닌 GUI 제공
private void contactInsert() {
	String name=txtName.getText();
	String phone=txtPhone.getText();
	String email=txtEmail.getText();
		
	if(name.equals("")||phone.equals("") || email.equals("")) {
		txtAreaLog.setText(">>저장할 연락처 정보를 입력하세요.");
		return; //contactInsert() 종료
	}
	
	ContactVO vo=new ContactVO(name, phone, email);
	int result=dao.insert(vo);
	
	if(result==1) {
		txtAreaLog.setText(">>연락처를 등록했습니다.");
		clearTextFields();
	}else {
		txtAreaLog.setText(">>등록에 실패했습니다.");
	}
}//end contactInsert()

null값이 입력되어도 list에 저장되던 것을 if문으로 막아줍니다. if문 안에서 return만 쓰면 if문을 담고있는 해당함수가 종료돼요

private void contactSelectAll() {
	model.setRowCount(0);//table 초기화
	
	ArrayList<ContactVO> list=dao.select();
	int count=list.size();
	StringBuffer buffer=new StringBuffer();
	//문자열을 연결하기 위해 StringBuffer를 써서 append()를 씀.
		
	for(int i=0;i<count;i++) {
		buffer.append(i+"번>>"+list.get(i)+"\n");
		records[0]=i; //NO
		records[1]=list.get(i).getName();
		records[2]=list.get(i).getPhone();
		records[3]=list.get(i).getEmail();
		model.addRow(records);
	}
	txtAreaInfo.setText(">>전체 연락처 ("+count+")"+"\n"+buffer.toString());
	
}//end contactSelectAll()

전체검색이 추가된 설정이 좀 많은데요. 정보제공뿐만 아니라 table도 구성해서 데이터의 추가/변경을 직관적으로 보여주려고 합니다.
먼저 list를 한줄씩 읽어서 전체 결과를 보여줘야 하는데 for문에서 setText()를 쓰면 텍스트가 덮어씌워져서 결국 맨 마지막 반복의 텍스트만 출력됩니다.
for문에서 문자열을 연결하려면 StringBuffer를 사용해야해요.

전체 list table 사용하기

private String[] header= {"NO","이름","전화번호","이메일"};
private Object[] records = new Object[header.length]; 
private DefaultTableModel model; //테이블 형태를 만들 변수
  • header와 데이터를 담을 record 변수 선언
    recoreds의 인덱스 0번이 'NO'가 되는 것.
model=new DefaultTableModel(HEADER,0);
table = new JTable(model);
table.setEnabled(false);
scrollPane_2.setViewportView(table);
  • 테이블을 구성하는 model과 table 초기화
  • 테이블의 row값은 갱신해도 뒤에 연결되기때문에 전체검색을 누를때마다 setRowCount(0)로 테이블을 초기화해줘야함
private void contactSelectByIndex() {
	try {
		int index=Integer.parseInt(txtIndex.getText());
		int count=dao.select().size(); 
		
		if(index>=0 && index<count) {
			ContactVO vo=dao.select(index);
			txtAreaInfo.setText(index+"번>>"+vo.toString());
		}else {
			txtAreaLog.setText(">>0부터 "+(count-1)+"까지만 입력하세요.");
		}
	} catch (NumberFormatException|IndexOutOfBoundsException e) {
		txtAreaLog.setText(">>0 이상의 정수를 입력하세요.");
	}
}//end contactSelectByIndex()
private void contactUpdate() {
	try {
		int index=Integer.parseInt(txtIndex.getText());
		int count=dao.select().size();
			
		if(index>=0 && index<count) {
			String name=txtName.getText();
			String phone=txtPhone.getText();
			String email=txtEmail.getText();
			
			if(name.equals("")||phone.equals("")||email.equals("")) {
				txtAreaLog.setText(">>수정할 연락처 정보를 입력하세요.");
				return; //contactUpdate() 종료
			}
				
			ContactVO vo = new ContactVO();
			vo.setName(name);
			vo.setPhone(phone);
			vo.setEmail(email);
			int result=dao.update(index, vo);
				
			if(result==1) {
				txtAreaLog.setText(">>연락처를 수정했습니다.");
				clearTextFields();
			}else {
				txtAreaLog.setText(">>수정에 실패했습니다.");
			}
		}else {
			txtAreaLog.setText(">>0부터 "+(count-1)+"까지만 입력하세요.");
		}
	} catch (NumberFormatException|IndexOutOfBoundsException e) {
		txtAreaLog.setText(">>0 이상의 정수를 입력하세요.");
	}
}//end contactUpdate()
private void contactDelete() {
	try {
		int index=Integer.parseInt(txtIndex.getText());
		int count=dao.select().size();
		
		if(index>=0 && index<count) {
			int result=dao.delete(index);
			if(result==1) {
				txtAreaLog.setText(">>연락처를 삭제했습니다.");
			}else {
				txtAreaLog.setText(">>삭제에 실패했습니다.");
			}
		}else {
			txtAreaLog.setText(">>0부터 "+(count-1)+"까지만 입력하세요.");
		}
	} catch (NumberFormatException|IndexOutOfBoundsException e) {
		txtAreaLog.setText(">>0 이상의 정수를 입력하세요.");
	}		
}//end contactDelete()

향후 업데이트

  • 저장할때마다 기존의 데이터를 덮어씌우는 file 저장 방식에서 데이터를 추가하는 DB 저장 방식 사용하기.

좋은 웹페이지 즐겨찾기