一般来说通讯录的信息都是存在文件上的,我使用MySQL来存储信息。通讯录的原理就不在这多介绍了。
直接看实现的代码吧,我只涉及到了增删查改,我会慢慢的完善这段代码
package com.company;
import java.io.PrintWriter;
import java.sql.*;
import java.util.Scanner;
interface Method {
void Init_List(Statement statement) throws SQLException;//清空通讯录
void Person_Add(Statement statement,Scanner scanner) throws Exception;//添加联系人
void Person_Delete(Statement statement,Scanner scanner) throws Exception;//删除联系人
void Person_Serach(Statement statement,Scanner scanner) throws Exception;//查找联系人
void Person_change(Statement statement,Scanner scanner) throws SQLException;//修改联系人
void Person_Show(Statement statement,Scanner scanner) throws SQLException;//显示所有联系人
}
class List implements Method{
public void menu(){
System.out.println("****************************************************");
System.out.println("*********1:清空通讯录 2:增加联系人 ***********");
System.out.println("*********3:删除联系人 4:查找联系人 ***********");
System.out.println("********* 5:修改i联系人信息 *****************");
System.out.println("********* 6:打印所有人的信息 *****************");
System.out.println("********* 0:退出 **************");
System.out.println("****************************************************");
System.out.println("****************************************************");
}
@Override
public void Init_List(Statement statement) throws SQLException {//清空数据库
String sql = "DELETE FROM XT";
String sql2 = "CREATE TABLE IF NOT EXISTS XT(id INT(20) PRIMARY KEY auto_increment," +
"peoplename VARCHAR(80) ,phonenumber VARCHAR(80), address VARCHAR(80))CHARACTER SET utf8";
statement.execute(sql);
statement.execute(sql2);
System.out.println("数据库已清空");
}
@Override
public void Person_Add(Statement statement,Scanner scanner) throws Exception{//添加
System.out.println("请依次输入新用户姓名,电话号码,家庭住址.中间用空格隔开");
String Message_name = null;
String Message_number = null;
String Message_address = null;
if(scanner.hasNext()){
Message_name = scanner.next();
Message_number = scanner.next();
Message_address = scanner.next();
}
String sql = "INSERT INTO xt(peoplename,phonenumber,address) VALUES('"+Message_name+"','"+Message_number+"','"+Message_address+"')";//存入数据库
statement.execute(sql);
System.out.println("加入成功");
}
@Override
public void Person_Delete(Statement statement,Scanner scanner) throws Exception {//删除
System.out.println("请输入要删除的人的姓名");
String Name = null;
if (scanner.hasNext()) {
Name = scanner.next();
} else {
throw new Exception("输入错误! 请输入要删除的人的姓名");
}
String sql = "delete from xt where peoplename=" + "'" + Name + "'";
statement.executeUpdate(sql);
System.out.println("删除成功!");
}
@Override
public void Person_Serach(Statement statement,Scanner scanner) throws Exception {//查找
System.out.println("请输入要查找的人的姓名");
String Search_name = null;
if (scanner.hasNext()) {
Search_name = scanner.next();
} else {
System.out.println("输入错误,请输入要查找的人名");
}
String sql = "SELECT * FROM xt WHERE peoplename=" + "'" + Search_name + "'";
ResultSet set = statement.executeQuery(sql);
if (!set.next()) {
System.out.println("查无此人!");
return;
}
set.previous();
System.out.println("id " + "peoplename " + "phonenumber " + "address ");
PrintonesMessage(set);
}
@Override
public void Person_change(Statement statement,Scanner scanner) throws SQLException {
System.out.println("请输入要修改的人的姓名");
String Change_Name = null;
if(scanner.hasNext()){
Change_Name = scanner.next();
}
String sql = "SELECT * FROM xt WHERE peoplename=" + "'" + Change_Name + "'";
ResultSet ret = statement.executeQuery(sql);
if (!ret.next()) {
System.out.println("没有找到要修改的人!");
return;
}
ret.previous();
System.out.println("找到了要修改的联系人,他的信息如下");
System.out.println("id " + "peoplename " + "phonenumber " + "address ");
PrintonesMessage(ret);
System.out.println("请输入要修改的属性名以及修改后的属性值,中间用空格隔开");
String FieldName = scanner.next();
String Message = scanner.next();
String sql2 = "update xt set "+FieldName+"='"+Message+"' where peoplename='"+Change_Name+"'";
statement.executeUpdate(sql2);
System.out.println("修改成功");
}
private void PrintonesMessage(ResultSet ret) throws SQLException {
PrintWriter printWriter = new PrintWriter(System.out);
while (ret.next()) {
System.out.printf("%-5s",ret.getString(1));
System.out.printf("%-15s",ret.getString(2));
System.out.printf("%-20s",ret.getString(3));
System.out.printf("%-10s\n",ret.getString(4));
}
}
@Override
public void Person_Show(Statement statement,Scanner scanner) throws SQLException {//打印出所有人的信息
String sql = "SELECT * FROM xt";
ResultSet ret = statement.executeQuery(sql);
if(!ret.next()){
System.out.println("通讯录中没有联系人");
return;
}else {
ret.previous();
}
System.out.println("所有联系人的信息如下");
System.out.println("id " + "peoplename " + "phonenumber " + "address ");
PrintonesMessage(ret);
}
}
public class Main {
public static void main(String[] args) {
String UTR = "jdbc:mysql://127.0.0.1:3306/dxy?useSSL=false&serverTimezone=UTC&characterEncoding=UTF8";
String name = "root";
String Password = "?????";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection coon = DriverManager.getConnection(UTR, name, Password);
Statement statement = coon.createStatement();
List list = new List();
String choose = null;
Scanner scanner = new Scanner(System.in);
while (true) {
list.menu();
System.out.println("请输入选项");
choose = scanner.next();
switch (choose) {
case "1":
list.Init_List(statement);
break;
case "2":
list.Person_Add(statement,scanner);
break;
case "3":
list.Person_Delete(statement,scanner);
break;
case "4":
list.Person_Serach(statement,scanner);
break;
case "5":
list.Person_change(statement,scanner);
break;
case "6":
list.Person_Show(statement,scanner);
break;
case "0":
break;
default:
System.out.println("输入错误,请重新输入");
break;
}
if("0".equals(choose)){
System.out.println("Bye");
break;
}
}
scanner.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
实现的原理和通讯录没有什么区别,只是将操作转化为MySQL的语句罢了,涉及到JDBC的数据库连接,我在上一篇博文里有过介绍,写的很简略,希望能对大家有所帮助吧。