1. 程式人生 > 其它 >javaSE經典綜合例項之學生管理系統1.0版(初學者)

javaSE經典綜合例項之學生管理系統1.0版(初學者)

技術標籤:綜合例項詳細解析(初學者)java程式語言

第一次釋出時間:2020年12月27日 01:58

持續更新中.......

文章一共分為三大部分:初級、進階、圖形介面化三個階段。此為1.0版

目標是進階到:

2.0版綜合應用程式

3.0版javaweb網站開發

4.0版maven專案管理SSM技術的綜合應用

文章目錄:

1.學生管理系統的初級階段01

主要知識點:控制語句結構及陣列的應用

2.學生管理系統的初級階段02

主要知識點:面向物件的綜合應用

3.學生管理系統的初級階段03

主要知識點:圖形使用者化介面、表格元件、以及資料庫的簡單使用

1.學生管理系統的初級階段01

1.總體設計:
    (1)首先輸入學生人數和學科數目
    (2)其次輸入各學科名稱和各學生姓名
    (3)輸入各學生各學科成績
    (4)最後顯示所有學生所有科目資訊以及平均分、總分和排名
2.程式碼實現與分析:
    (1)輸入需要一個Scanner類建立的物件,獲取鍵盤輸入內容
         Scanner input=new Scanner(System.in);//表示建立一個讀取從控制檯輸入內容的流物件
    (2)輸入學生人數和學生科目,使用上述物件讀取從控制檯輸入的字元即可
         int studentNum=input.nextInt();//表示讀取的是一個整數,非整數將報錯,這裡是學生人數
         int subjectNum=input.nextInt();//表示讀取的是一個整數,非整數將報錯,這裡是科目總數
    (3)輸入學生的姓名及各科名稱、以及各個學生的各科成績。使用陣列的思想遍歷輸入
         String[] studentName=new String[studentNum];//建立一個指定學生人數的陣列,記錄學生的姓名
         String[] subjectName=new String[subjectNum];//建立一個指定科目總數的陣列,記錄科目的名稱
         String[] stuInfo=new String[studentNum];//建立一個指定學生人數的陣列,記錄各個學生的姓名、科目成績資訊
         int[] scoreSum=new int[studentNum];//建立一個指定學生人數的陣列,記錄各個學生的各科成績總和
         String header="序號"+"\t"+"姓名"+"\t";//輸出的列名稱

    (4)輸入學生的姓名及各科名稱、以及各個學生的各科成績。使用迴圈遍歷輸入
         //1.輸入學生的姓名,同時更新學生的資訊
         for(int i=0;i<studentName.length;i++){
            System.out.println("請輸入第 "+(i+1)+" 位學生的姓名:");
            String name=input.next();//輸入學生的姓名
            studentName[i]=name;//更新儲存學生姓名陣列
            stuInfo[i] = name+"\t";//更新學生資訊陣列    
         }

         //2.輸入各個科目的,同時更新列名的資訊
         for(int i=0;i<subjectName.length;i++){
            System.out.println("請輸入第 "+(i+1)+" 科的科目名稱:");
            String name=input.next();//輸入科目的名稱
            subjectName[i]=name;//更新儲存科目名稱陣列
            stuInfo[i] += name+"\t";//更新學生資訊陣列    
         }       

         //3.輸入各個學生的各科科目的成績,同時更新學生的資訊和計算他們的總分
         for(int i=0;i<studentName.length;i++){
             int sum=0;//記錄學生的各科成績之和
             for(int j=0;j<subjectName.length;j++){
                System.out.println("請輸入學生"+studentName[i]+"的"+subjectName[j]+"科目成績:");
                int score=input.nextInt();//輸入科目的成績
                sum += score;//計算總分
                stuInfo[i] += score+"\t";//更新學生的資訊  
             }   
             scoreSum[i]=sum;//更新學生總分的資訊
             double avg=sum*1.0/subjectName.length;//計算平均分
             DecimalFormat df=new DecimalFormat("0.00");//格式不嚴格處理,保留兩位小數
             avg=Double.valueOf(df.format(avg));//轉換為double型
             stuInfo[i] +=sum +"\t"+avg+"\t";
         }   

        //4.所有輸入結束,關閉流
        input.close();

    (5)根據總分排序
        //5.根據總分對學生進行排名(使用選擇排序從高分到低分,同時更新學生資訊陣列)
        for (int i = 0; i < scoreSum.length-1; i++) {
            for (int j = i+1; j < scoreSum.length-1; j++) {
                if(scoreSum[i]<scoreSum[j]){
                    //交換比較值
                    int temp=scoreSum[i];
                    scoreSum[i]=scoreSum[j];
                    scoreSum[j]=temp;

                    //同時資訊也交換,實現資訊跟著總分排序
                    String str=stuInfo[i];
                    stuInfo[i]=stuInfo[j];
                    stuInfo[j]=str;
                }
            }
        }

        //6.輸出結果
        System.out.println(header+"總分\t平均分\t排名");//輸出列名
        for (int i = 0; i < stuInfo.length; i++) {
            System.out.println(stuInfo[i]+"第"+(i+1)+"名");//輸出最後結果
        }


