XML学习---项目实战:联系人管理系统

原创 2017年05月29日 10:57:02

联系人管理系统

请使用XML保存数据,完成一个联系人管理系统。

  1. 用户必须经过认证登录后方可以使用系统。
  2. 用户必须经过认证登录后方可以使用系统。
  3. 分模块进行设计。
  4. 两层框架-用户交互层,Dao层。
  5. 其他支持层-数据封装层。
  6. 工具类-加密,工厂Bean。

说明:
因为仅仅是做一个小项目,分层就没那么复杂,仅仅分了两层。用户交互层和Dao层,(逻辑关系放在用户交互层)

没有用户界面,整个操作是根据提示信息完成,就像银行ATM机那样。
这里写图片描述

还要说明一点:项目大部分代码不是我写的,是老师写的为主,我自己写的版本实在是太没框架思想,很简单,但是还是做出来大部分功能了,个人比较害羞就不拿出来分享了。

首先看一下:包的层次结构
这里写图片描述

这里写图片描述
cmd包下面的ContactAction.java 是用户交互层代码

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.factory.ContactDaoFactory;

public class ContactAction {
    private Scanner sc = null;

    //注入dao
    private ContactDAO dao = ContactDaoFactory.getContactDAO();

    public ContactAction(){
        sc = new Scanner(System.in);
        System.out.println("※※警告用户:MyEclipse控制台中不支持中文!※※");

        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 if("0".equals(op)){
                System.out.println("您已经安全退出系统!");
                break;
            }

        }

    }

    //业务逻辑代码
    public void login(){
        System.out.println("请输入用户名:");
        String name = sc.nextLine().trim();
        System.out.println("请输入密码:");
        String pwd = sc.nextLine();

        boolean boo = dao.login(name,pwd);
        if(!boo){
            System.out.println("用户名或密码错误,请重新输入!");
            login();
        }else{
            System.out.println("恭喜,登录成功!");
            doOpertate();//联系人信息管理模块
        }

    }

    public void reg(){
        System.out.println("请输入英文用户名:");
        String name = sc.nextLine().trim();
        System.out.println("请输入密码:");
        String pwd = sc.nextLine();
        System.out.println("请输入确认密码:");
        String pwd2 = sc.nextLine();
        if(pwd.equals(pwd2)){
            boolean boo = dao.reg(name,pwd);
            if(!boo){
                System.out.println("该用户名已经存在,请重新输入!");
                reg();
            }else{
                System.out.println("恭喜,您已经注册成功!");
            }
        }else{
            System.out.println("两次密码不一致,请重新输入!");
            reg();
        }
    }

    public void doOpertate(){
        System.out.println("1:显示所有联系人");
        System.out.println("2:添加联系人");
        System.out.println("3:删除联系人");
        System.out.println("4:修改联系人");
        System.out.println("0:退出");
        String sel = sc.nextLine().trim();
        if("1".equals(sel)){
            showAllContacts();
        }else if("2".equals(sel)){
            addContact();
        }else if("3".equals(sel)){
            delContact();
        }else if("0".equals(sel)){
            return;
        }else if("4".equals(sel)){
            updateContact();
        }

        doOpertate();
    }
    public void addContact(){
        System.out.println("请输入联系人的信息");
        System.out.println("姓名:");
        String name = sc.nextLine().trim();
        System.out.println("性别:");
        String sex = sc.nextLine().trim();
        System.out.println("电话:");
        String tel = sc.nextLine().trim();

        dao.add(name,sex,tel);

    }

    public void showAllContacts(){
        System.out.println("序号\t姓名\t性别\t电话");
        System.out.println("----------------------------------");
        List< Map<String,String> > list = dao.queryAllContacts();
        int i=1;
        delIds= new String[list.size()];//☆2☆
        for(Map<String,String> map:list){
            String name = map.get("name");
            String sex = map.get("sex");
            String tel = map.get("tel");
            System.out.println((i++)+"\t"+name+"\t"+sex+"\t"+tel);

            //☆3☆把当前记录的id存储到delIds[],为以后删除时读取出来
            String id = map.get("id");
            delIds[i-2]=id;
        }

        System.out.println("----------------------------------");
        System.out.println();
    }

    private String delIds[]=null;//☆1☆专用于存储删除时要读取的id
    public void delContact(){
        System.out.println("请输入要删除联系人的序号:");
        int num = sc.nextInt();
        sc.nextLine();//吸掉多余的换行符
        String name = dao.del( delIds[num-1] );

        if(name==null){
            System.out.println("要删除的联系人不存在!");
        }else{
            System.out.println(name+"已经被成功删除!");
        }
        //showAllContacts();
    }

    public void updateContact(){
        showAllContacts();
        System.out.println("请输入要修改联系人的序号:");
        int num = sc.nextInt();
        sc.nextLine();//吸掉多余的换行符
        System.out.println("请输入你要修改练习人的项目代号和修改后的内容");
        System.out.println("格式:1:李军");
        System.out.println("1:修改联系人姓名");
        System.out.println("2:修改联系人性别");
        System.out.println("3:修改联系人电话");
        System.out.println("0:退出");

        String info = sc.next();
        // 还需要校验用户输入格式
        boolean boo = dao.update(delIds[num-1],info);
        if(boo){
            System.out.println("修改成功!");
            showAllContacts();
        }else{
            System.out.println("修改失败,重新输入!");
            updateContact();
        }
    }

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

}

