Java上機實驗報告(1)


一、任務簡要描述

1、實現Java版本的快速排序。

2、編寫一個學生和教師數據輸入和顯示程序,學生數據有編號、姓名、班號和成績,教師數據有編號、姓名、職稱和部門。要求將編號、姓名輸入和顯示設計成一個類Person,並作為學生數據操作類Student 和教師數據操作類Teacher 的基類。

3、請設計 3 個類 , 分別是學生類 Student, 本科生類Undergaduate, 研究生類 Postgraduate, 其中 Student 類是一個抽象類 , 它包含一些基本的學生信息如姓名、所學課程、課程成績等 , Undergraduate 類和 Postgraduate 都是 Student 類的子類 , 它們之間的主要差別是計算課程成績等級的方法有所不同 , 研究生的標准要比本科生的標准高一些。假設某班級里既有本科生也有研究生 , 請編寫程序統計出全班學生的成績等級並顯示出來。此題關鍵是設計一個學生數組 , 既能存放本科生對象 , 又能存放研究生對象。

二、問題及解決

1算法思想:基於分治的思想,是冒泡排序的改進型。首先在數組中選擇一個基准點(該基准點的選取可能影響快速排序的效率,后面講解選取的方法),然后分別從數組的兩端掃描數組,設兩個指示標志(lo指向起始位置,hi指向末尾),首先從后半部分開始,如果發現有元素比該基准點的值小,就交換lohi位置的值,然后從前半部分開始掃秒,發現有元素大於基准點的值,就交換lohi位置的值,如此往復循環,直到lo>=hi,然后把基准點的值放到hi這個位置。一次排序就完成了。以后采用遞歸的方式分別對前半部分和后半部分排序,當前半部分和后半部分均有序時該數組就自然有序了。

排序過程:

 

輸出結果:

 

2、

 

Person類:

 1 public class person {
 2     String name;
 3     String number;
 4         
 5     person(){ }
 6     person(String number, String name){
 7         this.number = number;
 8         this.name = name;
 9     }
10     public void setNumber(String n){
11         number = n;
12     }
13     public String getNumber(){
14         return number;
15     }
16     public void setName(String c){
17         name = c;
18     }
19     public String getName(){
20         return name;
21     }
22     public void input(){
23         Scanner sc = new Scanner(System.in);
24         System.out.println("Please input the name:");
25         name = sc.nextLine();
26         System.out.println("Please input the number:");
27         number = sc.nextLine();
28     }
29     public void showInfo(){
30         System.out.println("The number is:" + getNumber() + ", name is:" + getName());
31     }
32 }

 

Teacher類:

 1 class Teacher extends person{
 2     String title;          //職稱
 3     String dept;           //部門
 4     Teacher(){
 5         super();
 6     }
 7     Teacher(String number, String name, String title, String dept){
 8         super(number, name);
 9         this.title = title;
10         this.dept = dept;
11     }
12     public void setTitle(String t){
13         title = t;
14     }
15     public String getTitle(){
16         return title;
17     }
18     public void setDept(String d){
19         dept = d;
20     }
21     public String getDept() {
22         return dept;
23     }
24     //子類重載父類方法
25     public void input(){
26         super.input();
27         System.out.println("Please input the title:");
28         Scanner sc = new Scanner(System.in);
29         setTitle(sc.nextLine());
30         //title = sc.nextLine();
31         System.out.println("Please input the dept:");
32         dept = sc.nextLine();
33     }
34     public void showInfo(){
35         super.showInfo();
36         System.out.println("The teacher's title is:" + getTitle() + ", department is:" + getDept()); 
37     }
38 }

 

Student類:

 1 class Student extends person{
 2     String classnumber;          //班號
 3     int grade;           //成績
 4     Student(){
 5         super();
 6     }
 7     Student(String number, String name, String classnumber, int grade){
 8         super(number, name);
 9         this.classnumber = classnumber;
10         this.grade = grade;
11     }
12     public void setClassnumber(String c){
13         classnumber = c;
14     }
15     public String getClassnumber(){
16         return classnumber;
17     }
18     public void setGrade(int g){
19         grade = g;
20     }
21     public int getGrade() {
22         return grade;
23     }
24     //子類重載父類方法
25     public void input(){
26         super.input();
27         System.out.println("Please input the classnumber:");
28         Scanner sc = new Scanner(System.in);
29         setClassnumber(sc.nextLine());
30         //classnumber = sc.nextLine();
31         System.out.println("Please input the grade:");
32         grade = sc.nextInt();
33     }
34     public void showInfo(){
35         super.showInfo();
36         System.out.println("The student's classnumber is:" + getClassnumber() + ", grade is:" + getGrade()); 
37     }
38 }

 

