任务描述:手机通讯录的实现
设计并实现手机通讯录,主要功能包括:联系人信息录入、联系人信息查询与统计、联系人信息修改和删除、备份与恢复,支持可视化界面。
本题要求完成以下内容:
1. 请按面向对象程序设计的方法来实现系统。
2. 联系人信息主要包括:联系人姓名、手机号码、住宅电话、工作单位、家庭住址、分类(家人、朋友、同事、其它)、生日、电子邮件、备注等。联系人信息的录入必填信息为联系人姓名和手机号码,其余为可选项。
3. 信息查询功能应至少包括按姓名和手机号码两种方式查询联系人信息。统计功能包括联系人总数,分类人数等
4. 信息备份是将所有联系人信息从已有文件复制到另一指定文件中,信息恢复则是指将联系人信息从备份文件导入当前文件。
5. 要求所有信息能保存到文件中。可以将Java文件操作定义为文件操作类。
6. 设计简单的菜单界面,实现上述所要求的各种功能。即根据菜单界面的选择对手机通讯录进行管理。(可选)
模块解析:
模块一:Person类
分析:Person类表示的是一个标准类,就是包含有参无参的构造方法,且成员变量属性私有化,并且每个成员变量有其配套的getXxx()方法和setXxx()方法,而由于后面的查找遍历方法中都需要用到输出函数,为了降低代码的重复性所以我在Person类中增加了一个静态方法,传入的参数有集合和下标,根据下表按格式输出下标的元素所有属性。
(2)代码:
class Person {
private String name;//姓名
private String phoneNumber;//手机号码
private String residentialTelephone;//住宅电话
private String workUnit;//工作单位
private String address;//家庭住址
private String classification;//分类
private String birthday;//生日
private String e_mail;//电子邮件
private String remarks;//备注
public Person() {}
public Person(String name, String phoneNumber, String residentialTelephone, String workUnit, String address, String classification, String birthday, String e_mail, String remarks) {
this.name = name;
this.phoneNumber = phoneNumber;
this.residentialTelephone = residentialTelephone;
this.workUnit = workUnit;
this.address = address;
this.classification = classification;
this.birthday = birthday;
this.e_mail = e_mail;
this.remarks = remarks;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getResidentialTelephone() {
return residentialTelephone;
}
public void setResidentialTelephone(String residentialTelephone) {
this.residentialTelephone = residentialTelephone;
}
public String getWorkUnit() {
return workUnit;
}
public void setWorkUnit(String workUnit) {
this.workUnit = workUnit;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getE_mail() {
return e_mail;
}
public void setE_mail(String e_mail) {
this.e_mail = e_mail;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getClassification() {
return classification;
}
public void setClassification(String classification) {
this.classification = classification;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static void print(ArrayList<Person> list,int i) {
System.out.println(list.get(i).getName()+"\t"+list.get(i).getPhoneNumber()+"\t\t"+list.get(i).getResidentialTelephone()+"\t"+list.get(i).getWorkUnit()+"\t\t"+list.get(i).getAddress()+"\t\t"+list.get(i).getClassification()+"\t\t"+list.get(i).getBirthday()+"\t"+list.get(i).getE_mail()+"\t"+list.get(i).getRemarks());
}
}
模块二:主界面main函数:
(1)分析:整个代码中有多次键盘录入,所以可以在main函数上定义一个静态的Scanner对象sc,而主函数中存储Person类对象的容器是集合,所以可以定义一个泛型为的Array List集合对象list,然后在开始先定义两个文件一个用于存储当前信息,一个用于备份,开始时先把之前的信息导入当前集合中;然后输出菜单选择栏,根据选择调用不同的方法完成不同的功能,记住在最后退出之前需要先调用方法实现把本次操作的信息存入文件中,对了还得把操作封装在一个while死循环中便于用户进行多次操作。
代码:
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) throws IOException {
ArrayList<Person> list= new ArrayList<Person>();
File file1=new File("C:\\Users\\zhou\\Desktop\\test1.txt");
File file2=new File("C:\\Users\\zhou\\Desktop\\test2.txt");
fileTolist(list);
lp:while(true){
System.out.println("--------手机通讯录--------");
System.out.println("1 添加联系人");
System.out.println("2 修改联系人");
System.out.println("3 删除联系人");
System.out.println("4 查找联系人");
System.out.println("5 遍历统计联系人");
System.out.println("6 通讯录备份与恢复");
System.out.println("7 退出");
System.out.println("请输入您的选择:");
String choice = sc.next();
switch (choice) {
case "1":
tianjia(list);
break;
case "2":
xiugai(list);
break;
case "3":
shanchu(list);
break;
case "4":
chazhao(list);
break;
case "5":