实验一: 通信录的设计与实现——Java实现——version1.0

4 篇文章 0 订阅

一、实现通讯录类(姓名、性别和电话号码),并为每个属性设置 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(); // 关闭输入口;
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值