简单的学生成绩管理系统

实验3 (学生成绩管理系统)持有对象

实验目的

掌握Java中数组的基本概念。掌握Java的对象容器类库,能够运用对象容器类持有对象,从而表达实体的复杂属性。

实验任务

1、开发一个学生成绩管理系统,首先定义一个学生信息类,用来表示单个学生的姓名和成绩,然后利用数组管理一个班级的所有学生的信息,并实现相应的输入、输出、查找、排序等功能。

 

import java.io.*;
import java.util.Scanner;

public class studentmanage {

	public static class StudentInfo{
		private String stdName;//学生姓名
		private double score;  //学生成绩
		
		public StudentInfo(){}
		
		public StudentInfo(String name, double s){
			this.stdName = name;
			this.score = s;
		}
		
		public String getStdName() {
			return stdName;
		}	
		public void setStdName(String stdName){
			this.stdName = stdName;
		}

		public double getScore() {
			return score;
		}
		public void setScore(double score){
			this.score = score;
		}
		
		public void inputStdInfo(){
			System.out.println("请输入学生信息:");
			Scanner scanner = new Scanner(System.in);
			System.out.print("姓名:");
			stdName = scanner.nextLine();
			System.out.print("成绩:");
			score = scanner.nextDouble();
		}
		
		public void outputStdInfo(){
			System.out.print(this.stdName + ":" + this.score + "\n");
		}
	}

	// 一个班级的学生成绩类
	public static class ScoreManager{
		// 全班同学的成绩
		private StudentInfo[] stdScores;
		
		// 构造方法,参数s中记录了全班同学的成绩
		public ScoreManager(int stdnum){
			// 将参数s中的成绩清单复制到属性scores
			stdScores = new StudentInfo[stdnum]; 
			for (int index = 0; index < stdScores.length; index++){
				stdScores[index] = new StudentInfo();
			}
		}
		
		//输入全班学生的信息
		public void inputClassInfo(){
			int index = 0; 
			while (index < stdScores.length) {
				stdScores[index].inputStdInfo();
				if (stdScores[index].getScore()<0|| stdScores[index].getScore()>100) {
					System.out.println("输入的成绩不在合理范围之内!"); 
					continue;
				}
				index = index + 1;
			}
		}
		
		// 返回全班的学生信息清单
		public StudentInfo[] getClassInfo(){ 
			return stdScores;
		}
		
		// 取第sno位学生的信息,sno超出范围则返回负数
		public StudentInfo getScore(int sno){ 
			if (sno < 1 || sno > stdScores.length) 
				return null; 
			
			return stdScores[sno-1];
		}

		// 查找有成绩为score的学生则返回true,否则返回false
		public StudentInfo findByScore(double score){
			for (int index = 0; index < stdScores.length; index++) {
				if (stdScores[index].getScore() == score)
					return stdScores[index];
			}
			return null;
		}

		// 统计low至high之间成绩段的学生人数,分数low和high包括在内
		public int count(double low, double high){
			//保证low<high
			if(low > high){
				double temp = low;
				low = high;
				high = temp;
			}
			int result = 0;
			for (int index = 0; index < stdScores.length; index++) {
				if (stdScores[index].getScore() >= low 
						&& stdScores[index].getScore() <= high)
					result++;
			}
			return result;
		}
		
		// 返回全班的学生人数
		public int countAll(){
			return stdScores.length;
		}
		
		// 将学生成绩从高分到低分排序(采用简单的冒泡排序算法)
		public void sort(){
			// 从头到尾扫描整个数组,逐段将数据冒泡排序
			for (int index = 0; index < stdScores.length - 1; index++) {
				// 将index到scores.length - 1中的最大数冒泡到最上面(即最左)
				for (int ptr = stdScores.length - 1; ptr > index; ptr--) {
					// 如果位置ptr的下一元素比ptr位置的元素更大则交换两个元素
					if (stdScores[ptr].getScore() > stdScores[ptr - 1].getScore()) {
						StudentInfo temp = stdScores[ptr];
						stdScores[ptr] = stdScores[ptr-1];
						stdScores[ptr-1] = temp;
					}
				}
			}
		}
		
		
		// 输入全班学生的人数,不合法则返回0 
		public static   int inputNumber(){ 
			int num;
			System.out.print("请输入全班学生的人数:"); 
			try {
				BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
				String inputLine = in.readLine();
				num = Integer.valueOf(inputLine).intValue();
			} catch (Exception exc) {
				System.out.println("学生人数输入错误!"); 
				return 0;
			}
			if (num <= 0 || num > 1000) {
				System.out.println("输入的学生人数不合理!"); 
				return 0;
			}
			return num;
		}
		
		// 输出全班学生的成绩清单
		public void output(){
			System.out.println("学生成绩信息为:");
			for (int index = 0; index < stdScores.length; index++) {
				stdScores[index].outputStdInfo();
			}
		}
		
		// 主程序
		public static void main(String[] args){
			// 提示用户输入全班学生人数
			int stdNum = ScoreManager.inputNumber();
			// 创建学生成绩清单数组并输入全班学生的成绩		
			ScoreManager sManager = new ScoreManager(stdNum);
			sManager.inputClassInfo();		
			// 显示第5位同学的成绩
			System.out.println("第5位同学的成绩为:" + sManager.getScore(5));
			// 查找是否有75分的成绩
			System.out.println("75分的成绩:" + sManager.findByScore(75));
			// 统计不合格的人数与优秀的人数
			System.out.println("不合格" + sManager.count(0, 59) + "人");
			System.out.println("优秀" + sManager.count(90, 100) + "人");
			// 将成绩排序后输出
			System.out.println("排序后的学生成绩清单为:");
			sManager.sort();
			sManager.output();
		}
	}

}


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页