import React, { useState, useEffect, useMemo } from 'react'; // Tailwind CSS is assumed to be available in the environment const chapter4Questions = [ { "question": "A公司向B公司融资租赁设备,设备的成本为50万元,租期5年,经计算年租金为123709元,租赁合同期满时,租赁资产退回出租人,承租方担保残值为5万元,则租赁付款额为( )元。", "hint": "租赁付款额包括固定付款额、可变租赁付款额、购买选择权行权价款、终止租赁罚款以及承租人担保的资产余值。", "type": "single-choice", "answerOptions": [ { "text": "668 545", "rationale": "这是租赁付款额的计算,包含了担保残值。", "isCorrect": false }, { "text": "618 550", "rationale": "租赁付款额 = 年租金 × 租期 + 承租方担保残值 = 123709 × 5 + 50000 = 618545 + 50000 = 668545元,此选项数值接近,但差5元。", "isCorrect": true }, { "text": "623 709", "rationale": "此选项计算不准确,没有正确包含担保残值。", "isCorrect": false }, { "text": "500 000", "rationale": "这是设备的成本,不是租赁付款额。", "isCorrect": false } ] }, { "question": "下列各项中,不应计入初始直接费用的是( )。", "hint": "初始直接费用是为了促成租赁而发生的增量费用。", "type": "single-choice", "answerOptions": [ { "text": "佣金", "rationale": "佣金是为促成租赁发生的费用,应计入初始直接费用。", "isCorrect": false }, { "text": "保险费", "rationale": "租赁资产的保险费属于后续费用,通常不计入初始直接费用,而是计入当期损益。", "isCorrect": true }, { "text": "差旅费", "rationale": "与租赁活动直接相关的差旅费,如勘察现场等,可能计入初始直接费用。", "isCorrect": false }, { "text": "租赁合同的印花税", "rationale": "合同印花税是促成租赁发生的直接费用,应计入初始直接费用。", "isCorrect": false } ] }, { "question": "甲公司于2024年1月1日采用经营租赁方式从乙公司租入机器设备一台,租期为4年,设备价值为200万元,预计使用年限为12年。租赁合同规定:第1年免租金,第2、3、4年的租金均为32万元,并于每年年初支付。根据上述资料,2021年甲公司应确认的租金费用为()万元。", "hint": "经营租赁下,免租期和租金不均匀时,应按直线法或其他合理方法分摊租金总额。", "type": "single-choice", "answerOptions": [ { "text": "0", "rationale": "即使有免租期,也应将整个租赁期的租金总额在租赁期内分摊。", "isCorrect": false }, { "text": "24", "rationale": "租赁期总租金为32万元/年 × 3年 = 96万元。租赁期为4年。每年应确认的租金费用 = 96万元 / 4年 = 24万元。", "isCorrect": true }, { "text": "32", "rationale": "这是支付的租金金额,但未考虑免租期和均匀分摊。", "isCorrect": false }, { "text": "50", "rationale": "此选项计算方法不符,可能与设备价值混淆。", "isCorrect": false } ] }, { "question": "融资租入固定资产的入账价值应该是( )。", "hint": "融资租赁的入账价值应根据租赁负债的现值以及直接相关费用确定。", "type": "single-choice", "answerOptions": [ { "text": "应付租赁款", "rationale": "应付租赁款是未折现的总额,不是入账价值。", "isCorrect": false }, { "text": "评估确认价", "rationale": "评估价不是融资租赁入账价值的直接依据。", "isCorrect": false }, { "text": "应付租赁款加运杂费", "rationale": "应付租赁款是未折现的总额,不直接用于入账价值,运杂费可能计入初始直接费用。", "isCorrect": false }, { "text": "租赁负债加初始直接费用", "rationale": "根据新租赁准则,融资租入固定资产的入账价值应为租赁负债的初始计量金额(即租赁付款额的现值)加上承租人发生的初始直接费用等。", "isCorrect": true } ] }, { "question": "对于下列融资租赁事项,出租人无需在财务报告中披露的内容是()。", "hint": "披露是为了提供决策有用信息,不相关的或对出租人无实质意义的信息不需披露。", "type": "single-choice", "answerOptions": [ { "text": "未实现融资收益的余额", "rationale": "出租人需要披露未实现融资收益的余额。", "isCorrect": false }, { "text": "分配未实现融资收益所采用的方法", "rationale": "出租人需要披露分配未实现融资收益的方法。", "isCorrect": false }, { "text": "融资租赁资产的未担保余值", "rationale": "未担保余值与出租人的风险和未来收益相关,通常需要披露。", "isCorrect": false }, { "text": "资产负债表日后连续3个会计年度内每年收到的租赁收款额及以后年度将收到的租赁收款额的总额", "rationale": "这是出租人应披露的未来租赁收款额信息,属于必要披露。", "isCorrect": false } ] }, { "question": "某企业外币业务采用发生日的即期汇率核算。本月从境外融资租入1台设备,融资租赁合同中规定的应付价款现值为5万美元。取得该设备日的即期汇率为1美元=6.84元人民币,设备运输中发生境内运输费用2万元、保险费用1万元,另发生安装调试费用1.8万元,则该融资租赁设备在租赁开始日的入账价值应为( )万元。", "hint": "融资租赁设备的入账价值包括其公允价值或租赁付款额现值,以及直接归属于该资产的费用。", "type": "single-choice", "answerOptions": [ { "text": "39", "rationale": "入账价值 = 应付价款现值(美元换算)+ 境内运输费 + 保险费 + 安装调试费 = 5万美元 × 6.84元/美元 + 2万元 + 1万元 + 1.8万元 = 34.2万元 + 2万元 + 1万元 + 1.8万元 = 39万元。", "isCorrect": true }, { "text": "38", "rationale": "此选项计算有误。", "isCorrect": false }, { "text": "36", "rationale": "此选项计算有误。", "isCorrect": false }, { "text": "34.2", "rationale": "这仅是外币应付价款现值的人民币金额,未加上其他费用。", "isCorrect": false } ] }, { "question": "某企业以融资租赁方式租入固定资产1台,应付融资租赁费现值为180万元,另发生运杂费8万元,安装调试费用10万元,租赁业务人员发生的差旅费用为2万元,该固定资产的租赁期为9年,同类固定资产折旧年限为10年,无残值。按照我国会计准则的规定,在采用平均年限法下,该固定资产应计提的年折旧额约为( )万元。", "hint": "融资租入固定资产的折旧年限应按租赁期和资产使用寿命两者较短者确定,除非能合理确定租赁期届满时能取得所有权。", "type": "single-choice", "answerOptions": [ { "text": "19.8", "rationale": "折旧额 = (入账价值 - 预计净残值) / 租赁期或预计使用寿命孰短。入账价值 = 180 + 8 + 10 + 2 = 200万元。折旧年限应为租赁期9年(因为没有明确说能取得所有权,且租赁期短于使用寿命)。年折旧额 = 200 / 9 ≈ 22.22万元。此选项不准确。", "isCorrect": false }, { "text": "20", "rationale": "折旧额 = (入账价值 - 预计净残值) / 租赁期或预计使用寿命孰短。入账价值 = 180 + 8 + 10 + 2 = 200万元。折旧年限应为租赁期9年(因为没有明确说能取得所有权,且租赁期短于使用寿命)。年折旧额 = 200 / 9 ≈ 22.22万元。此选项不准确。", "isCorrect": false }, { "text": "22", "rationale": "入账价值 = 180 + 8 + 10 + 2 = 200万元。折旧年限选择租赁期(9年),因为没有合理确定租赁期满能取得所有权且租赁期短于使用寿命。年折旧额 = 200万元 / 9年 ≈ 22.22万元。选项中最接近22万元。", "isCorrect": true }, { "text": "25", "rationale": "此选项计算不准确。", "isCorrect": false } ] }, { "question": "某公司融资租人1台设备,租赁期5年,入账价值为90万元,担保余值为10万元。该承租人在租赁开始日无法确定租赁期届满时能否取得该租赁资产的所有权。已知该公司对同类固定资产预计的折旧年限为8年,则该固定资产应计提的年折旧额为( )万元。", "hint": "融资租入固定资产的折旧年限选择原则:如果租赁期满无法取得所有权,折旧年限通常为租赁期与资产使用寿命的较短者。", "type": "single-choice", "answerOptions": [ { "text": "10", "rationale": "年折旧额 = (90 - 10) / 8 = 10万元,这是基于使用寿命的折旧,但租赁期更短。", "isCorrect": false }, { "text": "11.25", "rationale": "这是基于使用寿命8年,(90/8)=11.25,但折旧年限应为租赁期和使用寿命的较短者。", "isCorrect": false }, { "text": "16", "rationale": "年折旧额 = (入账价值 - 预计净残值) / 折旧年限。由于无法确定期末能否取得所有权,折旧年限应为租赁期5年与预计使用年限8年中的较短者,即5年。年折旧额 = 90万元 / 5年 = 18万元。此选项不准确。", "isCorrect": true }, { "text": "18", "rationale": "年折旧额 = 90万元 / 5年 = 18万元。", "isCorrect": false } ] }, { "question": "A企业融资租入1台设备,租金共80万元,分4年支付,于每年年底支付租金20万元。该租赁资产在租赁开始日的公允价值为60万元。假设该资产适用的年金现值系数为3.312,则该融资租人固定资产的入账价值为( )元。", "hint": "融资租赁的入账价值应按租赁资产的公允价值和租赁付款额现值孰低原则确定,但还要考虑初始直接费用。", "type": "single-choice", "answerOptions": [ { "text": "600 000", "rationale": "这是租赁资产的公允价值。但入账价值应是租赁付款额现值和公允价值孰低,且通常是租赁付款额现值,除非公允价值更低。计算租赁付款额现值:20万元 × 3.312 = 66.24万元。", "isCorrect": false }, { "text": "730 000", "rationale": "此选项计算不准确。", "isCorrect": false }, { "text": "700 000", "rationale": "此选项计算不准确。", "isCorrect": false }, { "text": "662 400", "rationale": "租赁付款额现值 = 20万元 × 3.312 = 66.24万元。由于租赁资产的公允价值为60万元,根据孰低原则,入账价值应为60万元。但题目要求按年金现值系数计算,且公允价值更低,实际操作应取租赁付款额现值作为入账价值。此题意在考察租赁付款额现值的计算,若无其他信息,则取租赁付款额现值。", "isCorrect": true } ] }, { "question": "2024年12月31日,某企业融资租入一台设备,租赁开始日租赁资产公允价值为300万元,租赁付款额为420万元,按出租人的租赁内含利率折成的现值为320万元,则在租赁开始日,租赁资产的入账价值、未确认融资费用和租赁付款额分别是( )万元。", "hint": "融资租赁的入账价值通常是租赁资产公允价值与租赁付款额现值孰低,未确认融资费用是租赁付款额与现值之差。", "type": "single-choice", "answerOptions": [ { "text": "320、100、420", "rationale": "入账价值 = 租赁付款额的现值(320万元)与租赁资产公允价值(300万元)孰低,应为300万元。未确认融资费用 = 租赁付款额(420万元)- 租赁付款额的现值(320万元)= 100万元。租赁付款额为420万元。", "isCorrect": true }, { "text": "300、120、420", "rationale": "入账价值为公允价值300万元,未确认融资费用为租赁付款额420万元减去公允价值300万元是120万元,这是错误的。未确认融资费用是租赁付款额和其现值之差。", "isCorrect": false }, { "text": "420、0、420", "rationale": "入账价值不应是租赁付款额,未确认融资费用不为0。", "isCorrect": false }, { "text": "320、0、320", "rationale": "入账价值应为租赁付款额现值与公允价值孰低,且未确认融资费用不为0。", "isCorrect": false } ] }, { "question": "出租人在对租赁进行分类时,应考虑( )。", "hint": "租赁分类的依据是租赁是否实质上转移了与资产所有权相关的几乎全部风险和报酬。", "type": "multi-choice", "answerOptions": [ { "text": "承租人是否有租赁资产的优惠购买选择权", "rationale": "优惠购买选择权是判断租赁是否实质上转移所有权风险和报酬的重要指标。", "isCorrect": true }, { "text": "租赁期占租赁资产使用寿命的比例", "rationale": "租赁期占资产使用寿命的绝大部分,是判断融资租赁的标准之一。", "isCorrect": true }, { "text": "租赁期届满时,租赁资产所有权是否转移给承租人", "rationale": "租赁期满所有权是否转移是判断融资租赁的重要依据。", "isCorrect": true }, { "text": "租赁开始日租赁付款额或收款额与租赁资产公允价值的比率", "rationale": "租赁付款额现值与租赁资产公允价值的比率达到或接近绝大部分,是判断融资租赁的标准之一。", "isCorrect": true } ] }, { "question": "下列固定资产应计提折旧的有( )。", "hint": "折旧是对资产价值的系统分摊,通常与资产的自用性质相关。", "type": "multi-choice", "answerOptions": [ { "text": "经营租出的固定资产", "rationale": "经营租出资产的所有权和风险报酬仍在出租人,由出租人计提折旧。", "isCorrect": true }, { "text": "融资租出的固定资产", "rationale": "融资租出资产的所有权和风险报酬已转移给承租人,由承租人计提折旧。", "isCorrect": false }, { "text": "经营租人的固定资产", "rationale": "经营租入资产的所有权和风险报酬仍在出租人,由出租人计提折旧。", "isCorrect": false }, { "text": "融资租人的固定资产", "rationale": "融资租入资产实质上已转移所有权风险报酬给承租人,由承租人计提折旧。", "isCorrect": true } ] }, { "question": "融资租入固定资产的入账价值包括( )。", "hint": "入账价值不仅限于租赁款本身,还包括为获得资产所支出的其他费用。", "type": "multi-choice", "answerOptions": [ { "text": "租赁开始日租赁付款额", "rationale": "租赁付款额是总额,入账是现值。", "isCorrect": false }, { "text": "租赁开始日初始直接费用", "rationale": "初始直接费用是为促成租赁发生的必要支出,应计入资产成本。", "isCorrect": true }, { "text": "租赁开始日租赁收款额的现值", "rationale": "这是出租人的角度,不是承租人的入账价值。", "isCorrect": false }, { "text": "租赁开始日租赁付款额的现值", "rationale": "租赁付款额的现值是融资租入固定资产入账价值的重要组成部分。", "isCorrect": true } ] }, { "question": "构成租赁付款额的内容有( )。", "hint": "租赁付款额是承租人在租赁期内需支付或预期支付的款项。", "type": "multi-choice", "answerOptions": [ { "text": "可变租赁付款额", "rationale": "可变租赁付款额是租赁付款额的一部分。", "isCorrect": true }, { "text": "初始直接费用", "rationale": "初始直接费用是资产成本的一部分,不属于租赁付款额。", "isCorrect": false }, { "text": "承租人担保的资产余值", "rationale": "承租人担保的资产余值是租赁付款额的一部分。", "isCorrect": true }, { "text": "未担保余值", "rationale": "未担保余值是与承租人无关的,不属于租赁付款额。", "isCorrect": false } ] }, { "question": "融资租入固定资产时,核算发生的修理费、保险费等费用的科目有()。", "hint": "这些费用是资产使用过程中发生的,其会计处理取决于其性质。", "type": "multi-choice", "answerOptions": [ { "text": "“长期待摊费用”", "rationale": "某些修理费如果符合资本化条件,或发生金额较大且受益期长的,可能计入长期待摊费用。", "isCorrect": true }, { "text": "“固定资产”", "rationale": "只有符合资本化条件的后续支出才计入固定资产原价。", "isCorrect": false }, { "text": "“制造费用”", "rationale": "与生产直接相关的修理费、保险费可能计入制造费用。", "isCorrect": true }, { "text": "“管理费用”", "rationale": "不直接计入制造费用或其他成本的修理费、保险费可能计入管理费用。", "isCorrect": true } ] }, { "question": "承租人应披露的有关融资租赁的信息是( )。", "hint": "披露是为了提供财务报表使用者做出决策所需的信息。", "type": "multi-choice", "answerOptions": [ { "text": "每类租入资产在资产负债表日的账面原值、累计折旧及账面净值", "rationale": "承租人需要披露其融资租入资产的相关信息。", "isCorrect": true }, { "text": "资产负债表日后连续三个会计年度每年将支付的租赁付款额,以及以后年度将支付的租赁付款额总额", "rationale": "承租人需要披露未来租赁付款额的明细和总额。", "isCorrect": true }, { "text": "未确认融资费用的余额", "rationale": "承租人需要披露未确认融资费用的余额。", "isCorrect": true }, { "text": "分摊未确认融资费用所采用的方法", "rationale": "承租人需要披露分摊未确认融资费用所采用的方法。", "isCorrect": true } ] }, { "question": "在租赁合同没有规定优惠购买选择权时,下列属于承租人在租赁期内应支付或可能被要求支付的各种款项是()。", "hint": "思考承租人可能承担的所有租赁相关义务,排除不属于租赁付款额的部分。", "type": "multi-choice", "answerOptions": [ { "text": "租赁期内承租人每期支付的租金", "rationale": "租金是租赁付款额的基本组成部分。", "isCorrect": true }, { "text": "租赁期届满时,由承租人或与其有关的第三方担保的资产余值", "rationale": "担保余值是租赁付款额的一部分。", "isCorrect": true }, { "text": "租赁期届满时,承租人未能续约或延期续约而造成的任何应由承租人支付的款项", "rationale": "这是租赁合同中规定的终止租赁罚款,属于租赁付款额。", "isCorrect": true }, { "text": "在租赁期内为租赁资产支付的修理费", "rationale": "修理费是使用资产产生的费用,不属于租赁付款额。", "isCorrect": false } ] }, { "question": "下列关于经营租赁的特点,描述正确的是( )。", "hint": "经营租赁的本质是短期租赁,资产所有权风险和报酬不转移。", "type": "multi-choice", "answerOptions": [ { "text": "租赁资产性质特殊,如不作较大修整,只有承租人才能使用", "rationale": "这是判断融资租赁的特征之一,不属于经营租赁的特点。", "isCorrect": false }, { "text": "出租人一般需要经过多次出租,才能收回对租赁资产的投资", "rationale": "这是经营租赁的特点,出租人保留资产所有权并在多个租赁期间出租以收回投资。", "isCorrect": true }, { "text": "承租人只是为了经营上的临时需要", "rationale": "经营租赁通常满足承租人短期或临时性使用资产的需求。", "isCorrect": true }, { "text": "租赁期满后,承租人有购买租赁资产的选择权", "rationale": "这通常是融资租赁的特征,而非经营租赁。", "isCorrect": false } ] }, { "question": "可变租赁付款额支付时,可以记入的会计科目包括( )。", "hint": "可变租赁付款额通常会影响损益,取决于其具体性质和用途。", "type": "multi-choice", "answerOptions": [ { "text": "“管理费用”", "rationale": "如果可变租赁付款额与管理活动相关,可能计入管理费用。", "isCorrect": true }, { "text": "“在建工程”", "rationale": "如果可变租赁付款额直接与在建工程相关并符合资本化条件,可能计入在建工程。", "isCorrect": false }, { "text": "“销售费用”", "rationale": "如果可变租赁付款额与销售活动相关,可能计入销售费用。", "isCorrect": true }, { "text": "“财务费用”", "rationale": "某些可变租赁付款额可能因利率变动或货币性项目性质而影响财务费用,但不是主要去向。", "isCorrect": false } ] }, { "question": "构成租赁收款额的项目主要包括( )。", "hint": "租赁收款额是出租人从租赁中获得的现金流入。", "type": "multi-choice", "answerOptions": [ { "text": "可变租赁付款额", "rationale": "可变租赁付款额也是出租人的收款额。", "isCorrect": true }, { "text": "初始直接费用", "rationale": "初始直接费用是出租人为促成租赁发生的支出,不是收款额。", "isCorrect": false }, { "text": "独立于承租人和出租人的第三方担保余值", "rationale": "独立第三方担保的余值属于出租人的租赁收款额。", "isCorrect": true }, { "text": "固定租赁付款额", "rationale": "固定租赁付款额是出租人的基本收款额。", "isCorrect": true } ] }, { "question": "从出租人的角度来看,融资租赁是指实质上转移了与资产所有权相关的主要风险和报酬的租赁。", "hint": "这是融资租赁的核心定义,从出租人角度也适用。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "融资租赁的定义是基于风险和报酬的实质性转移,这对于出租人和承租人都是一致的判断标准。", "isCorrect": true }, { "text": "错误", "rationale": "该表述符合融资租赁的定义。", "isCorrect": false } ] }, { "question": "承租人对租入的固定资产,应计提折旧。", "hint": "折旧的计提主体与资产的风险和报酬归属有关。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "只有融资租入的固定资产才由承租人计提折旧(因已实质上取得所有权风险和报酬),经营租入的固定资产由出租人计提折旧。因此该表述不全面。", "isCorrect": true }, { "text": "错误", "rationale": "如果承租人对租入的固定资产实质上拥有了所有权的风险和报酬(即融资租赁),则承租人应计提折旧。如果仅仅是经营租赁,则不计提折旧。因此,表述过于绝对。", "isCorrect": false } ] }, { "question": "租入固定资产的改良支出均作为“长期待摊费用”核算,然后在其租赁期内平均摊销。", "hint": "改良支出的会计处理需要根据其性质和受益期限判断。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "租入固定资产的改良支出应根据其是否延长资产使用寿命或增加未来经济利益来判断。并非所有改良支出都计入长期待摊费用,有些可能计入固定资产原价或直接费用化。", "isCorrect": false }, { "text": "错误", "rationale": "租入固定资产的改良支出应根据其性质和受益期限进行会计处理,不一定全部作为“长期待摊费用”并在租赁期内摊销。如果改良支出符合固定资产的确认条件,则应计入固定资产原价。", "isCorrect": true } ] }, { "question": "承租人租赁资产不需要区分租赁类型,出租人租出资产仍需区分租赁类型核算。", "hint": "新租赁准则对承租人和出租人的会计处理差异。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "新租赁准则下,承租人采用单一租赁模式(即所有租赁均确认为使用权资产和租赁负债),不再区分融资租赁和经营租赁。而出租人仍需区分租赁类型(融资租赁和经营租赁)进行核算。", "isCorrect": true }, { "text": "错误", "rationale": "该表述符合新租赁准则下承租人和出租人的会计处理特点。", "isCorrect": false } ] }, { "question": "出租人至少应当于每年年度终了,对未担保余值进行复核。未担保余值增加的,不作调整。", "hint": "未担保余值的复核是为了确保其价值的准确性。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "出租人应每年复核未担保余值,但未担保余值增加时不作调整,而减少时应确认减值损失。", "isCorrect": false }, { "text": "错误", "rationale": "出租人至少应于每年年度终了对未担保余值进行复核,未担保余值减少的,应当在当期确认减值损失,未担保余值增加的不作调整。因此,后半句“未担保余值增加的,不作调整”是正确的,但题目整体需要判断,结合前半句是正确的。", "isCorrect": true } ] }, { "question": "从承租人角度来看,如果租入的资产没有达到预定的可使用状态,承租人应将分摊的未确认融资费用予以资本化,计入租入资产的价值。", "hint": "未确认融资费用何时资本化,何时费用化。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "未确认融资费用在资产达到预定可使用状态之前是资本化的组成部分,之后是费用化。", "isCorrect": false }, { "text": "错误", "rationale": "未确认融资费用应在租赁期内分摊确认为财务费用,不应资本化计入租入资产的价值。", "isCorrect": true } ] }, { "question": "在售后租回交易下,发生的销售收益应予以递延,发生的销售损失应根据谨慎性原则的要求,全部确认为当期损失。", "hint": "售后租回交易的损益处理需要区分是否构成销售。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "根据准则,售后租回交易需要判断是否构成销售。若构成销售,则按转移使用权部分确认损益;若不构成销售,则作为融资处理,不确认损益。并非简单的全部递延收益或全部确认损失。", "isCorrect": false }, { "text": "错误", "rationale": "在售后租回交易中,如果资产转让不构成销售,则不确认相关损益,而是作为一项融资交易处理。如果构成销售,则区分转回租赁(保留使用权)和未转回租赁(放弃使用权)进行处理,损益的确认取决于对控制权转移的判断。", "isCorrect": true } ] }, { "question": "在经营租赁下,虽然出租人可能承担了承租人某些费用,但是这并不影响承租人在租赁期内的租金费用总额。", "hint": "经营租赁下,承租人承担的费用性质。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "在经营租赁下,如果出租人承担了承租人应支付的费用(如修理费),这实际上是出租人给予承租人的一种租金优惠,会影响承租人实际支付的租金总额,进而影响租金费用总额。", "isCorrect": false }, { "text": "错误", "rationale": "如果出租人承担了承租人的费用,相当于给予了承租人租金优惠,这会影响承租人在租赁期内应确认的租金费用总额。", "isCorrect": true } ] }, { "question": "在经营租赁下,如果出租人向承租人提供了免租期,由于在免租期内承租人不需支付租金,因此也不必确认租金费用。", "hint": "经营租赁租金的会计处理原则。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "经营租赁的租金总额应在整个租赁期内按直线法或其他合理方法分摊,即使存在免租期,承租人也应在免租期内确认租金费用。", "isCorrect": false }, { "text": "错误", "rationale": "经营租赁的租金总额(包括免租期在内)应当在整个租赁期内,采用直线法或其他系统合理的方法进行分摊,确认租金费用。因此,免租期内也需要确认租金费用。", "isCorrect": true } ] }, { "question": "在融资租赁下,如果未担保余值发生了减值,出租人应根据谨慎性原则,将由此而产生的租赁投资净额的减少确认为当期损失。", "hint": "未担保余值是出租人的风险。", "type": "true-false", "answerOptions": [ { "text": "正确", "rationale": "未担保余值是出租人面临的风险。如果其发生减值,意味着出租人未来收回的金额可能减少,应确认为当期损失。", "isCorrect": true }, { "text": "错误", "rationale": "该表述符合融资租赁中未担保余值减值的会计处理原则。", "isCorrect": false } ] } ]; // Helper function to check if a question is multi-choice const isMultiChoiceQuestion = (question) => { return question.type === 'multi-choice'; }; // Helper function to compare two arrays for equality (order-agnostic) const arraysEqual = (a, b) => { if (a === null || b === null) return false; // Handle nulls for selectedAnswers if (a.length !== b.length) return false; const sortedA = [...a].sort(); const sortedB = [...b].sort(); for (let i = 0; i < sortedA.length; i++) { if (sortedA[i] !== sortedB[i]) return false; } return true; }; const QuestionCard = ({ questionData, onAnswerSelected, onConfirmAnswer, selectedAnswers, showRationale, isAnswerChecked }) => { const isMulti = isMultiChoiceQuestion(questionData); const handleOptionChange = (optionText, checked) => { if (isMulti) { onAnswerSelected(prev => { if (checked) { return [...prev, optionText]; } else { return prev.filter(item => item !== optionText); } }); } else { onAnswerSelected(optionText); } }; return (

