從零學(xué)java筆錄-第37篇基礎(chǔ)語法完結(jié)小項目練習(xí)-學(xué)生管理系統(tǒng) 基礎(chǔ)版

前言:

本文是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)升級版》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容