XML学习---项目实战:联系人管理系统
来源:互联网 发布:免费制谱软件 编辑:程序博客网 时间:2024/05/17 23:23
联系人管理系统
请使用XML保存数据,完成一个联系人管理系统。
- 用户必须经过认证登录后方可以使用系统。
- 用户必须经过认证登录后方可以使用系统。
- 分模块进行设计。
- 两层框架-用户交互层,Dao层。
- 其他支持层-数据封装层。
- 工具类-加密,工厂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(); }}
阅读全文
0 0
- XML学习---项目实战:联系人管理系统
- XML解析--小项目实战(联系人管理系统)
- Maven项目管理实战(二)--pom.xml
- java--联系人管理系统
- S2SH火车票订票管理系统项目实战
- JAVA项目实战<迷你DVD管理系统>
- 项目实战之使用Servlet+JSP+XML(EL表达式版)实现联系人功能
- 管理系统联系人之补充
- java--联系人管理系统(2)
- 联系人管理系统(MVC框架)
- 安卓四大组件-内容提供器-2.1_项目实战-读取系统联系人
- Maven项目管理实战(四)-pom.xml文件详解
- 【电信计费系统项目实战】基础篇---解析XML文件
- 【电信计费系统项目实战】基础篇---解析XML文件
- 欣然药品库房管理系统项目实战【视频】
- J2SE实战项目——信用卡管理系统
- 基于plusgantt的项目管理系统实战开发视频教程
- SSH项目实战---图书销售及后台管理系统
- android上如何实现后台日志记录并写文件到sd卡
- XML解析
- 第八届蓝桥杯B组国赛总结
- MyEclipse 配置maven项目pom.xml设置 上传项目到nexus私服,通过中转仓库下载插件,以及nexus的配置
- 【简记】大规模Web开发技术(第十一章)
- XML学习---项目实战:联系人管理系统
- Redis主从复制 常见疑问
- 解决用远程连接mysql数据库出现1045 access denied for user 'root'@'localhost' using password yes
- Android图像滤镜框架GPUImage使用(二)
- Rank
- 服务器(3)--搭建单机版Solr服务器+配置中文分析器
- JDBC连接mysql
- Java的垃圾回收机制
- Redis事务 示例