java--联系人管理系统

要求:
      请使用XML保存数据,完成一个联系人管理系统。
      用户必须经过认证登录后方可以使用系统。
      注册、增加、删除、查看联系人功能。
      分模块进行设计。
            两层框架-用户交互层,Dao层。
            其他支持层-数据封装层。
            工具类-加密,工厂Bean。
开发步骤:
第一步:设计数据结构-XML。
第一步:设计数据结构-XML。
第三步:准备资源并编码实现。
第四步:运行测试。
这里写图片描述

<?xml version="1.0" encoding="UTF-8" standalone="no"?><contacts>
    <user name="Jack" pwd="1234">
        <contact id="707dede609dd4a2990f7cfa4cd5233f9">
            <name>xiaoming</name>
            <sex>male</sex>
            <tel>123456</tel></contact>
        <contact id="80983802eaa6402d8bac8bb39e71c48f">
            <name>12</name>
            <sex>12</sex>
            <tel>12</tel>
        </contact></user>
    <user name="Rose" pwd="4321">
        <contact id="eedb795b97194c3aaa9bacda7e2948e9">
            <name>xiaoming</name>
            <sex>female</sex>
            <tel>123</tel>
        </contact></user>
</contacts>

util

package cn.hncu.contact.util;

import java.util.UUID;

public class IDGenerate {
    private IDGenerate(){

    }
    public static String getID(){
//      return UUID.randomUUID().toString();
        return UUID.randomUUID().toString().replace("-", "");
    }
}
package cn.hncu.contact.util;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

public class myDocumentFactory {
    private static final String FILE_NAME="./xml/users.xml";
    private static Document dom=null;
    static{
        DocumentBuilder db;
        try {
            db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
            dom=db.parse(FILE_NAME);
        } catch (Exception e) {
            throw new RuntimeException("xml文档解析失败...",e);
        }
    }
    public static Document getDocument(){
        return dom;
    }
    public static void save(){
        try {
            Transformer tf=TransformerFactory.newInstance().newTransformer();
            tf.transform(new DOMSource(dom), new StreamResult(FILE_NAME));
        } catch (Exception e) {
            throw new RuntimeException("xml文档存储失败...", e);
        } 
//      ConfigurationError:配置异常
    }
}

dao

package cn.hncu.contact.dao;

import java.util.List;
import java.util.Map;

import org.w3c.dom.Element;


public interface contactDAO {
    public abstract boolean login(String name,String pwd);
    public abstract List<Map<String, String>> queryAll();
    public abstract Element add(String name,String sex,String tel);
    public abstract void reg(String name,String pwd);
    public Element delete(String id);//默认abstract
    public abstract Element change(String id, String name, String sex,
            String tel);
}
package cn.hncu.contact.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import cn.hncu.contact.util.IDGenerate;
import cn.hncu.contact.util.myDocumentFactory;

public class contactImpl implements contactDAO{

    private Element currentUser;
    Document dom=null;
    public contactImpl(){

    }
//  private static String name=null;
//  private static String pwd=null;
    @Override
//  public boolean login(String name2, String pwd2) {
        public boolean login(String name, String pwd) {
//      name=name2;
//      pwd=pwd2;
        dom=myDocumentFactory.getDocument();
        Element root=(Element) dom.getFirstChild();
        NodeList nodelist=root.getElementsByTagName("user");
        for(int i=0;i<nodelist.getLength();i++){
            Element e=(Element) nodelist.item(i);
            if(e.getAttribute("name").equalsIgnoreCase(name)&&e.getAttribute("pwd").equalsIgnoreCase(pwd)){
                currentUser=e;
                return true;
            }
        }
        return false;
    }
    @Override
    public List<Map<String, String>> queryAll() {
        List<Map<String, String>> list=new ArrayList<Map<String,String>>();
        if(currentUser==null){
            return list ;
        }
        NodeList nodeList=currentUser.getElementsByTagName("contact");
        for(int i=0;i<nodeList.getLength();i++){
            Map<String, String> map= new HashMap<String, String>();
            Element e=(Element) nodeList.item(i);
            String id=e.getAttribute("id");
            map.put("id", id);
            String name=e.getElementsByTagName("name").item(0).getTextContent();
            map.put("name", name);
            String sex=e.getElementsByTagName("sex").item(0).getTextContent();
            map.put("sex", sex);
            String tel=e.getElementsByTagName("tel").item(0).getTextContent();
            map.put("tel", tel);
            list.add(map);
        }
        return list;
    }

