程序设计第一题

题目要求是从txt文件中读取信息,再根据一定格式写入到xml文件中去。txt文件中的文本如下

     201833,王二,操作系统,70

     201834,张三,操作系统,90

     201834,张三,嵌入式系统,20

     要求写入的xml文件如下

 

写入xml文件

1,下载 jdom包。http://www.jdom.org/downloads/index.html

点击第一个链接,下载zip文件后,使用第一个jar就行了

然后右击自己的项目,选择build path -->configure buile path-->ADD JARS 选择第一个jar就行了

eclipse自动补全

Eclipse -> Window -> Perferences

找到Java 下的 Editor 下的 Content Assist

在Auto activation triggers for Java后面的文本框里只有一个“.”

把 “.” 改成 “.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”

Alt + Shift + s + r

Alt + Shift + s + o

 

 

eclipse替换变量名

按下ctrl+f, 弹出下面右边界面,输入要寻找的id,替换为ID,在Options下要勾选下面两个箭头的两个,点击Replace All全部替换

student.java

定义学生结构体的意思

import java.util.ArrayList;

public class student {
	private String stu_id;   //学生id
	private String stu_name; //学生姓名
	private ArrayList<course> courses;  //课程
	
	public student(String stu_id,String stu_name,ArrayList<course> courses) {
		// TODO Auto-generated constructor stub
		this.courses=courses;
		this.stu_id=stu_id;
		this.stu_name=stu_name;
	}
	
	public ArrayList<course> getCourses() {
		return courses;
	}
	public String getStu_id() {
		return stu_id;
	}
	public String getStu_name() {
		return stu_name;
	}
	public void setCourses(ArrayList<course> courses) {
		this.courses = courses;
	}
	public void setStu_id(String stu_id) {
		this.stu_id = stu_id;
	}
	public void setStu_name(String stu_name) {
		this.stu_name = stu_name;
	}

}

 

 

course.java

定义课程结构体的意思

public class course {
	private String courseName;//课程名
	private int score;   //分数
	
	course(String courseName,int score){
		this.courseName=courseName;
		this.score=score;
	}
	public String getCourseName() {
		return courseName;
	}
	public int getScore() {
		return score;
	}
	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}
	public void setScore(int score) {
		this.score = score;
	}

}

 

Main.java

1,调用readFile函数,把text.txt文件里的内容一行一行的读出来(直接调用就可以了,不要在意是不是要读一行处理一行)。

2,看输出格式有没有对某个变量排序处理,有的话就加上排序处理。

3,把学生信息存入MAP容器里(学生的学号为对照值)。

4,写入.xml文件。

一般是先写一个大标签,再写小的,一层套一层。当一个标签里有很多小标签时,就一个一个小标签加进去。

输入.xml文件也是直接套用就好了。

