一、简介:基于ArrayList,实现了增删查改,自定义排序,文件相关操作。以下为功能界面
System.out.println("*******************JAVA通讯录*******************");
System.out.println("*********1.添加联系人 2.删除联系人 ********");
System.out.println("*********3.查找联系人 4.修改联系人信息 ********");
System.out.println("*********5.显示所有联系人 6.保存到本地文件 ********");
System.out.println("*********7.读取本地文件 8.以年龄排序 ********");
System.out.println("*****************0.退出通讯录*********************");
二、功能实现(逐类介绍)
1.信息类:联系人的相关属性、构造方法、Setter()、getter()方法、ToString方法(统一输出格式)、compareTo方法(自定义排序)。
/*实现自定义排序可以实现Comparable的compareTo方法*/
public class InforMation implements Comparable<InforMation> {
private String Name;
private Integer Age;
private String Phonenum;
private String Address;
public InforMation()
{
this.Name = Name;//姓名
this.Age = Age;//年龄
this.Phonenum = Phonenum;//电话
this.Address = Address;//地址
}
public InforMation(String name,Integer age,String phonenum,String address) {
this.Name =name;
this.Age =age;
this.Phonenum =phonenum;
this.Address =address;
}
public void setName(String name) {
this.Name = name;
}
public void setAge(Integer age) {
this.Age = age;
}
public void setPhonenum(String phonenum) {
this.Phonenum = phonenum;
}
public void setAddress(String address) {
this.Address = address;
}
public String getName() {
return Name;
}
public Integer getAge() {
return Age;
}
public String getPhonenum() {
return Phonenum;
}
public String getAddress() {
return Address;
}
@Override
public int compareTo(InforMation o)//年龄升序
{
if((int)this.Age >o.Age)
return 1;
if((int)this.Age <o.Age)
return -1;
else
return 0;
}
@Override
public String toString() {
return "联系人" +
" 姓名:" + Name +" "+
" 年龄:" + Age +" "+
" 电话:" + Phonenum + " " +
" 地址:" + Address;
}
}
2.菜单类(打印功能界面)
public class Menu {
public static void mainmanu() {
System.out.println("*******************JAVA通讯录*******************");
System.out.println("*********1.添加联系人 2.删除联系人 ********");
System.out.println("*********3.查找联系人 4.修改联系人信息 ********");
System.out.println("*********5.显示所有联系人 6.保存到本地文件 ********");
System.out.println("*********7.读取本地文件 8.以年龄排序 ********");
System.out.println("*****************0.退出通讯录*********************");
}
}
3.功能实现类(实现菜单中的功能)
?
import java.io.*;
import java.util.Collections;
import java.util.Scanner;
public class Function extends MAIN{
static Scanner scanner=new Scanner(System.in);
public void Add(){//添加联系人
System.out.println("请输入:姓名、年龄、电话、地址");
InforMation a=new InforMation(scanner.next(),scanner.nextInt(),scanner.next(),scanner.next());
list.add(a);
if(!list.isEmpty())
System.out.println("添加成功");
else
System.out.println("添加失败");
}
public void Delete( ){//删除联系人
if(list.isEmpty()) {
System.out.println("通讯录为空");
return;
}
System.out.println("要删除的人是否为通讯录第一个?输入:是或否");
String b=scanner.next();
if(b.equals("否")) {
System.out.println("请输入要删除联系人的姓名");
String a = scanner.next();
for (int i = list.size() - 1; i >= 0; i--) {
if ((list.get(i).getName()).equals(a))
list.remove(list.remove(i));
return;
}
}
else if(b.equals("是"))
{
System.out.println("请输入联系人姓名:");
String a=scanner.next();
for(InforMation A:list)
{
if(a.equals(A.getName()))
list.remove(A);
return;
}
}
}
public void Search()//查找联系人
{
if(list.isEmpty()) {
System.out.println("通讯录为空");
return;
}
System.out.println("请输入联系人姓名:");
String a=scanner.next();
for(InforMation A:list)
{
if(a.equals(A.getName()))
System.out.println("姓名:"+A.getName()+" 年龄:"+A.getName()+" 电话:"+A.getPhonenum()+" 地址:"+A.getAddress());
}
}
public void Modify() {//修改联系人信息
if(list.isEmpty()) {
System.out.println("通讯录为空");
return;
}
System.out.println("请输入要修改联系人的姓名");
String a=scanner.next();
for(InforMation A:list)
{
if(a.equals(A.getName()))
{
System.out.println("要修改哪项信息?输入:姓名、年龄、电话或地址");
String b=scanner.next();
if(b.equals("姓名"))
{
System.out.println("请输入新姓名");
A.setName(scanner.next());
}
else
if(b.equals("年龄"))
{
System.out.println("请输入新年龄");
A.setAge(scanner.nextInt());
}
else
if(b.equals("电话"))
{
System.out.println("请输入新电话");
A.setPhonenum(scanner.next());
}
else
if(b.equals("地址"))
{
System.out.println("请输入新地址");
A.setAddress(scanner.next());
}
else
System.out.println("输入错误,请重新选择");
}
}
}
public void ShowAll(){//显示所有联系人
if(list.isEmpty()) {
System.out.println("通讯录为空");
return;
}
for(InforMation A:list)
{
System.out.println("姓名:"+A.getName()+" 年龄:"+A.getAge()+" 电话:"+A.getPhonenum()+" 地址:"+A.getAddress());
}
}
public void Write() throws IOException {//将信息写入文件
FileWriter a=new FileWriter("d:/a.txt");
BufferedWriter write=new BufferedWriter(a);
String B;
for(InforMation A:list)
{
String C=A.toString();
write.write(C);
write.newLine();
write.flush();
}
write.close();
a.close();
}
public void Read()throws IOException{//读取本地文件
FileReader a=new FileReader("d:/a.txt");
BufferedReader reader=new BufferedReader(a);
String B;
while(( B=reader.readLine())!=null)
System.out.println(B);
}
public void SortbyAge(){//以年龄排序
if(list.isEmpty()) {
System.out.println("通讯录为空");
return;
}
Collections.sort(list);
for(InforMation a:list)
{
System.out.println(a.toString());
}
}
}
4.主体类(程序入口)
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class MAIN {
ArrayList<InforMation> list=new ArrayList<InforMation>();
public static void main(String[] args) {
Function b=new Function();
while (true)
{
Menu.mainmanu();
int c=new Scanner(System.in).nextInt();
switch (c)
{
case 1:
b.Add();
break;
case 2:
b.Delete();
break;
case 3:
b.Search();
break;
case 4:
b.Modify();
break;
case 5:
b.ShowAll();
break;
case 6:
try {
b.Write();
}
catch (IOException e)
{}
break;
case 7:
try {
b.Read();
}catch (IOException e){}
break;
case 8:
b.SortbyAge();
break;
case 0:
System.exit(0);
}
}
}
}
三、总结
?注意事项:删除操作(详见注释)。
?不足之处:异常处理机制不完善,未使用正则表达式规范用户的输入,未使用GUI等。
?最后:需要借鉴可直接复制上面四个类的代码就好。有用请点个赞哦,谢谢!
|