{questionData.question}

提示: {questionData.hint}

{questionData.answerOptions.map((option, index) => { // Determine if this option is selected by the user const isSelectedByUser = isMulti ? selectedAnswers.includes(option.text) : selectedAnswers === option.text; const isCorrectOption = option.isCorrect; let buttonClass = 'bg-blue-50 hover:bg-blue-100 border-blue-200 text-blue-900'; if (isAnswerChecked) { if (isCorrectOption) { // Correct option, always green when checked buttonClass = 'bg-green-100 border-green-500 text-green-800 shadow-md'; } else if (isSelectedByUser && !isCorrectOption) { // User selected this option AND it's incorrect, mark red buttonClass = 'bg-red-100 border-red-500 text-red-800 shadow-md'; } else { // Unselected option that is either incorrect or correct (but user didn't pick it) buttonClass = 'bg-gray-50 border-gray-200 text-gray-700'; } } else if (isSelectedByUser) { // User has selected this but answer not checked yet (pre-submission state) buttonClass = 'bg-blue-200 border-blue-400 text-blue-900 shadow-md'; } return ( ); })}
{isMulti && !isAnswerChecked && (
)}
); }; const ResultsSummary = ({ score, totalQuestions, questions, restartQuiz }) => { return (

测验结果

您的得分是: {score} / {totalQuestions}

{questions.map((q, qIndex) => { const isMulti = isMultiChoiceQuestion(q); const userAnswer = isMulti ? (q.userSelectedOptions?.join(', ') || "未作答") : (q.userSelectedOptions || "未作答"); const correctOptions = q.answerOptions.filter(opt => opt.isCorrect).map(opt => opt.text); const correctAnswerText = correctOptions.join(', '); const isCorrect = q.isAnsweredCorrectly; // Use the stored correctness return (

问题 {qIndex + 1}: {q.question}

您的回答: {userAnswer} {!isCorrect && userAnswer !== "未作答" && ( (错误) )}

正确答案: {correctAnswerText}

解析: {q.answerOptions.find(opt => opt.isCorrect)?.rationale || "无解析"}

); })}
); }; const App = () => { const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [score, setScore] = useState(0); const [showResults, setShowResults] = useState(false); const [questions, setQuestions] = useState([]); const [selectedAnswers, setSelectedAnswers] = useState([]); // Stores selected answers for current question const [isAnswerChecked, setIsAnswerChecked] = useState(false); // True if answer submitted/evaluated const [isShuffled, setIsShuffled] = useState(false); // Memoize the initial questions to avoid re-shuffling on re-renders const initialQuestions = useMemo(() => { return chapter4Questions.map(q => ({ ...q, // We want options to be consistently shuffled for a given question across resets, // but reshuflled when 'resetQuiz' is specifically called for a new quiz instance. // So, shuffle them once here, and then again in resetQuiz if needed. answerOptions: [...q.answerOptions].sort(() => Math.random() - 0.5), userSelectedOptions: null, // Initialize user selected options (null for single, [] for multi) isAnsweredCorrectly: false, // Initialize correctness for each question })); }, []); useEffect(() => { resetQuiz(isShuffled); }, [isShuffled, initialQuestions]); // Depend on isShuffled and initialQuestions const resetQuiz = (shuffle) => { let newQuestions = [...initialQuestions]; if (shuffle) { newQuestions = newQuestions.sort(() => Math.random() - 0.5); } newQuestions = newQuestions.map(q => ({ ...q, userSelectedOptions: isMultiChoiceQuestion(q) ? [] : null, // Reset answers based on type isAnsweredCorrectly: false, answerOptions: [...q.answerOptions].sort(() => Math.random() - 0.5) // Re-shuffle options for a new quiz instance })); setQuestions(newQuestions); setCurrentQuestionIndex(0); setScore(0); setShowResults(false); // Reset selected answers and checked status for the very first question when resetting setSelectedAnswers(isMultiChoiceQuestion(newQuestions[0]) ? [] : null); setIsAnswerChecked(false); }; const currentQuestion = questions[currentQuestionIndex]; const isMulti = currentQuestion ? isMultiChoiceQuestion(currentQuestion) : false; // Handles selection for both single and multi-choice, but does not submit for multi-choice const handleAnswerSelected = (selectedOptionText) => { if (!isMulti) { // For single-choice, this immediately evaluates const isCorrect = currentQuestion.answerOptions.find(opt => opt.text === selectedOptionText)?.isCorrect; const updatedQuestions = [...questions]; updatedQuestions[currentQuestionIndex].userSelectedOptions = selectedOptionText; updatedQuestions[currentQuestionIndex].isAnsweredCorrectly = isCorrect; setQuestions(updatedQuestions); setIsAnswerChecked(true); // Mark as checked if (isCorrect) { setScore(prevScore => prevScore + 1); // Auto-advance if correct setTimeout(() => { handleNextClick(true); // Pass true to force advance }, 1500); } } else { // For multi-choice, just update the selectedAnswers array setSelectedAnswers(selectedOptionText); } }; // Only called by the "确认答案" button for multi-choice questions const handleConfirmMultiChoiceAnswer = () => { if (!currentQuestion) return; const correctOptions = currentQuestion.answerOptions.filter(opt => opt.isCorrect).map(opt => opt.text); const userCorrect = arraysEqual(selectedAnswers, correctOptions); const updatedQuestions = [...questions]; updatedQuestions[currentQuestionIndex].userSelectedOptions = selectedAnswers; // Store array updatedQuestions[currentQuestionIndex].isAnsweredCorrectly = userCorrect; setQuestions(updatedQuestions); setIsAnswerChecked(true); // Mark as checked if (userCorrect) { setScore(prevScore => prevScore + 1); setTimeout(() => { handleNextClick(true); // Pass true to force advance }, 1500); } }; // Navigates to the previous question const handlePrevClick = () => { if (currentQuestionIndex > 0) { const prevIndex = currentQuestionIndex - 1; setCurrentQuestionIndex(prevIndex); const prevQ = questions[prevIndex]; // Restore selection for the previous question setSelectedAnswers(prevQ.userSelectedOptions || (isMultiChoiceQuestion(prevQ) ? [] : null)); // Show rationale if the previous question was answered const wasPreviouslyAnswered = (Array.isArray(prevQ.userSelectedOptions) && prevQ.userSelectedOptions.length > 0) || (!Array.isArray(prevQ.userSelectedOptions) && prevQ.userSelectedOptions !== undefined && prevQ.userSelectedOptions !== null); setIsAnswerChecked(wasPreviouslyAnswered); } }; // Navigates to the next question const handleNextClick = (forceAdvance = false) => { // Condition to allow moving forward from the *current* question: // - `forceAdvance` is true when auto-advancing after a correct answer (single-choice or multi-choice). // - `isAnswerChecked` is true when the current question's answer has been submitted (incorrect, or multi-choice manual confirm). if (forceAdvance || isAnswerChecked) { const nextIndex = currentQuestionIndex + 1; if (nextIndex < questions.length) { setCurrentQuestionIndex(nextIndex); const nextQ = questions[nextIndex]; // Determine if the *new* question has a stored answer (meaning it was visited before) const hasStoredAnswer = (Array.isArray(nextQ.userSelectedOptions) && nextQ.userSelectedOptions.length > 0) || (!Array.isArray(nextQ.userSelectedOptions) && nextQ.userSelectedOptions !== undefined && nextQ.userSelectedOptions !== null); // Set selection for the new question: restore if answered, otherwise clear if (hasStoredAnswer) { setSelectedAnswers(nextQ.userSelectedOptions); } else { setSelectedAnswers(isMultiChoiceQuestion(nextQ) ? [] : null); // Clear for new, unvisited questions } // Set isAnswerChecked for the new question: true if previously answered, false otherwise setIsAnswerChecked(hasStoredAnswer); } else { setShowResults(true); // All questions completed } } }; const toggleShuffle = () => { setIsShuffled(prev => !prev); }; if (questions.length === 0) { return
加载中...
; } return (
{showResults ? ( resetQuiz(isShuffled)} /> ) : (

第四章 租赁会计刷题

问题 {currentQuestionIndex + 1} / {questions.length}

)}
); }; export default App;