用java 做一个通讯录的代码及心得

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cxl849988589/article/details/6522667

这两天一直在弄老师布置的用java 语言编写一个通讯录。因为自己才刚刚开始学习,犯了很多显而易见的错误,真是惭愧。不过幸好,在朋友和同学的帮助下,终于把它给弄出来了,虽然还不是很完善,但好歹是自己努力得来。在这个过程中也得到了不一样的快乐,那是在努力之后突然有了收获的欣喜。

下面和大家分享一下我的源代码。

在这里我用的是HashMap来实现的,其实还有别的方法可以去实现,比如我本来就打算用数组,今天发现还可以用集合去做。如果各位有兴趣可以去试一下,我就讲讲我自己的这个方法吧。

import java.util.*;
     class Student{    
     String sno;      
     String name;   
     String sex;  
     String age;  
     String tell;
     String adr;

      Student(){};
      Student(String sno,String name,String sex,String age,String tell,String adr){
              
              this.sno=sno;
              this.name=name;
              this.sex=sex;
              this.age=age;
              this.tell=tell;
              this.adr=adr;
      }
              
              void setsno(String sno){
                  this.sno=sno;
              }
                void setname(String name){
                  this.name=name;
              }
                void setsex(String sex){
                   this.sex=sex;
              }
                void setage(String age){
                   this.age=age;
              }
                void settell(String tell){
                   this.tell=tell;
              }
                void setadr(String adr){
                  this.adr=adr;
              }
  }


  public class C {
    public static void main(String args[]) {
    Student stu1=new Student("001","chenmin","男","20","15297762231","师院黄金区105国道旁");
    Student stu2=new Student("002","wanglin","女","19","15297762508", "江西省南康市泰康路29号");
    Student stu3=new Student("003","liuqian","男","23","15216183444","江西信丰县南安镇人民路");
    Student stu5=new Student("004","chenxia","女","21","15297762408","师院黄金区105国道旁");
    Student stu6=new Student("005","liuyua","男","22","15216183803","江西省大余县南京路25号");
    Student stu7=new Student("006","zhuwei","男","20","15297762231","师院黄金区105国道旁");
    Student stu8=new Student("007","liqian","男","22","15216183023","江西大余南安镇上海路30号");
    Student stu9=new Student("008","xiepin","女","19","15297762544", "江西省南康市泰康路30号");
    Student stu10=new Student("009","zhujian","男","22","15216183721","江西大余梅岭镇北京路1号");
     Student stu11=new Student("010","qingyu","女","25","15297762239","师院黄金区105国道旁");
    String key="chenming";
    HashMap<String,Student> table=new HashMap<String,Student>();
    table.put(stu1.name,stu1);
    table.put(stu2.name,stu2);
    table.put(stu3.name,stu3);
    table.put(stu5.name,stu5);
    table.put(stu6.name,stu6);
    table.put(stu7.name,stu7);
    table.put(stu8.name,stu8);
    table.put(stu9.name,stu9);
    table.put(stu10.name,stu10);
    table.put(stu11.name,stu11);
    

    System.out.println("通讯录的联系人有:/n");
    System.out.println("学号"+"/t"+"姓名"+"/t"+"  "+"性别"+"/t"+"年龄"+"/t"+"联系电话"+"/t"+"地址/n");
    Collection<Student> collection=table.values();
    Iterator<Student> iter=collection.iterator();
    while(iter.hasNext()){
         Student te=iter.next();
         System.out.println(te.sno+"/t"+te.name+"/t"+"  "+te.sex+"/t"+te.age+"/t"+te.tell+"/t"+te.adr+"/n");
    }


        System.out.println("操作:/n1..........查询联系人/n2..........删除联系人/n3..........增加联系人/n4..........查看所有联系人");
       
       int p=1;
       while(p>0){
            System.out.println("请输入您要进行的操作/n");
            Scanner reader=new Scanner(System.in);
        int zc;
        zc=reader.nextInt();
        switch(zc)
{
    
   case 1 :        
        {   Scanner reader1=new Scanner(System.in);
       System.out.println("请输入您要查询的联系人的姓名/n");
        key=reader1.nextLine();
        if(table.containsKey(key)){
           System.out.println(table.get(key).sno+"/t"+table.get(key).name+"/t"+table.get(key).sex+"/t"+table.get(key).age+"/t"+table.get(key).tell+"/t"+table.get(key).adr);
        }
          }
        break;


  case 2:
        {Scanner reader2=new Scanner(System.in);
 System.out.println("请输入您要删除的联系人的姓名/n");
        key=reader2.nextLine();
        table.remove(key);}
        break;


  case 3:
        { Scanner reader3=new Scanner(System.in);
Student stu4=new Student();
        System.out.println("请输入您要增添的联系人的姓名/n");
        String a=reader3.nextLine();
        stu4.setname(a);
        System.out.println("请输入学号/n");
        String b=reader3.nextLine();
        stu4.setsno(b);
        System.out.println("请输入性别/n");
        String c=reader3.nextLine();
        stu4.setsex(c);
        System.out.println("请输入年龄/n");
        String d=reader3.nextLine();
        stu4.setage(d);
        System.out.println("请输入联系方式/n");
        String e=reader3.nextLine();
        stu4.settell(e);
        System.out.println("请输入地址/n");
        String f=reader3.nextLine();
        stu4.setadr(f);
        table.put(stu4.name,stu4);}
        break;
        

  case 4:
     {  
System.out.println("通讯录的联系人有:/n");
    System.out.println("学号"+"/t"+"姓名"+"/t"+"性别"+"/t"+"年龄"+"/t"+"联系电话"+"/t"+"地址/n");
    Collection<Student> collection2=table.values();
    Iterator<Student> iter2=collection2.iterator();
    while(iter2.hasNext()){
         Student te2=iter2.next();
         System.out.println(te2.sno+"/t"+te2.name+"/t"+te2.sex+"/t"+te2.age+"/t"+te2.tell+"/t"+te2.adr+"/n");
    }  }
     break;

  default:System.out.println("没有进行任何操作/n");

}

 }       
          }
 }     

