java实现学生成绩管理系统-单链表形式

package labReport;

import java.util.Scanner;

public class StudentInformation {
	public String name = new String();
	public long stuId = 0L;
	public String lesson_1 = new String();
	public String lesson_2 = new String();
	public float scoreOfLesson_1 = 0f;
	public float scoreOfLesson_2 = 0f;
	public float sum = 0f;
	public StudentInformation next = null;;
	
	public StudentInformation(String name, long stuId, String lesson_1, String lesson_2, float scoreOfLesson_1, float scoreOfLesson_2){
		this.lesson_1 = lesson_1;
		this.lesson_2 = lesson_2;
		this.name = name;
		this.scoreOfLesson_1 = scoreOfLesson_1;
		this.scoreOfLesson_2 = scoreOfLesson_2;
		this.stuId = stuId;
		this.sum = this.scoreOfLesson_1 + this.scoreOfLesson_2;
	}
	public StudentInformation(Scanner input){
		this(input.next(), input.nextLong(), null, null, input.nextFloat(), input.nextFloat());
	}
	
}
package labReport;

import java.util.Scanner;

public class StudentList {
	public StudentInformation head = null;
	private Scanner input = new Scanner(System.in);
	public float sumLesson_1 = 0f, sumLesson_2 = 0f;
	public StudentInformation maxStuSc_1, minStuSc_1;
	public StudentInformation minStuSc_2, maxStuSc_2;
	public StudentList(){
		head = new StudentInformation(null, 0, null, null, 0, 0);
	}
	
	public StudentList(int lenght){
		this();
		int i = 0;
		for(i = 0; i < lenght; i++)
			insert();
	}
	public void change(long id){
		float newScore_1 = 0f, newScore_2 = 0f;
		StudentInformation p = head;
		while(p != null){
			if(p.stuId == id){
				System.out.println("\n请输入学生的成绩:\t科目一\t科目二");
				while(! input.hasNextFloat()){
					input.next();
					System.out.println("\n非法输入,请重新输入!");
					System.out.println("\n请输入学生的成绩:\t科目一\t科目二");
				}
				newScore_1 = input.nextFloat();
				while(! input.hasNextFloat()){
					input.next();
					System.out.println("\n非法输入,请重新输入!");
					System.out.println("\n请输入学生的成绩:\t科目一\t科目二");
				}
				newScore_2 = input.nextFloat();
				p.scoreOfLesson_1 = newScore_1;
				p.scoreOfLesson_2 = newScore_2;
			}
			p = p.next;
		}
	}
 	public void insert() {//插入结点
		StudentInformation p = head;
		StudentInformation s = new StudentInformation(input);
		s.next = p.next;
		p.next = s;
		
	}
	public void remove(long id) throws Exception{//删除结点
		StudentInformation p = head.next;
		int j = -1;
		while(p.next != null && j < lenght() - 1){
			if(p.stuId == id)
				break;
			p = p.next;
			j++;
		}
		if(j > lenght() || p == null){
			throw new Exception("删除位置不合法");
		}
		p.next = p.next.next;
		
	}
	public int lenght() {//计算链表长度
		int lenght = 0;
		StudentInformation p = head.next;
		while(p != null){
			lenght++;
			p = p.next;
		}
		return lenght;
	}
	public void rank(){//排序
		StudentInformation p, q, snap1, snap2; 
		while(true){
			int judge = 0;
			p = head;
			q = p.next;
			while(p.next != null && q.next != null){
				if(p.next.sum < q.next.sum){
					judge = 1;
					snap1 = p.next;
					snap2 = q.next;
					p.next = snap2;
					snap1.next = snap1.next.next;
					snap2.next = snap1;
					
				}
				if(q.next == null || p.next == null)
					break;
				p = p.next;
				q = q.next;
			}
			if(judge == 0)
				break;
		}
	}
	public void findStudent(long id) throws Exception{//寻找某位学生
		StudentInformation p = head.next;
		while(p != null && p.stuId != id)
			p = p.next;
		if(p == null){
			throw new Exception("您所寻找的位置不存在!");
		} 
		
		System.out.println("学生姓名:" + p.name + "\t" + head.lesson_1 + "的成绩:" + (int)(p.scoreOfLesson_1 * 10) / 10.0
				+ "\t" + head.lesson_2 + "的成绩:" + (int)(p.scoreOfLesson_2 * 10) / 10.0);
	}
	public void check(){//输出方法


		StudentInformation p = head.next;
		System.out.println("学生姓名\t学号\t科目一\t"
				+ "成绩\t科目二\t成绩\t总分");
		while(p != null){
			System.out.println(p.name + "\t" + p.stuId + "\t" + head.lesson_1 + "\t" 
		+ (int)(p.scoreOfLesson_1 * 10) / 10.0 + "\t"  + head.lesson_2 + 
		"\t" + (int)(p.scoreOfLesson_2 * 10) / 10.0 + "\t" + (int)(p.sum * 10) / 10.0);
			p = p.next;
		}
	}
	public void statistics(){
		StudentInformation p = head.next;
		float minScoreOfLesson_2 = 100f, minScoreOfLesson_1 = 100f;
		float maxScoreOfLesson_2 = 0f, maxScoreOfLesson_1 = 0f;
		while(p != null){
			sumLesson_1 += p.scoreOfLesson_1;
			sumLesson_2 += p.scoreOfLesson_2;
			minStuSc_1 = minScoreOfLesson_1 < p.scoreOfLesson_1 ? minStuSc_1 : p;
			maxStuSc_1 = maxScoreOfLesson_1 > p.scoreOfLesson_1 ? maxStuSc_1 : p;
			maxStuSc_2 = maxScoreOfLesson_2 > p.scoreOfLesson_2 ? maxStuSc_2 : p;
			minStuSc_2 = minScoreOfLesson_2 < p.scoreOfLesson_2 ? minStuSc_2 : p;
			minScoreOfLesson_1 = minStuSc_1.scoreOfLesson_1;
			minScoreOfLesson_2 = minStuSc_2.scoreOfLesson_2;
			maxScoreOfLesson_1 = maxStuSc_1.scoreOfLesson_1;
			maxScoreOfLesson_2 = maxStuSc_2.scoreOfLesson_2;
			p = p.next;
			
		}
		System.out.println("科目一\n最高分\t姓名\t学号\n最低分\t姓名\t学号\t\n科目平均分");
		System.out.println("" + maxStuSc_1.scoreOfLesson_1 + "\t" + maxStuSc_1.name + "\t" + maxStuSc_1.stuId + "\n" + 
		minStuSc_1.scoreOfLesson_1 + "\t" + minStuSc_1.name + "\t" + minStuSc_1.stuId);
		System.out.println((int)((sumLesson_1 / lenght()) * 10) / 10.0);
		System.out.println("科目二\n最高分\t姓名\t学号\n最低分\t姓名\t学号\t\n科目平均分");
		System.out.println(maxStuSc_2.scoreOfLesson_2 + "\t" + maxStuSc_2.name + "\t" + maxStuSc_2.stuId + "\n" + 
				minStuSc_2.scoreOfLesson_2 + "\t" + minStuSc_2.name + "\t" + minStuSc_2.stuId);
				System.out.println((int)((sumLesson_2 / lenght()) * 10) / 10.0);
	}
}
package labReport;
import java.util.Scanner;

