* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:《通讯录管理系统》
* 作 者: 刘江波
* 完成日期: 2013年 06 月 01 日
* 版 本 号: V2.2
* 对任务及求解方法的描述部分
* 问题描述:
链表的应用,主要涉及链表及其链表的存储结构和各种操作的算法实现;具体完成通讯录管理系统。
* 程序头部的注释结束
*/
LinkMan
package com.ljb.list; //联系人对象 public class LinkMan { private String name; //姓名 private String num; //手机号 public LinkMan() { } public LinkMan(String name,String num) { this.name = name; this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } }
LinearList
package com.ljb.list; public class LinearList { private LinkMan[] data; //线性表以数组形式存放 private int MaxSize;//表空间的最大范围 private int Last; //表当前结点个数,即表长 //构造函数 public LinearList(int MaxSize) { if(MaxSize>0){ this.MaxSize = MaxSize; Last = 0; //创建表空间 data = new LinkMan [MaxSize]; } } //判断线性表是否为空 public boolean ListEmpty(){ return (Last <=0)?true:false; } //判断线性表是否已满 public boolean ListFull(){ return(Last >= MaxSize)?true:false; } //求线性表的长度 public int ListLength(){ return Last; } //求线性表中第i个结点的值 public LinkMan GetElem(int i){ //若存在,返回结点,否则,返回null; return(i<0||i>Last)?null:data[i]; } //查找线性表中值为x的结点 public int LocateElem(LinkMan x){ //查找表中值为x的结点,找到则返回该结点的序号;否则返回-1; //若表中值为x的结点有多个,找到的是最前面的一个; for(int i=0;i<Last;i++){ if(data[i] == x)return i; } return -1; } //在线性表末尾添加结点 public boolean InsertElem(LinkMan man) { //在表末尾添加man结点 ////若插入成功,则返回true,否则返回false if(!ListFull())//未满,直接存入,否则,扩容 { data[Last] = man; Last++; return true; } else { MaxSize = MaxSize*2; LinearList list = new LinearList(MaxSize); data[Last] = man; Last++; return true; } } //在线性表中第i个位置插入值为x的结点 public boolean InsertElem(LinkMan x,int i){ //在表中第i个位置插入值为x的结点 //若插入成功,则返回true,否则返回false //插入位置不合理,插入失败 if(i<0||i>Last||Last == MaxSize) return false; else { //后移 for(int j = Last;j>i;j--) data[j] = data[j-1]; //插入 data[i] = x; //表长增一 Last++; return true; } } public void AlterElem(LinkMan man,int i) { data[i] = man; } //删除线性表的第i个结点 public boolean DeleteElem(int i){ //删除表中第i个结点,若成功,返回true;否则返回false; //第i个结点不存在,删除失败; if(i<0||i>=Last||Last == 0) return false; else { //前移 for(int j=i;j<Last-1;j++) data[j] = data[j+1]; //表长减1 Last--; return true; } } public void display(int i){ System.out.println('\t'+data[i].getName()+'\t'+data[i].getNum()); } }
Operate
package com.ljb.list; import java.util.Scanner; public class Operate { int n = 100; //链表容量初始值 LinearList list = new LinearList(n); //添加操作 public void add(){ System.out.println("添加联系人"); Scanner s = new Scanner(System.in); System.out.println("请输入姓名"); String s1 = s.next(); System.out.println("请输入联系方式"); String s2 = s.next(); System.out.println("你输入的联系人信息为:"+"姓名:"+s1+'\t'+"联系方式:"+s2); System.out.println("确认添加?(y/n)"); String f = s.next(); if(f.equals("y")||f.equals("Y")) { LinkMan man1 = new LinkMan(s1,s2); if(list.InsertElem(man1)==true) System.out.println("添加成功"); else System.out.println("添加失败"); } } //修改操作 public void alter(){ //将第i个结点进行修改。 //首先将第i个结点删除,再将修改的信息添加到链表末尾。 System.out.println("请输入要修改成员的信息:"); Scanner mes = new Scanner(System.in); int i = Integer.parseInt(mes.next()); if(list.GetElem(i) != null) { System.out.print("修改的结点信息为:"); list.display(i); System.out.println("确认修改?(y/n)"); String f = mes.next(); if(f.equals("y")||f.equals("Y")) { list.DeleteElem(i); System.out.println("请修改信息"); Scanner s = new Scanner(System.in); System.out.println("请输入姓名"); String s1 = s.next(); System.out.println("请输入联系方式"); String s2 = s.next(); LinkMan man2 = new LinkMan(s1,s2); if(list.InsertElem(man2)==true) System.out.println("修改成功"); else System.out.println("修改失败"); } } else { System.out.println("第i个结点为null"); System.out.println("修改失败"); } } //删除操作 public void remove(){ System.out.println("请输入要删除成员的信息:"); Scanner mes = new Scanner(System.in); int i = Integer.parseInt(mes.next()); if(list.GetElem(i) != null) { System.out.print("删除的结点信息为:"); list.display(i); System.out.print("确认删除?(y/n)"); String f = mes.next(); if(f.equals("y")||f.equals("Y")) { if(list.DeleteElem(i)==true) System.out.println("删除成功"); else System.out.println("删除失败"); } } else { System.out.println("第i个结点为null"); } } //显示操作 public void display() { System.out.println("联系人总数为"+list.ListLength()); System.out.println("联系人信息:"+'\t'+"姓名"+'\t'+"联系方式"); for(int i=0;i<list.ListLength();i++) { System.out.print("第"+(i+1)+"联系人:"); list.display(i); } } }
text
package com.ljb.list; import java.util.Scanner; public class text { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method s Operate op = new Operate(); while(true) { System.out.println("-------欢迎使用通讯录管理软件-------"); System.out.println(" 1-添加成员信息 2-修改成员信息"); System.out.println(" 3-删除成员信息 4-显示成员信息"); System.out.println(" 0-退出管理软件"); System.out.println("请输入要选择的操作:"); Scanner s = new Scanner(System.in); int i = Integer.parseInt(s.next()); switch(i) { case 0: { System.out.println("--成功退出--"); System.exit(0); } case 1: { op.add(); break; } case 2: { op.alter(); break; } case 3: { op.remove(); break; } case 4: { op.display(); break; } default: { System.out.println("输入的信息错误!!!"); } } } } }
结果显示: