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; } } } }
java实现学生成绩管理系统-单链表形式
猜你喜欢
转载自blog.csdn.net/mathew_leung/article/details/79941271
今日推荐
周排行