从零学java笔录-第37篇基础语法完结小项目练习-学生管理系统 基础版
前言:
本文是java基础语法完结项目篇-学生管理系统
本节内容:
1:学生系统需求及分析
2:重点代码分析
3:完整代码
4:本节总结&下节预告
本文出处:《凯哥陪你学系列之java基础篇.Java基本语法篇》中第37篇基础语法完结小项目练习-学生管理系统 基础版
一:学生系统需求及分析
需求:
假设有三个班级,每个班级中有三个学生,每个学生学科分别为语文、数学、英语且有对应的分数
现根据用户输入的班级以及选择的学生姓名查询对应的学生各科成绩、三科成绩总分以及平均分数。
思考:
根据需求我们可以分出如下
1.1:用什么存储数据呢?
1.2:每个班级中有三个学生,每个学生有三个学科且有对应的分数,这个又怎么存储怎么表示呢?
1.3:怎么根据用户输入的进行相应的查询呢?
1.4:怎么处理总分和平均分数呢?
分析:
1.1:我们已经学习掌握的知识中的能够用于存放东西的是数组。所以这里需要考虑到使用数组来存储
1.2:每个班级有三个学生,每个学生又有三个学科且三个学科都有对应的分数。这个怎么表示呢? 同样使用数组来表示,那么数组我们已经学过一维数组、二维数组。应该选择那个数组呢?
接着分析:
三个学生,三个学科而且学科有分数(假设都是整数的)。我们可以把每个学生的成绩(三个学科的得分)看作一个一维数组,成绩是整数类型的 所以可以得到一个学生的三科成绩数组 int [] arrscore = new int[3];
一个班级有三个学生,所以同样,学生可以用一维数组存放。因为学生姓名是String类型的。所以,我们可以得到学生数组 String[] studentArr = new String[3];
那么问题又来看,怎么把学生信息和各学科成绩关联在一起呢?
我们可以,用一个二位数组来进行管理,二维数组中[m]对应学生数组中每个学生对应的index,而二维数组中的[n]用来存放每个学科对应的分数。所以我们可以得到学生,成绩关联的数组
因为 学生index是int类型的。成绩也是int类型的。所以二维数组就是int类型的。
int [] [] studentScore = new int [3][3];
1.3:怎么获取到用户输入呢?可以使用scanner 函数。怎么根据用户输入的进行相应的查询呢?这里就使用到if判断语句了。
1.4:总分就是获取到每个学科的成绩进行累加,平均分数,就是总分/学科数就是平均分呢。
二:重点代码分析
1:用于存放每个班级的学生信息的:
:2:用于存放学生和各科成绩的二维数组:
3:提示用户输入的:
4:获取指定学生的每个学科分数并求总分和平均分数
5:根据用户输入的进行查询
6:本代码对于的java类名为:
三:完整代码
public class StudentSystem {
public static void main(String[] args) {
/**
* 数据准备:
* 1:定义班级 每个班有三个学生,每个学生的学科顺序:语文、数学、英语
* 提示:可以考虑二维数组
* 2:定义每个班的学生。
* 提示:可以考虑一位数组
*
*
*/
//定义三个班级,三个学生中每个学生的每个学科成绩
//定义一班学生和各科成绩的二维数组
int [][] oneClass = new int [3][3];
oneClass[0]= new int[] {90,80,66};
oneClass[1]= new int[] {88,100,99};
oneClass[2]= new int[] {98,100,52};
//定义二班学生和各科成绩的二维数组
int [][] twoClass = new int [3][3];
twoClass[0]= new int[] {60,60,66};
twoClass[1]= new int[] {88,80,99};
twoClass[2]= new int[] {55,100,68};
//定义三一班学生和各科成绩的二维数组
int [][] threeClass = new int [3][3];
threeClass[0]= new int[] {90,78,88};
threeClass[1]= new int[] {88,63,59};
threeClass[2]= new int[] {98,100,95};
//定义每个班中的三个学生
//定义一班每个学生姓名
String[] oneClassStudents = new String [] {"张三","李四","王五"};
//定义二班每个学生姓名
String[] twoClassStudents = new String [] {"周杰伦","中红衣","四小龙"};
//定义三班每个学生姓名
String[] threeClassStudents = new String [] {"张三丰","张无忌","周芷若"};
System.out.println("请选择班级 1:一班 2:二班 3:三班 ");
Scanner sc = new Scanner(System.in); //获取键盘录入的数据。获取用户选择的班级
int classIndex = sc.nextInt;
if(1==classIndex){//选择了一班
System.out.println("您好,您已经选择了一班");
//提示信息。注意不是println而是print这样就不换号了
System.err.print("请输入学生姓名序号:");
//循环对应班级的学生姓名
for (int i = 0; i < oneClassStudents.length; i++) {
int no = i+1;//因为数组中下标是从0开始的,而现实中我们一般是从1开始的。所以要+1
if(i==oneClassStudents.length-1){//进行判断。如果是班级中最后一个学生的时候进行换行。这里使用的是println
System.err.println(no+":"+oneClassStudents[i]);
}else{//当不是最后一个时候,就不用换行了。
System.err.print(no+":"+oneClassStudents[i] +" ");
}
}
//以上for循环完成之后,输出的:请输入学生姓名序号:1:张三丰 2:张无忌 3:周芷若
Scanner scanner = new Scanner(System.in); //获取键盘录入的数据。获取用户选择的学生
int studentIndex = scanner.nextInt;
studentIndex-=1; //因为现实是从1开始的,而数组是从0开始的。所以需要-1
//获取学生姓名
String StudentName=oneClassStudents[studentIndex];
//获取学生对应的各科成绩
int [] studentScore =oneClass[studentIndex];
//通过自定义方法获取学生每个学科的信息以及总分、平均分
String detailMsg = getStudentDetail(studentScore);
System.out.println("学生姓名:"+StudentName +"。您本次考试信息详情如下:"+detailMsg);
}else if(2==classIndex){//选择了二班
//选择了二班
System.out.println("您好,您已经选择了二班");
System.err.print("请输入学生姓名序号:");
for (int i = 0; i < twoClassStudents.length; i++) {
int no = i+1;
if(i==twoClassStudents.length-1){
System.err.println(no+":"+twoClassStudents[i]);
}else{
System.err.print(no+":"+twoClassStudents[i] +" ");
}
}
Scanner scanner = new Scanner(System.in); //获取键盘录入的数据
int studentIndex = scanner.nextInt;
studentIndex-=1; //
String StudentName=twoClassStudents[studentIndex];
int [] studentScore =twoClass[studentIndex];
//通过自定义方法获取学生每个学科的信息以及总分、平均分
String detailMsg = getStudentDetail(studentScore);
System.out.println("学生姓名:"+StudentName +"。您本次考试信息详情如下:"+detailMsg);
}else{//选择了三班
//选择了三班
System.out.println("您好,您已经选择了三班");
System.err.print("请输入学生姓名序号:");
for (int i = 0; i < threeClassStudents.length; i++) {
int no = i+1;
if(i==threeClassStudents.length-1){
System.err.println(no+":"+threeClassStudents[i]);
}else{
System.err.print(no+":"+threeClassStudents[i] +" ");
}
}
Scanner scanner = new Scanner(System.in); //获取键盘录入的数据
int studentIndex = scanner.nextInt;
studentIndex-=1; //
String StudentName=threeClassStudents[studentIndex];
int [] studentScore =threeClass[studentIndex];
//通过自定义方法获取学生每个学科的信息以及总分、平均分
String detailMsg = getStudentDetail(studentScore);
System.out.println("学生姓名:"+StudentName +"。您本次考试信息详情如下:"+detailMsg);
}
}
/**
* 通过自定义方法获取学生每个学科的信息以及总分、平均分
* @param studentScore 如参:学生信息
* @return str 学生每个学科的信息以及总分、平均分
*/
public static String getStudentDetail(int[] studentScore) {
int ChineseScore =0; //定义用于存放语文分数的
int MethScore=0; //数学分数
int EnglishScore=0; //英语分数
int totalScore = 0; //总分
double avgScore = 0.0; //平均分数
for (int i = 0; i < studentScore.length; i++) {
if(0==i){//语文分数
ChineseScore = studentScore[i];
}else if(1==i){//数学分数
MethScore = studentScore[i];
}else{//英语分数
EnglishScore = studentScore[i];
}
}
totalScore = ChineseScore+MethScore+EnglishScore;
avgScore = totalScore/studentScore.length;
return "语文得分:"+ChineseScore+" 数学得分:"+MethScore+" 英语得分:"+EnglishScore +" 总分为:"+totalScore +" 平均分为:" +avgScore;
}
}
代码运行结果:
四:本节总结&下节预告
通过本项目我们需要掌握的:
1:根据需求,分析出我们需要的信息(这个需要慢慢培养)
2:根据需求分析出信息后,需要知道该使用什么技术来实现(这个需要慢慢培养)
以上两点都扯淡。因为先阶段咱们刚开始学,所以不着急。慢慢来
以下才是重点呢。
3:一维数组、二维数组的使用及获取数组中数据
4:for循环使用使用
5:if...else if...else的使用
6:自定义方法的使用
7:用户用户键盘录入int类型的数据。
下节预告:
1:思考,上面的这些代码,还可不可以在简单一些??
2:上面的代码运行一次就完了。怎么根据用户输入的,进行结束。
欢迎学习下一篇《从零学java笔录-第38篇基础语法完结小项目练习-学生管理系统升级版》