JAVA課題のページだよ。
締め切りは1月31日17時まで。
お早めにお取り組みくださいな。

ちなみに間違っていても一切責任は負いかねますのでよろしくお願いします。
まあ、参考ぐらいにはなるでしょう。

package t0195100.enshu4.db;
abstract public class DataElement {
    /** 内容を文字列化する */
    abstract public String toString();
    /** データが含まれるか調べる */
    abstract public boolean contains(String s);
    /** キーを指定してデータが含まれるか調べる */
    abstract public boolean contains(String key, String s);
 }	


package t0195100.enshu4.db;  

public class AddressData extends DataElement {
    String name;
    String address;
    String phone;
    
    /** コンストラクタでデータを初期化 */
    public AddressData(String nm, String add, String ph) {
	name = nm;
	address = add;
	phone = ph;
    }
    
    /** 名前を返す */
    public String name() {
	return name;
    }
    
    /** 住所を返す */
    public String address() {
	return address;
    }
    
    /** 電話番号を返す */
    public String phone() {
	return phone;
    }
    
    /** 表示用にデータを文字列化する */
    public String toString() {
	String str = "name: "+name+" address: "+address+" phone: "+phone;
	return str;
    }
    
    /** データのみを指定してそれが含まれるか調べる */
    public boolean contains(String s) {
	boolean ret = false;
	// 文字列の比較は equals メソッドを利用
	if( s.equals(name)       )
	    ret = true; // 名前に一致するか?
        else if( s.equals(address)       )
	    ret = true;// 住所に一致するか?
	else if( s.equals(phone) )
	    ret = true;// 電話番号に一致するか?
	    return ret;
    }	
    
    /** キーとデータを指定してそれが含まれるかを調べる */
    public boolean contains(String key, String s) {
	boolean ret = false;
	// 文字列の比較は equals メソッドを利用
	if( key.equals("name") && s.equals(name) )
	    ret = true;
	else if( key.equals("address") && s.equals(address) )
	    ret = true;
	else if( key.equals("phone") && s.equals(phone) )
	    ret = true;
	    return ret;
    }
}



package t0195100.enshu4.db;
import java.util.Vector;
import java.io.*;

public class AddressBook {
    Vector db;
    
    /** コンストラクタ:引数はデータベースのサイズ(=データの個数) */
     public AddressBook(int size) {
	db = new Vector(size,size);
    }
    
    /** 新しいデータの追加 */
    public void addNewEntry(String nm, String add, String ph) {
	AddressData aData = new AddressData(nm,add,ph);
	db.addElement(aData);
    }
    
    /** データの一覧の出力 */
    public void show() {
	for( int i = 0 ; i < db.size() ; i++ ) {
	    AddressData aData = (AddressData)db.elementAt(i);
	    System.out.println(aData);
	}
    }
    
    /** キーに関係なく指定された文字列を持つ最初のデータを返す */
    public AddressData searchValue(String val) {
	AddressData ret = null;
	for( int i = 0 ; i < db.size() ; i++ ) {
	    AddressData aData = (AddressData)db.elementAt(i);
	    if( aData.contains(val) ) {
		return aData;
	    }
	}
	return ret;
    }
    
    /** 特定のキーに指定した文字列を持つ最初のデータを返す */
    public AddressData searchKeyWithValue(String key, String val) {
	AddressData ret = null;
	for( int i = 0 ; i < db.size() ; i++ ) {
	    AddressData aData = (AddressData)db.elementAt(i);
	    if( aData.contains(key, val) ) {
		return aData;
	    }
	}
	return ret;
    }
    
    /** データのファイルへの出力 */
    public void save( String fileName )throws IOException {
	PrintWriter pw = new PrintWriter
	    (new BufferedWriter(new FileWriter(fileName)));
	for( int j = 0 ; j < db.size() ; j++ ) {
	    AddressData aData = (AddressData)db.elementAt(j);
	    pw.println(aData);
	}
	pw.close();
	

    }
}




package t0195100.enshu4.db;
import java.io.*;
import t0195100.enshu4.db.*;

public class AddressDB {
    public static void main( String[] args )throws IOException {
	AddressBook aBook = new AddressBook(100);
	
	BufferedReader kbd =
	    new BufferedReader(new InputStreamReader(System.in));
	
    mainloop:
	while(true) {
	    System.out.println("0:input new data");
	    System.out.println("1:show all data");
	    System.out.println("2:save all data to file");
	    System.out.println("3:search data with value");
	    System.out.println("4:search data with value in key");
	    System.out.println("9:exit");
	    System.out.print(">");
	    
	    String s = kbd.readLine();
	    
	    switch(Integer.parseInt(s)) {
	    case 0:
		BufferedReader kbd1 =
		    new BufferedReader(new InputStreamReader(System.in));
		String nm = kbd1.readLine();
		BufferedReader kbd2 =
		    new BufferedReader(new InputStreamReader(System.in));
		String add = kbd2.readLine();
		BufferedReader kbd3 =
		    new BufferedReader(new InputStreamReader(System.in));
		String ph = kbd3.readLine();
		aBook.addNewEntry(nm,add,ph);/* 新規データの入力 */
		break;
	    case 1:
		/* データ一覧の表示 */
		aBook.show();
		break;
	    case 2:
		BufferedReader kbd7 =
		    new BufferedReader(new InputStreamReader(System.in));
		String filename = kbd7.readLine();
		    aBook.save(filename);/* ファイルへの出力 */
		break;
	    case 3:
		BufferedReader kbd4 =
		    new BufferedReader(new InputStreamReader(System.in));
		String val = kbd4.readLine();
		System.out.println(aBook.searchValue(val));
		/* 指定した文字を持つデータの表示 */
		break;
	    case 4:
		BufferedReader kbd5 =
		    new BufferedReader(new InputStreamReader(System.in));
		String key = kbd5.readLine();
                BufferedReader kbd6 =
		    new BufferedReader(new InputStreamReader(System.in));
		String val2 = kbd6.readLine();
		System.out.println(aBook.searchKeyWithValue(key,val2));/* 指定したキーに指定した文字を持つデータの表示 */
		break;
	    case 9:
		break mainloop;
	    }
	}
    }
}