简单的学生成绩管理系统JAVA版带文件操作

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---------------------


猜你喜欢

转载自blog.csdn.net/plank__123/article/details/80600536
今日推荐