首先是定义一个Student类,因为后面有增加的操作,所以我定义了set函数,这样就可以在中途构造一个新的对象了。然后利用put函数将这些学生对象都放入table中,再根据HashMap里面的函数进行删除、查询等操作(见源代码)。基本的思路就是这样。我着重要写的是我在调试过程中见到的几个问题及思考。

我遇到的第一个错误比较搞笑,它提示说构造函数不正确,找了半天,才发现原来是实例化的时候少了一个参数。调试的时候为了减少工作量,我实例化的时候弄得非常简单,结果就在那里出错了,而且还找了那么久,才被朋友找出来。它是一个相当简单的错误,然而,越是简单,就越容易忽略,所以我们更加要注意,特别是我,作为一个菜鸟级别的。

在调试没有出错的时候,我设置了三个联系人,可是,遍历的时候,却只有一个显示出来了。一直以为是语句有问题,可是书上的用法确实是那样的,知道后来,还是别人告诉我,因为我设置的key是name,而我的三个联系人name都是一样的!在HashMap里面,是不允许key有相同的,他们是一一对应的,而卧却犯了那个错误。

定义好了那三个操作后,我就开始用switch语句来将他们组合起来,并用一个while循环来使它可以不断操作,在这个过程中,一开始我 的输入语句失灵了,因为我 用的是 Scanner reader3=new Scanner(System.in);来进行输入,可是我是在switch外面定义的,里面无法调用,所以只好 在每个case都定义一个,很笨的方法,不过总算实现了功能。while也是类似,因为一个句子写在外面,导致开始的时候不断的循环。

大概就这些啊,也许对别人而言没有用,可是 却是我的一点点的进步。这就是学习笔记吧。

 

展开阅读全文

没有更多推荐了,返回首页