2017-10-11 56 views
1

我正在尝试创建一个返回20,10,5和1美元账单(所有用户值和输入都是整数)变化的程序。返回变化的程序PL/SQL

例如:

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

跳过别人的。从20开始,为每个帐单采取步骤0。 – jarlh

回答

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; 
/
+0

不错,然后我的:) –

+0

谢谢,我意识到我们不需要一个循环 – L30n1d45

+0

谢谢大家。我为我的错误道歉! – Lizzie

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; 
/
+0

谢谢!我会从你的语法中学习 – Lizzie

+0

@Lizzie你很好:)尝试编译第一个,sql开发者(如果你使用它)会突出你有问题的部分。您应该使用它来阅读错误消息并根据它们纠正代码,以提高您的PL/SQL技能。最好的 –

+0

绝对谢谢你的建议! – Lizzie