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;
			}
			
			
			
		}
		
	}
}






  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值