我正在尝试创建一个程序,它返回20,10,5和1美元钞票的变化(所有用户值和输入都是整数)。
例如:
exec Change(15, 200);
9 Twenty Dollar Bill
1 Five Dollar Bill
到目前为止我所拥有的:
CREATE or REPLACE Procedure Change(
p_MoneyDue number, p_Paid number
) as
p_Change number := p_MoneyDue - p_Paid;
BEGIN
IF (p_Change = 0) THEN
dbms_output.put_line ('You just gave me exact change! Thank you!');
ELSIF p_MoneyDue > p_Paid THEN
dmbs_output.put_line ('You need to give me more money!');
ELSIF p_Change >= 100 THEN
dbms_output.put_line ('Twenty dollar bill')
ELSIF p_Change <= 100 THEN
dbms_output.put_line ('10 dollar bill')
ELSIF p_Change THEN
dbms_output.put_line ('5 dollar bill')
ELSE p_Change THEN
dbms_output.put_line ('1 dollar bill')
END IF;
END;
/
答案 0 :(得分:3)
DECLARE
PROCEDURE CHANGE(
p_moneydue NUMBER,
p_paid NUMBER )
AS
p_change NUMBER := p_paid - p_moneydue;
-- 20 10 5 1
bill_20 NUMBER := 0;
bill_10 NUMBER := 0;
bill_5 NUMBER := 0;
bill_1 NUMBER := 0;
BEGIN
IF (p_change = 0) THEN
dbms_output.put_line ('You just gave me exact change! Thank you!');
elsif p_moneydue > p_paid THEN
dbms_output.put_line ('You need to give me more money!');
END IF;
IF (p_change > 0 ) THEN
bill_20 := TRUNC(p_change / 20);
p_change := p_change - (20 * bill_20);
bill_10 := TRUNC(p_change / 10);
p_change := p_change - (10 * bill_10);
bill_5 := TRUNC(p_change / 5);
p_change := p_change - (5 * bill_5);
bill_1 := p_change;
IF(bill_20 > 0) THEN
dbms_output.put_line(bill_20 ||' Twenty Dollar Bill');
END IF;
IF(bill_10 > 0) THEN
dbms_output.put_line(bill_10 ||' Ten Dollar Bill');
END IF;
IF(bill_5 > 0) THEN
dbms_output.put_line(bill_5 ||' Five Dollar Bill');
END IF;
IF(bill_1 > 0) THEN
dbms_output.put_line(bill_1 ||' One Dollar Bill');
END IF;
END IF;
END;
BEGIN
CHANGE( 15, 200);
END;
/
答案 1 :(得分:1)
你的代码犯了很多错误。你试过编译吗?正确的程序如下:
create or replace Procedure Change(
p_MoneyDue number, p_Paid number
) as
p_Change number := p_Paid - p_MoneyDue;
p_twenty number := 0;
p_ten number := 0;
p_five number := 0;
p_one number := 0;
BEGIN
IF (p_Change = 0) THEN
dbms_output.put_line ('You just gave me exact change! Thank you!');
ELSIF p_MoneyDue > p_Paid THEN
dbms_output.put_line ('You need to give me more money!');
END IF;
WHILE p_change > 0
LOOP
IF p_Change >= 20 THEN
p_twenty := p_twenty + 1;
p_Change := p_Change - 20;
ELSIF p_Change >= 10
THEN
p_ten := p_ten + 1;
p_Change := p_Change - 10;
ELSIF p_Change >= 5 THEN
p_five := p_five + 1;
p_Change := p_Change - 5;
ELSE
p_one := p_one + 1;
p_Change := p_Change - 1;
END IF;
END LOOP;
if p_twenty > 0 then
dbms_output.put_line (p_twenty || ' Twenty Dollar Bill');
END IF;
if p_ten > 0 then
dbms_output.put_line (p_ten || ' Ten Dollar Bill');
END IF;
if p_five > 0 then
dbms_output.put_line (p_five || ' Five Dollar Bill');
END IF;
if p_one > 0 then
dbms_output.put_line (p_one || ' One Dollar Bill');
END IF;
END;
/