JAVA實驗三

1. 簡單多態問題 問題描述 編程實現下圖的類圖,並編寫一段程序來測試。
(1)可自行添加其他的成員變量和成員方法
(2) 各個子類的introduceSelf方法打印出子類的類名。
(3)本題的重點是測試程序的編寫,需要測試各種情形,如單個對象、數組化(即定義一個數組,包含不同子類的對象)和參數化(定義一個函數,它的實參可以是不同子類的對象)
注: 編寫測試類 Test,針對單個對象(Person),數組化(Person[])分別調用 introduceSelf()函數。
在這裏插入圖片描述

import java.util.Scanner;

class Person{
	String name;
	String job;
	public Person(){System.out.println("Please Enter Your Name:");}
	void GetSelf(String s1){}
	void introduceSelf(){System.out.println("My name is "+name+" and my job is "+job);}
}

class Student extends Person{
	void GetSelf(String s1){name = s1;	job = "Student";}
}

class Employee extends Person{
	void GetSelf(String s1){name = s1;	job = "Employee";}
}

class Retired extends Person{
	void GetSelf(String s1){name = s1;	job = "Retired";}
}


public class PersonTest {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("Please Enter The Number Of People:");
		String s;
		int num = 0;
		num = in.nextInt();
		int cho=0;
		Person[] pr = new Person[num];
		for (int i = 0; i < num; i++) {
			System.out.println("Please choose the number to record the message");
			System.out.println("1.Student 2.Employee 3.Retired ");
			cho = in.nextInt();
			switch (cho) {
			case 1:
				pr[i]= new Student();
				s = in.next();
				pr[i].GetSelf(s);
				break;
			case 2:
				pr[i] = new Employee();
				s = in.next();
				pr[i].GetSelf(s);
				break;
			case 3:
				pr[i] = new Retired();
				s = in.next();
				pr[i].GetSelf(s);
				break;
			default:
				System.out.println("Your Enter Is Wrong , PLease Again");
				break;
			}
		}
		System.out.println("Each person's self-introduction:");
		for (int i = 0; i < num; i++) {
			pr[i].introduceSelf();
		}
		
		
		
	}
}


2. Shape 多態問題 問題描述 編程實現右圖的類圖,並編寫一段程序來測試。
(1)對於Shape類的getArea方法,可以是空函數,而對於 Rectangle 和 Circle 類的 getArea 方法,需要真正實現其功能,即計算相應圖形的面積
(2)Rectangle 和 Circle 類的構造函數需要實現
(3)需要測試各種情形,如單個對象、數組化(即定義一個數組,包含不同子類的對象)和參數化(定義一個函數,它的實參可以是不同子類的對象)等情形。 注:要求同上題,分別調用 getArea()函數。
在這裏插入圖片描述

import java.awt.geom.Area;
import java.util.Scanner;

class Shape{
	Scanner in = new Scanner(System.in);
	double area;
	double GetArea(){return area;}	
}

class Rectangle extends Shape{
	double len;	double wid;
	public Rectangle() {
		System.out.println("Please enter length and width:");
		len = in.nextDouble();	wid = in.nextDouble();
	}
	double GetArea(){
		area = len*wid;
		return area;
	}	
}

class Circle extends Shape{
	static final double t = 3.1415926;
	double rad;
	public Circle() {
		System.out.println("Please enter the radius");
		rad = in.nextDouble();
	}
	double GetArea(){
		area = 0.5*t*Math.pow(rad, 2);
		return area;
	}
}

public class ShapeTest {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("Please Enter The Number Of Graph:");
		int num = 0;
		num = in.nextInt();
		int cho=0;
		Shape[] sp = new Shape[num];
		System.out.println("start——————————————————————————————————————————————————");
		for (int i = 0; i < num; i++) {
			System.out.println("Please choose the number to record the Shape");
			System.out.println("1.Rectangle 2.Circle ");
			cho = in.nextInt();
			switch (cho) {
			case 1:
				sp[i]= new Rectangle();
				System.out.println("The Number "+i+1+"'s area is "+sp[i].GetArea());
				break;
			case 2:
				sp[i] = new Circle();
				System.out.println("The Number "+i+"'s area is"+sp[i].GetArea());
				break;
			default:
				System.out.println("Your Enter Is Wrong , PLease Again");
				break;
			}
		}	
		System.out.println("End————————————————————————————————————————————————————");
	}
}