图片二
common包下面的DocumentFactory.java是一个的获取Document对象和保存的方法。因需要经常用到重复的代码就抽取成工具方法了、其中获取Document对象,采用了单例(饿汉式)的设计模式,

package cn.hncu.contact.common;

import java.io.File;

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

import org.w3c.dom.Document;

public class DocumentFactory {
    private static Document dom;
    private static File file;

    private DocumentFactory(){
    }

    static{
        try {
            file = new File("./xml/contact.xml");
            if(!file.exists()){
                throw new RuntimeException("xml数据库不存在");
            }else{
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                dom = db.parse(file);
            }
        } catch (Exception e) {
            throw new RuntimeException("xml数据库解析出错:"+e.getMessage(), e);
        }
    }

    //提供给外面访问的方法
    /**
     * @return返回项目xml数据库对应的document对象
     */
    public static Document getDom(){
        return dom;
    }

    /**
     * 把当前内存中的dom对象保存到项目xml数据库,这两个和getDom()时一样
     */
    public static void save(){
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer trans = tf.newTransformer();
            trans.transform( new DOMSource(dom), new StreamResult(file)); //
        } catch (Exception e) {
            throw new RuntimeException("xml数据库保存出错:"+e.getMessage(), e);
        }
    }

}

图片三
dao层,主要是三部分,接口、工厂方法、实现类。
接口代码如下:

package cn.hncu.contact.dao;

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

public interface ContactDAO {
    public boolean reg(String name,String pwd);
    public boolean login(String name,String pwd);
    public void add(String name, String sex, String tel);
    public List<Map<String, String>> queryAllContacts();
    public String del(String id);
    public boolean update(String string, String info);
}

工厂方法:

package cn.hncu.contact.dao.factory;

import cn.hncu.contact.dao.ContactDAO;
import cn.hncu.contact.dao.impl.ContactDaoImpl;

public class ContactDaoFactory {
    private ContactDaoFactory(){
    }
    public static ContactDAO getContactDAO(){
        return new ContactDaoImpl();
    }
}

还有实现类

package cn.hncu.contact.dao.factory;

import cn.hncu.contact.dao.ContactDAO;
import cn.hncu.contact.dao.impl.ContactDaoImpl;

public class ContactDaoFactory {
    private ContactDaoFactory(){
    }
    public static ContactDAO getContactDAO(){
        return new ContactDaoImpl();
    }
}
版权声明:本文为博主原创文章,大家一起学习进步。

相关文章推荐

Servlet学习

知识点: △Tomcat在启动时会读取一系列的配置文件和jar文件,顺序如下: i. Tomcat自己的conf/server.xml ii. Tomcat自己的conf/web.xm...

struts2入门学习

本篇博客知识点 1.struts是什么? 2.Struts2框架主要由三部分组成 3.Struts2框架的处理流程 4.Struts2入门示例 5.Struts2其他功能 struts是什...

Java基础(十六)——项目实战——交通灯管理系统

模拟实现十字路口的交通灯管理系统逻辑,具体需求如: 1、异步随机生成按照各个路线行驶的车辆。 例如:         由南向而来去往北向的车辆 ----直行车辆         由西向而来去往南向的车...

【项目实战】基于Extjs+SpringMVC+Spring+Mybatis整合的进销存管理系统详解---目录

第一讲:项目简介 第二讲:项目搭建与框架整合 第三讲:数据库的建立 第四讲:登录页面及登录功能的实现 第五讲:extjs的引入及主页面的实现 第六讲:供应商管理模块的实现 第七讲:客户管理模块的实现 ...

JAVA项目实战<迷你DVD管理系统>

一、根据整个编译思路,一共可以分为两个类来处理,一个是DVD类,另一个是DVDManage类,然后再增加一个Test类来测试它的功能。在制作中,我用数组来实现它的功能,对碟片实现常见的操作,查询、新增...

慕课网 项目实战 使用struts2和hibernate开发学生信息管理系统

.war解压缩方式:将.war放到tomcat的webapps目录下,启动tomcat服务器即可完成。 第1章 Struts2与Hibernate整合 1-3 Struts2与Hibernate整...

JSP小项目实战---客户信息管理系统

项目示意图大概这样吧。我自己画的 登录界面代码 index.jsp: 完全没技术含量的,直接调用一个servlet控制的是否登录 ...

项目实战篇-餐馆管理系统—MFC,PHP,MySql:3.MFC端Person类及个人信息修改

餐馆管理系统 MFC 类 PHP MYSQL 项目实战

SSH项目实战---图书销售及后台管理系统

1.项目结构 2.配置文件   Spring.xml

项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现

餐馆管理系统 MFC PHP MYSQL 登陆
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML学习---项目实战:联系人管理系统
举报原因:
原因补充:

(最多只允许输入30个字)