2013년 8월 14일 수요일

[오라클자바커뮤니티,자바강좌]ArrayList 기반의 주소록 프로그램...

//*********************************************
//       
// 주소록 클래스 
//
//*********************************************

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  

class AddrBook {
//외부 클래스에서 직접 접근하지 못함...메소드를 통해 접근 가능
private int no;
private String name;
private String addr;
private String tel;

//--------------------- 생성자
AddrBook(int no, String name, String addr, String tel) {
this.no = no;
this.name = name;
this.addr = addr;
this.tel = tel;
}

//--------------------- 재정의(Object Class의 toString())
public String toString() {
String a = no + " : ";
a += name + ",";
a += addr + ",";
a += tel;

return a;
}

//주소록의 이름을 돌려주는 메소드
public String getName() {
return this.name;
}
}

//***********************************************
//ArrayList 인터페이스가 구현해야 하는 메소드 정의
//
// 인터페이스
//***********************************************
interface ArrayInterface {
  public void add(Object o); //맨 뒤에 넣는 case 
  public void add(int index, Object o);
  public void removeAll(); 
  public boolean remove(String name); 
  public boolean remove(int idx); 
  public int size(); 
}

//*******************************************
// 
// 주소록 조작을 위한 클래스
//
//*******************************************
class MyArray implements ArrayInterface {
Object[] myArray ;
MyArray() {
myArray = new Object[0];
}

MyArray(int i) {
if (i < 0)  throw new IllegalArgumentException();
    myArray = new Object[i];
}
public int size() {
for(int i=0;i<myArray.length;i++) {
if(myArray[i]==null) return i;
}
return myArray.length;
}

public void ensureCapacity(int minCapacity)  {
//minCapacity가 현재 size보다 클경우에만 처리할수도 있슴
      Object[] newArray = new Object[minCapacity];
  System.arraycopy(myArray, 0, newArray, 0, size());
        myArray = newArray;   
  }

public void add(Object  s) {
ensureCapacity(size() + 1);
        myArray[size()] = s;
}
public void add(int index, Object  s) {
int size = size();
if (index > size){
System.out.println("Invalid Index...");
}
else {
if (size == myArray.length) ensureCapacity(size + 1);
//arraycopy로 대체가 가능하다.
//if (index != size)
      //System.arraycopy(myArray, index, myArray, index + 1, size - index);
  //myArray[index] = s;
if(index<size) {
for(int i=size;i>index;i--) {
myArray[i] = myArray[i-1];
}
myArray[index]=s;
}
}
}
public boolean remove(int idx) {
int size = size();

if(idx<size) {
myArray[idx]=null;
for(int i=idx;i<size-1;i++) {
myArray[i] = myArray[i+1];
myArray[i+1] = null;
}
//삭제의 경우라면 under flow를 생각안할수도 있슴.
ensureCapacity(size-1);
return true;
}

return false;
}
public boolean remove(String name) {
int i=0, idx=0, size=0;
size = size();

for(i = 0; i < size; i++) { 
AddrBook book = (AddrBook)myArray[i]; 
if (book.getName().equals(name)){ 
idx = i;
break;



if (i == size) {
System.out.println("Data Not Found....");
return false; }

if(idx<size) {
myArray[idx]=null;
for(i=idx;i<size-1;i++) {
myArray[i] = myArray[i+1];
myArray[i+1] = null;
}
ensureCapacity(size-1);
return true;
}
return false;
}
public void removeAll() {
Object[] myArray = new Object[0];
}

//------------------ 주소록 전부 출력하는 메소드
public void printAll(){
for(int i=0;i<size();i++) {
System.out.println(myArray[i]);
}
}

//----------------- 이름으로 주소록 검색 후 출력
public void search(String name)  { 
int size = size();
for(int i = 0; i < size; i++) { 
AddrBook book = (AddrBook)myArray[i]; 
if (book.getName().equals(name)){ 
System.out.println(book);; 



}

public class MyAddrBook {
  public static void main(String[] args) {
    MyArray array = new MyArray();
    array.add(new AddrBook(1,"이종철","수원", "111-1111"));
array.add(new AddrBook(2,"jclee","수원", "222-2222"));
array.add(new AddrBook(3,"tatata","수원", "333-3333"));
array.printAll();
System.out.println("----------------------");
array.search("이종철");
System.out.println("----------------------");
    array.remove("이종철");
array.printAll();   
 }
}
 

댓글 없음:

댓글 쓰기