javaweb学习笔记_通讯录小程序实现
Posted Yoriskkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaweb学习笔记_通讯录小程序实现相关的知识,希望对你有一定的参考价值。
1.通讯录需求
- 增删改查联系人
- 数据保存在xml文档中
2.使用到的知识点
- 使用dom4j读取,创建和写出xml文件
- 使用xPath快速获取所需节点对象
3.代码实现
主界面的实现
1 public class MainProgram { 2 public static void main(String[] args) { 3 4 try { 5 /* 6 * Scanner scanner = new Scanner(System.in); String command = 7 * scanner.next(); 8 */ 9 BufferedReader br = new BufferedReader(new InputStreamReader( 10 System.in)); 11 ContactOperator operator = new ContactOperatorImpl(); 12 //不断的接受输入 13 while(true){ 14 // 1.看到菜单 15 printMenu(); 16 // 2.接受用户输入的命令 17 String command = br.readLine(); 18 //3.根据用户的输入不同执行不通的操作 19 if(command.equals("1")){ 20 //添加联系人功能 21 //获取用户输入的数据 22 Contact contact = new Contact(); 23 System.out.println("请输入编号:"); 24 String id = br.readLine(); 25 System.out.println("请输入姓名:"); 26 String name = br.readLine(); 27 System.out.println("请输入性别:"); 28 String gender = br.readLine(); 29 System.out.println("请输入年龄:"); 30 String age = br.readLine(); 31 System.out.println("请输入电话:"); 32 String phone = br.readLine(); 33 System.out.println("请输入邮箱:"); 34 String email = br.readLine(); 35 System.out.println("请输入qq:"); 36 String qq = br.readLine(); 37 38 contact.setAge(Integer.parseInt(age)); 39 contact.setEmail(email); 40 contact.setGender(gender); 41 contact.setId(id); 42 contact.setName(name); 43 contact.setPhone(phone); 44 contact.setQq(qq); 45 operator.addContact(contact); 46 System.out.println("添加成功!"); 47 }else if(command.equals("2")){ 48 //修改联系人功能 49 //获取用户输入的数据 50 Contact contact = new Contact(); 51 System.out.println("请输入需要修改的编号:"); 52 String id = br.readLine(); 53 System.out.println("请输入需要修改的姓名:"); 54 String name = br.readLine(); 55 System.out.println("请输入需要修改的性别:"); 56 String gender = br.readLine(); 57 System.out.println("请输入需要修改的年龄:"); 58 String age = br.readLine(); 59 System.out.println("请输入需要修改的电话:"); 60 String phone = br.readLine(); 61 System.out.println("请输入需要修改的邮箱:"); 62 String email = br.readLine(); 63 System.out.println("请输入需要修改的qq:"); 64 String qq = br.readLine(); 65 66 contact.setAge(Integer.parseInt(age)); 67 contact.setEmail(email); 68 contact.setGender(gender); 69 contact.setId(id); 70 contact.setName(name); 71 contact.setPhone(phone); 72 contact.setQq(qq); 73 operator.updateContact(contact); 74 System.out.println("修改成功!"); 75 }else if(command.equals("3")){ 76 //删除联系人功能 77 //获取需要删除的ID 78 System.out.println("请输入需要删除的联系人ID:"); 79 String id = br.readLine(); 80 operator.deleteContact(id); 81 System.out.println("删除成功"); 82 }else if(command.equals("4")){ 83 //查看联系人功能 84 List<Contact> list = operator.findAll(); 85 //打印输出 86 for (Contact contact : list) { 87 System.out.println(contact); 88 } 89 }else if(command.equals("q")){ 90 break; 91 }else if(command.equals("Q")){ 92 break; 93 }else{ 94 System.out.println("输入的命令有误"); 95 } 96 } 97 } catch (IOException e) { 98 e.printStackTrace(); 99 throw new RuntimeException(e); 100 } 101 } 102 103 private static void printMenu() { 104 System.out.println("========================="); 105 System.out.println("[1]添加联系人"); 106 System.out.println("[2]修改联系人"); 107 System.out.println("[3]删除联系人"); 108 System.out.println("[4]查看所有联系人"); 109 System.out.println("[Q]退出系统"); 110 System.out.println("========================="); 111 } 112 }
1 /** 2 * 该接口用于存放联系人相关操作的方法 3 * @author Yoriskkk 4 * 5 */ 6 public interface ContactOperator { 7 public void addContact(Contact contact);//增加联系人 8 public void updateContact(Contact contact);//修改联系人 9 public void deleteContact(String id);//删除联系人 10 public List<Contact> findAll();//查询联系人 11 }
1 /** 2 * 实现联系人接口 3 * @author Yoriskkk 4 * 5 */ 6 public class ContactOperatorImpl implements ContactOperator{ 7 /** 8 * 添加联系人 9 */ 10 @Override 11 public void addContact(Contact contact) { 12 try { 13 File file = new File("e:/contact.xml"); 14 Document doc = null; 15 Element rootElement = null; 16 Element contactElement = null; 17 if(!file.exists()){ 18 //如果没有xml文件,则创建xml文件 19 doc = DocumentHelper.createDocument(); 20 //创建根标签 21 rootElement = doc.addElement("ContacList"); 22 contactElement= rootElement.addElement("Contact"); 23 }else{ 24 //如果有xml文件,则读取xml文件 25 doc = new SAXReader().read(file); 26 //读取根标签 27 Element rootElement2 = doc.getRootElement(); 28 contactElement= rootElement2.addElement("Contact"); 29 } 30 /** 31 * 需求:把contact对象保存到xml文件中 32 */ 33 34 //添加contact标签 35 /** 36 * <contact id="1"> 37 * <name>eric</name> 38 * <gender>男</gender> 39 * <age>20</age> 40 * <phone>21312312312</phone> 41 * <email>[email protected]</email> 42 * <qq>465465432</qq> 43 * </contact> 44 */ 45 46 contactElement.addAttribute("id", contact.getId()); 47 contactElement.addElement("name").setText(contact.getName()); 48 contactElement.addElement("gender").setText(contact.getGender()); 49 contactElement.addElement("age").setText(contact.getAge()+""); 50 contactElement.addElement("phone").setText(contact.getPhone()); 51 contactElement.addElement("email").setText(contact.getEmail()); 52 contactElement.addElement("qq").setText(contact.getQq()); 53 54 //把Document写出到xml文件 55 XMLUtil.write2xml(doc); 56 } catch (Exception e) { 57 e.printStackTrace(); 58 throw new RuntimeException(e); 59 } 60 } 61 62 /** 63 * 修改联系人 64 */ 65 @Override 66 public void updateContact(Contact contact) { 67 /** 68 * 需求:修改id值为2的联系人 69 * 1)查询id值为2的contact标签 70 * 2)修改contact标签的内容 71 */ 72 73 try { 74 //1.读取xml文件 75 Document doc = XMLUtil.getDocument(); 76 Element contactElem = (Element)doc.selectSingleNode("//Contact[@id=‘"+contact.getId()+"‘]"); 77 //2.修改contact标签内容 78 contactElem.element("name").setText(contact.getName()); 79 contactElem.element("gender").setText(contact.getGender()); 80 contactElem.element("age").setText(contact.getAge()+""); 81 contactElem.element("phone").setText(contact.getPhone()); 82 contactElem.element("email").setText(contact.getEmail()); 83 contactElem.element("qq").setText(contact.getQq()); 84 //把Document写出到xml文件 85 XMLUtil.write2xml(doc); 86 87 } catch (Exception e) { 88 // TODO Auto-generated catch block 89 e.printStackTrace(); 90 throw new RuntimeException(e); 91 } 92 } 93 /** 94 * 删除联系人 95 */ 96 @Override 97 public void deleteContact(String id) { 98 try { 99 //1.读取xml文件 100 Document doc = XMLUtil.getDocument(); 101 Element contactElem = (Element)doc.selectSingleNode("//Contact[@id=‘"+id+"‘]"); 102 //2.修改contact标签内容 103 contactElem.detach(); 104 //把Document写出到xml文件 105 XMLUtil.write2xml(doc); 106 107 } catch (Exception e) { 108 // TODO Auto-generated catch block 109 e.printStackTrace(); 110 throw new RuntimeException(e); 111 } 112 } 113 /** 114 * 查看联系人 115 */ 116 @Override 117 public List<Contact> findAll() { 118 //1.读取xml文件 119 Document doc = XMLUtil.getDocument(); 120 //2.创建List对象 121 List<Contact> list = new ArrayList<Contact>(); 122 //3.读取contact标签 123 List<Element> conList = (List<Element>)doc.selectNodes("//Contact"); 124 for (Element e : conList) { 125 //创建contact对象 126 Contact c = new Contact(); 127 c.setAge(Integer.parseInt(e.elementText("age"))); 128 c.setEmail(e.elementText("email")); 129 c.setGender(e.elementText("gender")); 130 c.setId(e.attributeValue("id")); 131 c.setName(e.elementText("name")); 132 c.setPhone(e.elementText("phone")); 133 c.setQq(e.elementText("qq")); 134 //把contact放入list中 135 list.add(c); 136 } 137 return list; 138 } 139 }
将共性代码抽取出来,放在XMLUtil类中
1 /** 2 * xml工具类 3 * @author Yoriskkk 4 * 5 */ 6 public class XMLUtil { 7 8 /** 9 * 写出到xml文件中 10 */ 11 public static void write2xml(Document doc){ 12 try { 13 FileOutputStream out = new FileOutputStream("e:/contact.xml"); 14 OutputFormat format = OutputFormat.createPrettyPrint(); 15 format.setEncoding("utf-8"); 16 XMLWriter writer = new XMLWriter(out,format); 17 writer.write(doc); 18 writer.close(); 19 } catch (Exception e) { 20 // TODO Auto-generated catch block 21 e.printStackTrace(); 22 throw new RuntimeException(e); 23 } 24 } 25 26 /** 27 * 获得文件 28 */ 29 public static Document getDocument(){ 30 //Document doc = null; 31 try { 32 Document doc = new SAXReader().read(new File("e:/contact.xml")); 33 return doc; 34 } catch (Exception e) { 35 e.printStackTrace(); 36 throw new RuntimeException(e); 37 } 38 39 } 40 }
以上是关于javaweb学习笔记_通讯录小程序实现的主要内容,如果未能解决你的问题,请参考以下文章
JAVAWEB学习笔记24_filter实现自动登录和解决全局的编码问题