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

前言:

本文是java基礎(chǔ)語(yǔ)法完結(jié)項(xiàng)目篇-學(xué)生管理系統(tǒng)

本節(jié)內(nèi)容:

1:學(xué)生系統(tǒng)需求及分析

2:重點(diǎn)代碼分析

3:完整代碼

4:本節(jié)總結(jié)&下節(jié)預(yù)告

本文出處:《凱哥陪你學(xué)系列之java基礎(chǔ)篇.Java基本語(yǔ)法篇》中第37篇基礎(chǔ)語(yǔ)法完結(jié)小項(xiàng)目練習(xí)-學(xué)生管理系統(tǒng) 基礎(chǔ)版

歡迎訪問(wèn)凱哥個(gè)人博客:www.kaigejava.com

歡迎關(guān)注凱哥公眾號(hào):凱哥Java

一:學(xué)生系統(tǒng)需求及分析

需求:

假設(shè)有三個(gè)班級(jí),每個(gè)班級(jí)中有三個(gè)學(xué)生,每個(gè)學(xué)生學(xué)科分別為語(yǔ)文、數(shù)學(xué)、英語(yǔ)且有對(duì)應(yīng)的分?jǐn)?shù)

現(xiàn)根據(jù)用戶(hù)輸入的班級(jí)以及選擇的學(xué)生姓名查詢(xún)對(duì)應(yīng)的學(xué)生各科成績(jī)、三科成績(jī)總分以及平均分?jǐn)?shù)。

思考:

根據(jù)需求我們可以分出如下

1.1:用什么存儲(chǔ)數(shù)據(jù)呢?

1.2:每個(gè)班級(jí)中有三個(gè)學(xué)生,每個(gè)學(xué)生有三個(gè)學(xué)科且有對(duì)應(yīng)的分?jǐn)?shù),這個(gè)又怎么存儲(chǔ)怎么表示呢?

1.3:怎么根據(jù)用戶(hù)輸入的進(jìn)行相應(yīng)的查詢(xún)呢?

1.4:怎么處理總分和平均分?jǐn)?shù)呢?

分析:

1.1:我們已經(jīng)學(xué)習(xí)掌握的知識(shí)中的能夠用于存放東西的是數(shù)組。所以這里需要考慮到使用數(shù)組來(lái)存儲(chǔ)

1.2:每個(gè)班級(jí)有三個(gè)學(xué)生,每個(gè)學(xué)生又有三個(gè)學(xué)科且三個(gè)學(xué)科都有對(duì)應(yīng)的分?jǐn)?shù)。這個(gè)怎么表示呢? 同樣使用數(shù)組來(lái)表示,那么數(shù)組我們已經(jīng)學(xué)過(guò)一維數(shù)組、二維數(shù)組。應(yīng)該選擇那個(gè)數(shù)組呢?

接著分析:

三個(gè)學(xué)生,三個(gè)學(xué)科而且學(xué)科有分?jǐn)?shù)(假設(shè)都是整數(shù)的)。我們可以把每個(gè)學(xué)生的成績(jī)(三個(gè)學(xué)科的得分)看作一個(gè)一維數(shù)組,成績(jī)是整數(shù)類(lèi)型的 所以可以得到一個(gè)學(xué)生的三科成績(jī)數(shù)組 int [] arrscore = new int[3];

一個(gè)班級(jí)有三個(gè)學(xué)生,所以同樣,學(xué)生可以用一維數(shù)組存放。因?yàn)閷W(xué)生姓名是String類(lèi)型的。所以,我們可以得到學(xué)生數(shù)組 String[] studentArr = new String[3];

那么問(wèn)題又來(lái)看,怎么把學(xué)生信息和各學(xué)科成績(jī)關(guān)聯(lián)在一起呢?

我們可以,用一個(gè)二位數(shù)組來(lái)進(jìn)行管理,二維數(shù)組中[m]對(duì)應(yīng)學(xué)生數(shù)組中每個(gè)學(xué)生對(duì)應(yīng)的index,而二維數(shù)組中的[n]用來(lái)存放每個(gè)學(xué)科對(duì)應(yīng)的分?jǐn)?shù)。所以我們可以得到學(xué)生,成績(jī)關(guān)聯(lián)的數(shù)組

因?yàn)?學(xué)生index是int類(lèi)型的。成績(jī)也是int類(lèi)型的。所以二維數(shù)組就是int類(lèi)型的。

int [] [] ?studentScore = new int [3][3];

