一、实现通讯录类(姓名、性别和电话号码),并为每个属性设置 set和get方法;
二、从命令行中读取数据放到通讯录类实例化的对象中,并合理组织存储结果方便查找。其文件样例如下,命令行第一行为通讯录中人员的个数n,从第二行到第n+1行是n个通讯录; 每个通讯录占1行,每行依次为人员姓名、性别和电话号码,每个属性间以空格隔开。
3
张三 男 123456
李四 女 654321
张三 男 654321
三、从命令行中,查询指定列的数据,样例如下,只有1行,第1个数据是指查询的数据在前面读取的通信录对应的列数,第二个数据是查询的关键词。例如,1 张三,1代表是第 1列,姓名 是张三。
1 张三
四、将查询到的结果输出到命令行中,根据前面的内容中通信录和刚才的查找例,输出样例如下,注意将查到所有的结果都输出。
张三 男 123456
张三 男 654321
【源代码】
package codeDemo;
/**
* @version 1.0;
* @author QinHaoting;
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class AddressList {
private String sName; // 姓名;
private char cGender; // 性别;
private int iPhone; // 电话;
// 构造函数;
public AddressList(String name, char gender, int phone) {
sName = name;
cGender = gender;
iPhone = phone;
}
// name对应的set()和get()方法;
public void setName(String name) { sName = name; }
public String getName( ) { return sName; }
// gender对应的set()和get()方法;
public void setGender(char gender) { cGender = gender; }
public char getGender() { return cGender; }
// phone对应的set()和get()方法;
public void setPhone(int phone) { iPhone = phone; }
public int getPhone() { return iPhone; }
// toString()方法,方便进行输出对象信息;
public String toString() {
return sName + " " + cGender + " " + iPhone;
}
public static void main(String[] args) {
// 根据name储存;
HashMap<String, ArrayList<AddressList>> PeopleName = new HashMap<String, ArrayList<AddressList>>();
// 根据gender储存;
HashMap<Character, ArrayList<AddressList>> PeopleGender = new HashMap<Character, ArrayList<AddressList>>();
// 根据phone储存;
HashMap<Integer, ArrayList<AddressList>> PeoplePhone = new HashMap<Integer, ArrayList<AddressList>>();
Scanner scanner = new Scanner(System.in); // 创建输入流对象;
int n = scanner.nextInt(); // 输入n;
for (int i = 0; i < n; i++) // 将对应的对象存入相应的Map中;
{
String name = scanner.next(); // 输入名字;
char gender = scanner.next().charAt(0); // 输入性别;
int phone = scanner.nextInt(); // 输入电话;
AddressList person = new AddressList(name, gender, phone); // 创建一个人对象;
// 根据name储存<name, person>进PeopleName中;
if (PeopleName.get(name) == null) // PeopleName没有值为name的key;
{
// 创建一个对象列表;
ArrayList<AddressList> nameList = new ArrayList<AddressList>();
// 将当前对象存入对象列表中;
nameList.add(person);
PeopleName.put(name, nameList);
}
else // PeopleName已有值为name的key;
{
// 直接在name对应的对象列表中加入该对象;
PeopleName.get(name).add(person);
}
// 根据gender储存<gender, person>进PeopleGender中;
if (PeopleGender.get(gender) == null) // PeopleGender中没有值为gender的key;
{
// 创建一个对象列表;
ArrayList<AddressList> genderList = new ArrayList<AddressList>();
// 将当前对象存入对象列表中;
genderList.add(person);
PeopleGender.put(gender, genderList);
}
else // PeopleGender已有值为gender的key;
{
// 直接在gender对应的对象列表中加入该对象;
PeopleGender.get(gender).add(person);
}
// 根据phone储存<phone, person>进PeoplePhone中;
if (PeoplePhone.get(phone) == null) // PeoplePhone中没有值为phone的key;
{
// 创建一个对象列表;
ArrayList<AddressList> phoneList = new ArrayList<AddressList>();
// 将当前对象存入对象列表中;
phoneList.add(person);
PeoplePhone.put(phone, phoneList);
}
else // PeoplePhone已有值为phone的key;
{
// 直接在phone对应的对象列表中加入该对象;
PeoplePhone.get(phone).add(person);
}
}
// 查询特定的数据;
while(true)
{
System.out.println("Input the cow and key");
int cow = scanner.nextInt(); // 输入指定查询的列;
Object key = null; // 输入查询的关键词;
if (cow==1) // 根据name进行查询;
{
key = scanner.next();
ArrayList<AddressList> list = PeopleName.get(key);
for (AddressList person:list)
{
System.out.println(person);
}
}
else if (cow==2) // 根据gender进行查询;
{
key = scanner.next().charAt(0);
ArrayList<AddressList> list = PeopleGender.get(key);
for (AddressList person:list)
{
System.out.println(person);
}
}
else if (cow==3) // 根据phone进行查询;
{
key = scanner.nextInt();
ArrayList<AddressList> list = PeoplePhone.get(key);
for (AddressList person:list)
{
System.out.println(person);
}
}
else
{
System.out.println("The cow is out of range");
}
// 询问是否继续查询;
System.out.println("Do you want to continue? (yes/no)");
String flag = scanner.next();
if (flag.equals("no")) // 程序结束;
{
System.out.println("Thank you for your using!");
break;
}
}
scanner.close(); // 关闭输入口;
}
}