使用Python语言开发一个命令行程序,用户可以通过终端输入相应的指令来操作通讯录。
通讯录数据结构可以使用字典或者类来表示,每个联系人可以用一个字典来表示,包括姓名、电话号码、邮箱等信息。用户可以通过添加、修改、删除指令来操作通讯录数据。
为了实现导入导出通讯录功能,你可以考虑支持常见的数据格式,比如CSV、JSON或者XML。用户可以通过导入导出指令将通讯录数据保存到文件中,或者从文件中加载通讯录数据。
对于查询功能,可以考虑按照姓名、电话号码、邮箱等多种方式进行查询。用户可以输入相应的查询指令,并提供查询关键词,程序会返回符合条件的联系人信息。
可直接运行,有详细注释使用较为简单的编程方法简单易懂
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.io.File;
public class ContactBook {
// 定义通讯录联系人类
static class Contact {
String name; // 联系人姓名
String phoneNumber; // 联系人电话号码
String gender;//联系人性别
String email;//联系人邮箱
public Contact(String name, String phoneNumber, String gender, String email) {
this.name = name;
this.phoneNumber = phoneNumber;
this.gender = gender;
this.email = email;
}
public String toString() {
return "姓名:" + name + "\t电话号码:" + phoneNumber + "\t性别" + gender + "\t邮箱" + email;
}
}
public static void main(String[] args) throws IOException {
ArrayList<Contact> contacts = new ArrayList<>(); // 存放所有联系人信息的ArrayList
Scanner scanner = new Scanner(System.in);
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("0. 退出程序");
int choice = scanner.nextInt();
switch (choice) {
case 1:
addContact(contacts, scanner);
break;
case 2:
modifyContact(contacts, scanner);
break;
case 3:
deleteContact(contacts, scanner);
break;
case 4:
searchContacts(contacts, scanner);
break;
case 5:
showAllContacts(contacts);
break;
case 6:
importContacts(contacts, scanner);
break;
case 7:
exportContacts(contacts, scanner);
break;
case 0:
System.out.println("程序已退出!");
return;
default:
System.out.println("输入错误,请重新输入!");
}
}
}
// 添加联系人
public static void addContact(ArrayList<Contact> contacts, Scanner scanner) {
System.out.print("请输入联系人姓名:");
String name = scanner.next();
System.out.print("请输入联系人电话号码:");
String phoneNumber = scanner.next();
System.out.print("请输入联系人性别:");
String gender = scanner.next();
System.out.print("请输入联系人邮箱:");
String email = scanner.next();
Contact contact = new Contact(name, phoneNumber,gender,email);
contacts.add(contact); // 将新的联系人添加到ArrayList中
System.out.println("添加成功!");
}
// 修改联系人
public static void modifyContact(ArrayList<Contact> contacts, Scanner scanner) {
if (contacts.size() == 0) {
System.out.println("通讯录为空,无法修改!");
return;
}
System.out.print("请输入要修改的联系人姓名:");
String name = scanner.next();
for (int i = 0; i < contacts.size(); i++) {
if (name.equals(contacts.get(i).name)) { // 找到要修改的联系人
System.out.print("请输入新的电话号码:");
String phoneNumber = scanner.next();
System.out.print("请输入新的性别:");
String gender = scanner.next();
System.out.print("请输入新的邮箱:");
String email = scanner.next();
Contact newContact = new Contact(name, phoneNumber,gender,email); // 创建一个新的联系人对象
contacts.set(i, newContact); // 替换原来的联系人对象
System.out.println("修改成功!");
return;
}
}
System.out.println("未找到要修改的联系人!");
}
// 删除联系人
public static void deleteContact(ArrayList<Contact> contacts, Scanner scanner) {
if (contacts.size() == 0) {
System.out.println("通讯录为空,无法删除!");
return;
}
System.out.print("请输入要删除的联系人姓名:");
String name = scanner.next();
for (int i = 0; i < contacts.size(); i++) {
if (name.equals(contacts.get(i).name)) { // 找到要删除的联系人
contacts.remove(i); // 删除该联系人
System.out.println("删除成功!");
return;
}
}
System.out.println("未找到要删除的联系人!");
}
// 查询联系人
public static void searchContacts(ArrayList<Contact> contacts, Scanner scanner) {
if (contacts.size() == 0) {
System.out.println("通讯录为空,无法查询!");
return;
}
while (true) {
System.out.println("请选择查询方式:");
System.out.println("1. 按姓名查询");
System.out.println("2. 按电话号码查询");
System.out.println("3. 按邮箱查询");
int choice = scanner.nextInt();
switch (choice) {
case 1:
searchByName(contacts, scanner);
return;
case 2:
searchByPhoneNumber(contacts, scanner);
return;
case 3:
searchByemail(contacts, scanner);
return;
default:
System.out.println("输入错误,请重新输入!");
}
}
}
// 按姓名查询联系人
public static void searchByName(ArrayList<Contact> contacts, Scanner scanner) {
System.out.print("请输入要查询的联系人姓名:");
String name = scanner.next();
for (int i = 0; i < contacts.size(); i++) {
if (name.equals(contacts.get(i).name)) { // 找到要查询的联系人
System.out.println(contacts.get(i));
return;
}
}
System.out.println("未找到该联系人!");
}
// 按电话号码查询联系人
public static void searchByPhoneNumber(ArrayList<Contact> contacts, Scanner scanner) {
System.out.print("请输入要查询的电话号码:");
String phoneNumber = scanner.next();
for (int i = 0; i < contacts.size(); i++) {
if (phoneNumber.equals(contacts.get(i).phoneNumber)) { // 找到要查询的联系人
System.out.println(contacts.get(i));
return;
}
}
System.out.println("未找到该联系人!");
}
// 按邮箱查询联系人
public static void searchByemail(ArrayList<Contact> contacts, Scanner scanner) {
System.out.print("请输入要查询的联系人邮箱:");
String email = scanner.next();
for (int i = 0; i < contacts.size(); i++) {
if (email.equals(contacts.get(i).email)) { // 找到要查询的联系人
System.out.println(contacts.get(i));
return;
}
}
System.out.println("未找到该联系人!");
}
// 显示所有联系人
public static void showAllContacts(ArrayList<Contact> contacts) {
if (contacts.size() == 0) {
System.out.println("通讯录为空!");
return;
}
for (Contact contact : contacts) {
System.out.println(contact);
}
}
// 导入通讯录
public static void importContacts(ArrayList<Contact> contacts, Scanner scanner) throws IOException {
System.out.print("请输入导入文件的路径:");
String filePath = scanner.next();
File file = new File(filePath);
if (!file.exists()) {
file.createNewFile();//如果文件不存在,则创建新文件
}
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line;
while ((line = reader.readLine()) != null) { // 逐行读取文件内容
String[] parts = line.split(","); // 将一行内容按逗号分隔成四部分,分别为姓名 电话号码 性别 邮箱
String name = parts[0];
String phoneNumber = parts[1];
String gender = parts[2];
String email = parts[3];
Contact contact = new Contact(name, phoneNumber,gender,email);
contacts.add(contact); // 将新的联系人添加到ArrayList中
System.out.print(name + "\t" + phoneNumber + "\t" + gender + "\t" + email);
}
reader.close();
System.out.println("导入成功!");
}
// 导出通讯录
public static void exportContacts(ArrayList<Contact> contacts, Scanner scanner) throws IOException {
if (contacts.size() == 0) {
System.out.println("通讯录为空,无法导出!");
return;
}
System.out.print("请输入导出文件的路径:");
String filePath = scanner.next();
File file = new File(filePath);
if (!file.exists()) {
file.createNewFile();
}
BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));
for (Contact contact : contacts) {
writer.write(contact.name + "," + contact.phoneNumber + "," + contact.gender + "," + contact.email); // 将联系人信息按逗号分隔写入文件中
writer.newLine(); // 换行
}
writer.close();
System.out.println("导出成功!");
}
}