《通讯录管理系统》

* 程序的版权和版本声明部分
 * 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("输入的信息错误!!!");
				}
			}
		}
		
	}

}


 

 

结果显示:

 

《通讯录管理系统》_第1张图片

 

 

 

 

你可能感兴趣的:(《通讯录管理系统》)