前言:
本文是java基礎(chǔ)語法完結(jié)項目篇-學(xué)生管理系統(tǒng)
本節(jié)內(nèi)容:
1:學(xué)生系統(tǒng)需求及分析
2:重點代碼分析
3:完整代碼
4:本節(jié)總結(jié)&下節(jié)預(yù)告
本文出處:《凱哥陪你學(xué)系列之java基礎(chǔ)篇.Java基本語法篇》中第37篇基礎(chǔ)語法完結(jié)小項目練習(xí)-學(xué)生管理系統(tǒng) 基礎(chǔ)版
歡迎訪問凱哥個人博客:www.kaigejava.com
歡迎關(guān)注凱哥公眾號:凱哥Java
一:學(xué)生系統(tǒng)需求及分析
需求:
假設(shè)有三個班級,每個班級中有三個學(xué)生,每個學(xué)生學(xué)科分別為語文、數(shù)學(xué)、英語且有對應(yīng)的分?jǐn)?shù)
現(xiàn)根據(jù)用戶輸入的班級以及選擇的學(xué)生姓名查詢對應(yīng)的學(xué)生各科成績、三科成績總分以及平均分?jǐn)?shù)。
思考:
根據(jù)需求我們可以分出如下
1.1:用什么存儲數(shù)據(jù)呢?
1.2:每個班級中有三個學(xué)生,每個學(xué)生有三個學(xué)科且有對應(yīng)的分?jǐn)?shù),這個又怎么存儲怎么表示呢?
1.3:怎么根據(jù)用戶輸入的進行相應(yīng)的查詢呢?
1.4:怎么處理總分和平均分?jǐn)?shù)呢?
分析:
1.1:我們已經(jīng)學(xué)習(xí)掌握的知識中的能夠用于存放東西的是數(shù)組。所以這里需要考慮到使用數(shù)組來存儲
1.2:每個班級有三個學(xué)生,每個學(xué)生又有三個學(xué)科且三個學(xué)科都有對應(yīng)的分?jǐn)?shù)。這個怎么表示呢? 同樣使用數(shù)組來表示,那么數(shù)組我們已經(jīng)學(xué)過一維數(shù)組、二維數(shù)組。應(yīng)該選擇那個數(shù)組呢?
接著分析:
三個學(xué)生,三個學(xué)科而且學(xué)科有分?jǐn)?shù)(假設(shè)都是整數(shù)的)。我們可以把每個學(xué)生的成績(三個學(xué)科的得分)看作一個一維數(shù)組,成績是整數(shù)類型的 所以可以得到一個學(xué)生的三科成績數(shù)組 int [] arrscore = new int[3];
一個班級有三個學(xué)生,所以同樣,學(xué)生可以用一維數(shù)組存放。因為學(xué)生姓名是String類型的。所以,我們可以得到學(xué)生數(shù)組 String[] studentArr = new String[3];
那么問題又來看,怎么把學(xué)生信息和各學(xué)科成績關(guān)聯(lián)在一起呢?
我們可以,用一個二位數(shù)組來進行管理,二維數(shù)組中[m]對應(yīng)學(xué)生數(shù)組中每個學(xué)生對應(yīng)的index,而二維數(shù)組中的[n]用來存放每個學(xué)科對應(yīng)的分?jǐn)?shù)。所以我們可以得到學(xué)生,成績關(guān)聯(lián)的數(shù)組
因為 學(xué)生index是int類型的。成績也是int類型的。所以二維數(shù)組就是int類型的。
int [] [] ?studentScore = new int [3][3];
1.3:怎么獲取到用戶輸入呢?可以使用scanner 函數(shù)。怎么根據(jù)用戶輸入的進行相應(yīng)的查詢呢?這里就使用到if判斷語句了。
1.4:總分就是獲取到每個學(xué)科的成績進行累加,平均分?jǐn)?shù),就是總分/學(xué)科數(shù)就是平均分呢。
二:重點代碼分析
1:用于存放每個班級的學(xué)生信息的:
2:用于存放學(xué)生和各科成績的二維數(shù)組:
3:提示用戶輸入的:
4:獲取指定學(xué)生的每個學(xué)科分?jǐn)?shù)并求總分和平均分?jǐn)?shù)
5:根據(jù)用戶輸入的進行查詢
6:本代碼對于的java類名為:
三:完整代碼
public class StudentSystem {
public static void main(String[] args) {
/**
* 數(shù)據(jù)準(zhǔn)備:
* 1:定義班級 每個班有三個學(xué)生,每個學(xué)生的學(xué)科順序:語文、數(shù)學(xué)、英語
* 提示:可以考慮二維數(shù)組
* 2:定義每個班的學(xué)生。
* 提示:可以考慮一位數(shù)組
*
*
*/
//定義三個班級,三個學(xué)生中每個學(xué)生的每個學(xué)科成績
//定義一班學(xué)生和各科成績的二維數(shù)組
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};
//定義二班學(xué)生和各科成績的二維數(shù)組
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};
//定義三一班學(xué)生和各科成績的二維數(shù)組
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};
//定義每個班中的三個學(xué)生
//定義一班每個學(xué)生姓名
String[] oneClassStudents = new String [] {"張三","李四","王五"};
//定義二班每個學(xué)生姓名
String[] twoClassStudents = new String [] {"周杰倫","中紅衣","四小龍"};
//定義三班每個學(xué)生姓名
String[] threeClassStudents = new String [] {"張三豐","張無忌","周芷若"};
System.out.println("請選擇班級 1:一班 2:二班 3:三班 ");
Scanner sc = new Scanner(System.in);//獲取鍵盤錄入的數(shù)據(jù)。獲取用戶選擇的班級
int classIndex = sc.nextInt();
if(1==classIndex){//選擇了一班
System.out.println("您好,您已經(jīng)選擇了一班");
//提示信息。注意不是println而是print這樣就不換號了
System.err.print("請輸入學(xué)生姓名序號:");
//循環(huán)對應(yīng)班級的學(xué)生姓名
for (int i = 0; i < oneClassStudents.length; i++) {
int no = i+1;//因為數(shù)組中下標(biāo)是從0開始的,而現(xiàn)實中我們一般是從1開始的。所以要+1
if(i==oneClassStudents.length-1){//進行判斷。如果是班級中最后一個學(xué)生的時候進行換行。這里使用的是println
System.err.println(no+":"+oneClassStudents[i]);
}else{//當(dāng)不是最后一個時候,就不用換行了。
System.err.print(no+":"+oneClassStudents[i] +" ");
}
}
//以上for循環(huán)完成之后,輸出的:請輸入學(xué)生姓名序號:1:張三豐 2:張無忌 3:周芷若
Scanner scanner = new Scanner(System.in);//獲取鍵盤錄入的數(shù)據(jù)。獲取用戶選擇的學(xué)生
int studentIndex = scanner.nextInt();
studentIndex-=1;//因為現(xiàn)實是從1開始的,而數(shù)組是從0開始的。所以需要-1
//獲取學(xué)生姓名
String StudentName=oneClassStudents[studentIndex];
//獲取學(xué)生對應(yīng)的各科成績
int [] studentScore =oneClass[studentIndex];
//通過自定義方法獲取學(xué)生每個學(xué)科的信息以及總分、平均分
String detailMsg = getStudentDetail(studentScore);
System.out.println("學(xué)生姓名:"+StudentName +"。您本次考試信息詳情如下:"+detailMsg);
}else if(2==classIndex){//選擇了二班
//選擇了二班
System.out.println("您好,您已經(jīng)選擇了二班");
System.err.print("請輸入學(xué)生姓名序號:");
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);//獲取鍵盤錄入的數(shù)據(jù)
int studentIndex = scanner.nextInt();
studentIndex-=1;//
String StudentName=twoClassStudents[studentIndex];
int [] studentScore =twoClass[studentIndex];
//通過自定義方法獲取學(xué)生每個學(xué)科的信息以及總分、平均分
String detailMsg = getStudentDetail(studentScore);
System.out.println("學(xué)生姓名:"+StudentName +"。您本次考試信息詳情如下:"+detailMsg);
}else{//選擇了三班
//選擇了三班
System.out.println("您好,您已經(jīng)選擇了三班");
System.err.print("請輸入學(xué)生姓名序號:");
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);//獲取鍵盤錄入的數(shù)據(jù)
int studentIndex = scanner.nextInt();
studentIndex-=1;//
String StudentName=threeClassStudents[studentIndex];
int [] studentScore =threeClass[studentIndex];
//通過自定義方法獲取學(xué)生每個學(xué)科的信息以及總分、平均分
String detailMsg = getStudentDetail(studentScore);
System.out.println("學(xué)生姓名:"+StudentName +"。您本次考試信息詳情如下:"+detailMsg);
}
}
/**
* 通過自定義方法獲取學(xué)生每個學(xué)科的信息以及總分、平均分
* @param studentScore如參:學(xué)生信息
* @return str學(xué)生每個學(xué)科的信息以及總分、平均分
*/
public static String getStudentDetail(int[] studentScore) {
int ChineseScore =0;//定義用于存放語文分?jǐn)?shù)的
int MethScore=0;//數(shù)學(xué)分?jǐn)?shù)
int EnglishScore=0;//英語分?jǐn)?shù)
int totalScore = 0;//總分
double avgScore = 0.0;//平均分?jǐn)?shù)
for (int i = 0; i < studentScore.length; i++) {
if(0==i){//語文分?jǐn)?shù)
ChineseScore = studentScore[i];
}else if(1==i){//數(shù)學(xué)分?jǐn)?shù)
MethScore = studentScore[i];
}else{//英語分?jǐn)?shù)
EnglishScore = studentScore[i];
}
}
totalScore = ChineseScore+MethScore+EnglishScore;
avgScore = totalScore/studentScore.length;
return "語文得分:"+ChineseScore+" 數(shù)學(xué)得分:"+MethScore+" 英語得分:"+EnglishScore +" 總分為:"+totalScore +" 平均分為:" +avgScore;
}
}
代碼運行結(jié)果:
四:本節(jié)總結(jié)&下節(jié)預(yù)告
通過本項目我們需要掌握的:
1:根據(jù)需求,分析出我們需要的信息(這個需要慢慢培養(yǎng))
2:根據(jù)需求分析出信息后,需要知道該使用什么技術(shù)來實現(xiàn)(這個需要慢慢培養(yǎng))
以上兩點都扯淡。因為先階段咱們剛開始學(xué),所以不著急。慢慢來
以下才是重點呢。
3:一維數(shù)組、二維數(shù)組的使用及獲取數(shù)組中數(shù)據(jù)
4:for循環(huán)使用使用
5:if...else if...else的使用
6:自定義方法的使用
7:用戶用戶鍵盤錄入int類型的數(shù)據(jù)。
下節(jié)預(yù)告:
1:思考,上面的這些代碼,還可不可以在簡單一些??
2:上面的代碼運行一次就完了。怎么根據(jù)用戶輸入的,進行結(jié)束。
歡迎學(xué)習(xí)下一篇《從零學(xué)java筆錄-第38篇基礎(chǔ)語法完結(jié)小項目練習(xí)-學(xué)生管理系統(tǒng)升級版》