Hyacine Studio

P1001 校园卡

L11–L12
中 自编题面向对象继承异常

学校有三种卡:普通卡、学生卡、信用卡。学生卡消费打八折,信用卡可以透支。

输入

第一行一个整数 q,表示操作数。接下来 q 行,每行一个操作:

操作 含义
OPEN CARD owner amount 开一张普通卡,初始余额 amount
OPEN STUDENT owner amount 开一张学生卡
OPEN CREDIT owner amount limit 开一张信用卡,最多透支 limit
PAY owner amount 用 owner 的卡消费 amount
TOPUP owner amount 给 owner 的卡充值
INFO owner 输出这张卡
EQUAL a b 判断两张卡是否相等
COUNT 输出一共成功开了多少张卡
TOTAL 输出所有卡余额之和

owner 是卡主名字,只含小写字母,同一时刻不重名。

规则

  • 普通卡:余额不能小于 0,PAY 时 amount > balance 就失败。
  • 学生卡:实际扣费 amount * 4 // 5(向下取整);按扣费后的金额判断够不够。
  • 信用卡:余额最低可以到 -limit;balance - amount < -limit 就失败。
  • 任何失败的操作输出 ERROR,并且不改变任何状态(余额、卡数都不变)。
  • 重复 OPEN 同一个 owner 算失败。
  • PAY / TOPUP 成功时输出操作后的余额(整数)。
  • INFO 输出:
  • 普通卡 / 学生卡:KIND owner balance
  • 信用卡:CREDIT owner balance limit
  • EQUAL 相等输出 YES,否则 NO。相等的定义:类型相同、余额相同;信用卡还要求 limit 相同(不比较 owner)。
  • COUNT 输出成功开卡总数;TOTAL 输出所有余额之和。

实现要求

必须用面向对象写,至少包含:

  • 基类 Card:属性 owner、balance,方法 pay、top_up、__str__、__eq__,类变量 kind = "CARD"、count = 0
  • StudentCard(Card):kind = "STUDENT",重写 pay
  • CreditCard(Card):kind = "CREDIT",多一个 limit,构造时 super().__init__(...),重写 pay、__str__、__eq__
  • pay 余额不足时 raise ValueError,主程序捕获后输出 ERROR
  • CreditCard.__eq__ 里要复用 super().__eq__(other)

约束

  • 1 ≤ q ≤ 1000
  • 金额都是正整数,余额绝对值不超过 10^9
  • OPEN CREDIT 一定带 limit
  • 输入保证格式合法,只有业务错误需要输出 ERROR

样例见题目下方。

样例

样例 1
输入
12
OPEN CARD alice 100
OPEN STUDENT bob 50
OPEN CREDIT carol 0 30
PAY alice 30
PAY bob 30
PAY carol 20
INFO carol
EQUAL alice bob
TOPUP carol 5
COUNT
TOTAL
INFO dave
输出
OK
OK
OK
70
26
-20
CREDIT carol -20 30
NO
-15
3
81
ERROR
样例 2
输入
9
OPEN CARD a 10
OPEN CREDIT b 0 5
PAY a 11
PAY b 5
PAY b 1
INFO a
EQUAL a a
COUNT
TOTAL
输出
OK
OK
ERROR
-5
ERROR
CARD a 10
YES
2
5

提交代码

公网模式下只有管理员能提交判题,避免陌生人在本机执行代码。 登录

上次提交

详情
AC

2026-11-02 11:35:14 · 通过 12/12