3、 設計題目:模擬簡單的信息錄入系統。設計書、CD、磁帶三個類,每個類含有名字、作者或演唱者、出版社或唱片社、價格、出版日期等相關信息。根據系統提示從鍵盤輸入相關內容。
設計要求:可以使用類似命令行的方式來實現。程序運行後提示用戶可以執行的操作類型,並要求用戶輸入一種選擇。根據用戶的選擇,提示用戶輸入相關的信息(根據不同選擇,輸入不同的信息),最後在屏幕上輸出這些信息。
可以使用循環來完成,以接受用戶的多次輸入。當用戶選擇退出,程序結束。對於不合要求的輸入,給出提示,允許再重新輸入。對於不同類型的輸入信息,需要使用分支結構判別。
提示:由於書、CD、磁帶有共同的內容,可以設計一個父類,父類中包含公共信息。
class MyMedia{
String mediaName; //出版物名稱
float price; //出版物價格
String press; //出版社(磁帶發行商)
String artist; //作者(演唱者)
void mediaNameInput(){} //出版物名稱輸入成員函數
void mediaPriceInput(){} //價格輸入成員函數
void mediaPressInput(){} //出版社(磁帶發行商)輸入成員函數
void artistInput(){} //作者(演唱者)輸入成員函數
}
然後分別定義三個相應子類,繼承擴展父類的成員。參考界面如下圖所示:
在這裏插入圖片描述

import java.util.Scanner;

import com.sun.xml.internal.bind.v2.runtime.Name;


class MyMedia{
	Scanner in = new Scanner(System.in);
	String mediaName;       //出版物名稱
	float price;              //出版物價格
	String press;             //出版社(磁帶發行商)
	String artist;             //作者(演唱者)
	String name;
	void mediaNameInput(){}   //出版物名稱輸入成員函數
	void mediaPriceInput(){}    //價格輸入成員函數
	void mediaPressInput(){}    //出版社(磁帶發行商)輸入成員函數
	void artistInput(){}         //作者(演唱者)輸入成員函數
	void Input(){
		mediaNameInput();
		mediaPriceInput();
		mediaPressInput();
		artistInput();
	}
	void Print(){
		System.out.println(name+"的名字是:"+mediaName);
		System.out.println(name+"的價格是:"+price);
		System.out.println(name+"的出版社是:"+press);
		System.out.println(name+"的作者是:"+artist);
		System.out.println("\n\n");
	}
}              

class Book extends MyMedia{
	void mediaNameInput(){
		name = "書";
		System.out.println("請輸入書的名字:");
		mediaName = in.next();
	}
	void mediaPriceInput(){
		System.out.println("請輸入書的價格:");
		price = in.nextInt();
	}
	
	void mediaPressInput(){
		System.out.println("請輸入書的出版社:");
		press = in.next();
	}    
	
	void artistInput(){
		System.out.println("請輸入書的作者:");
		artist = in.next();
	}   
}

class CD extends MyMedia{
	void mediaNameInput(){
		name = "CD";
		System.out.println("請輸入CD的名字:");
		mediaName = in.next();
	}
	void mediaPriceInput(){
		System.out.println("請輸入CD的價格:");
		price = in.nextInt();
	}
	
	void mediaPressInput(){
		System.out.println("請輸入CD的出版社:");
		press = in.next();
	}    
	
	void artistInput(){
		System.out.println("請輸入CD的作者:");
		artist = in.next();
	}       
}

class Tape extends MyMedia{
	void mediaNameInput(){
		name = "磁帶";
		System.out.println("請輸入磁帶的名字:");
		mediaName = in.next();
	}
	void mediaPriceInput(){
		System.out.println("請輸入磁帶的價格:");
		price = in.nextInt();
	}
	
	void mediaPressInput(){
		System.out.println("請輸入磁帶的出版社:");
		press = in.next();
	}    
	
	void artistInput(){
		System.out.println("請輸入磁帶的作者:");
		artist = in.next();
	}       
}

class Vet{
	public  void show(MyMedia a) {
		System.out.println("您輸入的是以下信息:");
		a.Print();
	}
}


public class Media{
	public static void main(String[] arg){
		Scanner in = new Scanner(System.in);
		String s = new String();
		System.out.println("請選擇你要進行的操作(請輸入1——4中的任一數字):\n");

		int sgn = 0;
		while(true){
			Vet v = new Vet();
			System.out.println("1: 輸入書的信息\n2: 輸入CD的信息\n3: 輸入磁帶的信息\n4:退出系統");
			sgn = in.nextInt();
			if(sgn==4)	break;
			while(sgn>4||sgn<1){
				System.out.println("Wrong Input. Please retype");
				sgn = in.nextInt();
			}
			
			switch (sgn) {
			case 1:
				Book b = new Book();
				b.Input();
				v.show(b);
				break;
			case 2:
				CD c = new CD();
				c.Input();
				v.show(c);
				break;
			case 3:
				Tape t = new Tape();
				t.Input();
				v.show(t);
				break;
			default:
				break;
			}
			
			
			
		}
		
	}
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章