public class StudentData implements Comparable<StudentData> { //学生节点类
private String id; //学号
private String name; //姓名
private double math; //高数成绩
private double english; //大英成绩
private double java; //java成绩
private double sum; //总分
@Override
public String toString() {
return "学号:" + id + ", 姓名:" + name + ", 高数成绩:" + math
+ ", 大英成绩:" + english + ", JAVA成绩:" + java + ", 总分:" + sum
+ "";
}
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 double getMath() {
return math;
}
public void setMath(double math) {
this.math = math;
}
public double getEnglish() {
return english;
}
public void setEnglish(double english) {
this.english = english;
}
public double getJava() {
return java;
}
public void setJava(double java) {
this.java = java;
}
public double getSum() {
return sum;
}
public void setSum(double sum) {
this.sum = sum;
}
@Override
public int compareTo(StudentData o) {
// TODO 自动生成的方法存根
if(this.sum<o.sum)
return 1;
else if(this.sum>o.sum)
return -1;
else
return 0;
}
}
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import org.junit.Test;
public class Student { //学生操作类
private final String STU_ID="学号"; //用于下面文件操作
private final String STU_NAME="姓名";
private final String STU_MATH="高数成绩";
private final String STU_ENGLISH="大英成绩";
private final String STU_JAVA="JAVA成绩";
//private final String STU_SUM="总分";
ArrayList<StudentData> ar=new ArrayList<StudentData>();//存放学生成绩信息的容器数组对象
@Test
public void add() { //添加学生信息
Scanner sc=new Scanner(new BufferedInputStream(System.in));
System.out.println("请依次输入学生的信息:");
StudentData node=new StudentData();
System.out.println("请输入学生的学号:");
node.setId(sc.next());
System.out.println("请输入学生的姓名:");
node.setName(sc.next());
System.out.println("请输入学生的高数成绩:");
node.setMath(sc.nextDouble());
System.out.println("请输入学生的大英成绩:");
node.setEnglish(sc.nextDouble());
System.out.println("请输入学生的java成绩:");
node.setJava(sc.nextDouble());
node.setSum(node.getEnglish()+node.getJava()+node.getMath());
ar.add(node);
System.out.println("------------------你输入的学生成绩是:--------------");
System.out.println(node);
System.out.println("----请选择是否继续输入学生成绩-----1是继续输入----否则退出");
if(sc.nextInt()==1){
add();
}else
return;
}
public void delete(){ //删除学生信息
Scanner sc=new Scanner(System.in);
System.out.println("请选择要删除的学号:");
String id=sc.next();
for(int i=0;i<ar.size();i++){
if(ar.get(i).getId().equals(id)){
System.out.println(ar.get(i));
System.out.println("请选择是否删除该学生的信息---------1:确定删除--2:取消操作");
int j=sc.nextInt();
if(j==1){
ar.remove(i);
System.out.println("删除成功");
return;
}
if(j==2){
System.out.println("退出------------");
return;
}
}
}
System.out.println("不存在该学生");
return ;
}
public void rank(){ //对学生成绩从高到低进行排序
ArrayList<StudentData> br=new ArrayList<StudentData>(ar);
Scanner sc=new Scanner(System.in);
System.out.println("请选择排序方式-----------1:按总分排序,2:按大英成绩排序");//其他排序情况都差不多,把数据改了就行
int i=sc.nextInt();
int j=1;
switch(i){
case 1:{
Collections.sort(br);
for(StudentData stu:br){
System.out.println("排名:"+j+" "+stu);
j++;
}
break;
}
case 2:{
Collections.sort(br, new Comparator<StudentData>(){
@Override
public int compare(StudentData o1, StudentData o2) {
// TODO 自动生成的方法存根
if(o1.getEnglish()<o2.getEnglish())
return 1;
else if(o1.getEnglish()>o2.getEnglish())
return -1;
else
return 0;
}});
for(StudentData stu:br){
System.out.println("排名:"+j+" "+stu);
j++;
}
break;
}
}
br.clear();
}
public void seek(){ //查找学生信息
Scanner sc=new Scanner(System.in);
System.out.println("请输入查询方式--------1:按学号查询,2:按姓名查询,3:退出");
int i=sc.nextInt();
switch(i){
case 1:{
System.out.println("请输入查找的学号:");
String s=sc.next();
for(StudentData stu:ar){
if(stu.getId().equals(s)){
System.out.println(stu);
return;
}
}
System.out.println("没有找到该学生");
}
case 2:{
System.out.println("请输入查找的姓名:");
String s=sc.next();
for(StudentData stu:ar){
if(stu.getName().equals(s)){
System.out.println(stu);
return;
}
}
System.out.println("没有找到该学生");
}
case 3:
return;
}
}
public void out(){ //遍历输出学生信息
for(StudentData node:ar){
System.out.println(node);
}
System.out.println("----------------END---------------------");
}
public void fileIn(){ //将线性表中的学生对象写入到文件
File file = new File(System.getProperty("user.dir")+"\\resources\\student.txt");
try {
BufferedWriter writer=new BufferedWriter(new FileWriter(file));
for(StudentData stu:ar){
writer.write(stu.toString()); //注意是写入学生对象的toString()方法
writer.newLine();//每写入一个对象数据,就转行,为下面BufferedReader读取一行数据
}
writer.flush();
writer.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public void fileOut() throws IOException{ //从文件中写入数据到线性表中
File file = new File(System.getProperty("user.dir")+"\\resources\\student.txt");//创建存放学生信息的文件对象
try {
BufferedReader reader=new BufferedReader(new FileReader(file));//选择用缓冲输出流进行操作是因为缓冲流能够读取一行字符串,便于操作
String stu;
while((stu=reader.readLine())!=null){ //当输出流读取的行不为空时
StudentData node=new StudentData();//创建学生对象
String[] fieldArr = stu.split(", ");//将读取的字符串按“, ”分成字符数组
for(String fil:fieldArr){
String[] keyValue=fil.split(":");
if(keyValue[0].equals(STU_ID)){
node.setId(keyValue[1]);
}else if(keyValue[0].equals(STU_NAME)){
node.setName(keyValue[1]);
}else if(keyValue[0].equals(STU_MATH)){
node.setMath( Double.parseDouble( keyValue[1]));
}else if(keyValue[0].equals(STU_ENGLISH)){
node.setEnglish(Double.parseDouble(keyValue[1]));
}else if(keyValue[0].equals(STU_JAVA)){
node.setJava(Double.parseDouble(keyValue[1]));
}else{
node.setSum(Double.parseDouble(keyValue[1]));
}
}
ar.add(node);
}
reader.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.util.Scanner;
public class TestStudent {
public static void main(String[] args) throws IOException {
Student st=new Student();
Scanner sc=new Scanner(System.in);
st.fileOut();
System.out.println("---------学生成绩管理系统---------");
System.out.println("---------1.添加学生信息-----------");
System.out.println("---------2.显示学生信息-----------");
System.out.println("---------3.查找学生信息-----------");
System.out.println("---------4.对学生信息排序---------");
System.out.println("---------5.删除学生信息-----------");
do{
switch(sc.nextInt()){
case 1:
st.add();
st.fileIn();
break;
case 2:
st.out();
break;
case 3:
st.seek();
break;
case 4:
st.rank();
break;
case 5:
st.delete();
st.out();
st.fileIn();
break;
default:
sc.close();
return;
}
}while(true);
}
}
运行结果大致如下,文件存储的数据也都一样
---------学生成绩管理系统---------
---------1.添加学生信息-----------
---------2.显示学生信息-----------
---------3.查找学生信息-----------
---------4.对学生信息排序---------
---------5.删除学生信息-----------
2
学号:00045, 姓名:灵风, 高数成绩:78.0, 大英成绩:41.0, JAVA成绩:98.0, 总分:217.0
学号:00061, 姓名:阿雷, 高数成绩:74.0, 大英成绩:87.0, JAVA成绩:98.0, 总分:259.0
学号:10056, 姓名:张帅, 高数成绩:78.0, 大英成绩:65.0, JAVA成绩:12.0, 总分:155.0
学号:10548, 姓名:张磊度, 高数成绩:85.0, 大英成绩:86.0, JAVA成绩:87.0, 总分:258.0
学号:04639, 姓名:张姐, 高数成绩:74.0, 大英成绩:31.0, JAVA成绩:96.0, 总分:201.0
学号:00065, 姓名:艾克, 高数成绩:74.0, 大英成绩:71.0, JAVA成绩:30.0, 总分:175.0
学号:30025, 姓名:刘海, 高数成绩:21.0, 大英成绩:95.0, JAVA成绩:25.0, 总分:141.0
学号:20052, 姓名:张拉, 高数成绩:91.0, 大英成绩:96.0, JAVA成绩:100.0, 总分:287.0
学号:00887, 姓名:二营长, 高数成绩:30.0, 大英成绩:35.0, JAVA成绩:88.0, 总分:153.0
学号:01256, 姓名:刘哔, 高数成绩:28.0, 大英成绩:65.0, JAVA成绩:61.0, 总分:154.0
学号:03335, 姓名:刘备, 高数成绩:88.0, 大英成绩:91.0, JAVA成绩:20.0, 总分:199.0
学号:06772, 姓名:阿隆, 高数成绩:62.5, 大英成绩:85.5, JAVA成绩:85.0, 总分:233.0
----------------END---------------------