|
这两天一直在弄老师布置的用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也是类似,因为一个句子写在外面,导致开始的时候不断的循环。
大概就这些啊,也许对别人而言没有用,可是 却是我的一点点的进步。这就是学习笔记吧。
|