1.3:怎么獲取到用戶(hù)輸入呢?可以使用scanner 函數(shù)。怎么根據(jù)用戶(hù)輸入的進(jìn)行相應(yīng)的查詢(xún)呢?這里就使用到if判斷語(yǔ)句了。

1.4:總分就是獲取到每個(gè)學(xué)科的成績(jī)進(jìn)行累加,平均分?jǐn)?shù),就是總分/學(xué)科數(shù)就是平均分呢。

二:重點(diǎn)代碼分析

1:用于存放每個(gè)班級(jí)的學(xué)生信息的:

2:用于存放學(xué)生和各科成績(jī)的二維數(shù)組:

3:提示用戶(hù)輸入的:

4:獲取指定學(xué)生的每個(gè)學(xué)科分?jǐn)?shù)并求總分和平均分?jǐn)?shù)

5:根據(jù)用戶(hù)輸入的進(jìn)行查詢(xún)

6:本代碼對(duì)于的java類(lèi)名為:

三:完整代碼

public class StudentSystem {

public static void main(String[] args) {

/**

* 數(shù)據(jù)準(zhǔn)備:

* 1:定義班級(jí) 每個(gè)班有三個(gè)學(xué)生,每個(gè)學(xué)生的學(xué)科順序:語(yǔ)文、數(shù)學(xué)、英語(yǔ)

* 提示:可以考慮二維數(shù)組

* 2:定義每個(gè)班的學(xué)生。

* 提示:可以考慮一位數(shù)組

*

*

*/

//定義三個(gè)班級(jí),三個(gè)學(xué)生中每個(gè)學(xué)生的每個(gè)學(xué)科成績(jī)

//定義一班學(xué)生和各科成績(jī)的二維數(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é)生和各科成績(jī)的二維數(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é)生和各科成績(jī)的二維數(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};

//定義每個(gè)班中的三個(gè)學(xué)生

//定義一班每個(gè)學(xué)生姓名

String[] oneClassStudents = new String [] {"張三","李四","王五"};

//定義二班每個(gè)學(xué)生姓名

String[] twoClassStudents = new String [] {"周杰倫","中紅衣","四小龍"};

//定義三班每個(gè)學(xué)生姓名

String[] threeClassStudents = new String [] {"張三豐","張無(wú)忌","周芷若"};

System.out.println("請(qǐng)選擇班級(jí) 1:一班 2:二班 3:三班 ");

Scanner sc = new Scanner(System.in);//獲取鍵盤(pán)錄入的數(shù)據(jù)。獲取用戶(hù)選擇的班級(jí)

int classIndex = sc.nextInt();

if(1==classIndex){//選擇了一班

System.out.println("您好,您已經(jīng)選擇了一班");

//提示信息。注意不是println而是print這樣就不換號(hào)了

System.err.print("請(qǐng)輸入學(xué)生姓名序號(hào):");

//循環(huán)對(duì)應(yīng)班級(jí)的學(xué)生姓名

for (int i = 0; i < oneClassStudents.length; i++) {

int no = i+1;//因?yàn)閿?shù)組中下標(biāo)是從0開(kāi)始的,而現(xiàn)實(shí)中我們一般是從1開(kāi)始的。所以要+1

if(i==oneClassStudents.length-1){//進(jìn)行判斷。如果是班級(jí)中最后一個(gè)學(xué)生的時(shí)候進(jìn)行換行。這里使用的是println

System.err.println(no+":"+oneClassStudents[i]);

}else{//當(dāng)不是最后一個(gè)時(shí)候,就不用換行了。

System.err.print(no+":"+oneClassStudents[i] +" ");

}

}

//以上for循環(huán)完成之后,輸出的:請(qǐng)輸入學(xué)生姓名序號(hào):1:張三豐 2:張無(wú)忌 3:周芷若

Scanner scanner = new Scanner(System.in);//獲取鍵盤(pán)錄入的數(shù)據(jù)。獲取用戶(hù)選擇的學(xué)生

int studentIndex = scanner.nextInt();

studentIndex-=1;//因?yàn)楝F(xiàn)實(shí)是從1開(kāi)始的,而數(shù)組是從0開(kāi)始的。所以需要-1

//獲取學(xué)生姓名

String StudentName=oneClassStudents[studentIndex];

//獲取學(xué)生對(duì)應(yīng)的各科成績(jī)

int [] studentScore =oneClass[studentIndex];

//通過(guò)自定義方法獲取學(xué)生每個(gè)學(xué)科的信息以及總分、平均分

String detailMsg = getStudentDetail(studentScore);

System.out.println("學(xué)生姓名:"+StudentName +"。您本次考試信息詳情如下:"+detailMsg);

}else if(2==classIndex){//選擇了二班

//選擇了二班

System.out.println("您好,您已經(jīng)選擇了二班");

System.err.print("請(qǐng)輸入學(xué)生姓名序號(hào):");

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);//獲取鍵盤(pán)錄入的數(shù)據(jù)

int studentIndex = scanner.nextInt();

studentIndex-=1;//

String StudentName=twoClassStudents[studentIndex];

int [] studentScore =twoClass[studentIndex];

//通過(guò)自定義方法獲取學(xué)生每個(gè)學(xué)科的信息以及總分、平均分

String detailMsg = getStudentDetail(studentScore);

System.out.println("學(xué)生姓名:"+StudentName +"。您本次考試信息詳情如下:"+detailMsg);

}else{//選擇了三班

//選擇了三班

System.out.println("您好,您已經(jīng)選擇了三班");

System.err.print("請(qǐng)輸入學(xué)生姓名序號(hào):");

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);//獲取鍵盤(pán)錄入的數(shù)據(jù)

int studentIndex = scanner.nextInt();

studentIndex-=1;//

String StudentName=threeClassStudents[studentIndex];

int [] studentScore =threeClass[studentIndex];

//通過(guò)自定義方法獲取學(xué)生每個(gè)學(xué)科的信息以及總分、平均分

String detailMsg = getStudentDetail(studentScore);

System.out.println("學(xué)生姓名:"+StudentName +"。您本次考試信息詳情如下:"+detailMsg);

}

}

