此系列文章收录大量Java经典代码题(也可以算是leetcode刷题指南),剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1,请看!
本篇文章将带大家一起来写一个学生成绩查询系统。
目录
系统呈现效果
前言——成绩查询系统的数据结构
控制台命令的读取和控制
1.确定参数
2.退出系统
查询某人某门课成绩
对某门课程成绩进行排序
系统呈现效果
“学生成绩查询系统”中保存有学生姓名、课程名称以及学生的课程成绩。查询系统从控制台输入统计命令及参数,实现几种方式的成绩查询,如:
- avg Java:统计课程Java的平均分。
- avg song:统计学生song的平均分。
- get song Java:获取学生song的Java 课程的成绩。
- sort Java:列出 Java课程的成绩的排序结果。
- exit:退出程序。
如果查询的学生或课程不存在时,给出相应的提示。运行效果如图:
如运行效果所示,查询系统的总体任务应该包括:
- 系统数据(学生成绩)的初始化。
- 显示成绩单。
- 查询系统的控制台命令调度。
- 查询某门课或某人的平均成绩。
- 查询某人某门课的成绩。
- 对某门课程的成绩进行排序。
前言——成绩查询系统的数据结构
//用常量存储学生数和课程数static final int STUDENT_NUM=6;static final int COURSE_NUM=5;//用字符串数组存储学生姓名和课程名称static String[] students = {"zhang","wang","li","zhao","liu","song"};static String[] courses = {"C","Java","mySQL","Linux","HTML"};存储学生成绩static int[][] score= new int[STUDENT_NUM][COURSE_NUM];
控制台命令的读取和控制
1.确定参数
avg+课程名
avg+姓名
get +姓名+课程名
sort + 课程名
匹配命令字符串时使用 equalsIgnoreCase 方法,匹配时忽略字符串的大小写。
2.退出系统
查询系统在未输入“exit”命令的情况下运行,可以在循环中使用“System.exit(0)”退出循环,结束系统的运行
public static void run(){Scanner scn=new Scanner(System.in); while(true){System.out.print("请输入命令:"); String command=scn.next();if(command.equalsIgnoreCase("avg")){//"avg"需要一个参数String parameter=scn.next();avg(parameter);}else if(command.equalsIgnoreCase("get")){//"get"需要两个参数String parameter1=scn.next();String parameter2=scn.next();get(parameter1,parameter2);}else if(command.equalsIgnoreCase("sort")){//"sort"需要一个参数String parameter=scn.next(); sortByScore(parameter);}else if (command.equalsIgnoreCase("exit")){//退出系统System.out.println("退出系统!byebye!");System.exit(0);}} }
查询某人某门课成绩
get()方法,先在 students数组中查询是否有 conditionl 指定的学生。如果有该学生,则记录下学生位置(作为成绩二维数组的行标),并继续在 courses数组中查询是否存在 condition2 指定的课程,如果有该课程,则记录下该课程的位置(作为成绩二维数组的列标);输出查找到位置上的成绩
public static void get(String condition1, String condition2){int i_index=-1, j_index=-1;//查询是否存在该学生i_indexfor(int i=0; i<students.length; i++){if (students[i].equalsIgnoreCase(condition1)){i_index=i;}}if(i_index!=-1){ //有此人,继续查找是否有该课程j_indexfor(int j=0; j<courses.length; j++)if (courses[j].equalsIgnoreCase(condition2)){j_index=j; }}else{System.out.println("没有 "+ condition1+ "这个学生");return;}if(j_index!=-1){System.out.println(condition1+"的"+condition2+"成绩是"+score[i_index][j_index]);}else{System.out.println(condition1+"没有"+condition2+" 这门课程");return;}}
对某门课程成绩进行排序
先在 courses数组中查询是否存在 condition 指定的课程,如果有该课程,则记录下该课程的位置。并建立临时数组存储学生姓名和成绩,在对成绩数组冒泡排序过程中同时交换姓名。最后进行输出。
public static void sortByScore(String sort_condition){int i, j;int j_index=-1;for(j=0; j<courses.length; j++){if (courses[j].equalsIgnoreCase(sort_condition)){j_index=j;}}if(j_index==-1){System.out.println("没有这门课程");return;}//将成绩数据和姓名导入临时数组int[] score_temp= new int[STUDENT_NUM]; for(i=0; i<score.length; i++){score_temp[i]=score[i][j_index];}String[] students_temp=new String[STUDENT_NUM];for(i=0; i<students.length; i++){students_temp[i]=students[i];}//对score_temp数组进行冒泡排序,同时对student_temp数据进行同步交换for(int k=0; k<score_temp.length-1; k++){for (int kk=0; kk<score_temp.length-k-1; kk++){if (score_temp[kk]>score_temp[kk+1]){//交换成绩int temp=score_temp[kk];score_temp[kk]=score_temp[kk+1];score_temp[kk+1]=temp;//交换姓名String tmp_str=students_temp[kk]; students_temp[kk]=students_temp[kk+1];students_temp[kk+1]=tmp_str;}}}//输出结果//1.输出抬头System.out.print("名次\t");System.out.print("姓名\t");System.out.print(courses[j_index]+"\t");System.out.println();//2.输出数据for(int k=0; k<score_temp.length; k++){System.out.print((k+1)+"\t");System.out.print(students_temp[k]+"\t"); //学生姓名System.out.println(score_temp[k]); //学生成绩}}
当然还有一个功能是计算某一学生或课程成绩的平均分,这个功能的实现类似上面获取某人某成绩的get()方法,剩下的部分教给大家动手实现相关功能。
这篇文章到此结束,源码已经放在资源区了,大家可以前往查看。感谢各位的阅读和所提出的宝贵意见。如果觉得这篇文章写的还可以或者对您有帮助,麻烦点赞收藏加转发!!!