JAVA同学通讯录系统

自学java,尚硅谷中的同学录例题,网上搜索不到,自己写了一个分享出来,新手小白,也是第一次发帖,写的潦草的地方,欢迎指教

题目介绍:

练习 2:编写一个简单的同学通迅录 

需求说明: 

• 查询所有通讯录的同学信息。 
• 输入姓名,根据姓名查询指定同学信息。如果该姓名不存在,输出提示信息。 
• 添加同学,姓名重复的不能添加。 
• 根据学员姓名删除学员。 
• 按姓名排序查询学员。 

分析: 

• 使用 HashMap<K,V>存储同学信息,使用同学姓名做 key,同学对象做 value。 
• 同学对象包含的属性有:姓名、年龄、住址、爱好等。

*********************************************************************************************

直接附上源码:

 

package Test1;

import java.security.Key;
import java.text.Collator;
import java.util.*;

public class ClassMate{
    //根据题目要求创建相应的属性
    private String name;//姓名
    private int age;//年龄
    private String tel;//电话
    private String address;//地址

    //生成构造器
    public ClassMate() {
    }

    public ClassMate(int age, String tel, String address) {//构造器中删掉name,因为我们用hashmap存储数据,name需要用作key
        this.age = age;
        this.tel = tel;
        this.address = address;
    }

    static HashMap<String,ClassMate> hashMap=new HashMap<String,ClassMate>();
    //初始化数据
    void ClassMateMap(){
        hashMap.put("张三",new ClassMate(22,"65465161654","临沂"));
        hashMap.put("李四",new ClassMate(23,"15464645646","临沂"));
        hashMap.put("王五",new ClassMate(21,"46464646464","临沂"));
        hashMap.put("赵六",new ClassMate(18,"46465446464","临沂"));
    }

    //写一个用户交互界面
    void Interface(){
        System.out.println("******欢迎来到同学录系统******");
        System.out.println("******1.查看所有同学信息******");
        System.out.println("******2.查看指定同学信息******");
        System.out.println("******3.添加指定同学信息******");
        System.out.println("******4.删除指定同学信息******");
        System.out.println("******5.按姓名排序查看********");
        System.out.println("******6.退出********");
    }

    //下面开始挨个实现内容
    //1.打印所有同学录信息
    void printAll(){
        Set keySet=hashMap.keySet();//提取key
        for (Object o:keySet
        ) {//遍历后打印
            ClassMate classMate =hashMap.get(o);
            System.out.println(o+"\n"+classMate);
            System.out.println("--------------");

        }
    }

    //2.查询指定同学的信息
    void searchStudent(String name){//根据姓名(key)查询指定的value(new Classmate())
        Set keySet=hashMap.keySet();//提取key
        for(Object o:keySet){
            if(o.equals(name)){//如果用户输入的name和key相等:输出当前的value
                ClassMate classMate =hashMap.get(o);
                System.out.println(o+"\n"+classMate);
                System.out.println("--------------");
            }
        }
    }

    //3.添加指定同学的信息
    void addStudent(String name,ClassMate classMate) {
        if(hashMap.containsKey(name)){//这里用来检测同学是否存在
            System.out.println("同学已存在!");
        }else{
            hashMap.put(name,classMate);
        }
    }

    //4.删除指定同学的信息
    void deleteStudent(String name) {
        if(hashMap.containsKey(name)){
            hashMap.remove(name);
            System.out.println("删除成功!");
        }else {
            System.out.println("同学已删除!");
        }

    }


    //5.按照姓名排序:
    void sortStudent(){
        Set set = hashMap.keySet();//提取key
        ArrayList list = new ArrayList(set);//存到list中

        Collections.sort(list, new Comparator<String>() {//用sort()方法排序,但是需要自定义排序
            @Override
            public int compare(String s1, String s2) {
                String o1 = "";
                String o2 = "";
                if (s1 != null) {
                    o1 = s1;
                }
                if (s2 != null) {
                    o2 = s2;
                }
                Collator instance = Collator.getInstance(Locale.CHINA);//中文汉字是Unicode编码
                // 所以排序时不是我们习惯用的拼音字母,因此应该用Collator指定Locale.CHINA
                return instance.compare(o1, o2);
            }
        });

        for(Object o:list){//根据排序好的list中的key,打印hashmap中对应的value,实现根据姓名排序
            System.out.println(o+"\n"+hashMap.get(o));
        }
    }
    //对应的get,set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    //必须重写tostring,不然是地址值
    @Override
    public String toString() {
        return "个人信息如下:\n年龄:"+age+"\n电话:"+tel+"\n地址:"+address;
    }

    //这个也得重写
    @Override
    public int hashCode() {
        return Objects.hash(name,age,tel,address);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;//使用反射技术,判断o是否是person类 等效于obj instanceof person。getclass()相当于获取类名称,如Getclass()获取当前类的名称。
        ClassMate person = (ClassMate) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
}

接下面创建一个测试函数main,对功能进行测试:

package Test1;

import java.util.ConcurrentModificationException;
import java.util.NavigableMap;
import java.util.Scanner;

public class main {
    public static void main(String[] args) {
        ClassMate classMate=new ClassMate();//创建一个classmate类的对象
        classMate.ClassMateMap();//初始化数据

        //循环功能体
        boolean flag=true;//建立一个flag,方便退出
        while (flag){

            //功能界面
            classMate.Interface();//调用用户交互界面方法
            //输入
            Scanner scanner=new Scanner(System.in);
            System.out.println("");
            System.out.println("请输入选项(1-6):");
            int key =scanner.nextInt();//用户输入的选项存到key中
            if(key<1||key>6){//判定
                System.out.println("您的输入非法!");
                System.out.println("请重新输入:");
                key=scanner.nextInt();
            }

            switch (key){//switch循环选择
                case 1://打印所有同学信息
                    classMate.printAll();
                    break;
                case 2://查询指定同学信息
                    System.out.println("请输入您要查询同学的姓名:");
                    String searchName=scanner.next();
                    classMate.searchStudent(searchName);
                    break;
                case 3://添加指定同学信息
                    System.out.println("请输入要添加的同学姓名:");
                    String addName=scanner.next();
                    System.out.println("请输入年龄:");
                    int addAge=scanner.nextInt();
                    System.out.println("请输入电话:");
                    String addTel=scanner.next();

                    System.out.println("请输入地址:");
                    String addAddress=scanner.next();
                    ClassMate addClassMate=new ClassMate(addAge,addTel,addAddress);
                    classMate.addStudent(addName,addClassMate);
                    break;
                case 4://删除指定同学信息
                    System.out.println("请输入您要删除同学的姓名:");
                    String deleteName=scanner.next();
                    classMate.deleteStudent(deleteName);
                    break;
                case 5://根据姓名排序打印所有同学信心
                    classMate.sortStudent();
                    break;
                case 6://退出
                    flag=false;
                    System.out.println("退出成功!");

            }
        }




    }
}

以上是全部源码,运行一下看一下效果:

 输入5,根据姓名打印所有同学信息:

李四
个人信息如下:
年龄:23
电话:15464645646
地址:临沂
王五
个人信息如下:
年龄:21
电话:46464646464
地址:临沂
张三
个人信息如下:
年龄:22
电话:65465161654
地址:临沂
赵六
个人信息如下:
年龄:18
电话:46465446464
地址:临沂
 

测试成功!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值