· 属性:姓名,年龄,性别,成绩(double),学号
· 属性全部私有化,并提供访问方法
· 重写toString()
2、将你拿到的score.txt从桌面上用代码拷贝到工程的根目录下(5分)
3、读取工程根目录的score.txt中的数据,并将数据存入集合 ArrayList<Student> 中 (5分)
4、以学号为键,以姓名为值,存入一个HashMap<String, String>中,并遍历输出这个Map中的所有的元素 (5分)
5、你拿到成绩后,起了点歪心思,想去修改这个集合中的内容 (8分)
5.1 将 “周杰伦” 的姓名改为 “小公举”,并将他的成绩修改为80分
5.2 林志玲的性别是女的
5.3 把所有人的学号中的2都换成6
5.4 把修改后的集合中的内容输出
6、将修改后的集合中的学生按照成绩从高到低进行排序,成绩相同的按照学号从小到大排序(7分)
7、判断项目根目录下有没有result文件夹,如果没有,用代码新建一个文件夹。并将最后的ArrayList<Student>中的内容写入result/score-new.txt中 (5分)
资料
学号:JY2016020,姓名:周杰伦,性别:男,成绩:60.0
学号:JY2016085,姓名:林志玲,性别:男,成绩:75.0
学号:JY2016504,姓名:张全蛋,性别:女,成绩:73.0
学号:JY2016009,姓名:岳云鹏,性别:男,成绩:80.0
学号:JY2016775,姓名:Papi酱,性别:女,成绩:75.0
学号:JY2016325,姓名:刘静,性别:女,成绩:100.0
学号:JY2016560,姓名:尼古拉斯·赵四,性别:男,成绩:90.0
学号:JY2016802,姓名:AngleBaby,性别:女,成绩:85.0
解析:
import java.io.*;
import java.util.*;
/*
* 设计一个学生类Student (5分)
· 属性:姓名,年龄,性别,成绩(double),学号
· 属性全部私有化,并提供访问方法
· 重写toString()
*/
class Student implements Comparable<Student>
{
private String name;
private int age;
private char gender;
private double grade;
private String id;
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void setGender(char gender)
{
this.gender=gender;
}
public char getGender()
{
return gender;
}
public void setGrade(double grade)
{
this.grade=grade;
}
public double getGrade()
{
return grade;
}
public void setId(String id)
{
this.id=id;
}
public String getId()
{
return id;
}
@Override
public String toString()
{
return "Student [name=" + name + ", gender=" + gender + ", grade=" + grade + ", id=" + id
+ "]";
}
@Override
public int compareTo(Student o) {
//return 0;
if(o.grade==this.grade)
{
int result=this.id.compareTo(o.id);
return result;
//return this.id-o.id;
}
else if( o.grade>this.grade) return 1;
else return -1;
}
//public void setGender(String string, String string2) {
//}
public Student next() {
return null;
}
/*
@Override
public int compareTo(Student o)
{
if(this.grade==o.grade)
{
return this.id-o.id;
}
else if(this.grade > o.grade) return 1;
else return -1;
}
}
*/
}
public class TestKaoshi
{
public static void main(String[] args)
{
CopyTools.copy("C:/Users/Administrator/Desktop/考试题/score.txt", "src/Test/score.txt");
/*
* 读取工程根目录的score.txt中的数据,并将数据存入集合 ArrayList<Student> 中
*/
ArrayList<Student> list=new ArrayList<>();
HashMap<String, String> map= new HashMap<>();
//Student s=new Student();
File file=new File("src/Kaoshi/score.txt");
BufferedReader reader=null;
try
{
reader=new BufferedReader(new FileReader(file));
String str=null;
while((str=reader.readLine())!=null)
{
Student ss=new Student();
String [] str1=str.split(",");
for (int i = 0; i < str1.length; i++)
{
String[] str2=str1[i].split(":");
if ("学号".equals(str2[0]))
{
ss.setId(str2[1]);
}
else if("姓名".equals(str2[0]))
{
ss.setName(str2[1]);
}
else if("性别".equals(str2[0]))
{
ss.setGender(str2[1].charAt(0));
}
else
{
ss.setGrade(Double.parseDouble(str2[1].substring(0, str2[1].length()-1)));
//s.setgrade(str2[1]);
}
}
list.add(ss);
//map.put(s.getId(),s.getName());
}
System.out.println(list);
// System.out.println(map);
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 以学号为键,以姓名为值,存入一个HashMap<String, String>中,并遍历输出这个Map中的所有的元素
*/
//ArrayList<Student> list = new ArrayList<>();
for (Student student:list )
{
map.put(student.getId(),student.getName());
}
Set<Map.Entry<String, String>> set = map.entrySet();
for (Map.Entry<String, String> entry: set)
{
//String key = entry.getKey();
//String value = entry.getValue();
//System.out.println(key + " = " + value);
System.out.println(entry.getKey()+","+entry.getValue());
}
/*
* 你拿到成绩后,起了点歪心思,想去修改这个集合中的内容 (8分)
5.1 将 “周杰伦” 的姓名改为 “小公举”,并将他的成绩修改为80分
5.2 林志玲的性别是女的
5.3 把所有人的学号中的2都换成6
5.4 把修改后的集合中的内容输出
*/
ListIterator<Student> it=list.listIterator();
Student s1=new Student();
while (it.hasNext()) {
s1= it.next();
if ("周杰伦".equals(s1.getName())) {
s1.setName("小公举");
s1.setGrade(80);
}
if ("林志玲".equals(s1.getName())) {
s1.setGender('女');
}
if (s1.getId().contains("2")) {
s1.setId(s1.getId().replace("2", "6"));
}
System.out.println(s1.toString());
}
/*
* 将修改后的集合中的学生按照成绩从高到低进行排序,成绩相同的按照学号从小到大排序
*/
TreeSet<Student> tmp = new TreeSet<>();
tmp.addAll(list);
list.clear();
list.addAll(tmp);
System.out.println(list);
/*
* 判断项目根目录下有没有result文件夹,如果没有,用代码新建一个文件夹。并将最后的ArrayList<Student>中的内容写入result/score-new.txt中 (5分)
*/
File f= new File("result");
if (!(f.exists()))
{
f.mkdir();
}
File file2 =new File("src/Test/score-new.txt");
BufferedWriter writer=null;
try
{
writer = new BufferedWriter(new FileWriter(file2));
for(Student sss:list)
{
writer.write("学号:"+sss.getId());
writer.write(",");
writer.write("姓名:"+sss.getName());
writer.write(",");
writer.write("性别:"+sss.getGender());
writer.write(",");
writer.write("成绩:"+sss.getGrade());
writer.newLine();
writer.flush();
}
System.out.println("书写完成");
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
/*
* 将你拿到的score.txt从桌面上用代码拷贝到工程的根目录下
*/
class CopyTools
{
static void copy(String source, String target)
{
BufferedInputStream in=null;
BufferedOutputStream out=null;
File sourcefile=new File(source);
File targetfile=new File(target);
try
{
in=new BufferedInputStream(new FileInputStream(sourcefile));
out=new BufferedOutputStream(new FileOutputStream(targetfile));
byte[] contents=new byte[1024];
int length=0;
while((length=in.read(contents))!=-1)
{
out.write(contents,0,length);
out.flush();
}
System.out.println("拷贝完成");
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
in.close();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}