当前位置: 首页 > article >正文

PTA-6-42 设计门票(抽象类)

题目:

某学校举办一次活动,需要凭票参加,每张票都有票号和售价。
门票分为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());
    }
}

通过阅读题目,我们可以从中提炼出以下几点实现要求:

1、编写抽象类Ticket类,来初始化票号,返回票价以及返回一个字符串

2、编写Ticket类的子类WalkupTicket用于表示当天票

3、编写Ticket类的子类AdvanceTicket用于表示预定票

4、编写AdvanceTicket类的子类StudentAdvanceTicket用于表示学生预订票

代码实现如下:

abstract class Ticket {
    private int number;
    public Ticket(int number) {
        this.number = number;
    }

    abstract int getPrice();
    
    public String toString() {
        return "Number:"+number+",Price:"+getPrice();
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
}
class WalkupTicket extends Ticket {

    public WalkupTicket(int number) {
        super(number);
    }

    @Override
    int getPrice() {
        return 50;
    }
}
class AdvanceTicket extends Ticket {
    private int leadTime;
    public AdvanceTicket(int number,int leadTime) {
        super(number);
        this.leadTime = leadTime;
    }

    @Override
    int getPrice() {
        if(leadTime>10)
            return 30;
        else 
            return 40;
    }
}
class StudentAdvanceTicket extends AdvanceTicket {
    private int height;
    int lead;
    public StudentAdvanceTicket(int number,int leadTime,int height) {
        super(number,leadTime);
        this.lead=leadTime;
        this.height = height;
    }

    @Override
    int getPrice() {
        if(height>120) {
            if(lead>10)
                return 20;
            else 
                return 30;
        }
        else {
            if(lead>10)
                return 10;
            else
                return 15;
        }
            
    }
}

注:编写 toString方法返回字符串时需要注意输出格式不要错误。


以上就是 PTA-6-42 设计门票(抽象类)的全部内容了,希望能对你有所帮助!


http://www.kler.cn/news/133726.html

相关文章:

  • [C/C++] 数据结构 LeetCode:用队列实现栈
  • 【碰碰球】弹珠游戏-微信小程序项目开发流程详解
  • 【短文】【踩坑】可以在Qt Designer给QTableWidge添加右键菜单吗?
  • 最长回文子序列 递归与动态规划
  • 【精选】项目管理工具——Maven详解
  • STM32的启动流程
  • 数据双向 双向数据绑定
  • 【Promise12数据集】Promise12数据集介绍和预处理
  • odoo16前端框架源码阅读——env.js
  • 深度优化数据库性能:Linux 内核参数调整解析
  • ChatGPT 从零到一打造私人智能英语学习助手
  • 【JavaEE初阶】计算机是如何工作的
  • Leetcode经典题目之“双指针交换元素“类题目
  • 基于SSM的古董拍卖系统
  • 基础组件-流量回放平台设计
  • 单线程的JS中Vue导致的“线程安全”问题
  • 【FPGA】Verilog:实现 RS 触发器 | Flip-Flop | 使用 NOR 的 RS 触发器 | 使用 NAND 的 RS 触发器
  • VUE(一)
  • Chrome 浏览器经常卡死问题解决
  • linux配置固定ip(两种方法)
  • Leetcode—3.无重复字符的最长子串【中等】
  • 在线预览excel,luckysheet在vue项目中的使用
  • SpringBoot-AOP学习案例
  • 【WiFI问题自助】解决WiFi能连上但是没有网的问题
  • 车载以太网-传输层-UDP
  • Flutter笔记:拖拽手势
  • java使用 TCP 的 Socket API 实现客户端服务器通信
  • NSSCTF第12页(3)
  • PS学习笔记——视图调整
  • em/px/rem/vh/vw 的区别?