通讯录

个人总结:

    1.代码过长,重复利用不太好

   2.局限于给好的类跟方法,以后可以适当的将用得多的方法或语句自己封装起来,需要的时候直接调用,使代码更简洁明了,

   提高代码的重复利用率 

   3.虽然过程顺利,对项目理解程度还是略为模糊的情况下完成,但是以后还是要梳理好思路,在做的话会更好,功能更完            善  

        4.明确了不足,路还长,革命尚未成功,仍需努力

----------------------------------------------项目基础上增加备份、恢复备份功能-------------------------- 

------------------------------序列化-------------------两种方法-----------------------------------------------------------数据库---------------------------

 

package com.phone.shuyinghengxie;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

//电话簿备份跟恢复备份
public class PhoneBackup implements Serializable
{
    ComboPooledDataSourceDemo  cp = ComboPooledDataSourceDemo.getInstance() ;
    
        //联系人序列化备份
        public void backup()
        {
            List<Person> list = new Operate().showAll() ;   //List集合接收联系人集合
                
                try {
                    FileOutputStream fileout = new FileOutputStream("d:\\phone.ser") ;
                    
                    ObjectOutputStream out = new ObjectOutputStream(fileout) ;
                    
                    out.writeObject(list);
                    
                    out.close();
                    
                    fileout.close();
                    
                    System.out.println("备份成功!");
                } catch ( IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
        
        }
        
        //恢复序列化备份
        public void reBuckup()
        {
            List<Person> list = new ArrayList<>() ;
            
            try {
                FileInputStream filein = new FileInputStream("d:/phone.ser") ;
                
                ObjectInputStream in = new ObjectInputStream(filein) ;
                
                list = (List<Person>) in.readObject() ;
                
                for(Person p : list)
                {
                    
                    new Operate().addOperation1(p.getName(), p.getAge(), p.getSex(), p.getTelNum(), p.getAddress()) ;
                    System.out.println("恢复成功!");
                }
                
                in.close();
                
                filein.close();
             } catch ( IOException | ClassNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
                return ;
            }
            
              System.out.println(list);
            
            
        }
        
        //联系人建数据库表备份
        
        /*
         * 思路:
         * 1.先建一个用来存储备份数据的表
         * 2.只要备份就先执行清空该表的指令
         * 3.然后把数据直接复制过来就行
         */
        public void backupByoracle()
        {
            
            cp.getConnection() ;  //获取连接
            
            String sql = "truncate table person1 " ;
            
            try {
                PreparedStatement ps = cp.getConnection().prepareStatement(sql) ;
                
                ps.executeUpdate() ;
                
                sql = "insert into person1 select * from person " ;
                ps = cp.getConnection().prepareStatement(sql) ;
                ps.executeUpdate() ;
                System.out.println("备份成功!");
                
                ps.close();
                
                cp.getConnection().close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
            
        }
        
        //恢复备份---数据库表格数据复制
        public void backByoracle()
        {
            cp.getConnection() ;  //获取连接
            
            String sql = "insert into person select * from person1" ;
            
            try {
                PreparedStatement ps = cp.getConnection().prepareStatement(sql) ;
                
                ps.executeUpdate() ;
                
                
                System.out.println("备份恢复成功!");
                
                ps.close();
                
                cp.getConnection().close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
        }
}

 

项目描述

该项目是用于日常生活中记录联系人信息的一款小工具。

实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删除、排序等功能。该项目是以windows控制台为运行平台,所有的操作都应在控制台上进行。

1.1 编写目的

  1. 该项目编写的主要目的使学员对以往所学过的知识点做一个统一的复习,将平时所学的内容综合到一起并运用到实际代码编写中。
  2. 该项目能够充分的体现出一些简单的业务流程处理,能够使学员掌握基本的业务流程控制。

1.2 实训范围

Java基础部分

2项目流程图

2.1业务流程结构图

 

 

2.2基本操作流程图

2.2.1当运行主程序后可在控制台显示主菜单,用户可选择菜单中的选项进行相应的操作如用户输入的菜单选项超出当前菜单所规定的范围外,程序不予以执行,并返回当前菜单,用户需要重新输入。见(图表1)

 

2.2.2用户选折1 可进入添加记录的下级子菜单见(图表2)

 

2.2.3当进入下级子菜单后,用户可根据提示进行用户的添加见(图表3)

  

2.2.4在添加新联系人时应对所添加的选项进行验证,如果有输入错误应提示见(图表4)

 

2.2.5添加完毕后可查看电话薄内的全部记录见(图表5)

2.2.6选择返回选项时,可返回上级主菜单见(图表6)

 

 

2.2.7选择2进入查找记录子菜单见(图表7)

 

2.2.8用户可根据具体内容进行相关查询见(图表8)

 

2.2.9选择3进入修改记录子菜单见(图表9)

 

2.2.10通过查看全记录,找到要修改联系的ID号对联系人的内容进行相应的修改见(图表10,11)

 

2.2.11选择4进入删除记录子菜单见(图表12)。

 

2.2.12删除共分为删除指定记录和删除全部两种操作。删除指定记录时需要输入被删除

人的ID号。删除成功后可继续操作见(图表13,14)

 

2.2.13删除全部用户。选择该选项可将电话薄清空见(图表15)

 

2.2.14用户可选择不同的选项对电话薄内的信息进行任意排序见(图表16,17,18,19)

 

按姓名排序结果

 

按年龄排序结果

 

按性别排序结果

 

2.3基本设计流程图

 

2.4类设计流程图

 

3类名,方法名及变量名的定义

要遵循下列设计要求进行代码编写,仅允许细微调整。

3.1类名:

App  对应  Application(程序入口函数)

Menu 对应  Menu      (菜单类)

Operate 对应  Operate    (业务处理类)

Person 对应  Person (实体类)

 

3.2方法名:

App类中方法(无成员变量):

main() 程序入口函数

start() 主菜单控制

 

Operate类中方法及成员变量

private List<Person> list 集合

 

addLogic() 用户添加信息业务逻辑控制

searchLogic() 用户查询信息业务逻辑控制

modifyLogicLogic() 修改信息业务逻辑控制

deleteLogic() 删除信息业务逻辑控制

orderLogic() 排序信息业务逻辑控制

addOperation () 添加新用户信息

showAll() 查询全部用户信息

searchByName() 按姓名查询用户信息

searchByAge() 按年龄查询用户信息

searchBySex() 按性别查询用户信息

searchByTelNum() 按电话号码查询用户信息

searchByAdd() 按地址查询用户信息

modify() 修改指定记录信息

delete() 删除指定用户信息

deleteAll() 删除全部用户信息

orderName() 按用户姓名排序信息

orderAge() 按用户年龄排序信息

orderSex() 按用户性别排序信息

 

TelNoteRegex类中方法(无成员变量)

menuRegex (int min, int max ) 对菜单输入选项的验证

nameRegex ( ) 对用户输入姓名的验证

ageRegex ( ) 对用户输入年龄的验证

sexRegex ( ) 对用户输入性别的验证

telNumRegex ( ) 对用户输入电话号码的验证

addressRegex ( ) 对用户输入地址的验证

 

Menu类中的方法(无成员变量)

mainMenu() 主菜单

addMenu () 添加用户菜单

searchMenu () 查找用户菜单

modifyMenu () 修改用户信息主菜单

subModifyMenu () 修改用户信息子菜单

deleteMenu () 删除用户信息菜单

orderMenu () 排序用户信息菜单

 

Person类中的方法及成员变量

private int id; 用户ID 属性

private String name; 用户姓名属性

private String age; 用户年龄属性

private String sex; 用户性别属性

private String telNum; 用户电话号码属性

private String address; 用户地址属性

Person() 无参数构造方法

Person(String name, String age, String sex, String telNum, String address) 有参数构造方法

getName() 读取用户名

setName(String name) 设置用户名

getAge() 读取用户年龄

setAge(String age) 设置用户年龄

getSex() 读取用户性别

setSex(String sex) 设置用户性别

getTelNum() 读取用户电话号码

setTelNum (String telNum) 设置用户电话号码

getAddress() 读取用户地址

setAddress(String address) 设置用户地址

getID () 读取用户ID号

setID (int ID) 设置用户ID号

toString() 连接字符串方法

 

4.数据结构

id

ID号

name

姓名

age

年龄

sex

性别

telNum

电话号码

address

住址

Person类数据结构

 

英文名称                                中文名称

 

6 运行环境

JDK版本为1.5以上,数据库为Oracle11g以上

操作系统控制台或Eclipse开发工具

7 要求

该项目应个人独立完成,代码编写期间不得抄袭代码。

时间需求:3天

进度要求:

第一天要求能够通过主菜单对各级子菜单进行控制,并实现添加记录。

第二天要求能够实现查找记录,删除记录二个模块。

第三天要求能够实现修改记录,排序记录,以及退出系统功能。

 

package com.phone.shuyinghengxie;

/**
 * 这是一个测试类
 * 该类中无成员属性
 * 该类有两个方法
 * 一个main方法
 *             该方法是一个主方法,用来测试
 * 一个start方法
 *             该方法直接调用Menu类中的主菜单
 * @author Administrator
 *
 */

public class App
{
    public static void main(String[] args)
    {
        App p = new App() ;
    
        p.start();

    }
    
    public void start()
    {
        try 
        {
            Menu a = new Menu() ; 
        
            a.mainMenu();
        }
        catch(Exception e)
        {
            System.out.println("输入有误!");
        }
        
    }
}
package com.phone.shuyinghengxie;

import java.util.List; 
import java.util.Scanner;

/**
 * 这是一个菜单类
 * 该类中无成员属性
 * 给类主要实现:
 * 主菜单
 *             该方法用来调用下面的子菜单方法
 * 添加用户菜单
 * 查找用户菜单
 * 修改用户信息主菜单
 * 修改用户信息子菜单
 * 删除用户信息菜单
 * 排序用户信息菜单
 * @author Administrator
 *
 */

public class Menu 
{
    public void mainMenu()                 //主菜单
    {
        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("*******************");
        System.out.println("请输入正确的数字,最大是:1  最小是:6");
        
        
        while(true)
        {
            switch(new TelNoteRegex().menuRegex(1,6))
            {
            case -1 :
                System.out.println("您输入的数字超出范围!");
                System.out.println("请重新选择要执行的功能:");
                continue  ;
            case 0 :
                System.out.println("只能输入数字!");
                System.out.println("请重新选择要执行的功能:");
                continue ;
            case 1 :
                addMenu() ;
                break ;
            case 2 :
                searchMenu() ;
                break ;
            case 3 :
                modifyMenu() ;
                break ;
            case 4 :
                deleteMenu() ;
                break ;
            case 5 :
                orderMenu() ;
                break ;
            case 6 :
                System.out.println("closing ------>>>>>");
                break ;
             }
            break ;
        }
    }
    
    public void addMenu ()             //添加用户菜单
    {
        System.out.println("**********************");
        System.out.println("**  1.添加新纪录  **");
        System.out.println("**  2.查看全纪录  **");
        System.out.println("**  3.返回上一级  **");
        System.out.println("**********************");
        System.out.println("请输入正确的数字,最大是:1  最小是:3");
        
        new Operate().addLogic();
    }
    
    public void searchMenu ()             //查找用户菜单
    {
        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("**********************");
        System.out.println("请输入正确的数字,最大是:1  最小是:7");
    
        new Operate().searchLogic();

    }
    
    public void modifyMenu()             //修改用户信息主菜单
    {
        System.out.println("*************************");
        System.out.println("**   1.查看全纪录     **");
        System.out.println("**   2.修改指定纪录 **");
        System.out.println("**   3.返回上一级     **");
        System.out.println("*************************");
        System.out.println("请输入正确的数字,最大是:1  最小是:3");
        
        switch(new TelNoteRegex().menuRegex(1, 3))
        {
        case -1 :
            System.out.println("您输入的数字超出范围!");
            new Menu().modifyMenu() ;
            break  ;
        case 0 :
            System.out.println("只能输入数字!");
            new Menu().modifyMenu() ;
            break ;
        case 1 :
            //查看全部用户
            List<Person> list = new Operate().showAll() ;
            
            for(Person p : list)
            {
                System.out.println(p); 
            }
            new Menu().modifyMenu() ;
            break ;
        case 2 :
            subModifyMenu() ;
            break ;
        case 3 :
            mainMenu() ;
            break ;
        }
        
    }
    
    public void subModifyMenu()         //修改用户信息子菜单
    {
        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("*******************");
        System.out.println("请输入正确的数字,最大是:1  最小是:7");
        
        new Operate().modifyLogicLogic();
    }
    
    public void deleteMenu()                 //删除用户信息菜单
    {
        System.out.println("**************************");
        System.out.println("**  1.查看全记录        **");
        System.out.println("**  2.删除指定记录    **");
        System.out.println("**  3.删除全记录        **");
        System.out.println("**  4.返回上一级        **");
        System.out.println("**************************");
        System.out.println("请输入正确的数字,最大是:1  最小是:4");
        
        new Operate().deleteLogic();
    }
    
    public void orderMenu()                 //排序用户信息菜单
    {
        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("**********************");
        System.out.println("请输入正确的数字,最大是:1  最小是:5");
        
        new Operate().orderLogic() ;
    }
    
}
package com.phone.shuyinghengxie;

/**
 * 这是一个用户信息的实体类
 * 该类有用户ID、姓名、年龄、性别、电话、地址成员属性
 * 包含无参和有参构造方法
 * 包含  toString() 方法
 * 包含  setting 、getting  
 * @author Administrator
 *
 */

public class Person 
{
    //属性
    private int id;              //用户ID 属性
    private String name;             //用户姓名属性
    private String age;             //用户年龄属性
    private String sex;             //用户性别属性
    private String telNum;                 //用户电话号码属性
    private String address;                 //用户地址属性
    
    public Person()             //无参构造
    {
        super();
    }
    
    Person(String name, String age, String sex, String telNum, String address) //有参数构造
    {
        this.name = name ;
        this.age = age ;
        this.sex = sex ;
        this.telNum = telNum ;
        this.address = address ;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setTelNum(String telNum) {
        this.telNum = telNum;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }

    public String getSex() {
        return sex;
    }

    public String getTelNum() {
        return telNum;
    }

    public String getAddress() {
        return address;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", telNum=" + telNum
                + ", address=" + address + "]";
    }
    
    
}
package com.phone.shuyinghengxie;

import java.util.Scanner;

/**
 * 这是一个用户输入信息是否合法的验证类
 * 该类中没有成员属性
 * 该类主要实现:
 * 对菜单输入选项的验证
 * 对用户输入姓名的验证
 * 对用户输入年龄的验证
 * 对用户输入性别的验证
 * 对用户输入电话号码的验证
 * 对用户输入地址的验证
 * @author Administrator
 *
 */

public class TelNoteRegex
{
    public int menuRegex(int min, int max )            //对菜单输入选项的验证
    {
        Scanner sc = new Scanner(System.in) ;
        int  a= 0 ;
        try
        {
            a = sc.nextInt() ;
        }
        catch(Exception e)
        {
            return 0 ;
        }
        if(a<=max && a >= min)
        {
            return a ;
        }
        else
        {
            return -1 ;
        }
    }
    public String nameRegex( )             //对用户输入姓名的验证
    {
        String name ;
        
        while(true)
        {    
            System.out.println("请输入姓名: 字母或数字");
            Scanner sc = new Scanner(System.in) ;
            name = sc.nextLine() ;
            if(name.matches("^[A-Za-z0-9]+$"))   //正则表达式比较
            {
                System.out.println(name);
                
                break ;
            }
            else
            {
                System.out.println("姓名格式不对!");
            }
        }
        
        return name ;
    }
    public int ageRegex( )                 //对用户输入年龄的验证
    {
        int age ;
        while(true)
        {
            System.out.println("请输入年龄: 1-120整数");
            Scanner sc = new Scanner(System.in) ;
            try
            {
                age = sc.nextInt() ;
                if(age>=1 && age<=120)
                {
                    System.out.println(age);
                    break ;
                }
                else
                {
                    System.out.println("请输入正确的年龄!"); ;
                }
            }
            catch (Exception e)
            {
                System.out.println("请输入整数!");
            }
        }
        return age ;
    }
    public String sexRegex ()                 //对用户输入性别的验证
    {
        String sex ;
        
        while(true)
        {    
            System.out.println("请输入性别: 男用m或M,女用F或f");
            Scanner sc = new Scanner(System.in) ;
            sex = sc.nextLine() ;
            if(sex.equals("m")||sex.equals("M")||sex.equals("F")||sex.equals("f"))   
            {
                System.out.println(sex);
                
                break ;
            }
            else
            {
                System.out.println("性别格式不对!");
            }
        }
        
        return sex ;
    }
        
    
    public String telNumRegex ()             //对用户输入电话号码的验证
    {
        String telNum ;
        
        while(true)
        {    
            System.out.println("请输入号码: 7-11位数字");
            Scanner sc = new Scanner(System.in) ;
            telNum = sc.nextLine() ;
            if(telNum.matches("[0-9]{7,11}"))
            {
                System.out.println(telNum);
                
                break ;
            }
            else
            {
                System.out.println("号码格式不对!");
            }
        }
        
        return telNum ;
        
    }
    public String addressRegex ()             //对用户输入地址的验证
    {
        String address ;
        
        while(true)
        {    
            System.out.println("请输入地址: 字母或数字");
            Scanner sc = new Scanner(System.in) ;
            address = sc.nextLine() ;
            if(address.matches("^[A-Za-z0-9]+$"))   //正则表达式比较
            {
                System.out.println(address);
                
                break ;
            }
            else
            {
                System.out.println("地址格式不对!");
            }
        }
        
        return address ;
    }
    
}

 

package com.phone.shuyinghengxie;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 这是一个功能类
 * 该类中没有成员属性
 * 该类主要实现:
 * 用户添加信息业务逻辑控制
 * 用户查询信息业务逻辑控制
 * 修改信息业务逻辑控制
 * 删除信息业务逻辑控制
 * 排序信息业务逻辑控制
 * 添加新用户信息
 * 查询全部用户信息
 * 按姓名查询用户信息
 * 按年龄查询用户信息
 * 按性别查询用户信息
 * 按电话号码查询用户信息
 * 按地址查询用户信息
 * 修改指定记录信息
 * 删除指定用户信息
 * 删除全部用户信息
 * 按用户姓名排序信息
 * 按用户年龄排序信息
 * 按用户性别排序信息
 * @author Administrator
 *
 */

public class Operate 
{
    private List<Person> list   ;            //集合

    public void addLogic()                 //用户添加信息业务逻辑控制
    {
        while(true)
        {
            switch(new TelNoteRegex().menuRegex(1,3))
            {
            case -1 :
                System.out.println("您输入的数字超出范围!");
                new Menu().addMenu() ;
                break  ;
            case 0 :
                System.out.println("只能输入数字!");
                new Menu().addMenu() ;
                break ;
            case 1 :
                addOperation(new TelNoteRegex().nameRegex(), new TelNoteRegex().ageRegex(), new TelNoteRegex().sexRegex(), new TelNoteRegex().telNumRegex(), new TelNoteRegex().addressRegex()) ;
                new Menu().addMenu();
                break ;
            case 2 : 
                //查看全部用户
                list = new Operate().showAll() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().addMenu() ;
                break ;
            case 3 :
                new Menu().mainMenu();
                break ;//返回上一级
                
            }
            break ;
        }
    }
    public void searchLogic()             //用户查询信息业务逻辑控制
    {
        while(true)
        {
            switch(new TelNoteRegex().menuRegex(1, 7))
            {
            case -1 :
                System.out.println("您输入的数字超出范围!");
                new Menu().searchMenu();
                break  ;
            case 0 :
                System.out.println("只能输入数字!");
                new Menu().searchMenu();
                break ;
            case 1 :
                list = new Operate().searchByName(new TelNoteRegex().nameRegex()) ; 
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().searchMenu();
                break ;
            case 2 :
                list = new Operate().searchByAge(new TelNoteRegex().ageRegex()) ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().searchMenu();
                break ;
            case 3 :
                list = new Operate().searchBySex(new TelNoteRegex().sexRegex()) ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().searchMenu();
                break ;
            case 4 :
                list = new Operate().searchByTelNum(new TelNoteRegex().telNumRegex()) ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().searchMenu();
                break ;
            case 5 :
                list = new Operate().searchByAdd(new TelNoteRegex().addressRegex()) ; 
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().searchMenu();
                break ;
            case 6 :
                //查看全部用户
                list = new Operate().showAll() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().searchMenu();
                break ;
            case 7 :
                new Menu().mainMenu();
                break ;  //返回上一层
            }
            break ;
        }
    }
    public void modifyLogicLogic()     //修改信息业务逻辑控制
    {
        while(true)
        {
            try
            {
                switch(new TelNoteRegex().menuRegex(1, 7))
                {
                case -1 :
                    System.out.println("您输入的数字超出范围!");
                    new Menu().subModifyMenu();
                    break  ;
                case 0 :
                    System.out.println("只能输入数字!");
                    new Menu().subModifyMenu();
                    break ;
                case 1 :
                    System.out.println("请输入指定ID:");
                    
                    Scanner sc = new Scanner(System.in) ;
                    
                    int id = sc.nextInt() ;
                    
                    String name = new TelNoteRegex().nameRegex() ;
                    
                    modifyName(id, name) ;
                    new Menu().subModifyMenu();
                    break ;
                case 2 :
                    System.out.println("请输入指定ID:");
                    
                    Scanner sc2 = new Scanner(System.in) ;
                    
                    int id2 = sc2.nextInt() ;
                    
                    int age = new TelNoteRegex().ageRegex() ;
                    
                    modifyAge(id2, age) ;
                    new Menu().subModifyMenu();
                    break ;
                case 3 :
                    System.out.println("请输入指定ID:");
                    
                    Scanner sc4 = new Scanner(System.in) ;
                    
                    int id3 = sc4.nextInt() ;
                    
                    String sex = new TelNoteRegex().sexRegex() ;
                    
                    modifySex(id3, sex) ;
                    new Menu().subModifyMenu();
                    break ;
                case 4 :
                    System.out.println("请输入指定ID:");
                    
                    Scanner sc6 = new Scanner(System.in) ;
                    
                    int id4 = sc6.nextInt() ;
                    
                    String telNum = new TelNoteRegex().telNumRegex() ;
                    
                    modifyTelNum(id4, telNum) ;
                    new Menu().subModifyMenu();
                    break ;
                case 5 :
                    System.out.println("请输入指定ID:");
                    
                    Scanner sc8 = new Scanner(System.in) ;
                    
                    int id5 = sc8.nextInt() ;
                    
                    String address = new TelNoteRegex().addressRegex() ;
                    
                    modifyAddress(id5, address) ;
                    new Menu().subModifyMenu();
                    break ;
                case 6 :
                    //查看全部用户
                    list = new Operate().showAll() ;
                    
                    for(Person p : list)
                    {
                        System.out.println(p); 
                    }
                    new Menu().subModifyMenu();
                    break ;
                case 7 :
                    new Menu().mainMenu();
                    break ;  //返回上一层
                }
            }
            catch(Exception e)
            {
                System.out.println("请输入数字");
                new Menu().subModifyMenu();
            }
            break ;
        }
    }
    public void deleteLogic()                 //删除信息业务逻辑控制
    {
        while(true)
        {
            switch(new TelNoteRegex().menuRegex(1, 4))
            {
            case -1 :
                System.out.println("您输入的数字超出范围!");
                new Menu().deleteMenu();
                break  ;
            case 0 :
                System.out.println("只能输入数字!");
                new Menu().deleteMenu();
                break ;
            case 1 :
                //查看全部用户
                list = new Operate().showAll() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().deleteMenu();
                break ;
            case 2 :
                System.out.println("请输入记录序号:");
                
                Scanner sc = new Scanner(System.in) ;
                
                int id = sc.nextInt() ;
                
                System.out.println("是否确认删除:yes or no ");
                
                Scanner sc1 = new Scanner(System.in) ;
                
                String pan = sc1.nextLine() ;
                
                if(pan.equals("yes")) 
                {
                    delete(id) ;
                    new Menu().deleteMenu() ;
                    break ;
                }
                else if(pan.equals("no"))
                {
                    System.out.println("返回上一级");
                    new Menu().deleteMenu() ;
                    break ;
                }
                else
                {
                    System.out.println("输入有误!") ; 
                    new Menu().deleteMenu() ;
                    break ;
                }
            case 3 :
                System.out.println("是否确认全部删除:yes or no ");
                
                Scanner sc2 = new Scanner(System.in) ;
                
                String panduan = sc2.nextLine() ;
                
                if(panduan.equals("yes")) 
                {
                    deleteAll() ;
                    new Menu().deleteMenu() ;
                    break ;
                }
                else if(panduan.equals("no"))
                {
                    System.out.println("返回上一级");
                    new Menu().deleteMenu() ;
                    break ;
                }
                else
                {
                    System.out.println("输入有误!") ; 
                    new Menu().deleteMenu() ;
                    break ;
                }
            case 4 :
                new Menu().mainMenu();
                break ;  //返回上级
            }
            break ;
        }
    }
    public void orderLogic()                 //排序信息业务逻辑控制
    {
        while(true)
        {
            switch(new TelNoteRegex().menuRegex(1, 5))
            {
            case -1 :
                System.out.println("您输入的数字超出范围!");
                new Menu().orderMenu();
                break  ;
            case 0 :
                System.out.println("只能输入数字!");
                new Menu().orderMenu();
                break ;
            case 1 :
                list = new Operate().orderName() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().orderMenu();
                break ;
            case 2 :
                list = new Operate().orderAge() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().orderMenu();
                break ;
            case 3 :
                list = new Operate().orderSex() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().orderMenu();
                break ;
            case 4 :
                //查看全部用户
                list = new Operate().showAll() ;
                
                for(Person p : list)
                {
                    System.out.println(p); 
                }
                new Menu().orderMenu();
                break ;
            case 5 :
                new Menu().mainMenu();
                break ;
            }
            break ;
        }
    }
    public boolean addOperation(String name, int age, String sex, String telNum, String address)                //添加新用户信息
    {
        boolean rtn = false ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0");    //配置连接池
        Connection conn = null ;
        PreparedStatement ps = null ;
        try 
        {
            conn = cp.getConnection() ;//获得连接
            
            String sql = "insert into person values(test_seq.nextval,?,?,?,?,?)" ;
            
            ps = conn.prepareStatement(sql) ;   //预编译SQL语句
            
            ps.setString(1, name);
            ps.setInt(2, age);
            ps.setString(3, sex);
            ps.setString(4, telNum);
            ps.setString(5, address);
            
            rtn = ps.executeUpdate() == 1 ;
            
            System.out.println("添加联系人成功!");
        }
        catch (Exception e) 
        {
            System.out.println("电话号码重复!联系人添加失败!");
            //e.printStackTrace();
        }
        finally
        {
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            cp.close();
        }
        return rtn;
    }
    public List<Person> showAll()                     //查询全部用户信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
        Statement ps = null ;
        
        ResultSet rs = null ;
        try
        {
            conn = cp.getConnection() ;
            
            String sql = "select * from person" ;
            
            ps = conn.createStatement() ;
            
            rs = ps.executeQuery(sql) ;
            
            while(rs.next())
            {
                Person p = new Person() ;
                
                p.setId(rs.getInt("id"));
                p.setName(rs.getString("name"));
                p.setAge(rs.getString("age"));
                p.setSex(rs.getString("sex"));
                p.setTelNum(rs.getString("telnum"));
                p.setAddress(rs.getString("address"));
                
                list.add(p) ;
             }
        }
        catch (SQLException e) 
        {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally
        {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            cp.close();
        }
        return list;
    }
    public List<Person> searchByName(String name)             //按姓名查询用户信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
        try {
            conn = cp.getConnection();
            
            String sql = "select * from person where name = ? " ;
            
            PreparedStatement pt = conn.prepareStatement(sql) ;
            
            pt.setString(1, name);
            
            ResultSet rt = pt.executeQuery() ;
            
            if(!rt.next())
            {
                System.out.println("联系人不存在!");
            }
            else
            {
                rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                    
                    list.add(p) ;
                }
            }
            
            rt.close();
            pt.close();
            conn.close();
            cp.close();
            
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    
        return list ;
        
    }
    public List<Person> searchByAge(int age)             //按年龄查询用户信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
        try {
            conn = cp.getConnection();
            
            String sql = "select * from person where age = ? " ;
            
            PreparedStatement pt = conn.prepareStatement(sql) ;
            
            pt.setInt(1, age);
            
            ResultSet rt = pt.executeQuery() ;
            
            if(!rt.next())
            {
                System.out.println("未找到该联系人!");
            }
            else
            {
                rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                    
                    list.add(p) ;
                }
            }
            
            rt.close();
            pt.close();
            conn.close();
            cp.close();
            
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    
        return list ;
        
    }
    public List<Person> searchBySex(String sex)             //按性别查询用户信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
        try {
            conn = cp.getConnection();
            
            String sql = "select * from person where sex = ? " ;
            
            PreparedStatement pt = conn.prepareStatement(sql) ;
            
            pt.setString(1, sex);
            
            ResultSet rt = pt.executeQuery() ;
            
            if(!rt.next())
            {
                System.out.println("未找到该联系人!");
            }
            else
            {
                rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                    
                    list.add(p) ;
                }
            }
            
            rt.close();
            pt.close();
            conn.close();
            cp.close();
            
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    
        return list ;
        
    }
    public List<Person> searchByTelNum(String telNum)         //按电话号码查询用户信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
        try {
            conn = cp.getConnection();
            
            String sql = "select * from person where telNum = ? " ;
            
            PreparedStatement pt = conn.prepareStatement(sql) ;
            
            pt.setString(1, telNum);
            
            ResultSet rt = pt.executeQuery() ;
            
            if(!rt.next())
            {
                System.out.println("未找到该联系人!");
            }
            else
            {
                rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                    
                    list.add(p) ;
                }
            }
            
            rt.close();
            pt.close();
            conn.close();
            cp.close();
            
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    
        return list ;
        
    }
    public List<Person> searchByAdd(String address)             //按地址查询用户信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
        try {
            conn = cp.getConnection();
            
            String sql = "select * from person where address = ? " ;
            
            PreparedStatement pt = conn.prepareStatement(sql) ;
            
            pt.setString(1, address);
            
            ResultSet rt = pt.executeQuery() ;
            
            if(!rt.next())
            {
                System.out.println("未找到该联系人!");
            }
            else
            {
                rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                    
                    list.add(p) ;
                }
            }
            
