学生信息的添加与查询
Time Limit: 1000 ms
Memory Limit: 65536 KiB
Problem Description
设计一个学生添加和查询的系统,从键盘读入学生的数据,然后再从屏幕显示出来。
Input
第一行有2个整数N和M,其中:N——学生数量,M——学生属性数量;
第二行有M个字符串,表示学生的属性名称,其中第1个属性id表示关键字;其中各字段属性的数据类型是确定的。
接下来有N行M列数据,分别表示学生各种属性的值,关键字相同的记录代表一个学生(后来读入的信息覆盖前面读入数据)
第二行有M个字符串,表示学生的属性名称,其中第1个属性id表示关键字;其中各字段属性的数据类型是确定的。
接下来有N行M列数据,分别表示学生各种属性的值,关键字相同的记录代表一个学生(后来读入的信息覆盖前面读入数据)
Output
输出所有学生的属性及数据。(每行的列数据之间用‘\t’进行分隔)
Sample 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
Sample 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
Code
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
String s1 = sc.nextLine();
String s2 = sc.nextLine();
SimpleDateFormat pattern1 = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Student> map = new HashMap<String, Student>();
for (int i = 0; i < n; i++) {
String id = sc.next();
Student s = new Student(sc.next(), pattern1.parse(sc.next()), sc.nextFloat());
map.put(id, s);
}
LinkedList<String> list = new LinkedList<String>(map.keySet());
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.print("id:" + list.get(i));
System.out.println(map.get(list.get(i)));
}
sc.close();
}
}
class Student {
String name;
Date birthday;
float score;
SimpleDateFormat pattern2 = new SimpleDateFormat("yyyy_M_d");
Student(String n, Date b, float s) {
name = n;
birthday = b;
score = s;
}
@Override
public String toString() {
return "\tname:" + name + "\tbirthday:" + pattern2.format(birthday) + "\tscore:" + score;
}
}
反思:
Java的集合框架练习。用HashMap储存学生的信息,因为要按照id排序输出学生信息,所以把map的keySet()放进链表list中,对list进行排序,再通过map的键值对输出学生信息。