輸出結果:

 

3、

 

對象數組:

 

1 Student[] students = new Student[5];

 

 

 

Student類:

 1 public abstract class Student
 2 {
 3     String name;
 4     String type;
 5     int courseScore;
 6     String courseGrade;
 7     
 8     public Student(String name)
 9     {
10         this.name = name;
11         courseGrade="";
12     }
13     
14     public abstract void calculateGrade();
15     
16     public String getName()
17     {
18         return name;
19     }
20     
21     public String getType()
22     {
23         return type;
24     }
25     
26     public String getCourseGrade()
27     {
28         return courseGrade;
29     }
30     
31     public int getCourseScore()
32     {
33         return courseScore;
34     }
35     
36     public void setName(String name)
37     {
38         this.name = name;
39     }
40     
41     public void setType(String type)
42     {
43         this.type = type;
44     }
45     
46     public void setCourseScore(int courseScore)
47     {
48         this.courseScore = courseScore;
49     }
50     
51 }

 

本科生類:

 1 class Undergraduate extends Student
 2 {
 3     public Undergraduate(String name, int courseScore)
 4     {
 5         super(name);
 6         type = "本科生";
 7         this.courseScore = courseScore;
 8     }
 9     
10     public void calculateGrade()
11     {
12         if (courseScore >= 80 && courseScore < 100) courseGrade = "優秀";
13         else if (courseScore >= 70 && courseScore < 80) courseGrade = "良好";
14         else if (courseScore >= 60 && courseScore < 70) courseGrade = "一般";
15         else if (courseScore >= 50 && courseScore < 60) courseGrade = "及格";
16         else courseGrade = "不及格";  
17  
18     }
19 }

 

研究生類:

 1 class Postgraduate extends Student
 2 {
 3     public Postgraduate(String name, int courseScore)
 4     {
 5         super(name);
 6         type = "研究生" ;
 7         this.courseScore = courseScore;
 8     }
 9     public void calculateGrade()
10     {
11         if (courseScore >= 90 && courseScore < 100) courseGrade = "優秀";
12         else if (courseScore >= 80 && courseScore < 90) courseGrade = "良好";
13         else if (courseScore >= 70 && courseScore < 80) courseGrade = "一般";
14         else if (courseScore >= 60 && courseScore < 70) courseGrade = "及格";
15         else courseGrade = "不及格";   
16  
17     }
18 }
19  

 

成績計算類:

 1 public class Polymorphism
 2 {
 3     int total = 0;
 4     double average;
 5     
 6     public void showInfo(){
 7         Student[] students = new Student[5];
 8     
 9         students[0] = new Undergraduate("ABC", 95);
10         students[1] = new Undergraduate("DEF", 85);
11         students[2] = new Postgraduate("GHI", 75);
12         students[3] = new Undergraduate("JKL", 65); 
13         students[4] = new Postgraduate("MNO", 55);
14         for (int i=0; i<5; i++)
15         {
16             total += students[i].courseScore;
17             students[i].calculateGrade();
18         }
19         average = total / 5;
20         System.out.println("姓名" + "     類型" +"    成績");
21         System.out.println("-----------------------");
22  
23         for (int i=0; i<5; i++) 
24         {            
25             System.out.println(students[i].getName( )+" "+students[i].getType( )+"  "+students[i].getCourseGrade( ));
26         }    
27 
28         //Student st = new Student("李明");
29         System.out.println("平均成績:" + average);
30         System.out.println();
31         for(int i=0; i<5; i++)
32         {
33             if(students[i] instanceof Undergraduate )
34             {
35                 System.out.println(students[i].getName()+"是本科生");
36             }
37             else
38             {
39                 System.out.println(students[i].getName()+"是研究生");
40             }
41         }
42     }
43     public static void main(String[] args)
44     {
45         Polymorphism show = new Polymorphism();
46         show.showInfo();
47         
48     }
49 }

輸出結果:

總結:

  練習使用了創建對象數組的方法,使用面向對象的思想,子類繼承父類的屬性和方法,並對父類的方法進行重寫,在題目三中,我本來將計算成績的內容全部寫在main方法里,經過老師講解,我重新修改了程序,將創建對象數組和成績計算的相關程序單獨寫在一個類里面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM