zoukankan      html  css  js  c++  java
  • Java版实现一个简单的电话簿

    问题描述:对于电话簿,它应该有添加、更新、删除、展示联系人信息的功能

    实现该功能运用的主要知识包括文件操作、xml文件解析(dom解析)

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!--文档声明-->
    <!--描述联系人(可以有多个联系人)
       属性:编号   姓名  性别  电话 邮箱  地址
    
    有且仅有一个根标签-->
    <contact-list> 
      <contact id="002"> 
        <name>优秀超</name>  
        <gender>女</gender>  
        <phone>18312349876</phone>  
        <email>282212344321@qq.com</email>  
        <address>中南海</address> 
      </contact> 
    </contact-list>

    上面代码时.xml文件内容

    问题分析:1)添加操作:我们首先要新建一个contact标签,并且对其id属性(具有唯一性)进行赋值,接下来创建它的子标签(如:name标签...),在对id属性进行赋值时,首先要

    判断原电话簿中是否有该id存在,不存在就添加,存在重新输入

    2)更新操作:首先要判断电话簿中是否有联系人,没有就提示添加,;根据输入的编号(判断输入编号是否存在)找到对应的联系人,然后对其进行修改,如果修改编号,都要检验输入id编号是否已经存在

    在电话簿中

    3)删除操作:首先要判断电话簿中是否有联系人,没有就提示添加,根据输入的编号(判断输入编号是否存在)找到对应的联系人,直接利用detach()方法删除对应联系人

    4)展示联系人的信息操作:获取所有contact标签,对其进行输出

    下面是每一步的详细代码:

    先给出辅助代码:

    //判断文档是否存有联系人
    //判断文档是否存有联系人
        public static boolean isNull(Document doc){
            List<Element> list = doc.getRootElement().elements("contact");
            if(list.size() == 0){
                return true;
            }
            return false;
        }

    //打印对应编号的信息

    //打印对应编号的信息
        public static void printContact(Element conEle){
            //打印当前编号机主的信息,
            List<Element> list = conEle.elements();
            //获取id属性值
            Attribute idAttr = conEle.attribute("id");
            System.out.println(idAttr.getName()+":"+idAttr.getValue());
            for(Element e : list)
                System.out.println(e.getName()+":"+e.getText());
            System.out.println("------------");
        }
    //输出到E:/contact.xml
    //输出到E:/contact.xml
        public static void out(Document doc) throws Exception {
            //输出
            OutputStream out = new FileOutputStream("E:"+File.separator+"contact.xml") ;
            //输出格式:
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(out,format) ;
            writer.write(doc);
            writer.close();
        }
    //根据所传参数进行修改信息
    //根据所传参数进行修改信息
        public static void up(Element conEle,String name){
            //通过属性名称获取属性
            if("id".equals(name)) {
                Attribute Attr = conEle.attribute(name);
                Attr.setValue(sc.next());
            }else{
                Element elem = conEle.element(name);
                elem.setText(sc.next());
            }
        }
    //判断编号是否存在
    //判断编号是否存在
        public static Element isIDExit(String s, List<Element> list){
            for(Element e : list){
                if(e.attributeValue("id").equals(s))
                    return e;
            }
            return null;
        }

    //判断编号是否重复

    //判断编号是否重复
        public static boolean isIdRepeat(String s, List<Element> list){
            for(Element e : list){
                if(e.attributeValue("id").equals(s))
                    return false;
            }
            return true;
        }

    添加操作代码:

    private static void add() throws Exception {
            Document doc = new SAXReader().read(new File("E:"+File.separator+"contact.xml"));
            //获取根标签的子标签集合
            List<Element> list = doc.getRootElement().elements();
            Element conElem = null;
            //添加属性
            boolean flag = true;
            System.out.println("请输入编号:");
            while(flag){
                String str = sc.next();
                if(isIdRepeat(str,doc.getRootElement().elements("contact"))){
                    //创建contact标签
                    conElem = DocumentHelper.createElement("contact");
                    //将该标签插入第一位
                    list.add(0,conElem);
                    //输入对应id
                    conElem.addAttribute("id",str) ;
                    flag = false;
                }else{
                    System.out.println("输入编号重复,请重新输入:");
                }
            }
    
            List<Element> list1 = conElem.elements();
            //在contact标签下继续新建其他属性标签
            System.out.println("请输入名字:");
            Element name = DocumentHelper.createElement("name");
            name.setText(sc.next());
            list1.add(name);
    
            System.out.println("请输入性别:");
            Element gender = DocumentHelper.createElement("gender");
            gender.setText(sc.next());
            list1.add(gender);
    
            System.out.println("请输入电话:");
            Element phone = DocumentHelper.createElement("phone");
            phone.setText(sc.next());
            list1.add(phone);
    
            System.out.println("请输入邮箱:");
            Element email = DocumentHelper.createElement("email");
            email.setText(sc.next());
            list1.add(email);
    
            System.out.println("请输入地址:");
            Element address = DocumentHelper.createElement("address");
            address.setText(sc.next());
            list1.add(address);
            //进行输出
            out(doc);
            System.out.println("添加成功");
            System.out.println("============");
        }

    更新操作:

    public static void update() throws Exception {
            Document doc = new SAXReader().read(new File("E:"+File.separator+"contact.xml"));
            if(isNull(doc)){
                System.out.println("电话簿为空,请添加联系人");
                System.out.println("============");
                return;
            }
            System.out.println("请输入要更新机主的编号");
            boolean flag = true;
            //对应编号的标签
            Element conEle = null;
            while(flag){
                String str = sc.next();
                conEle = isIDExit(str,doc.getRootElement().elements("contact"));
                if(conEle!=null){
                    //打印当前编号机主的信息,
                    flag = false;
                }else{
                    System.out.println("输入编号不存在,请重新输入:");
                }
            }
            //打印当前编号机主的信息,
            printContact(conEle);
            System.out.println("1.修改编号
    " +"2.修改名字
    " + "3.修改性别
    " + "4.修改电话
    "+"5.修改邮箱
    "+"6.修改地址");
            flag = true;
            while (flag){
                System.out.println("按照提示请自行修改");
                while(flag) {
                    int n = sc.nextInt();
                    switch (n) {
                        case 1:
                            System.out.println("请输入新的编号:");
                            while (flag) {
                                String str = sc.nextLine();
                                if (isIdRepeat(str, doc.getRootElement().elements("contact"))) {
                                    up(conEle, "id");
                                    flag = false;
                                } else {
                                    System.out.println("输入编号重复,请重新输入:");
                                }
                            }
                            break;
                        case 2:
                            System.out.println("请输入新的名字:");
                            up(conEle, "name");
                            flag = false;
                            break;
                        case 3:
                            System.out.println("请输入新的性别:");
                            up(conEle, "gender");
                            flag = false;
                            break;
                        case 4:
                            System.out.println("请输入新的电话:");
                            up(conEle, "phone");
                            flag = false;
                            break;
                        case 5:
                            System.out.println("请输入新的邮箱:");
                            up(conEle, "email");
                            flag = false;
                            break;
                        case 6:
                            System.out.println("请输入新的地址:");
                            up(conEle, "address");
                            flag = false;
                            break;
                        default:
                            System.out.println("-------------------------");
                            System.out.println("1.修改编号
    " +"2.修改名字
    " + "3.修改性别
    " + "4.修改电话
    "+"5.修改邮箱
    "+"6.修改地址");
                            System.out.println("请按提示输入正确选项:");
                    }
                }
                flag = true;
                while(flag){
                    System.out.println("继续修改请输入Y/y,否则输入N/n");
                    String str = sc.next();
                    if(str.compareToIgnoreCase("Y") == 0){
                        break;
                    }else if(str.compareToIgnoreCase("N") == 0){
                        System.out.println("修改完成");
                        flag = false;
                    }else{
                        System.out.println("输入不正确,请重新输入");
                    }
                }
            }
            //文件输出
            out(doc);
            System.out.println("============");
        }

    删除操作:

    private static void del() throws Exception {
            Document doc = new SAXReader().read(new File("E:"+File.separator+"contact.xml"));
            if(isNull(doc)){
                System.out.println("电话簿为空,请添加联系人");
                System.out.println("============");
                return;
            }
            boolean flag = true;
            //获取对应编号的标签
            Element conEle = null;
            System.out.println("请输入删除编号:");
            while(flag){
                String str = sc.next();
                //返回对应编号标签
                conEle = isIDExit(str,doc.getRootElement().elements("contact"));
                if(conEle!=null){
                    flag = false;
                }else{
                    System.out.println("输入编号不存在,请重新输入:");
                }
            }
            printContact(conEle);
            flag = true;
            while(flag){
                System.out.println("删除请输入Y/y,否则输入N/n");
                String str = sc.next();
                if(str.compareToIgnoreCase("Y") == 0){
                    conEle.detach();
                    out(doc);
                    System.out.println("已删除");
                    System.out.println("============");
                    return;
                }else if(str.compareToIgnoreCase("N") == 0){
                    flag = false;
                }else{
                    System.out.println("输入不正确,请重新输入");
                }
            }
    
        }

    显示联系人操作:

    public static void printMessage() throws Exception {
            Document doc = new SAXReader().read(new File("E:"+File.separator+"contact.xml"));
            if(isNull(doc)){
                System.out.println("电话簿为空,请添加联系人");
                System.out.println("============");
                return;
            }
            List<Element> list = doc.getRootElement().elements("contact");
            for(Element e : list){
                printContact(e);
            }
        }

    主方法为:

    public static void main(String[] args) throws Exception {
            while(true){
                System.out.println("1.添加
    " +"2.修改
    " + "3.删除
    " + "4.打印全部信息");
                int n = sc.nextInt();
                System.out.println("==========");
                switch(n){
                    case 1: add();
                        break;
                    case 2: update();
                        break;
                    case 3: del();
                        break;
                    case 4: printMessage();
                        break;
                    default:
                        System.out.println("请重新输入:");
                }
            }
        }

    在类中定影静态成员属性static Scanner sc = new Scanner(System.in);

    详细代码下载地址:https://github.com/dukaichao/Meavn/tree/master/%E7%94%B5%E8%AF%9D%E7%B0%BF%E5%AE%8C%E6%95%B4

  • 相关阅读:
    访问 IIS 元数据库失败
    C# List<T>运用
    Unicode 数据
    讲解SQL Server 2000的Collection排序规则
    delphi Format用法
    delphi 文件的操作
    class of 语句
    深入delphi编程
    delphi 事件委托 未看
    如何让delphi在启动时不自动创建空的工程?
  • 原文地址:https://www.cnblogs.com/du001011/p/10963076.html
Copyright © 2011-2022 走看看