学生信息的添加与查询
Time Limit: 1000MS
Memory Limit: 65536KB
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 { // 读入学生数量和字段数量 Scanner sc = new Scanner(System.in); int stuCount = sc.nextInt(); int fieldCount = sc.nextInt(); // 读入字段名称 String[] fieldsName = new String[fieldCount]; for (int i = 0; i < fieldCount; i++) { fieldsName[i] = sc.next(); } // 读入学生的记录信息,加入到映射表中 Map<String, Student> map = new HashMap<String, Student>(); for (int i = 0; i < stuCount; i++) { Student stu = new Student(); stu.setId(sc.next()); stu.setName(sc.next()); String birthday = sc.next(); Date birth = strToDate(birthday); stu.setBirthday(birth); stu.setScore(sc.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(fieldsName[0] + ":" + stu.getId() + "\t"); System.out.print(fieldsName[1] + ":" + stu.getName() + "\t"); System.out.print(fieldsName[2] + ":" + dateToStr(stu.getBirthday()) + "\t"); System.out.println(fieldsName[3] + ":" + stu.getScore()); } sc.close(); } // 将字符串转换成日期 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; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", birthday=" + birthday + ", score=" + score + "]"; } }