====================================測試過程==============================================
請輸入學生的總人數:
3
請輸入科目的總數:
3
請輸入第 1 位學生的姓名:
語程峰
請輸入第 2 位學生的姓名:
楊慧慧
請輸入第 3 位學生的姓名:
劉子琪
請輸入第 1 科的科目名稱:
語文
請輸入第 2 科的科目名稱:
數學
請輸入第 3 科的科目名稱:
英語
請輸入學生語程峰的語文科目成績:
98
請輸入學生語程峰的數學科目成績:
98
請輸入學生語程峰的英語科目成績:
96
請輸入學生楊慧慧的語文科目成績:
98
請輸入學生楊慧慧的數學科目成績:
92
請輸入學生楊慧慧的英語科目成績:
96
請輸入學生劉子琪的語文科目成績:
96
請輸入學生劉子琪的數學科目成績:
98
請輸入學生劉子琪的英語科目成績:
90
序號	姓名	語文	數學	英語	總分	平均分	排名
1	語程峰	98	98	96	292	97.33	第1名
2	楊慧慧	98	92	96	286	95.33	第2名
3	劉子琪	96	98	90	284	94.67	第3名

Process finished with exit code 0 

==================================================================================================================================================================================

2.學生管理系統的初級階段02

1.總體設計要求與目的
    (1)先規定學生的人數
    (2)實現學生的新增和查詢
    (3)根據學生編號更新學生資訊和刪除學生
    (4)根據學生編號輸入學生各門成績
    (5)根據某門成績或總分排名
    (6)上述所有操作均可迴圈操作

2.鞏固知識點:控制語句結構及陣列知識,物件及類的綜合使用

3.總體設想與設計
    (1)系統的上限人數由控制檯輸入人數決定
    (2)整個小實驗是分為三大類:
            封裝類Student,包含學生的基本資訊,包括科目名稱與成績。
            主程式是實現迴圈操作的專案選擇
            方法實現類實現的各個操作的具體方法
    (3)所有輸入內容進行驗證,檢視是否符合要求
    (4)執行順序大致可以分為:主程式操作選擇--->呼叫處理方法---->呼叫封裝類獲取相關類的資料
    (5)初步學習階段儘可能少用系統工具類

4.具體實現步驟與思路分析:

    (1)主程式部分實現的是學生人數的輸入,這就限定了這個管理系統的學生人數上限,使用輸入流獲取
         //1.建立輸入流物件
        Scanner input=new Scanner(System.in);
        //2.輸入學生總人數和科目的總數
        System.out.println("請輸入學生的總人數:");
        int studentNum=input.nextInt();
        //3.建立一個指定人數的學生類陣列
        Student[] stu=new Student[studentNum];
        //4.建立執行方法類物件
        StudentService stuService=new StudentServiceImpl(stu);

    (2)主程式部分實現的操作的迴圈使用,使用一個while迴圈實現,直至選擇退出程式才結束
         
         //5.執行選擇操作
        while (true) {
            System.out.println("請選擇要執行的操作:");
            System.out.println("00:新增一個學生");
            System.out.println("01:根據學號修改學生資訊");
            System.out.println("02:根據學號查詢學生");
            System.out.println("03:根據性別查詢學生");
            System.out.println("04:根據平均分查詢學生");
            System.out.println("05:根據學號刪除學生");
            System.out.println("06:刪除所有學生");
            System.out.println("07:顯示所有學生的所有資訊");
            System.out.println("08:根據某門成績進行降序排列顯示");
            System.out.println("88:退出系統");

            String choose=input.next();
            if(choose.equals("00")){

            }else if(choose.equals("01")){

            }else if(choose.equals("02")){

            }else if(choose.equals("03")){

            }else if(choose.equals("04")){

            }else if(choose.equals("05")){

            }else if(choose.equals("06")){

            }else if(choose.equals("07")){

            }else if(choose.equals("08")){

            }else if(choose.equals("88")){
                System.out.println("謝謝使用學生管理系統,再見!");
                System.exit(0);
            }else{
                System.out.println("抱歉,沒有該選項,請重新選擇!");
            }
        }

    (3)封裝類設計:Student.java
         屬性有:Long型 stu_ID; String型 stu_name,stu_gender; Double型 scoreAvg;
                Integer型 stu_age,java,phython,computer,scoreSum,rank
         以及一個處理平均數格式的屬性:DecimalFormat df=new DecimalFormat("0.00");
         重寫其toString方法,使用"\t"分隔

    (4)主類設計:StudentAdmin.java,就是(1)(2)的主要內容,還有一個方法,實現學生資訊修改選項:private String updateStudentByChoosing();

    (5)介面設計:介面:StudentService.java;就是把要執行的方法全部列舉一遍

    (6)實現類設計:StudentServiceImpl.java;實現具體的方法

    (7)工具類設計1:Condition.java;各種輸入判斷以及部分條件判斷,以確保執行操作是在合理的要求內實現

    (8)工具類設計2:Regex.java;正則表示式類

==================================================================================================================================================================================

5.介面類:StudentService.java

    //1.新增學生的方法
    void addStudentInformation();

    //2.根據學號修改學生資訊
    void updateStudentInformationByStu_ID(String stu_ID);

    //3.根據學號查詢學生資訊
    void queryStudentInformationByStu_ID(String stu_ID);

    //4.根據性別查詢學生
    void queryStudentInformationByStu_gender(String stu_gender);

    //5.根據平均分查詢學生
    void queryStudentInformationByScoreAvg(String level,Double scoreAvg);

    //6.根據學號刪除學生
    void deleteStudentInformationByStu_ID(String stu_ID);

    //7.根據學號查詢學生
    void deleteAllStudentInformation();

    //8.顯示所有學生的所有資訊
    void queryAllStudentInformation();

    //9.根據某門成績進行降序排列顯示學生資訊
    void queryStudentInformationBySubject(String subject);
==================================================================================================================================================================================


5.介面實現類:StudentServiceImpl.java;逐步實現上面的方法


         

3.學生管理系統的初級階段03