public class TestReport {
	
	static{
		System.out.println("欢迎使用学生管理系统(垃圾版)!");
		System.out.println("请先完成一个成绩表格的初始化,谢谢合作!");
		System.out.print("请输入需要统计成绩的两个科目名称:");
	}
	public static void main(String[] args){
		StudentList list = new StudentList();
		Scanner input = new Scanner(System.in);
		int capita = 0;//初始人数
		int i = 0;
		list.head.lesson_1 = input.next();
		list.head.lesson_2 = input.next();
		System.out.println("请输入成绩统计初始人数!");
		while(! input.hasNextInt()){
			input.next();
			System.out.println("非法输入,请重新输入:");
			System.out.println("请输入成绩统计初始人数!");
		}
		capita = input.nextInt();
		System.out.println("请按顺序输入学生的\t姓名\t学号\t" + list.head.lesson_1
				+ "的成绩 \t" + list.head.lesson_2 + "的成绩");
		for(i = 0; i < capita; i++)
			list.insert();
		menu(list);
		
		input.close();
	}
	@SuppressWarnings("resource")
	public static void menu(StudentList list){
		Scanner input = new Scanner(System.in);
		while(true){
			System.out.println("现在进行操作选择!");
			System.out.println("1、增加学生成员\t2、删除已有学生\t3、查找已有成员\t4、"
					+ "修改已有学生成绩\t5、查看学生排名列表\t6、查看学生数据分析\t7、退出");
			while(! input.hasNextInt()){
				input.next();
				System.out.println("非法输入,请重新输入!");
				System.out.println("1、增加学生成员\t2、删除已有学生\t3、查找已有成员\t4、"
						+ "修改已有学生成绩\t5、查看学生排名列表\t6、查看学生数据分析\t7、退出");
			}
			switch(input.nextInt()){
			case 1: System.out.println("请按顺序输入学生的\t姓名\t学号\t" + list.head.lesson_1 + "的成绩\t" + list.head.lesson_2 + "的成绩");
				list.insert();
				System.out.println("操作成功!");
				break;
			case 2:
				System.out.println("请输入要删除的学生成员学号!");
				try {
					while(! input.hasNextInt()){
						input.next();
						System.out.println("非法输入,请重新输入!");
					}
					list.remove(input.nextLong());
				} catch (Exception e) {
					e.printStackTrace();
				}
				System.out.println("操作成功!");
				break;
			case 3:
				System.out.println("请输入需查找的学生成员的学号!");
				try {
				while(! input.hasNextInt()){
					input.next();
					System.out.println("非法输入,请重新输入!");
				}
				list.findStudent(input.nextLong());
			} catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("操作成功!");
				break;
			case 4:
				System.out.println("请输入要修改成绩的学生的学号!");
				while(! input.hasNextInt()){
					input.next();
					System.out.println("非法输入,请重新输入!");
				}
				list.change(input.nextLong());
				System.out.println("操作成功!");
				break;
			case 5:
				list.rank();
				list.check();
				System.out.println("操作成功!");
				break;
			case 6:
				list.statistics();
				System.out.println("操作成功!");
				break;
			case 7: System.out.println("感谢您本次对本产品的使用!");
				System.exit(0);
				break;
			default: 
				try {
					System.out.println("非法选项!\n请重新进入菜单选择");
					Thread.sleep(10000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				break;
			}
			
		}
	}
}

猜你喜欢

转载自blog.csdn.net/mathew_leung/article/details/79941271