XML文件作业---实现简单的通讯录功能(XML作为简单数据库)(总结)

XML文件作业---实现简单的通讯录功能(XML作为简单数据库)

实现功能:对XML文件进行信息的增删查改;

项目整体视图:

对象类:Contact.java

package Test;
/*
 * 联系人实体对象
 */
public class Contact {
	private String id;
	private String name;
	private String gender;
	private int age;
	private String phone;
	private String email;
	private String qq;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getQq() {
		return qq;
	}
	public void setQq(String qq) {
		this.qq = qq;
	}
	@Override
	public String toString() {
		return "Contact [id=" + id + ", mame=" + name + ", gender=" + gender
				+ ", age=" + age + ", phone=" + phone + ", email=" + email
				+ ", qq=" + qq + "]";
	}
}

主程序:MainProgram.java

package Test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

public class MainProgram {
	@SuppressWarnings("null")
	public static void main(String[] args) {
		try {			
			//接收用户输入的命令
//			Scanner scanner = new Scanner(System.in);
//			String command = scanner.next();
			
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			ContactOperator operator = new ContactOperatorImpl();
			while(true) {
				//1.看到菜单
				printMenu();
				
				//2.接收用户输入命令
				String command = br.readLine();
			
				//3.根据用户输入执行不同的操作
				if("1".equals(command)) {
					//添加联系人
					//获取用户输入的数据
					Contact contact = new Contact();
					//获取ID
					System.out.println("请输入编号:");
					String id = br.readLine();
					//获取姓名
					System.out.println("请输入姓名");
					String name = br.readLine();
					//获取性别
					System.out.println("请输入性别");
					String gender = br.readLine();
					//获取年龄
					System.out.println("请输入年龄");
					String age = br.readLine();
					//获取电话
					System.out.println("请输入手机号");
					String phone = br.readLine();
					//获取邮箱
					System.out.println("请输入邮箱");
					String email = br.readLine();
					//获取QQ
					System.out.println("请输入QQ");
					String qq = br.readLine();
					
					//封装到对象
					contact.setId(id);
					contact.setName(name);
					contact.setAge(Integer.parseInt(age));
					contact.setGender(gender);
					contact.setEmail(email);
					contact.setPhone(phone);
					contact.setQq(qq);
					
					//调用添加联系人的方法
					operator.addContact(contact);
				} else if("2".equals(command)) {
					//修改联系人
					Contact contact = new Contact();
					//获取ID
					System.out.println("请输入需要修改的编号:");
					String id = br.readLine();
					//获取姓名
					System.out.println("请输入修改后的姓名");
					String name = br.readLine();
					//获取性别
					System.out.println("请输入修改后的性别");
					String gender = br.readLine();
					//获取年龄
					System.out.println("请输入修改后的年龄");
					String age = br.readLine();
					//获取电话
					System.out.println("请输入修改后的手机号");
					String phone = br.readLine();
					//获取邮箱
					System.out.println("请输入修改后的邮箱");
					String email = br.readLine();
					//获取QQ
					System.out.println("请输入修改后的QQ");
					String qq = br.readLine();
					
					//封装到对象
					contact.setId(id);
					contact.setName(name);
					contact.setAge(Integer.parseInt(age));
					contact.setGender(gender);
					contact.setEmail(email);
					contact.setPhone(phone);
					contact.setQq(qq);
					
					//调用修改联系人的方法
					operator.updateContact(contact);
				} else if("3".equals(command)) {
					//删除联系人
					System.out.println("请输入你要删除的编号:");
					String id = br.readLine();
					
					//调用删除联系人的方法
					operator.deleteContact(id);
				} else if("4".equals(command)) {
					//查找所有联系人
					List<Contact> list = operator.findAll();
					//打印输出
					for(Contact con : list) {
						System.out.println(con);
					}
					
				} else if("Q".equals(command)) {
					
					break;
				} else {
					System.out.println("输入有错误");
				}
			}
			
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	private static void printMenu() {
		//1.看到菜单
		System.out.println("======================");
		System.out.println("[1]添加联系人");
		System.out.println("[2]修改联系人");
		System.out.println("[3]删除联系人");
		System.out.println("[4]查看所有联系人");
		System.out.println("[Q]退出系统");
		System.out.println("=======================");
	}
}

定义联系人存放的方法的接口:ContactOperator.java

package Test;

import java.util.List;

/*
 * 该接口用于存放联系人相关操作方法
 */
public interface ContactOperator {
	public void addContact(Contact contact);//添加联系人
	public void updateContact(Contact contact);//修改联系人
	public void deleteContact(String id);//删除联系人
	public List<Contact> findAll();//查询所有联系人
}

上面接口方法的实现类:ContactOperatorImpl.java

package Test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class ContactOperatorImpl implements ContactOperator {
	
	public void addContact(Contact contact)  {
		try {
			/*
			 * 需求:把contact对象保存到XML文件中
			 */
			File file = new File("e:/contact.xml");
			Document doc = null;
			Element rootElem = null;
			if(!file.exists()) {
				//如果没有XML文件,则创建XML文件
				doc = DocumentHelper.createDocument();
				//创建根标签
				rootElem = doc.addElement("contactList");
			} else {
				//如果有XML文件,则读取XML文件
				doc = new SAXReader().read(file);
				//读取根标签
				rootElem = doc.getRootElement();
			}
			
			//添加contact标签
			Element contactElem = rootElem.addElement("contact");
			
			contactElem.addAttribute("id", contact.getId());
			contactElem.addElement("name").setText(contact.getName());
			contactElem.addElement("gender").setText(contact.getGender());
			contactElem.addElement("age").setText(contact.getAge()+"");
			contactElem.addElement("phone").setText(contact.getPhone());
			contactElem.addElement("email").setText(contact.getEmail());
			contactElem.addElement("qq").setText(contact.getQq());
			
			//把Document写到XML文件
			XMLUtil.Writexml(doc);
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} 
	}

	public void updateContact(Contact contact) {
		/*
		 * 修改id值为2的联系人
		 * 1)查询id值为2的contact标签
		 * 2)修改contact标签中的内容
		 */
		try {
			//1.读取XML文件
			Document doc = XMLUtil.getDocument();
			Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+contact.getId()+"']");
			
			//2.修改contact标签中的内容
			contactElem.element("name").setText(contact.getName());
			contactElem.element("gender").setText(contact.getGender());
			contactElem.element("age").setText(contact.getAge()+"");
			contactElem.element("email").setText(contact.getEmail());
			contactElem.element("qq").setText(contact.getQq());
			
			//把Document写到XML文件
			XMLUtil.Writexml(doc);
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	public void deleteContact(String id) {
		
		try {
			//1.读取XML文件
			Document doc = XMLUtil.getDocument();
			//2.查询需要删除id的contact
			Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");
			//3.删除标签
			contactElem.detach();
			//4.把Document写到XML文件
			XMLUtil.Writexml(doc);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	public List<Contact> findAll() {
		//1.读取XML文件
		Document doc = XMLUtil.getDocument();
		//2.创建List对象
		List<Contact> list = new ArrayList<Contact>();
		//3.读取contact标签
		List<Element> conList = (List<Element>)doc.selectNodes("//contact");
		for(Element e : conList) {
			//创建Contact对象
			Contact c = new Contact();
			c.setId(e.attributeValue("id"));
			c.setName(e.elementText("name"));
			c.setGender(e.elementText("gender"));
			c.setAge(Integer.parseInt(e.elementText("age")));
			c.setEmail(e.elementText("email"));
			c.setPhone(e.elementText("phone"));
			c.setQq(e.elementText("qq"));
			//把contact对象放到list中
			list.add(c);
		}
		return list;
	}

}

对XML文件进行操作的方法实现类:XMLUtil.java

package Test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XMLUtil {
	
	/*
	 * 用于读取XML文件
	 */
	public static Document getDocument() {
		try {
			Document doc = new SAXReader().read(new File("e:/contact.xml"));
			return doc;
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
	
	/*
	 * 写出XML文件
	 */
	public static void Writexml(Document doc) {
		try {
			//3.把Document写到XML文件
			FileOutputStream out = new FileOutputStream("e:/contact.xml");
			//书写格式(优美的格式)
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("utf-8");
			XMLWriter writer = new XMLWriter(out,format);
			writer.write(doc);
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException();
		} 
	}
}

接口方法实现的测试类:TestContactOperatorImpl.java

package Test;

import java.util.List;

import org.junit.Before;
import org.junit.Test;

/*
 * 联系人操作实现的测试类
 */
public class TestContactOperatorImpl {
	
	ContactOperator operator = null;
	/*
	 * 初始化对象实例
	 */
	@Before
	public void init() {
		operator = new ContactOperatorImpl();
	}
	@Test
	public void testAddContact() {
		Contact contact = new Contact();
		contact.setId("4");
		contact.setName("sb");
		contact.setGender("男");
		contact.setPhone("2333");
		contact.setEmail("er");
		contact.setQq("9777");
		operator.addContact(contact);
	}
	
	@Test
	public void testUpdateContact() {
		Contact contact = new Contact();
		contact.setId("3");//修改的ID值
		contact.setName("李四");
		contact.setGender("男");
		contact.setAge(20);
		contact.setPhone("2333");
		contact.setEmail("er");
		contact.setQq("9777");
		operator.updateContact(contact);
	}
	
	@Test
	public void testDeleteContact() {
		operator.deleteContact("2");
	}
	
	@Test
	public void testFindAll() {
		List<Contact> list = operator.findAll();
		for(Contact contact : list) {
			System.out.println(contact);
		}
	}
}







 

某学校拟使用XML文件制定一个学生(含已毕业学生)信息文档,该文档描述其学校内学生的管理信息。 1、 选用合适的编辑器,编写一个XML文件,应至少包括下述信息内容: 学生目录下应该包括: (1) 所有学生的共有信息:班级的名字、专业、类别等 (2) 学生 学生1 学生基本信息(学生姓名、性别、学号、年龄) 入学信息(入学时间、辅导员名) 班级内学生生源信息( 生源1:(生源地名称、联系方式等信息) 生源2: 生源n: ) 毕业信息(毕业时间、毕业数量、辅导员名) 学生2 学生3 。。。。。 学生N (3)辅导员 辅导员1(辅导员姓名、联系方式、职位、管理的班级名) 辅导员2 2、针对该XML文件,画出其相应的树状结构图。 3、针对所编写的XML文件,编写其相应的DTD文件,并使用解析器验证其有效性,对验证结果抓图。 4、针对所编写的XML文件,编写合适的XSL文件,将学生基本信息打印成表格,并用ie浏览器进行浏览并截图。 5、使用JAVA编程语言,对XML文件进行解析: 显示该xml文件的所有节点、属性的名字; 同时显示该xml文件所有标记的文本数据; 计算学生的入学平均年龄并进行输出。 要求:1)xml文件中应该包括文本内容、标记、属性、命名空间,混合标记等的内容 2)dtd文件应该有相应的结果抓图 3)xsl文件应用到规范中的常用技巧,例如模板调用、for-each、value-of、xsl标记等。 4)解析器结果应该有抓图。 5)形成的代码交老师验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值