目的。
掌握字符串的使用方法。
理解数组的逻辑关系,熟练掌握数组的操作方式。
内容。
学生成绩查询系统中保存学生姓名,课程名称和学生的课程成绩。
从控制台输入统计命令和参数实现成绩的查询。
示例命令如下:
avg C:统计c的平均分;
avg Java:统计Java的平均分;
get zhang C:获取学生zhang的c课程成绩。
运行效果如下图:

如何实现
存储信息进系统。
首先需要我们先将各种信息如学生姓名,课程成绩等等先存储起来,这样才能在下次输入调出想要的数据信息。现在对于以下信息:
大致分为三部分:姓名,成绩,课程,现在我们应该思考选择如何存储。如果随意存储,不仅不利于我们下次用命令调出来,而且像下方那样排列,可能排列不出来或者要用更复杂的方法。

在这里,我们选择用分别进行存储。成绩用一个二维数组。
例如:
int score[][];
String courses[];
String name[];
score=new int[][]{{26,69,46,25,5},{27,10,24,66,58},{44,58,0,82,75},{6,68,92,9,84},{75,1,51,41,74},{23,38,65,1,55}};
courses=new String[] {"C","Java","mySQL","Linux","HTML"};
name=new String[] {"zhang","wang","li","zhao","liu","song"};
通过以上代码,我们已经将学生信息存储进系统。
输出系统信息。
现在已经存储完信息,下一步,我们需要将我们存储的信息向上表那样排列出来。
可以在这里停顿一下,思考怎么才能把这些数据较为整齐的排列出来(主要是输出顺序和输出方式)。
值得一说的是JDK1.5新增加了和C语言中的函数类似数据输出方法,使用方法如下:
System.out.printf("%d,%f",12,12.57);
System.out.printf("%17s",courses[i]);
不知道以上代码有没有给读者一丝灵感(坏笑)。
我们选择先将第一行课程数据信息输出,利用for循环语句将存储课程的数组全部输出。具体如下:
for(int i=0;i<=4;i++) {
System.out.printf("%17s",courses[i]);
}
到这里来说比较轻松,稍微思考即可出来。
下面,涉及到学生姓名和成绩两个数组的排列输出,运用for语句嵌套加上转义字符就可以出来。在这里先捋一下作者本人刚开始时的思路。
可跳过(我刚开始想着先把名字输出,在来输出二维数组,实际上运行时,二维数组也就是成绩部分出现在名字的下方,然后想着通过转义字符来实现,然后忘了转义字符的我去搜转义字符,加入了转义字符后,我的程序还是有问题,运行出来排列方式基本上和图上差不多,但是名字跑在成绩后面去了。我还没有搞懂当时那个数组是怎么运行的,我想的是,先运行,应该在前,但实际上却跑后面去了。
后来我转换思路用for语句进行嵌套,在加上转义字符,总算是弄出来了)
具体代码见下:
System.out.printf("\n");
for(int i=0;i<=5;i++) {
System.out.printf("%5s",name[i]);
for(int j=0;j<=4;j++) {
System.out.printf("%12d\t",score[i][j]);
}
System.out.print("\n");
}
解释一下:第一个转义字符的使用是为了让光标移到下一行去,使后面出来的数据输出在课程的下一行。
第二个转义字符是同理,在外循环结束一次时,光标移到下一行。这样输出的信息能够按比较整齐规律的排列。
输出语句里的数字,是调整输出数据的列宽,相当于调整每一行数据之间的间距。让数据表格一样排布。(作者本人在这里调整不同数值,想达到实现图中那样的表格发布,不知道有没有快速的方法可以写出来)。
加入各种命令块。
我在这里把后面要编写的代码,叫做命令块。在此之前,我们已经完成了系统信息的存储和输出。
如果需要单独调出某个学生或某科成绩,那么就需要编写出相应的指令。
先写一个系统提示让我们输入命令的信息代码;
考虑到,使用中,需要多次输入命令,使用我们还需要将系统提示让我们输入命令的信息代码放入循环语句中
System.out.println("请输入命令:");
Scanner ml=new Scanner(System.in);
String M1=ml.nextLine();
思路:利用Scanner类的方法输入数据,利用equals方法判断我们输入的指令,利用if语句判断,然后执行不同的输出数据操作。
示例输入:avg C:让系统输出课程C的平均分。
if(M1.equals("avg C")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][0];
}
double pc =sum/5;
System.out.print("C的平均分是:"+pc);
}//命令块1
以此类推,我们可以写出其他命令块。
if(M1.equals("avg Java")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][1];
}
double pj =sum/5;
System.out.print("java的平均分是:"+pj);
}//命令块2
if(M1.equals("avg mySQL")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][2];
}
double pm =sum/5;
System.out.print("mySQL的平均分是:"+pm);
}//命令块3
当我们交够了命令块,就可以结尾了:利用break语句跳出循环。
if(M1.equals("exit")) {
System.out.println("退出查询系统!byebye!");
break;
}
因为,以上命令块我们都放在同一个循环语句中,所以我们可以不用注意各个命令块的位置。
后面也可以进行编写命令块放入循环语句里面。
当输入“exit”时,我们就可以退出系统。
完整代码
package com.sxt;
import java.util.Scanner;
public class 学生管理系统 {
public static void main(String[] args) {
int score[][];
int mingci[];
String courses[];
String name[];
String mingchen[];
score=new int[][]{{26,69,46,25,5},{27,10,24,66,58},{44,58,0,82,75},{6,68,92,9,84},{75,1,51,41,74},{23,38,65,1,55}};
mingci=new int[] {1,2,3,4,5,6};
name=new String[] {"zhang","wang","li","zhao","liu","song"};
courses=new String[] {"C","Java","mySQL","Linux","HTML"};
mingchen=new String[] {"名次","姓名","C","Java","mySQL","Linux","HTML"};
for(int i=0;i<=4;i++) {
System.out.printf("%17s",courses[i]);
}
System.out.printf("\n");
for(int i=0;i<=5;i++) {
System.out.printf("%5s",name[i]);
for(int j=0;j<=4;j++) {
System.out.printf("%12d\t",score[i][j]);
}
System.out.print("\n");
}
for(int i=1;i<100;i++) {
System.out.println("请输入命令:");
Scanner ml=new Scanner(System.in);
String M1=ml.nextLine();
if(M1.equals("exit")) {
System.out.println("退出查询系统!byebye!");
break;
}
if(M1.equals("avg C")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][0];
}
double pc =sum/5;
System.out.print("C的平均分是:"+pc);
}//命令块1
if(M1.equals("avg Java")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][1];
}
double pj =sum/5;
System.out.print("java的平均分是:"+pj);
}//命令块2
if(M1.equals("avg mySQL")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][2];
}
double pm =sum/5;
System.out.print("mySQL的平均分是:"+pm);
}//命令块3
if(M1.equals("avg Linux")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][3];
}
double pl =sum/5;
System.out.print("Linux的平均分是:"+pl);
}//命令块4
if(M1.equals("avg HTML")) {
int sum=0;
for(int n=0;n<=5;n++) {
sum+=score[n][1];
}
double ph =sum/5;
System.out.print("HTML的平均分是:"+ph);
}//命令块5
if(M1.equals("get zhang C")) {
System.out.println("zhang的C的成绩是:"+score[0][0]);
}//命令块6
if(M1.equals("get zhang java")) {
System.out.println("zhang的java的成绩是:"+score[0][1]);
}//命令块7
if(M1.equals("sort java")) {
}
}
}
}
运行结果如图

注意:以上程序,代码命令并没有写完。