6-3 设计门票(抽象类) (10 分)

题目描述:

某学校举办一次活动,需要凭票参加,每张票都有票号和售价。
门票分为3类:当天票,预订票和学生预订票。
当天票价格50。
预订票,提前时间>10天的,售价30;提前10天以内的,售价40;
学生预订票,提前时间>10天的,售价15;提前10天以内的,售价20。

(1)编写抽象类Ticket类,包含以下成员
①属性:
number:私有,int型,表示票号;
②方法:

  1. Ticket(int number), 构造方法,初始化票号;
  2. int getPrice(), 返回票价,抽象方法;
  3. String toString(),返回一个字符串,格式为“Number:票号,Price:票价”。

(2)编写Ticket类的子类WalkupTicket,表示当天票,包含以下成员
①方法:
1)WalkupTicket(int number), 构造方法,初始化票号;
2)int getPrice(), 返回票价50。

(3)编写Ticket类的子类AdvanceTicket,表示预订票,包含以下成员
①属性:

  1. leadTime:私有,int型,表示提前预订的天数;
    ②方法:
  2. AdvanceTicket(int number,int leadTime), 构造方法,初始化票号和提前天数;
  3. int getPrice(), 如果提前天数>10天,票价30,否则,票价40。

(4)编写AdvanceTicket类的子类StudentAdvanceTicket,表示学生预订票,包含以下成员
①属性:

  1. height:私有,int型,表示购票学生的身高(单位厘米);
    ②方法:
    1)StudentAdvanceTicket(int number,int leadTime,int height), 构造方法,初始化票号、提前天数和身高;
    2)int getPrice(),

    如果学生身高>120:提前天数>10天,票价20,否则,票价30。
    如果学生身高<=120,票价是身高120以上学生的对折。

裁判测试程序样例: 

public class Main{
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        Ticket a = new WalkupTicket(in.nextInt());
        System.out.println(a.toString());
        Ticket b = new AdvanceTicket(in.nextInt(), in.nextInt());
        System.out.println(b.toString());
        Ticket c = new StudentAdvanceTicket(in.nextInt(), in.nextInt(), in.nextInt());
        System.out.println(c.toString());
    }
}

/* 请在这里填写答案 */

按如下框架设计类后提交即可:

abstract class Ticket {
……
}
class WalkupTicket extends Ticket {
……
}
class AdvanceTicket extends Ticket {
……
}
class StudentAdvanceTicket extends AdvanceTicket {
……
}

输入样例:

输入票号,创建一个WalkupTicket对象。
输入票号和提前天数,创建一个AdvanceTicket对象。
输入票号、提前天数和身高,创建一个StudentAdvanceTicket对象。

1
2 10
3 11 130

输出样例:

输出创建的3个对象的票号和票价(调用toString()方法)。

Number:1,Price:50
Number:2,Price:40
Number:3,Price:20

整个题目代码如下:(如果帮助到了你,可以留下你的小赞赞吗?)

import java.util.Scanner;

public class Main{
    public static void main(String args[]) {
        @SuppressWarnings("resource")
		Scanner in = new Scanner(System.in);
        Ticket a = new WalkupTicket(in.nextInt());
        System.out.println(a.toString());
        Ticket b = new AdvanceTicket(in.nextInt(), in.nextInt());
        System.out.println(b.toString());
        Ticket c = new StudentAdvanceTicket(in.nextInt(), in.nextInt(), in.nextInt());
        System.out.println(c.toString());
    }
}

/* 请在这里填写答案 */

//程序按以下框架进行设计后提交:
abstract class Ticket {
 //……
	private int number;
	public Ticket(int number)
	{
		this.number=number;
	}
	/*public int getNumber()
	{
		return this.number;
	}*/
	public abstract int getPrice();

	public String toString()
	{
		return "Number:"+this.number+",Price:"+this.getPrice();
	}
}
class WalkupTicket extends Ticket {
 //……
	public WalkupTicket(int number)
	{
		super(number);
	}
	public int getPrice()
	{
		return 50;
	}
}
class AdvanceTicket extends Ticket {
 //……
	private int leadTime;
	public AdvanceTicket(int number,int leadTime)
	{
		super(number);
		this.leadTime=leadTime;
	}
	public int getLeadTime()
	{
		return this.leadTime;
	}
	public int getPrice()
	{
		if(this.leadTime>10)
			return 30;
		else
			return 40;
	}
}
class StudentAdvanceTicket extends AdvanceTicket {
 //……
	private int height;
	public StudentAdvanceTicket(int number,int leadTime,int height)
	{
		super(number,leadTime);
		this.height=height;
	}
	public int getPrice()
	{
		if(this.height>120&&this.getLeadTime()>10)
			return 20;
		else if(this.height>120&&this.getLeadTime()<=10)
			return 30;
		else if(this.height<120&&this.getLeadTime()>10)
			return 10;
		else if(this.height<120&&this.getLeadTime()<=10)
			return 15;
		return 0;
	}
}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值