/**

* 通過(guò)自定義方法獲取學(xué)生每個(gè)學(xué)科的信息以及總分、平均分

* @param studentScore如參:學(xué)生信息

* @return str學(xué)生每個(gè)學(xué)科的信息以及總分、平均分

*/

public static String getStudentDetail(int[] studentScore) {

int ChineseScore =0;//定義用于存放語(yǔ)文分?jǐn)?shù)的

int MethScore=0;//數(shù)學(xué)分?jǐn)?shù)

int EnglishScore=0;//英語(yǔ)分?jǐn)?shù)

int totalScore = 0;//總分

double avgScore = 0.0;//平均分?jǐn)?shù)

for (int i = 0; i < studentScore.length; i++) {

if(0==i){//語(yǔ)文分?jǐn)?shù)

ChineseScore = studentScore[i];

}else if(1==i){//數(shù)學(xué)分?jǐn)?shù)

MethScore = studentScore[i];

}else{//英語(yǔ)分?jǐn)?shù)

EnglishScore = studentScore[i];

}

}

totalScore = ChineseScore+MethScore+EnglishScore;

avgScore = totalScore/studentScore.length;

return "語(yǔ)文得分:"+ChineseScore+" 數(shù)學(xué)得分:"+MethScore+" 英語(yǔ)得分:"+EnglishScore +" 總分為:"+totalScore +" 平均分為:" +avgScore;

}

}

代碼運(yùn)行結(jié)果:

四:本節(jié)總結(jié)&下節(jié)預(yù)告

通過(guò)本項(xiàng)目我們需要掌握的:

1:根據(jù)需求,分析出我們需要的信息(這個(gè)需要慢慢培養(yǎng))

2:根據(jù)需求分析出信息后,需要知道該使用什么技術(shù)來(lái)實(shí)現(xiàn)(這個(gè)需要慢慢培養(yǎng))

以上兩點(diǎn)都扯淡。因?yàn)橄入A段咱們剛開(kāi)始學(xué),所以不著急。慢慢來(lái)

以下才是重點(diǎn)呢。

3:一維數(shù)組、二維數(shù)組的使用及獲取數(shù)組中數(shù)據(jù)

4:for循環(huán)使用使用

5:if...else if...else的使用

6:自定義方法的使用

7:用戶(hù)用戶(hù)鍵盤(pán)錄入int類(lèi)型的數(shù)據(jù)。

下節(jié)預(yù)告:

1:思考,上面的這些代碼,還可不可以在簡(jiǎn)單一些??

2:上面的代碼運(yùn)行一次就完了。怎么根據(jù)用戶(hù)輸入的,進(jìn)行結(jié)束。

歡迎學(xué)習(xí)下一篇《從零學(xué)java筆錄-第38篇基礎(chǔ)語(yǔ)法完結(jié)小項(xiàng)目練習(xí)-學(xué)生管理系統(tǒng)升級(jí)版》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容