刚开始写COREJAVA不到一个礼拜,费了好大的功夫跟高人请教借鉴一些好的方式方法还有思路,写了个简单的学生成绩管理系统。争取以后能把代码量再提高,能更流利顺畅写出思路清晰的代码。
import java.util.Scanner;
public class StudentManagement {
public static void main(String[] args) {
int[][] scores={
{85,93,64,77,63},
{91,88,67,78,90},
{75,66,89,91,58},
{82,45,67,79,91},
{82,34,77,85,88},
{71,82,87,67,91}}; //六个学生,五门课程的成绩
String[] courses={"corejava","unix","jdbc","jsp","ejb"};
String[] students={"zhangsan","lisi","wangwu","zhaoliu","qianqi","liuba"};
Scanner sca = new Scanner((System.in));
System.out.println("欢迎使用学生成绩管理系统,请阅读以下说明:");
System.out.println("1.若查询某课程的平均成绩,请按照以下方式输入:AVGCOU unix");
System.out.println("2.若查询某学生的平均成绩,请按照以下方式输入:AVGSTU zhangsan");
System.out.println("3.若查询全体学生总成绩的排列顺序,请按照以下方式输入:SORT sum");
System.out.println("4.若查询某课程成绩的排列顺序,请按照以下方式输入:SORT unix");
System.out.println("5.若查询某学生的总成绩,请按照一下方式输入:GET zhangsan sum");
System.out.println("6.若查询某学生某课程的成绩,请按照以下方式输入:GET zhangsan unix");
System.out.println("7.本系统中包含学生:zhangsan,lisi,wangwu,zhangliu,qianqi,liuba");
System.out.println("8.本系统中包含的课程:corejava,unix,jdbc,jsp,ejb");
while(true){
System.out.println("请输入查询命令:");
String str = sca.next();
if(str.equals("AVGCOU")){
String cou = sca.next();
avgCou(scores,courses,cou);
}else if(str.equals("AVGSTU")){
String stu=sca.next();
avgStu(scores,students,stu);
}else if(str.equals("SORT")){
String cou=sca.next();
sort(scores,courses,students,cou);
}else if(str.equals("GET")){
String stu=sca.next();
String cou=sca.next();
get(scores,courses,students,stu,cou);
}else if(str.equals("EXIT")){
break;
}
}
} //main() end!
public static void avgCou(int[][] scores,String[] courses,String cou){
//1.在courses数组中搜索cou出现的下标,如果courses中不包含cou,则输出错误信息并返回。
//2.根据上一步找到的下标去查找scores中该列,把该列上的所有数据累加求和。
//3.将和值除以scores数组的行数得到平均值,并将课程名和平均值输出。
int index=-1;
double sum = 0.0;
for(int i=0;i<courses.length;i++){
if(courses[i].equals(cou)){
index=i;
break;
}
}
if(index==-1){
System.out.println("没有该课程,请重新输入!");
return;
}
for(int j=0;j<scores.length;j++){
sum+=scores[j][index];
}
double avg=sum/scores.length;
System.out.println(cou +"课程的平均分是:" +avg);
}//end
public static void avgStu(int[][] scores,String[] students,String stu){
int index=-1;
double sum=0.0;
for(int i=0;i<students.length;i++){
if(students[i].equals(stu)){
index=i;
break;
}
}
if(index==-1){
System.out.println("没有该学生,请重新输入");
return;
}
for(int j=0;j<scores[0].length;j++){
sum+=scores[index][j];
}
double avg = sum/scores[0].length;
System.out.println(stu +"的平均成绩是" +avg);
}
public static void sort(int[][] scores,String[] courses,String[] students,String cou){
// 1.创建一个一维int数组,保存cou课程的成绩。
// 2.创建一个一维String数组,保存所有学生的姓名。
// 3.对int数组排序,并且也同步移动String数组的顺序。
// 4.输出学生名和分数。
int[] scoresOne = new int[scores.length];
String[] studentName = new String[scores.length];
int sum=0;
if(cou.equals("sum")){
for(int i=0;i<scores.length;i++){
for(int j=0;j<scores[0].length;j++){
sum+=scores[i][j];
}
scoresOne[i]=sum;
studentName[i]=students[i];
}
}else{
int t=-1;
for(int i=0;i<scores[0].length;i++){
if(courses[i].equals(cou)){
t=i;
break;
}
}
if(t==-1){
System.out.println("错误!请重新输入");
return;
}
for(int j=0;j<scores.length;j++){
scoresOne[j]=scores[j][t];
studentName[j]=students[j];
}
}
int temp1=0;
String temp2=null;
for(int i=0;i<scoresOne.length-1;i++){
for(int j=i+1;j<scoresOne.length;j++){
if(scoresOne[i]<scoresOne[j]){
temp1=scoresOne[i];
temp2=studentName[i];
scoresOne[i]=scoresOne[j];
studentName[i]=studentName[j];
scoresOne[j]=temp1;
studentName[j]=temp2;
}
}
}
for(int k=0;k<studentName.length;k++){
System.out.println("姓名:" +studentName[k]+", 分数:" +scoresOne[k]);
}
} //sort end;
public static void get(int[][] scores,String[] courses,String[] students,String stu,String cou){
// 1.确定学生姓名,找出对应的下标,确定scores数组相应的行
// 2.判断是SUM还是COU
// 3.如果是SUM,求第一步对应行下各列的和,并输出
// 4.如果是COU,找出courses中对应的下标,并确定scores中对应的列,并输出。
int index1=-1;
int index2=-1;
int sum=0;
//找出学生姓名,如果错误,则返回
for(int i=0;i<students.length;i++){
if(students[i].equals(stu)){
index1=i;
break;
}
}
if(index1==-1){
System.out.println("错误,请重新输入!");
return;
}
//判断是SUM还是COU
if(cou.equals("sum")){
for(int j=0;j<scores[0].length;j++){
sum+=scores[index1][j];
}System.out.println(stu +"的总分是" +sum);
}else {
for(int k=0;k<scores[index1].length;k++){
if(courses[k].equals(cou)){
index2=k;
break;
}
}
if(index2==-1){
System.out.println("错误,请重新输入");
return;
}
System.out.println(stu +"的" +cou +"课程的分数是:"+scores[index1][index2]);
}
} //get end
} //class end