Problem Description
设计一个学生添加和查询的系统,从键盘读入学生的数据,然后再从屏幕显示出来。
Input
第一行有2个整数N和M,其中:N——学生数量,M——学生属性数量;
第二行有M个字符串,表示学生的属性名称,其中第1个属性id表示关键字;其中各字段属性的数据类型是确定的。
接下来有N行M列数据,分别表示学生各种属性的值,关键字相同的记录代表一个学生(后来读入的信息覆盖前面读入数据)
第二行有M个字符串,表示学生的属性名称,其中第1个属性id表示关键字;其中各字段属性的数据类型是确定的。
接下来有N行M列数据,分别表示学生各种属性的值,关键字相同的记录代表一个学生(后来读入的信息覆盖前面读入数据)
Output
输出所有学生的属性及数据。(每行的列数据之间用‘\t’进行分隔)
Example Input
5 4 id name birthday score 0001 Mike 1990-05-20 98.5 0002 John 1992-05-20 67 0003 Hill 1994-05-02 36.5 0004 Christ 1996-05-20 86.5 0001 Jack 1998-05-20 96
Example Output
id:0001 name:Jack birthday:1998_5_20 score:96.0 id:0002 name:John birthday:1992_5_20 score:67.0 id:0003 name:Hill birthday:1994_5_2 score:36.5 id:0004 name:Christ birthday:1996_5_20 score:86.5
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
String[] type = new String[m];
for(int i = 0; i < m; i++)
type[i] = in.next();
// 读入学生的记录信息,加入到映射表中
Map<String, Student> map = new HashMap<String, Student>();
for(int i = 0; i < n; i++){
Student stu = new Student();
stu.setId(in.next());
stu.setName(in.next());
String birthday = in.next();
Date birth = strToDate(birthday);
stu.setBirthday(birth);
stu.setScore(in.nextFloat());
map.put(stu.getId(), stu);
}
// 得到链表
List<Map.Entry<String, Student>> infoIds = new ArrayList<Map.Entry<String, Student>>(
map.entrySet());
// 排序
Collections.sort(infoIds, new Comparator<Map.Entry<String, Student>>() {
public int compare(Entry<String, Student> o1,
Entry<String, Student> o2) {
return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
// 排序后输出
for(int i = 0; i < infoIds.size(); i++){
Student stu = infoIds.get(i).getValue();
System.out.print(type[0] + ":" + stu.getId() + "\t");
System.out.print(type[1] + ":" + stu.getName() + "\t");
System.out.print(type[2] + ":" + dateToStr(stu.getBirthday())
+ "\t");
System.out.println(type[3] + ":" + stu.getScore());
}
}
// 将字符串转换成日期
private static Date strToDate(String birthday) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(birthday);
return date;
}
// 将日期转换成字符串
private static String dateToStr(Date date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_M_d");
String strDate = sdf.format(date);
return strDate;
}
}
class Student{
String id;
String name;
Date birthday;
float score;
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 Date getBirthday(){
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String toString(){
return "Student [id=" + id + ", name=" + name + ", birthday="
+ birthday + ", score=" + score + "]";
}
}