//创建学号标签并加入到学生标签内
			Element e_stuid=new Element("学号");
			e_stuid.setText(m.get(s).getStu_id());
			student.addContent(e_stuid);
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class Main {
//readFile函数,一行一行读取.txt文件里的数据,直接引用就好了
	private static ArrayList<String> readFile(String filename){
		//设置返回结果
		ArrayList<String> result=new ArrayList<>();
	    /* 读取文件*/
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename))));
            String lineTxt = null;
            while ((lineTxt = br.readLine()) != null) {
                result.add(lineTxt);
            }
            br.close();
        } catch (Exception e) {
           e.printStackTrace();
        }
       // System.out.println("姓名:" );  
		return result;
		
	}
	
	//将信息写入xml文件
	private static void writeFile(Map<String,student> m,String filename){
		//创建文档
		Document document=new Document();
		//创建根元素,即students标签
		Element students=new Element("s1tudents");
		//根元素加入到document中
		document.addContent(students);
		Element student;
		
		for(String s:m.keySet()){//map.keySet()获取map全部的key值
			//创建学生标签
			student=new Element("s2tudent");
			//创建学号标签并加入到学生标签内
			Element e_stuid=new Element("学号");
			e_stuid.setText(m.get(s).getStu_id());
			student.addContent(e_stuid);
			
			//创建姓名标签并加入到学生标签内
			Element e_stuname=new Element("姓名");
			e_stuname.setText(m.get(s).getStu_name());
			student.addContent(e_stuname);
			
			//循环创建课程标签并加入到学生标签内
			for(course c:m.get(s).getCourses()){
				Element e_course=new Element("课程");
//输出的格式是<课程 课程名="操作系统">xxxxxx</课程>
				e_course.setAttribute("课程名",c.getCourseName());//在e_course对象中加入名为课程名的属性并附值为c.getCourseName()的值
				e_course.setText(c.getScore()+"");//<姓名>张三</姓名> 就是填中间的那个名字
				student.addContent(e_course);//把上面那句话显示出来
			}
			
			//将单个学生标签加入到根标签
			students.addContent(student);
		}	
		//设置xml输出格式
                Format format = Format.getPrettyFormat();
                // format.setEncoding("utf-8");//设置编码
                //format.setIndent("    ");//设置缩进
               //得到xml输出流
               XMLOutputter out = new XMLOutputter(format);
               //把数据输出到xml中
               try {
			out.output(document, new FileOutputStream(filename));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	
	//用来测试输出map
	private static void showMap(Map<String,student> m){
		for(String s:m.keySet()){
			System.out.println(m.get(s).getStu_id()+" "+m.get(s).getStu_name()+"   ");
			for(course c:m.get(s).getCourses()){
				System.out.println(c.getCourseName()+"   "+c.getScore());
			}
			System.out.println("---------------------");
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//读取文件获取字符数组
		ArrayList<String> strs=readFile("D:\\test.txt");
		//因为要对学号进行降序排序,并且一个学生id对应学生类,使用Trrmap存储信息,java中TreeMap元素之间是有序的
//所以如果没有顺序要求,这个就不要写
		Map<String, student> students=new TreeMap<>(new Comparator<String>() {
			//自定义比较器,TreeMap默认为升序
			@Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				//降序
				return o2.compareTo(o1);
			}
		});
		//定义字符数组
		String []info;
		//学生学号
		String stu_id;
		//System.out.println( strs.size());  
		for(int i=0;i<strs.size();i++){
			
			info=strs.get(i).split(",");//根据逗号进行字符串分割信息
			stu_id=info[0];//获取学号
			//System.out.println( "i="+i+"    "+strs.size()); 
			if(!students.containsKey(stu_id)){//containKey 判断Map集合对象中是否包含指定的键名
				//如果map中还未有学号,创建学生对象
				student newstu=new student(stu_id, info[1], new ArrayList<course>());
				//课程数组加入课程
				newstu.getCourses().add(new course(info[2], Integer.parseInt(info[3])));//Integer.parseInt()方法将一个字符串转换成int型
				//加入到map
				students.put(stu_id, newstu);
			}
			else{
				//如果map中已有对象则加入对应学生的课程中即可
				students.get(stu_id).getCourses().add(new course(info[2], Integer.parseInt(info[3])));
			}
		}
		//showMap(students);
		//写入xml文件
		writeFile(students, "D:\\output.xml");
	}
 

}

 

运行出来的结果截图

2,输入:

E001,张三,22,A112,北京现代,2011-3-26 10:13:10,邳州,万胜围,20
E020,李四,32,A345,上海大众,2011-3-22 11:10:22,体育西路,客村,30
E212,王五,23,A213,美国宝马,2011-3-26 08:15:14,官洲,大学城南,10

Emp.java

import java.util.ArrayList;
public class Emp {
	private String EID;   //学生id
	private String EName; //学生姓名
	private int  Age;
	private ArrayList<Bus> Buss;  //课程
	
	
	public Emp(String eID, String eName, int age, ArrayList<Bus> buss) {
		super();
		EID = eID;
		EName = eName;
		Age = age;
		Buss = buss;
	}
	public String getEID() {
		return EID;
	}
	public void setEID(String eID) {
		EID = eID;
	}
	public String getEName() {
		return EName;
	}
	public void setEName(String eName) {
		EName = eName;
	}
	public int getAge() {
		return Age;
	}

	public void setAge(int age) {
		Age = age;
	}
	public ArrayList<Bus> getBuss() {
		return Buss;
	}
	public void setBuss(ArrayList<Bus> buss) {
		Buss = buss;
	}
	
	
	


}

Bus.java


public class Bus {
	private String BID;//课程名
	private String Pro;//生产是商
	private String Time;
	private String Sta;
	private String End;
	private int Dis;
	
	public String getBID() {
		return BID;
	}
	public void setBID(String bID) {
		BID = bID;
	}
	public String getPro() {
		return Pro;
	}
	public void setPro(String pro) {
		Pro = pro;
	}
	public String getTime() {
		return Time;
	}
	public void setTime(String time) {
		Time = time;
	}
	public String getSta() {
		return Sta;
	}
	public void setSta(String sta) {
		Sta = sta;
	}
	public String getEnd() {
		return End;
	}
	public void setEnd(String end) {
		End = end;
	}
	public int getDis() {
		return Dis;
	}
	public void setDis(int dis) {
		Dis = dis;
	}
	public Bus(String bID, String pro, String time, String sta, String end, int dis) {
		super();
		BID = bID;
		Pro = pro;
		Time = time;
		Sta = sta;
		End = end;
		Dis = dis;
	}
	
}

 

 Main.java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class Main {
	private static ArrayList<String> readFile(String filename){
		//设置返回结果
		ArrayList<String> result=new ArrayList<>();
	    /* 读取文件*/
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename))));
            String lineTxt = null;
            while ((lineTxt = br.readLine()) != null) {
                result.add(lineTxt);
            }
            br.close();
        } catch (Exception e) {
           e.printStackTrace();
        }
       // System.out.println("姓名:" );  
		return result;
		
	}
	
	//将信息写入xml文件
	private static void writeFile(Map<String,Emp> m,String filename){
		//创建文档
		Document document=new Document();
		//创建根元素,即students标签
		Element Emps=new Element("Emps");
		//根元素加入到document中
		document.addContent(Emps);
		Element Emp;
		
		for(String s:m.keySet()){//map.keySet()获取map全部的key值
			//创建学生标签
			Emp=new Element("emp");
			//创建学号标签并加入到学生标签内
			Element EID=new Element("员工号");
			EID.setText(m.get(s).getEID());
			Emp.addContent(EID);
			
			//创建姓名标签并加入到学生标签内
			Element EName=new Element("员工姓名");
			EName.setText(m.get(s).getEName());
			Emp.addContent(EName);
			
			Element Age=new Element("年龄");
			Age.setText(m.get(s).getAge()+"");
			Emp.addContent(Age);
			
			//循环创建课程标签并加入到学生标签内
			for(Bus c:m.get(s).getBuss()){
				Element Buss=new Element("车辆");
//输出的格式是<课程 课程名="操作系统">xxxxxx</课程>
				
				
				Element BID=new Element("车牌号");
				BID.setText(c.getBID());
				Buss.addContent(BID);
				
				Element Pro=new Element("生产厂商");
				Pro.setText(c.getPro());
				Buss.addContent(Pro);
				
				Element Time=new Element("发车时间");
				Time.setText(c.getTime());
				Buss.addContent(Time);
				Element Bus=new Element("距离");
				Bus.setAttribute("始发站",c.getSta());
				//在e_course对象中加入名为课程名的属性并附值为c.getCourseName()的值
				Bus.setAttribute("终点站",c.getEnd());
				Bus.setText(c.getDis()+"");//<姓名>张三</姓名> 就是填中间的那个名字
				Buss.addContent(Bus);//把上面那句话显示出来
				Emp.addContent(Buss);
				/*Element Sta=new Element("始发站");
				Sta.setText(c.getSta());
				Bus.addContent(Sta);
				
				Element End=new Element("终点站");
				End.setText(c.getEnd());
				Bus.addContent(End);
				
				Element Dis=new Element("距离");
				Dis.setText(c.getDis());
				Bus.addContent(Dis);*/
				
			}
			
			//将单个学生标签加入到根标签
			Emps.addContent(Emp);
		}	
		//设置xml输出格式
                Format format = Format.getPrettyFormat();
                // format.setEncoding("utf-8");//设置编码
                //format.setIndent("    ");//设置缩进
               //得到xml输出流
               XMLOutputter out = new XMLOutputter(format);
               //把数据输出到xml中
               try {
			out.output(document, new FileOutputStream(filename));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	
	//用来测试输出map
	/*private static void showMap(Map<String,Emp> m){
		for(String s:m.keySet()){
			System.out.println(m.get(s).getStu_id()+" "+m.get(s).getStu_name()+"   ");
			for(Bus c:m.get(s).getCourses()){
				System.out.println(c.getCourseName()+"   "+c.getScore());
			}
			System.out.println("---------------------");
		}
	}*/
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//读取文件获取字符数组
		ArrayList<String> strs=readFile("D:\\复试复习\\机试\\2011_1\\in.txt");
		//因为要对学号进行降序排序,并且一个学生id对应学生类,使用Trrmap存储信息,java中TreeMap元素之间是有序的
//所以如果没有顺序要求,这个就不要写
		Map<String, Emp> Emps=new TreeMap<>(new Comparator<String>() {
			//自定义比较器,TreeMap默认为升序
			@Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				//降序
				return o2.compareTo(o1);
			}
		});
		//定义字符数组
		String []info;
		//学生学号
		String EID;
		//System.out.println( strs.size());  
		for(int i=0;i<strs.size();i++){
			
			info=strs.get(i).split(",");//根据逗号进行字符串分割信息
			EID=info[0];//获取学号
			//System.out.println( "i="+i+"    "+strs.size()); 
			if(!Emps.containsKey(EID)){//containKey 判断Map集合对象中是否包含指定的键名
				//如果map中还未有学号,创建学生对象
				Emp newEmp=new Emp(EID, info[1], Integer.parseInt(info[2]),new ArrayList<Bus>());
				//课程数组加入课程
				newEmp.getBuss().add(new Bus(info[3], info[4],info[5],info[6],info[7],Integer.parseInt(info[8])));//Integer.parseInt()方法将一个字符串转换成int型
				//加入到map
				Emps.put(EID, newEmp);
			}
			else{
				//如果map中已有对象则加入对应学生的课程中即可
				Emps.get(EID).getBuss().add(new Bus(info[3], info[4],info[5],info[6],info[7],Integer.parseInt(info[8])));
			}
		}
		//showMap(Emps);
		//写入xml文件
		writeFile(Emps, "D:\\复试复习\\机试\\2011_1\\output.xml");
	}
 


}

 

运行结果截图

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值