            rt.close();
            pt.close();
            conn.close();
            cp.close();
            
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    
        return list ;
        
    }
    public void modifyName(int id,String name)             //修改指定记录姓名信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "update Person set name =? where id=?" ;
                                
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                pt.setString(1, name);
                pt.setInt(2, id);
                
                int rs = pt.executeUpdate() ;
                
                if(rs==1)
                {
                    System.out.println("修改成功,请继续操作!"); 
                }
                else
                {
                    System.out.println("要修改的ID不存在!");
                }
                pt.close();
                conn.close();
                cp.close();
            } 
            catch (SQLException e)
            {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
    }
    public void modifyAge(int id,int age)             //修改指定记录年龄信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "update Person set age =? where id=?" ;
                                
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                pt.setInt(1, age);
                pt.setInt(2, id);
                
                int rs = pt.executeUpdate() ;
                
                if(rs==1)
                {
                    System.out.println("修改成功,请继续操作!"); 
                }
                else
                {
                    System.out.println("要修改的ID不存在!");
                }
                pt.close();
                conn.close();
                cp.close();
            } 
            catch (SQLException e)
            {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
    }
    public void modifySex(int id,String sex)             //修改指定记录性别信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "update Person set sex =? where id=?" ;
                                
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                pt.setString(1, sex);
                pt.setInt(2, id);
                
                int rs = pt.executeUpdate() ;
                
                if(rs==1)
                {
                    System.out.println("修改成功,请继续操作!"); 
                }
                else
                {
                    System.out.println("要修改的ID不存在!");
                }
                pt.close();
                conn.close();
                cp.close();
            } 
            catch (SQLException e)
            {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
    }
    public void modifyTelNum(int id,String telNum)             //修改指定记录电话信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "update Person set telNum =? where id=?" ;
                                
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                pt.setString(1, telNum);
                pt.setInt(2, id);
                
                int rs = pt.executeUpdate() ;
                
                if(rs==1)
                {
                    System.out.println("修改成功,请继续操作!"); 
                }
                else
                {
                    System.out.println("要修改的ID不存在!");
                }
                pt.close();
                conn.close();
                cp.close();
            } 
            catch (SQLException e)
            {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
    }
    public void modifyAddress(int id,String address)                     //修改指定记录地址信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "update Person set address=? where id=?" ;
                                
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                pt.setString(1, address);
                pt.setInt(2, id);
                
                int rs = pt.executeUpdate() ;
                
                if(rs==1)
                {
                    System.out.println("修改成功,请继续操作!"); 
                }
                else
                {
                    System.out.println("要修改的ID不存在!");
                }
                pt.close();
                conn.close();
                cp.close();
            } 
            catch (SQLException e)
            {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
    }
    public void delete(int id)                         //删除指定用户信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "delete person where id = ? " ;
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                pt.setInt(1, id);
                
                int rs = pt.executeUpdate() ;
                
                if(rs==1)
                {
                    System.out.println("删除成功,请继续操作!"); 
                }
                else
                {
                    System.out.println("要删除的ID不存在!");
                }
                pt.close();
                conn.close();
                cp.close();
                
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
    }
    public void deleteAll()                     //删除全部用户信息
    {
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "truncate table person " ;
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                int rs = pt.executeUpdate() ;
                
                System.out.println("电话本内容已清空,请继续操作!"); 
                
                pt.close();
                conn.close();
                cp.close();
                
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
    }
    public List<Person> orderName()                 //按用户姓名排序信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "select * from person order by name " ;
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                ResultSet rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                        
                    list.add(p) ;
                }
                rt.close();
                pt.close();
                conn.close();
                cp.close();
                
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return list;
    }
    public List<Person> orderAge()                 //按用户年龄排序信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "select * from person order by age " ;
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                ResultSet rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                        
                    list.add(p) ;
                }
                rt.close();
                pt.close();
                conn.close();
                cp.close();
                
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return list;
    }
    public List<Person> orderSex()                     //按用户性别排序信息
    {
        list = new ArrayList<>() ;
        
        ComboPooledDataSource cp = new ComboPooledDataSource("helloc3p0") ;
        
        Connection conn = null ;
        
            try {
                conn = cp.getConnection();
                
                String sql = "select * from person order by sex " ;
                
                PreparedStatement pt = conn.prepareStatement(sql) ;
                
                ResultSet rt = pt.executeQuery() ;
                
                while(rt.next())
                {
                    Person p = new Person() ;
                    
                    p.setId(rt.getInt("id")); 
                    p.setName(rt.getString("name"));
                    p.setAge(rt.getString("age"));
                    p.setSex(rt.getString("sex"));
                    p.setTelNum(rt.getString("telnum"));
                    p.setAddress(rt.getString("address"));
                        
                    list.add(p) ;
                }
                rt.close();
                pt.close();
                conn.close();
                cp.close();
                
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return list;
    }
    
}

 

 

数据库代码  

-- Create table
create table PERSON
(
  id      NUMBER(10) not null,
  name    VARCHAR2(15) not null,
  age     NUMBER(3) not null,
  sex     VARCHAR2(3) not null,
  telnum  VARCHAR2(11) not null,
  address VARCHAR2(50) not null
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Add comments to the columns 
comment on column PERSON.id
  is '用户ID';
comment on column PERSON.name
  is '用户姓名';
comment on column PERSON.age
  is '用户年龄';
comment on column PERSON.sex
  is '用户性别';
comment on column PERSON.telnum
  is '用户电话';
comment on column PERSON.address
  is '用户地址';
-- Create/Recreate primary, unique and foreign key constraints 
alter table PERSON
  add constraint PK_PERSON primary key (ID)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
alter table PERSON
  add constraint UN_PERSON unique (TELNUM)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

 

posted @ 2016-10-24 15:44  丶疏影横斜  阅读(515)  评论(0编辑  收藏  举报