    @Override
    public Element add(String name,String sex,String tel) {
        Document dom=myDocumentFactory.getDocument();
        Element eNewContact=dom.createElement("contact");
        eNewContact.setAttribute("id", IDGenerate.getID());
        Element nameNew=dom.createElement("name");
        nameNew.setTextContent(name);
        eNewContact.appendChild(nameNew);
        Element sexNew=dom.createElement("sex");
        sexNew.setTextContent(sex);
        eNewContact.appendChild(sexNew);
        Element telNew=dom.createElement("tel");
        telNew.setTextContent(tel);
        eNewContact.appendChild(telNew);
        currentUser.appendChild(eNewContact);
        myDocumentFactory.save();
//      login(name, pwd);
        return eNewContact;
    }
    public Element delete(String id) {
        NodeList nodeList=currentUser.getElementsByTagName("contact");
        for(int i=0;i<nodeList.getLength();i++){
            Element e=(Element) nodeList.item(i);
            if(e.getAttribute("id").equals(id)){
                currentUser.removeChild(e);//把节点从树中移除
                myDocumentFactory.save();
//              login(name, pwd);
                return e;
            }
        }
        return null;
    }
    @Override
    public void reg(String name, String pwd) {
        Document dom=myDocumentFactory.getDocument();
        Element userNew=dom.createElement("user");
        userNew.setAttribute("name", name);
        userNew.setAttribute("pwd", pwd);
        dom.getFirstChild().appendChild(userNew);
        myDocumentFactory.save();
    }
    @Override
    public Element change(String id, String name, String sex, String tel) {
        NodeList nodeList=currentUser.getElementsByTagName("contact");
        for(int i=0;i<nodeList.getLength();i++){
            Element e=(Element) nodeList.item(i);
            if(e.getAttribute("id").equals(id)){
                e.getElementsByTagName("name").item(0).setTextContent(name);
                e.getElementsByTagName("sex").item(0).setTextContent(sex);
                e.getElementsByTagName("tel").item(0).setTextContent(tel);
                myDocumentFactory.save();
//              login(name, pwd);
                return e;
            }
        }
        return null;
    }

}
package cn.hncu.contact.dao;

public class contactDAOFactory {
    private contactDAOFactory(){

    }
    public static contactDAO getContactDAO(){
        return new contactImpl();
    }
}

cmd

package cn.hncu.contact.cmd;

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

import org.w3c.dom.Element;

import cn.hncu.contact.dao.contactDAO;
import cn.hncu.contact.dao.contactDAOFactory;

public class contanctAction {
    private contactDAO dao=contactDAOFactory.getContactDAO();
    private Scanner sc=null;
    private String delIds[];
    public contanctAction(){
        sc=new Scanner(System.in);
        while (true) {
            System.out.println("1:登录");
            System.out.println("2:注册");
            System.out.println("0:退出");
            String op=sc.nextLine();
            if ("1".equals(op)) {
                Login();
            } else if ("2".equals(op)) {
                Reg();
            } else {
//              System.exit(0);
                break;
            }
        }
    }
    private void Reg() {
        System.out.println("请输入用户名:");
        String name=sc.nextLine();
        System.out.println("请输入用户密码:");
        String pwd=sc.nextLine();
        System.out.println("请确认用户密码:");
        String pwd2=sc.nextLine();
        if(pwd.equals(pwd2)){
            dao.reg(name,pwd);
        }else{
            System.out.println("两次密码输入不一致,请重新注册");
        }

    }
    private void Login() {
        System.out.println("请输入用户名:");
        String name=sc.nextLine();
        System.out.println("请输入用户密码:");
        String pwd=sc.nextLine();
        boolean boo=dao.login(name, pwd);
        if(boo){
            System.out.println("登录成功...");
            operation();
        }else{
            System.out.println("denglushibai");
        }
    }
    private void operation() {
        List<Map<String, String>> list = dao.queryAll();
        delIds=new String[list.size()];
        int i=0;
        for (Map<String, String> map : list) {
            String id=map.get("id");
            delIds[i++]=id;
        }
//      while (true) {
            //因为共用同一棵dom树,所以每次增删改查之后,还是原来那棵dom树.
            //而while内的操作都是对之前的操作,所以要退出到上一阶段重新登陆,获取更新之后的dom树
            System.out.println("1:显示联系人");
            System.out.println("2:添加联系人");
            System.out.println("3:删除联系人");
            System.out.println("4:修改联系人");
            System.out.println("0:退出");
            String sel = sc.nextLine();
            if ("1".equals(sel)) {
                System.out.println("序号\t姓名\t性别\t电话");
                System.out.println("------------------------------");
                int j = 1;
                for (Map<String, String> map : list) {
                    String name = map.get("name");
                    String sex = map.get("sex");
                    String tel = map.get("tel");
                    System.out.println((j++) + "\t" + name + "\t" + sex + "\t"
                            + tel);
                }
            } else if ("2".equals(sel)) {
                addContact();
            } else if ("3".equals(sel)) {
                delContact();
            } else if ("4".equals(sel)) {
                changeContact();
            } else if ("0".equals(sel)) {
                return;
//              break;
            }
//      }
            operation();
    }
    private void changeContact() {
        System.out.println("请输入要修改的联系人的序号:");
        int num=sc.nextInt();
        sc.nextLine();//吸掉换行符1
        System.out.println("请输入要修改的联系人的姓名:");
        String name=sc.nextLine();
        System.out.println("请输入要修改的联系人的姓别:");
        String sex=sc.nextLine();
        System.out.println("请输入要修改的联系人的电话:");
        String tel=sc.nextLine();

        Element e=dao.change(delIds[num-1],name,sex,tel);
        if(e!=null){
            System.out.println(num+"号联系人更新之后:姓名:"+e.getElementsByTagName("name").item(0).getTextContent()
                    +"性别:"+e.getElementsByTagName("sex").item(0).getTextContent()
                    +"电话号码:"+e.getElementsByTagName("tel").item(0).getTextContent());
        }else{
            System.out.println("修改失败...");
        }

    }
    private void delContact() {
        System.out.println("请输入删除的联系人序号:");
        int num=sc.nextInt();
        sc.nextLine();//吸掉换行符
        Element e=dao.delete(delIds[num-1]);
        if(e==null){
            System.out.println("删除失败,无此联系人");
        }else{
            System.out.println("删除联系人:"+e.getElementsByTagName("name").item(0).getTextContent()+"成功...");
        }

    }
    private void addContact() {
        System.out.println("请输入联系人信息:");
        System.out.println("姓名:");
        String name=sc.nextLine();
        System.out.println("姓别:");
        String sex=sc.nextLine();
        System.out.println("电话:");
        String tel=sc.nextLine();
        Element e=dao.add( name,sex, tel);
        System.out.println("添加联系人"+e.getElementsByTagName("name").item(0).getTextContent()+"成功...");

    }
    public static void main(String[] args) {
        new contanctAction();

    }

}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现了以下要求说明的功能: 1.要求使用GUI,采用 Swing 技术数据存储采用文件系统(可以是文本 文件、xml 文件、vCard 文件或其他自定义格式文件,但不能是 Excel 文件)。不 使用数据库。 2. 通讯录中每个项目包括: ( 1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、像片。 ( 2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、 邮编、电话、传真 ( 3)网络信息:个人主页、即时通信工具及号码、备用邮箱 ( 4)家庭资料:国家、省份、城市、地址、邮编、电话 3 .通讯录数据的录入功能:输入并存储新的通讯录数据,输入时如果有同 名或同电话号码时,应该给出提示。 4 .通讯录数据的查询功能: ( 1)默认列出所有条目。 ( 2)模糊查询,可以按:姓名、电话号码、手机、姓名的汉语拼音的声母 或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。 如:输入“张”,列出所有名字中有“张”的条目;输入“ 2645”列出电话中有 该 4个数字的所有条目;输入“xl ”,列出声母为该 2 个字母的所有条目 ( 3)指定分组后,列出某分组的所有条目 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一 个汉语拼音的字母分类。 5 .删除和修改功能:查询到一个条目后,可以删除该条目或修改条目内容。 6 .通信录内容的导入和导出功能。要求能够以CSV 格式和 vCard 格式导入 和导出通讯录的全部内容。并能够与主流手机或其他通讯录软件交换数据。 7 .通讯录显示设置,可以设置在显示查询结果时,一个条目可以显示或不 显示哪些内容。 注意:本系统实现了读取和保存csv文件,同时csv文件中只保存了图片的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值